diff --git a/alphafold/LICENSE b/alphafold/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7
--- /dev/null
+++ b/alphafold/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/alphafold/alphafold/__init__.py b/alphafold/alphafold/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..a0fd7f8294b9d7be770127c356f0b6564f1baa6c
--- /dev/null
+++ b/alphafold/alphafold/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""An implementation of the inference pipeline of AlphaFold v2.0."""
diff --git a/alphafold/alphafold/__pycache__/__init__.cpython-36.pyc b/alphafold/alphafold/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2e7dd334470e19f7e61c09aabc4a91b7e5183e1a
Binary files /dev/null and b/alphafold/alphafold/__pycache__/__init__.cpython-36.pyc differ
diff --git a/alphafold/alphafold/__pycache__/__init__.cpython-38.pyc b/alphafold/alphafold/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..08d2486a0d4fd844fb3a6d085f1dd71cf23de58c
Binary files /dev/null and b/alphafold/alphafold/__pycache__/__init__.cpython-38.pyc differ
diff --git a/alphafold/alphafold/common/__init__.py b/alphafold/alphafold/common/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d3c65d69d5f61b7b9547153c47d84e7f545e2636
--- /dev/null
+++ b/alphafold/alphafold/common/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Common data types and constants used within Alphafold."""
diff --git a/alphafold/alphafold/common/__pycache__/__init__.cpython-36.pyc b/alphafold/alphafold/common/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1319db200a5ce789acf2da044927023bc4b6c1ed
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/__init__.cpython-36.pyc differ
diff --git a/alphafold/alphafold/common/__pycache__/__init__.cpython-38.pyc b/alphafold/alphafold/common/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ee7e547fcdb4a25cc55da4c50abd3ccffb7d838d
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/__init__.cpython-38.pyc differ
diff --git a/alphafold/alphafold/common/__pycache__/confidence.cpython-36.pyc b/alphafold/alphafold/common/__pycache__/confidence.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1722f20bf5bead86ac9c7db2537f42dac728840c
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/confidence.cpython-36.pyc differ
diff --git a/alphafold/alphafold/common/__pycache__/confidence.cpython-38.pyc b/alphafold/alphafold/common/__pycache__/confidence.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e088558450120f086e0507639d686ec22f97267f
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/confidence.cpython-38.pyc differ
diff --git a/alphafold/alphafold/common/__pycache__/protein.cpython-36.pyc b/alphafold/alphafold/common/__pycache__/protein.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9cad08d21500e87ffdf8ad80cc4b44b0f94d2b76
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/protein.cpython-36.pyc differ
diff --git a/alphafold/alphafold/common/__pycache__/protein.cpython-38.pyc b/alphafold/alphafold/common/__pycache__/protein.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..259a71cfb744cf8084501ed899037834c4fa0e2a
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/protein.cpython-38.pyc differ
diff --git a/alphafold/alphafold/common/__pycache__/residue_constants.cpython-36.pyc b/alphafold/alphafold/common/__pycache__/residue_constants.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..51ac5bdd2930b5a64a6d8a27eda16aea0fcc77b8
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/residue_constants.cpython-36.pyc differ
diff --git a/alphafold/alphafold/common/__pycache__/residue_constants.cpython-38.pyc b/alphafold/alphafold/common/__pycache__/residue_constants.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..901462a23d79c2230f014068b583c5bbb714840f
Binary files /dev/null and b/alphafold/alphafold/common/__pycache__/residue_constants.cpython-38.pyc differ
diff --git a/alphafold/alphafold/common/confidence.py b/alphafold/alphafold/common/confidence.py
new file mode 100644
index 0000000000000000000000000000000000000000..5f1085f75d2c8528a05abc12a483c3685af8c7c1
--- /dev/null
+++ b/alphafold/alphafold/common/confidence.py
@@ -0,0 +1,155 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Functions for processing confidence metrics."""
+
+from typing import Dict, Optional, Tuple
+import numpy as np
+import scipy.special
+
+
+def compute_plddt(logits: np.ndarray) -> np.ndarray:
+  """Computes per-residue pLDDT from logits.
+
+  Args:
+    logits: [num_res, num_bins] output from the PredictedLDDTHead.
+
+  Returns:
+    plddt: [num_res] per-residue pLDDT.
+  """
+  num_bins = logits.shape[-1]
+  bin_width = 1.0 / num_bins
+  bin_centers = np.arange(start=0.5 * bin_width, stop=1.0, step=bin_width)
+  probs = scipy.special.softmax(logits, axis=-1)
+  predicted_lddt_ca = np.sum(probs * bin_centers[None, :], axis=-1)
+  return predicted_lddt_ca * 100
+
+
+def _calculate_bin_centers(breaks: np.ndarray):
+  """Gets the bin centers from the bin edges.
+
+  Args:
+    breaks: [num_bins - 1] the error bin edges.
+
+  Returns:
+    bin_centers: [num_bins] the error bin centers.
+  """
+  step = (breaks[1] - breaks[0])
+
+  # Add half-step to get the center
+  bin_centers = breaks + step / 2
+  # Add a catch-all bin at the end.
+  bin_centers = np.concatenate([bin_centers, [bin_centers[-1] + step]],
+                               axis=0)
+  return bin_centers
+
+
+def _calculate_expected_aligned_error(
+    alignment_confidence_breaks: np.ndarray,
+    aligned_distance_error_probs: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
+  """Calculates expected aligned distance errors for every pair of residues.
+
+  Args:
+    alignment_confidence_breaks: [num_bins - 1] the error bin edges.
+    aligned_distance_error_probs: [num_res, num_res, num_bins] the predicted
+      probs for each error bin, for each pair of residues.
+
+  Returns:
+    predicted_aligned_error: [num_res, num_res] the expected aligned distance
+      error for each pair of residues.
+    max_predicted_aligned_error: The maximum predicted error possible.
+  """
+  bin_centers = _calculate_bin_centers(alignment_confidence_breaks)
+
+  # Tuple of expected aligned distance error and max possible error.
+  return (np.sum(aligned_distance_error_probs * bin_centers, axis=-1),
+          np.asarray(bin_centers[-1]))
+
+
+def compute_predicted_aligned_error(
+    logits: np.ndarray,
+    breaks: np.ndarray) -> Dict[str, np.ndarray]:
+  """Computes aligned confidence metrics from logits.
+
+  Args:
+    logits: [num_res, num_res, num_bins] the logits output from
+      PredictedAlignedErrorHead.
+    breaks: [num_bins - 1] the error bin edges.
+
+  Returns:
+    aligned_confidence_probs: [num_res, num_res, num_bins] the predicted
+      aligned error probabilities over bins for each residue pair.
+    predicted_aligned_error: [num_res, num_res] the expected aligned distance
+      error for each pair of residues.
+    max_predicted_aligned_error: The maximum predicted error possible.
+  """
+  aligned_confidence_probs = scipy.special.softmax(
+      logits,
+      axis=-1)
+  predicted_aligned_error, max_predicted_aligned_error = (
+      _calculate_expected_aligned_error(
+          alignment_confidence_breaks=breaks,
+          aligned_distance_error_probs=aligned_confidence_probs))
+  return {
+      'aligned_confidence_probs': aligned_confidence_probs,
+      'predicted_aligned_error': predicted_aligned_error,
+      'max_predicted_aligned_error': max_predicted_aligned_error,
+  }
+
+
+def predicted_tm_score(
+    logits: np.ndarray,
+    breaks: np.ndarray,
+    residue_weights: Optional[np.ndarray] = None) -> np.ndarray:
+  """Computes predicted TM alignment score.
+
+  Args:
+    logits: [num_res, num_res, num_bins] the logits output from
+      PredictedAlignedErrorHead.
+    breaks: [num_bins] the error bins.
+    residue_weights: [num_res] the per residue weights to use for the
+      expectation.
+
+  Returns:
+    ptm_score: the predicted TM alignment score.
+  """
+
+  # residue_weights has to be in [0, 1], but can be floating-point, i.e. the
+  # exp. resolved head's probability.
+  if residue_weights is None:
+    residue_weights = np.ones(logits.shape[0])
+
+  bin_centers = _calculate_bin_centers(breaks)
+
+  num_res = np.sum(residue_weights)
+  # Clip num_res to avoid negative/undefined d0.
+  clipped_num_res = max(num_res, 19)
+
+  # Compute d_0(num_res) as defined by TM-score, eqn. (5) in
+  # http://zhanglab.ccmb.med.umich.edu/papers/2004_3.pdf
+  # Yang & Skolnick "Scoring function for automated
+  # assessment of protein structure template quality" 2004
+  d0 = 1.24 * (clipped_num_res - 15) ** (1./3) - 1.8
+
+  # Convert logits to probs
+  probs = scipy.special.softmax(logits, axis=-1)
+
+  # TM-Score term for every bin
+  tm_per_bin = 1. / (1 + np.square(bin_centers) / np.square(d0))
+  # E_distances tm(distance)
+  predicted_tm_term = np.sum(probs * tm_per_bin, axis=-1)
+
+  normed_residue_mask = residue_weights / (1e-8 + residue_weights.sum())
+  per_alignment = np.sum(predicted_tm_term * normed_residue_mask, axis=-1)
+  return np.asarray(per_alignment[(per_alignment * residue_weights).argmax()])
diff --git a/alphafold/alphafold/common/protein.py b/alphafold/alphafold/common/protein.py
new file mode 100644
index 0000000000000000000000000000000000000000..2848f5bbc52d646ddc22a8f2e1c6b4d98ae1ffce
--- /dev/null
+++ b/alphafold/alphafold/common/protein.py
@@ -0,0 +1,229 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Protein data type."""
+import dataclasses
+import io
+from typing import Any, Mapping, Optional
+from alphafold.common import residue_constants
+from Bio.PDB import PDBParser
+import numpy as np
+
+FeatureDict = Mapping[str, np.ndarray]
+ModelOutput = Mapping[str, Any]  # Is a nested dict.
+
+
+@dataclasses.dataclass(frozen=True)
+class Protein:
+  """Protein structure representation."""
+
+  # Cartesian coordinates of atoms in angstroms. The atom types correspond to
+  # residue_constants.atom_types, i.e. the first three are N, CA, CB.
+  atom_positions: np.ndarray  # [num_res, num_atom_type, 3]
+
+  # Amino-acid type for each residue represented as an integer between 0 and
+  # 20, where 20 is 'X'.
+  aatype: np.ndarray  # [num_res]
+
+  # Binary float mask to indicate presence of a particular atom. 1.0 if an atom
+  # is present and 0.0 if not. This should be used for loss masking.
+  atom_mask: np.ndarray  # [num_res, num_atom_type]
+
+  # Residue index as used in PDB. It is not necessarily continuous or 0-indexed.
+  residue_index: np.ndarray  # [num_res]
+
+  # B-factors, or temperature factors, of each residue (in sq. angstroms units),
+  # representing the displacement of the residue from its ground truth mean
+  # value.
+  b_factors: np.ndarray  # [num_res, num_atom_type]
+
+
+def from_pdb_string(pdb_str: str, chain_id: Optional[str] = None) -> Protein:
+  """Takes a PDB string and constructs a Protein object.
+
+  WARNING: All non-standard residue types will be converted into UNK. All
+    non-standard atoms will be ignored.
+
+  Args:
+    pdb_str: The contents of the pdb file
+    chain_id: If None, then the pdb file must contain a single chain (which
+      will be parsed). If chain_id is specified (e.g. A), then only that chain
+      is parsed.
+
+  Returns:
+    A new `Protein` parsed from the pdb contents.
+  """
+  pdb_fh = io.StringIO(pdb_str)
+  parser = PDBParser(QUIET=True)
+  structure = parser.get_structure('none', pdb_fh)
+  models = list(structure.get_models())
+  if len(models) != 1:
+    raise ValueError(
+        f'Only single model PDBs are supported. Found {len(models)} models.')
+  model = models[0]
+
+  if chain_id is not None:
+    chain = model[chain_id]
+  else:
+    chains = list(model.get_chains())
+    if len(chains) != 1:
+      raise ValueError(
+          'Only single chain PDBs are supported when chain_id not specified. '
+          f'Found {len(chains)} chains.')
+    else:
+      chain = chains[0]
+
+  atom_positions = []
+  aatype = []
+  atom_mask = []
+  residue_index = []
+  b_factors = []
+
+  for res in chain:
+    if res.id[2] != ' ':
+      raise ValueError(
+          f'PDB contains an insertion code at chain {chain.id} and residue '
+          f'index {res.id[1]}. These are not supported.')
+    res_shortname = residue_constants.restype_3to1.get(res.resname, 'X')
+    restype_idx = residue_constants.restype_order.get(
+        res_shortname, residue_constants.restype_num)
+    pos = np.zeros((residue_constants.atom_type_num, 3))
+    mask = np.zeros((residue_constants.atom_type_num,))
+    res_b_factors = np.zeros((residue_constants.atom_type_num,))
+    for atom in res:
+      if atom.name not in residue_constants.atom_types:
+        continue
+      pos[residue_constants.atom_order[atom.name]] = atom.coord
+      mask[residue_constants.atom_order[atom.name]] = 1.
+      res_b_factors[residue_constants.atom_order[atom.name]] = atom.bfactor
+    if np.sum(mask) < 0.5:
+      # If no known atom positions are reported for the residue then skip it.
+      continue
+    aatype.append(restype_idx)
+    atom_positions.append(pos)
+    atom_mask.append(mask)
+    residue_index.append(res.id[1])
+    b_factors.append(res_b_factors)
+
+  return Protein(
+      atom_positions=np.array(atom_positions),
+      atom_mask=np.array(atom_mask),
+      aatype=np.array(aatype),
+      residue_index=np.array(residue_index),
+      b_factors=np.array(b_factors))
+
+
+def to_pdb(prot: Protein) -> str:
+  """Converts a `Protein` instance to a PDB string.
+
+  Args:
+    prot: The protein to convert to PDB.
+
+  Returns:
+    PDB string.
+  """
+  restypes = residue_constants.restypes + ['X']
+  res_1to3 = lambda r: residue_constants.restype_1to3.get(restypes[r], 'UNK')
+  atom_types = residue_constants.atom_types
+
+  pdb_lines = []
+
+  atom_mask = prot.atom_mask
+  aatype = prot.aatype
+  atom_positions = prot.atom_positions
+  residue_index = prot.residue_index.astype(np.int32)
+  b_factors = prot.b_factors
+
+  if np.any(aatype > residue_constants.restype_num):
+    raise ValueError('Invalid aatypes.')
+
+  pdb_lines.append('MODEL     1')
+  atom_index = 1
+  chain_id = 'A'
+  # Add all atom sites.
+  for i in range(aatype.shape[0]):
+    res_name_3 = res_1to3(aatype[i])
+    for atom_name, pos, mask, b_factor in zip(
+        atom_types, atom_positions[i], atom_mask[i], b_factors[i]):
+      if mask < 0.5:
+        continue
+
+      record_type = 'ATOM'
+      name = atom_name if len(atom_name) == 4 else f' {atom_name}'
+      alt_loc = ''
+      insertion_code = ''
+      occupancy = 1.00
+      element = atom_name[0]  # Protein supports only C, N, O, S, this works.
+      charge = ''
+      # PDB is a columnar format, every space matters here!
+      atom_line = (f'{record_type:<6}{atom_index:>5} {name:<4}{alt_loc:>1}'
+                   f'{res_name_3:>3} {chain_id:>1}'
+                   f'{residue_index[i]:>4}{insertion_code:>1}   '
+                   f'{pos[0]:>8.3f}{pos[1]:>8.3f}{pos[2]:>8.3f}'
+                   f'{occupancy:>6.2f}{b_factor:>6.2f}          '
+                   f'{element:>2}{charge:>2}')
+      pdb_lines.append(atom_line)
+      atom_index += 1
+
+  # Close the chain.
+  chain_end = 'TER'
+  chain_termination_line = (
+      f'{chain_end:<6}{atom_index:>5}      {res_1to3(aatype[-1]):>3} '
+      f'{chain_id:>1}{residue_index[-1]:>4}')
+  pdb_lines.append(chain_termination_line)
+  pdb_lines.append('ENDMDL')
+
+  pdb_lines.append('END')
+  pdb_lines.append('')
+  return '\n'.join(pdb_lines)
+
+
+def ideal_atom_mask(prot: Protein) -> np.ndarray:
+  """Computes an ideal atom mask.
+
+  `Protein.atom_mask` typically is defined according to the atoms that are
+  reported in the PDB. This function computes a mask according to heavy atoms
+  that should be present in the given sequence of amino acids.
+
+  Args:
+    prot: `Protein` whose fields are `numpy.ndarray` objects.
+
+  Returns:
+    An ideal atom mask.
+  """
+  return residue_constants.STANDARD_ATOM_MASK[prot.aatype]
+
+
+def from_prediction(features: FeatureDict, result: ModelOutput,
+                    b_factors: Optional[np.ndarray] = None) -> Protein:
+  """Assembles a protein from a prediction.
+
+  Args:
+    features: Dictionary holding model inputs.
+    result: Dictionary holding model outputs.
+    b_factors: (Optional) B-factors to use for the protein.
+
+  Returns:
+    A protein instance.
+  """
+  fold_output = result['structure_module']
+  if b_factors is None:
+    b_factors = np.zeros_like(fold_output['final_atom_mask'])
+
+  return Protein(
+      aatype=features['aatype'][0],
+      atom_positions=fold_output['final_atom_positions'],
+      atom_mask=fold_output['final_atom_mask'],
+      residue_index=features['residue_index'][0] + 1,
+      b_factors=b_factors)
diff --git a/alphafold/alphafold/common/protein_test.py b/alphafold/alphafold/common/protein_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..b8ae10756e99f9019aeeed082b34789cdd515774
--- /dev/null
+++ b/alphafold/alphafold/common/protein_test.py
@@ -0,0 +1,89 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for protein."""
+
+import os
+
+from absl.testing import absltest
+from absl.testing import parameterized
+from alphafold.common import protein
+from alphafold.common import residue_constants
+import numpy as np
+# Internal import (7716).
+
+TEST_DATA_DIR = 'alphafold/common/testdata/'
+
+
+class ProteinTest(parameterized.TestCase):
+
+  def _check_shapes(self, prot, num_res):
+    """Check that the processed shapes are correct."""
+    num_atoms = residue_constants.atom_type_num
+    self.assertEqual((num_res, num_atoms, 3), prot.atom_positions.shape)
+    self.assertEqual((num_res,), prot.aatype.shape)
+    self.assertEqual((num_res, num_atoms), prot.atom_mask.shape)
+    self.assertEqual((num_res,), prot.residue_index.shape)
+    self.assertEqual((num_res, num_atoms), prot.b_factors.shape)
+
+  @parameterized.parameters(('2rbg.pdb', 'A', 282),
+                            ('2rbg.pdb', 'B', 282))
+  def test_from_pdb_str(self, pdb_file, chain_id, num_res):
+    pdb_file = os.path.join(absltest.get_default_test_srcdir(), TEST_DATA_DIR,
+                            pdb_file)
+    with open(pdb_file) as f:
+      pdb_string = f.read()
+    prot = protein.from_pdb_string(pdb_string, chain_id)
+    self._check_shapes(prot, num_res)
+    self.assertGreaterEqual(prot.aatype.min(), 0)
+    # Allow equal since unknown restypes have index equal to restype_num.
+    self.assertLessEqual(prot.aatype.max(), residue_constants.restype_num)
+
+  def test_to_pdb(self):
+    with open(
+        os.path.join(absltest.get_default_test_srcdir(), TEST_DATA_DIR,
+                     '2rbg.pdb')) as f:
+      pdb_string = f.read()
+    prot = protein.from_pdb_string(pdb_string, chain_id='A')
+    pdb_string_reconstr = protein.to_pdb(prot)
+    prot_reconstr = protein.from_pdb_string(pdb_string_reconstr)
+
+    np.testing.assert_array_equal(prot_reconstr.aatype, prot.aatype)
+    np.testing.assert_array_almost_equal(
+        prot_reconstr.atom_positions, prot.atom_positions)
+    np.testing.assert_array_almost_equal(
+        prot_reconstr.atom_mask, prot.atom_mask)
+    np.testing.assert_array_equal(
+        prot_reconstr.residue_index, prot.residue_index)
+    np.testing.assert_array_almost_equal(
+        prot_reconstr.b_factors, prot.b_factors)
+
+  def test_ideal_atom_mask(self):
+    with open(
+        os.path.join(absltest.get_default_test_srcdir(), TEST_DATA_DIR,
+                     '2rbg.pdb')) as f:
+      pdb_string = f.read()
+    prot = protein.from_pdb_string(pdb_string, chain_id='A')
+    ideal_mask = protein.ideal_atom_mask(prot)
+    non_ideal_residues = set([102] + list(range(127, 285)))
+    for i, (res, atom_mask) in enumerate(
+        zip(prot.residue_index, prot.atom_mask)):
+      if res in non_ideal_residues:
+        self.assertFalse(np.all(atom_mask == ideal_mask[i]), msg=f'{res}')
+      else:
+        self.assertTrue(np.all(atom_mask == ideal_mask[i]), msg=f'{res}')
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/common/residue_constants.py b/alphafold/alphafold/common/residue_constants.py
new file mode 100644
index 0000000000000000000000000000000000000000..07049b3c86bb3a3d6a5abd479944418729ef7837
--- /dev/null
+++ b/alphafold/alphafold/common/residue_constants.py
@@ -0,0 +1,895 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Constants used in AlphaFold."""
+
+import collections
+import functools
+from typing import List, Mapping, Tuple
+
+import numpy as np
+import tree
+
+# Internal import (35fd).
+
+
+# Distance from one CA to next CA [trans configuration: omega = 180].
+ca_ca = 3.80209737096
+
+# Format: The list for each AA type contains chi1, chi2, chi3, chi4 in
+# this order (or a relevant subset from chi1 onwards). ALA and GLY don't have
+# chi angles so their chi angle lists are empty.
+chi_angles_atoms = {
+    'ALA': [],
+    # Chi5 in arginine is always 0 +- 5 degrees, so ignore it.
+    'ARG': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'],
+            ['CB', 'CG', 'CD', 'NE'], ['CG', 'CD', 'NE', 'CZ']],
+    'ASN': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'OD1']],
+    'ASP': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'OD1']],
+    'CYS': [['N', 'CA', 'CB', 'SG']],
+    'GLN': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'],
+            ['CB', 'CG', 'CD', 'OE1']],
+    'GLU': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'],
+            ['CB', 'CG', 'CD', 'OE1']],
+    'GLY': [],
+    'HIS': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'ND1']],
+    'ILE': [['N', 'CA', 'CB', 'CG1'], ['CA', 'CB', 'CG1', 'CD1']],
+    'LEU': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']],
+    'LYS': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'],
+            ['CB', 'CG', 'CD', 'CE'], ['CG', 'CD', 'CE', 'NZ']],
+    'MET': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'SD'],
+            ['CB', 'CG', 'SD', 'CE']],
+    'PHE': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']],
+    'PRO': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD']],
+    'SER': [['N', 'CA', 'CB', 'OG']],
+    'THR': [['N', 'CA', 'CB', 'OG1']],
+    'TRP': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']],
+    'TYR': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']],
+    'VAL': [['N', 'CA', 'CB', 'CG1']],
+}
+
+# If chi angles given in fixed-length array, this matrix determines how to mask
+# them for each AA type. The order is as per restype_order (see below).
+chi_angles_mask = [
+    [0.0, 0.0, 0.0, 0.0],  # ALA
+    [1.0, 1.0, 1.0, 1.0],  # ARG
+    [1.0, 1.0, 0.0, 0.0],  # ASN
+    [1.0, 1.0, 0.0, 0.0],  # ASP
+    [1.0, 0.0, 0.0, 0.0],  # CYS
+    [1.0, 1.0, 1.0, 0.0],  # GLN
+    [1.0, 1.0, 1.0, 0.0],  # GLU
+    [0.0, 0.0, 0.0, 0.0],  # GLY
+    [1.0, 1.0, 0.0, 0.0],  # HIS
+    [1.0, 1.0, 0.0, 0.0],  # ILE
+    [1.0, 1.0, 0.0, 0.0],  # LEU
+    [1.0, 1.0, 1.0, 1.0],  # LYS
+    [1.0, 1.0, 1.0, 0.0],  # MET
+    [1.0, 1.0, 0.0, 0.0],  # PHE
+    [1.0, 1.0, 0.0, 0.0],  # PRO
+    [1.0, 0.0, 0.0, 0.0],  # SER
+    [1.0, 0.0, 0.0, 0.0],  # THR
+    [1.0, 1.0, 0.0, 0.0],  # TRP
+    [1.0, 1.0, 0.0, 0.0],  # TYR
+    [1.0, 0.0, 0.0, 0.0],  # VAL
+]
+
+# The following chi angles are pi periodic: they can be rotated by a multiple
+# of pi without affecting the structure.
+chi_pi_periodic = [
+    [0.0, 0.0, 0.0, 0.0],  # ALA
+    [0.0, 0.0, 0.0, 0.0],  # ARG
+    [0.0, 0.0, 0.0, 0.0],  # ASN
+    [0.0, 1.0, 0.0, 0.0],  # ASP
+    [0.0, 0.0, 0.0, 0.0],  # CYS
+    [0.0, 0.0, 0.0, 0.0],  # GLN
+    [0.0, 0.0, 1.0, 0.0],  # GLU
+    [0.0, 0.0, 0.0, 0.0],  # GLY
+    [0.0, 0.0, 0.0, 0.0],  # HIS
+    [0.0, 0.0, 0.0, 0.0],  # ILE
+    [0.0, 0.0, 0.0, 0.0],  # LEU
+    [0.0, 0.0, 0.0, 0.0],  # LYS
+    [0.0, 0.0, 0.0, 0.0],  # MET
+    [0.0, 1.0, 0.0, 0.0],  # PHE
+    [0.0, 0.0, 0.0, 0.0],  # PRO
+    [0.0, 0.0, 0.0, 0.0],  # SER
+    [0.0, 0.0, 0.0, 0.0],  # THR
+    [0.0, 0.0, 0.0, 0.0],  # TRP
+    [0.0, 1.0, 0.0, 0.0],  # TYR
+    [0.0, 0.0, 0.0, 0.0],  # VAL
+    [0.0, 0.0, 0.0, 0.0],  # UNK
+]
+
+# Atoms positions relative to the 8 rigid groups, defined by the pre-omega, phi,
+# psi and chi angles:
+# 0: 'backbone group',
+# 1: 'pre-omega-group', (empty)
+# 2: 'phi-group', (currently empty, because it defines only hydrogens)
+# 3: 'psi-group',
+# 4,5,6,7: 'chi1,2,3,4-group'
+# The atom positions are relative to the axis-end-atom of the corresponding
+# rotation axis. The x-axis is in direction of the rotation axis, and the y-axis
+# is defined such that the dihedral-angle-definiting atom (the last entry in
+# chi_angles_atoms above) is in the xy-plane (with a positive y-coordinate).
+# format: [atomname, group_idx, rel_position]
+rigid_group_atom_positions = {
+    'ALA': [
+        ['N', 0, (-0.525, 1.363, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.526, -0.000, -0.000)],
+        ['CB', 0, (-0.529, -0.774, -1.205)],
+        ['O', 3, (0.627, 1.062, 0.000)],
+    ],
+    'ARG': [
+        ['N', 0, (-0.524, 1.362, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.525, -0.000, -0.000)],
+        ['CB', 0, (-0.524, -0.778, -1.209)],
+        ['O', 3, (0.626, 1.062, 0.000)],
+        ['CG', 4, (0.616, 1.390, -0.000)],
+        ['CD', 5, (0.564, 1.414, 0.000)],
+        ['NE', 6, (0.539, 1.357, -0.000)],
+        ['NH1', 7, (0.206, 2.301, 0.000)],
+        ['NH2', 7, (2.078, 0.978, -0.000)],
+        ['CZ', 7, (0.758, 1.093, -0.000)],
+    ],
+    'ASN': [
+        ['N', 0, (-0.536, 1.357, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.526, -0.000, -0.000)],
+        ['CB', 0, (-0.531, -0.787, -1.200)],
+        ['O', 3, (0.625, 1.062, 0.000)],
+        ['CG', 4, (0.584, 1.399, 0.000)],
+        ['ND2', 5, (0.593, -1.188, 0.001)],
+        ['OD1', 5, (0.633, 1.059, 0.000)],
+    ],
+    'ASP': [
+        ['N', 0, (-0.525, 1.362, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.527, 0.000, -0.000)],
+        ['CB', 0, (-0.526, -0.778, -1.208)],
+        ['O', 3, (0.626, 1.062, -0.000)],
+        ['CG', 4, (0.593, 1.398, -0.000)],
+        ['OD1', 5, (0.610, 1.091, 0.000)],
+        ['OD2', 5, (0.592, -1.101, -0.003)],
+    ],
+    'CYS': [
+        ['N', 0, (-0.522, 1.362, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.524, 0.000, 0.000)],
+        ['CB', 0, (-0.519, -0.773, -1.212)],
+        ['O', 3, (0.625, 1.062, -0.000)],
+        ['SG', 4, (0.728, 1.653, 0.000)],
+    ],
+    'GLN': [
+        ['N', 0, (-0.526, 1.361, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.526, 0.000, 0.000)],
+        ['CB', 0, (-0.525, -0.779, -1.207)],
+        ['O', 3, (0.626, 1.062, -0.000)],
+        ['CG', 4, (0.615, 1.393, 0.000)],
+        ['CD', 5, (0.587, 1.399, -0.000)],
+        ['NE2', 6, (0.593, -1.189, -0.001)],
+        ['OE1', 6, (0.634, 1.060, 0.000)],
+    ],
+    'GLU': [
+        ['N', 0, (-0.528, 1.361, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.526, -0.000, -0.000)],
+        ['CB', 0, (-0.526, -0.781, -1.207)],
+        ['O', 3, (0.626, 1.062, 0.000)],
+        ['CG', 4, (0.615, 1.392, 0.000)],
+        ['CD', 5, (0.600, 1.397, 0.000)],
+        ['OE1', 6, (0.607, 1.095, -0.000)],
+        ['OE2', 6, (0.589, -1.104, -0.001)],
+    ],
+    'GLY': [
+        ['N', 0, (-0.572, 1.337, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.517, -0.000, -0.000)],
+        ['O', 3, (0.626, 1.062, -0.000)],
+    ],
+    'HIS': [
+        ['N', 0, (-0.527, 1.360, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.525, 0.000, 0.000)],
+        ['CB', 0, (-0.525, -0.778, -1.208)],
+        ['O', 3, (0.625, 1.063, 0.000)],
+        ['CG', 4, (0.600, 1.370, -0.000)],
+        ['CD2', 5, (0.889, -1.021, 0.003)],
+        ['ND1', 5, (0.744, 1.160, -0.000)],
+        ['CE1', 5, (2.030, 0.851, 0.002)],
+        ['NE2', 5, (2.145, -0.466, 0.004)],
+    ],
+    'ILE': [
+        ['N', 0, (-0.493, 1.373, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.527, -0.000, -0.000)],
+        ['CB', 0, (-0.536, -0.793, -1.213)],
+        ['O', 3, (0.627, 1.062, -0.000)],
+        ['CG1', 4, (0.534, 1.437, -0.000)],
+        ['CG2', 4, (0.540, -0.785, -1.199)],
+        ['CD1', 5, (0.619, 1.391, 0.000)],
+    ],
+    'LEU': [
+        ['N', 0, (-0.520, 1.363, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.525, -0.000, -0.000)],
+        ['CB', 0, (-0.522, -0.773, -1.214)],
+        ['O', 3, (0.625, 1.063, -0.000)],
+        ['CG', 4, (0.678, 1.371, 0.000)],
+        ['CD1', 5, (0.530, 1.430, -0.000)],
+        ['CD2', 5, (0.535, -0.774, 1.200)],
+    ],
+    'LYS': [
+        ['N', 0, (-0.526, 1.362, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.526, 0.000, 0.000)],
+        ['CB', 0, (-0.524, -0.778, -1.208)],
+        ['O', 3, (0.626, 1.062, -0.000)],
+        ['CG', 4, (0.619, 1.390, 0.000)],
+        ['CD', 5, (0.559, 1.417, 0.000)],
+        ['CE', 6, (0.560, 1.416, 0.000)],
+        ['NZ', 7, (0.554, 1.387, 0.000)],
+    ],
+    'MET': [
+        ['N', 0, (-0.521, 1.364, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.525, 0.000, 0.000)],
+        ['CB', 0, (-0.523, -0.776, -1.210)],
+        ['O', 3, (0.625, 1.062, -0.000)],
+        ['CG', 4, (0.613, 1.391, -0.000)],
+        ['SD', 5, (0.703, 1.695, 0.000)],
+        ['CE', 6, (0.320, 1.786, -0.000)],
+    ],
+    'PHE': [
+        ['N', 0, (-0.518, 1.363, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.524, 0.000, -0.000)],
+        ['CB', 0, (-0.525, -0.776, -1.212)],
+        ['O', 3, (0.626, 1.062, -0.000)],
+        ['CG', 4, (0.607, 1.377, 0.000)],
+        ['CD1', 5, (0.709, 1.195, -0.000)],
+        ['CD2', 5, (0.706, -1.196, 0.000)],
+        ['CE1', 5, (2.102, 1.198, -0.000)],
+        ['CE2', 5, (2.098, -1.201, -0.000)],
+        ['CZ', 5, (2.794, -0.003, -0.001)],
+    ],
+    'PRO': [
+        ['N', 0, (-0.566, 1.351, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.527, -0.000, 0.000)],
+        ['CB', 0, (-0.546, -0.611, -1.293)],
+        ['O', 3, (0.621, 1.066, 0.000)],
+        ['CG', 4, (0.382, 1.445, 0.0)],
+        # ['CD', 5, (0.427, 1.440, 0.0)],
+        ['CD', 5, (0.477, 1.424, 0.0)],  # manually made angle 2 degrees larger
+    ],
+    'SER': [
+        ['N', 0, (-0.529, 1.360, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.525, -0.000, -0.000)],
+        ['CB', 0, (-0.518, -0.777, -1.211)],
+        ['O', 3, (0.626, 1.062, -0.000)],
+        ['OG', 4, (0.503, 1.325, 0.000)],
+    ],
+    'THR': [
+        ['N', 0, (-0.517, 1.364, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.526, 0.000, -0.000)],
+        ['CB', 0, (-0.516, -0.793, -1.215)],
+        ['O', 3, (0.626, 1.062, 0.000)],
+        ['CG2', 4, (0.550, -0.718, -1.228)],
+        ['OG1', 4, (0.472, 1.353, 0.000)],
+    ],
+    'TRP': [
+        ['N', 0, (-0.521, 1.363, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.525, -0.000, 0.000)],
+        ['CB', 0, (-0.523, -0.776, -1.212)],
+        ['O', 3, (0.627, 1.062, 0.000)],
+        ['CG', 4, (0.609, 1.370, -0.000)],
+        ['CD1', 5, (0.824, 1.091, 0.000)],
+        ['CD2', 5, (0.854, -1.148, -0.005)],
+        ['CE2', 5, (2.186, -0.678, -0.007)],
+        ['CE3', 5, (0.622, -2.530, -0.007)],
+        ['NE1', 5, (2.140, 0.690, -0.004)],
+        ['CH2', 5, (3.028, -2.890, -0.013)],
+        ['CZ2', 5, (3.283, -1.543, -0.011)],
+        ['CZ3', 5, (1.715, -3.389, -0.011)],
+    ],
+    'TYR': [
+        ['N', 0, (-0.522, 1.362, 0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.524, -0.000, -0.000)],
+        ['CB', 0, (-0.522, -0.776, -1.213)],
+        ['O', 3, (0.627, 1.062, -0.000)],
+        ['CG', 4, (0.607, 1.382, -0.000)],
+        ['CD1', 5, (0.716, 1.195, -0.000)],
+        ['CD2', 5, (0.713, -1.194, -0.001)],
+        ['CE1', 5, (2.107, 1.200, -0.002)],
+        ['CE2', 5, (2.104, -1.201, -0.003)],
+        ['OH', 5, (4.168, -0.002, -0.005)],
+        ['CZ', 5, (2.791, -0.001, -0.003)],
+    ],
+    'VAL': [
+        ['N', 0, (-0.494, 1.373, -0.000)],
+        ['CA', 0, (0.000, 0.000, 0.000)],
+        ['C', 0, (1.527, -0.000, -0.000)],
+        ['CB', 0, (-0.533, -0.795, -1.213)],
+        ['O', 3, (0.627, 1.062, -0.000)],
+        ['CG1', 4, (0.540, 1.429, -0.000)],
+        ['CG2', 4, (0.533, -0.776, 1.203)],
+    ],
+}
+
+# A list of atoms (excluding hydrogen) for each AA type. PDB naming convention.
+residue_atoms = {
+    'ALA': ['C', 'CA', 'CB', 'N', 'O'],
+    'ARG': ['C', 'CA', 'CB', 'CG', 'CD', 'CZ', 'N', 'NE', 'O', 'NH1', 'NH2'],
+    'ASP': ['C', 'CA', 'CB', 'CG', 'N', 'O', 'OD1', 'OD2'],
+    'ASN': ['C', 'CA', 'CB', 'CG', 'N', 'ND2', 'O', 'OD1'],
+    'CYS': ['C', 'CA', 'CB', 'N', 'O', 'SG'],
+    'GLU': ['C', 'CA', 'CB', 'CG', 'CD', 'N', 'O', 'OE1', 'OE2'],
+    'GLN': ['C', 'CA', 'CB', 'CG', 'CD', 'N', 'NE2', 'O', 'OE1'],
+    'GLY': ['C', 'CA', 'N', 'O'],
+    'HIS': ['C', 'CA', 'CB', 'CG', 'CD2', 'CE1', 'N', 'ND1', 'NE2', 'O'],
+    'ILE': ['C', 'CA', 'CB', 'CG1', 'CG2', 'CD1', 'N', 'O'],
+    'LEU': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'N', 'O'],
+    'LYS': ['C', 'CA', 'CB', 'CG', 'CD', 'CE', 'N', 'NZ', 'O'],
+    'MET': ['C', 'CA', 'CB', 'CG', 'CE', 'N', 'O', 'SD'],
+    'PHE': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', 'N', 'O'],
+    'PRO': ['C', 'CA', 'CB', 'CG', 'CD', 'N', 'O'],
+    'SER': ['C', 'CA', 'CB', 'N', 'O', 'OG'],
+    'THR': ['C', 'CA', 'CB', 'CG2', 'N', 'O', 'OG1'],
+    'TRP': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'CE2', 'CE3', 'CZ2', 'CZ3',
+            'CH2', 'N', 'NE1', 'O'],
+    'TYR': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', 'N', 'O',
+            'OH'],
+    'VAL': ['C', 'CA', 'CB', 'CG1', 'CG2', 'N', 'O']
+}
+
+# Naming swaps for ambiguous atom names.
+# Due to symmetries in the amino acids the naming of atoms is ambiguous in
+# 4 of the 20 amino acids.
+# (The LDDT paper lists 7 amino acids as ambiguous, but the naming ambiguities
+# in LEU, VAL and ARG can be resolved by using the 3d constellations of
+# the 'ambiguous' atoms and their neighbours)
+residue_atom_renaming_swaps = {
+    'ASP': {'OD1': 'OD2'},
+    'GLU': {'OE1': 'OE2'},
+    'PHE': {'CD1': 'CD2', 'CE1': 'CE2'},
+    'TYR': {'CD1': 'CD2', 'CE1': 'CE2'},
+}
+
+# Van der Waals radii [Angstroem] of the atoms (from Wikipedia)
+van_der_waals_radius = {
+    'C': 1.7,
+    'N': 1.55,
+    'O': 1.52,
+    'S': 1.8,
+}
+
+Bond = collections.namedtuple(
+    'Bond', ['atom1_name', 'atom2_name', 'length', 'stddev'])
+BondAngle = collections.namedtuple(
+    'BondAngle',
+    ['atom1_name', 'atom2_name', 'atom3name', 'angle_rad', 'stddev'])
+
+
+@functools.lru_cache(maxsize=None)
+def load_stereo_chemical_props() -> Tuple[Mapping[str, List[Bond]],
+                                          Mapping[str, List[Bond]],
+                                          Mapping[str, List[BondAngle]]]:
+  """Load stereo_chemical_props.txt into a nice structure.
+
+  Load literature values for bond lengths and bond angles and translate
+  bond angles into the length of the opposite edge of the triangle
+  ("residue_virtual_bonds").
+
+  Returns:
+    residue_bonds:  dict that maps resname --> list of Bond tuples
+    residue_virtual_bonds: dict that maps resname --> list of Bond tuples
+    residue_bond_angles: dict that maps resname --> list of BondAngle tuples
+  """
+  stereo_chemical_props_path = (
+      'alphafold/common/stereo_chemical_props.txt')
+  with open(stereo_chemical_props_path, 'rt') as f:
+    stereo_chemical_props = f.read()
+  lines_iter = iter(stereo_chemical_props.splitlines())
+  # Load bond lengths.
+  residue_bonds = {}
+  next(lines_iter)  # Skip header line.
+  for line in lines_iter:
+    if line.strip() == '-':
+      break
+    bond, resname, length, stddev = line.split()
+    atom1, atom2 = bond.split('-')
+    if resname not in residue_bonds:
+      residue_bonds[resname] = []
+    residue_bonds[resname].append(
+        Bond(atom1, atom2, float(length), float(stddev)))
+  residue_bonds['UNK'] = []
+
+  # Load bond angles.
+  residue_bond_angles = {}
+  next(lines_iter)  # Skip empty line.
+  next(lines_iter)  # Skip header line.
+  for line in lines_iter:
+    if line.strip() == '-':
+      break
+    bond, resname, angle_degree, stddev_degree = line.split()
+    atom1, atom2, atom3 = bond.split('-')
+    if resname not in residue_bond_angles:
+      residue_bond_angles[resname] = []
+    residue_bond_angles[resname].append(
+        BondAngle(atom1, atom2, atom3,
+                  float(angle_degree) / 180. * np.pi,
+                  float(stddev_degree) / 180. * np.pi))
+  residue_bond_angles['UNK'] = []
+
+  def make_bond_key(atom1_name, atom2_name):
+    """Unique key to lookup bonds."""
+    return '-'.join(sorted([atom1_name, atom2_name]))
+
+  # Translate bond angles into distances ("virtual bonds").
+  residue_virtual_bonds = {}
+  for resname, bond_angles in residue_bond_angles.items():
+    # Create a fast lookup dict for bond lengths.
+    bond_cache = {}
+    for b in residue_bonds[resname]:
+      bond_cache[make_bond_key(b.atom1_name, b.atom2_name)] = b
+    residue_virtual_bonds[resname] = []
+    for ba in bond_angles:
+      bond1 = bond_cache[make_bond_key(ba.atom1_name, ba.atom2_name)]
+      bond2 = bond_cache[make_bond_key(ba.atom2_name, ba.atom3name)]
+
+      # Compute distance between atom1 and atom3 using the law of cosines
+      # c^2 = a^2 + b^2 - 2ab*cos(gamma).
+      gamma = ba.angle_rad
+      length = np.sqrt(bond1.length**2 + bond2.length**2
+                       - 2 * bond1.length * bond2.length * np.cos(gamma))
+
+      # Propagation of uncertainty assuming uncorrelated errors.
+      dl_outer = 0.5 / length
+      dl_dgamma = (2 * bond1.length * bond2.length * np.sin(gamma)) * dl_outer
+      dl_db1 = (2 * bond1.length - 2 * bond2.length * np.cos(gamma)) * dl_outer
+      dl_db2 = (2 * bond2.length - 2 * bond1.length * np.cos(gamma)) * dl_outer
+      stddev = np.sqrt((dl_dgamma * ba.stddev)**2 +
+                       (dl_db1 * bond1.stddev)**2 +
+                       (dl_db2 * bond2.stddev)**2)
+      residue_virtual_bonds[resname].append(
+          Bond(ba.atom1_name, ba.atom3name, length, stddev))
+
+  return (residue_bonds,
+          residue_virtual_bonds,
+          residue_bond_angles)
+
+
+# Between-residue bond lengths for general bonds (first element) and for Proline
+# (second element).
+between_res_bond_length_c_n = [1.329, 1.341]
+between_res_bond_length_stddev_c_n = [0.014, 0.016]
+
+# Between-residue cos_angles.
+between_res_cos_angles_c_n_ca = [-0.5203, 0.0353]  # degrees: 121.352 +- 2.315
+between_res_cos_angles_ca_c_n = [-0.4473, 0.0311]  # degrees: 116.568 +- 1.995
+
+# This mapping is used when we need to store atom data in a format that requires
+# fixed atom data size for every residue (e.g. a numpy array).
+atom_types = [
+    'N', 'CA', 'C', 'CB', 'O', 'CG', 'CG1', 'CG2', 'OG', 'OG1', 'SG', 'CD',
+    'CD1', 'CD2', 'ND1', 'ND2', 'OD1', 'OD2', 'SD', 'CE', 'CE1', 'CE2', 'CE3',
+    'NE', 'NE1', 'NE2', 'OE1', 'OE2', 'CH2', 'NH1', 'NH2', 'OH', 'CZ', 'CZ2',
+    'CZ3', 'NZ', 'OXT'
+]
+atom_order = {atom_type: i for i, atom_type in enumerate(atom_types)}
+atom_type_num = len(atom_types)  # := 37.
+
+# A compact atom encoding with 14 columns
+# pylint: disable=line-too-long
+# pylint: disable=bad-whitespace
+restype_name_to_atom14_names = {
+    'ALA': ['N', 'CA', 'C', 'O', 'CB', '',    '',    '',    '',    '',    '',    '',    '',    ''],
+    'ARG': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD',  'NE',  'CZ',  'NH1', 'NH2', '',    '',    ''],
+    'ASN': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'OD1', 'ND2', '',    '',    '',    '',    '',    ''],
+    'ASP': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'OD1', 'OD2', '',    '',    '',    '',    '',    ''],
+    'CYS': ['N', 'CA', 'C', 'O', 'CB', 'SG',  '',    '',    '',    '',    '',    '',    '',    ''],
+    'GLN': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD',  'OE1', 'NE2', '',    '',    '',    '',    ''],
+    'GLU': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD',  'OE1', 'OE2', '',    '',    '',    '',    ''],
+    'GLY': ['N', 'CA', 'C', 'O', '',   '',    '',    '',    '',    '',    '',    '',    '',    ''],
+    'HIS': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'ND1', 'CD2', 'CE1', 'NE2', '',    '',    '',    ''],
+    'ILE': ['N', 'CA', 'C', 'O', 'CB', 'CG1', 'CG2', 'CD1', '',    '',    '',    '',    '',    ''],
+    'LEU': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD1', 'CD2', '',    '',    '',    '',    '',    ''],
+    'LYS': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD',  'CE',  'NZ',  '',    '',    '',    '',    ''],
+    'MET': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'SD',  'CE',  '',    '',    '',    '',    '',    ''],
+    'PHE': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD1', 'CD2', 'CE1', 'CE2', 'CZ',  '',    '',    ''],
+    'PRO': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD',  '',    '',    '',    '',    '',    '',    ''],
+    'SER': ['N', 'CA', 'C', 'O', 'CB', 'OG',  '',    '',    '',    '',    '',    '',    '',    ''],
+    'THR': ['N', 'CA', 'C', 'O', 'CB', 'OG1', 'CG2', '',    '',    '',    '',    '',    '',    ''],
+    'TRP': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD1', 'CD2', 'NE1', 'CE2', 'CE3', 'CZ2', 'CZ3', 'CH2'],
+    'TYR': ['N', 'CA', 'C', 'O', 'CB', 'CG',  'CD1', 'CD2', 'CE1', 'CE2', 'CZ',  'OH',  '',    ''],
+    'VAL': ['N', 'CA', 'C', 'O', 'CB', 'CG1', 'CG2', '',    '',    '',    '',    '',    '',    ''],
+    'UNK': ['',  '',   '',  '',  '',   '',    '',    '',    '',    '',    '',    '',    '',    ''],
+
+}
+# pylint: enable=line-too-long
+# pylint: enable=bad-whitespace
+
+
+# This is the standard residue order when coding AA type as a number.
+# Reproduce it by taking 3-letter AA codes and sorting them alphabetically.
+restypes = [
+    'A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P',
+    'S', 'T', 'W', 'Y', 'V'
+]
+restype_order = {restype: i for i, restype in enumerate(restypes)}
+restype_num = len(restypes)  # := 20.
+unk_restype_index = restype_num  # Catch-all index for unknown restypes.
+
+restypes_with_x = restypes + ['X']
+restype_order_with_x = {restype: i for i, restype in enumerate(restypes_with_x)}
+
+
+def sequence_to_onehot(
+    sequence: str,
+    mapping: Mapping[str, int],
+    map_unknown_to_x: bool = False) -> np.ndarray:
+  """Maps the given sequence into a one-hot encoded matrix.
+
+  Args:
+    sequence: An amino acid sequence.
+    mapping: A dictionary mapping amino acids to integers.
+    map_unknown_to_x: If True, any amino acid that is not in the mapping will be
+      mapped to the unknown amino acid 'X'. If the mapping doesn't contain
+      amino acid 'X', an error will be thrown. If False, any amino acid not in
+      the mapping will throw an error.
+
+  Returns:
+    A numpy array of shape (seq_len, num_unique_aas) with one-hot encoding of
+    the sequence.
+
+  Raises:
+    ValueError: If the mapping doesn't contain values from 0 to
+      num_unique_aas - 1 without any gaps.
+  """
+  num_entries = max(mapping.values()) + 1
+
+  if sorted(set(mapping.values())) != list(range(num_entries)):
+    raise ValueError('The mapping must have values from 0 to num_unique_aas-1 '
+                     'without any gaps. Got: %s' % sorted(mapping.values()))
+
+  one_hot_arr = np.zeros((len(sequence), num_entries), dtype=np.int32)
+
+  for aa_index, aa_type in enumerate(sequence):
+    if map_unknown_to_x:
+      if aa_type.isalpha() and aa_type.isupper():
+        aa_id = mapping.get(aa_type, mapping['X'])
+      else:
+        raise ValueError(f'Invalid character in the sequence: {aa_type}')
+    else:
+      aa_id = mapping[aa_type]
+    one_hot_arr[aa_index, aa_id] = 1
+
+  return one_hot_arr
+
+
+restype_1to3 = {
+    'A': 'ALA',
+    'R': 'ARG',
+    'N': 'ASN',
+    'D': 'ASP',
+    'C': 'CYS',
+    'Q': 'GLN',
+    'E': 'GLU',
+    'G': 'GLY',
+    'H': 'HIS',
+    'I': 'ILE',
+    'L': 'LEU',
+    'K': 'LYS',
+    'M': 'MET',
+    'F': 'PHE',
+    'P': 'PRO',
+    'S': 'SER',
+    'T': 'THR',
+    'W': 'TRP',
+    'Y': 'TYR',
+    'V': 'VAL',
+}
+
+
+# NB: restype_3to1 differs from Bio.PDB.protein_letters_3to1 by being a simple
+# 1-to-1 mapping of 3 letter names to one letter names. The latter contains
+# many more, and less common, three letter names as keys and maps many of these
+# to the same one letter name (including 'X' and 'U' which we don't use here).
+restype_3to1 = {v: k for k, v in restype_1to3.items()}
+
+# Define a restype name for all unknown residues.
+unk_restype = 'UNK'
+
+resnames = [restype_1to3[r] for r in restypes] + [unk_restype]
+resname_to_idx = {resname: i for i, resname in enumerate(resnames)}
+
+
+# The mapping here uses hhblits convention, so that B is mapped to D, J and O
+# are mapped to X, U is mapped to C, and Z is mapped to E. Other than that the
+# remaining 20 amino acids are kept in alphabetical order.
+# There are 2 non-amino acid codes, X (representing any amino acid) and
+# "-" representing a missing amino acid in an alignment.  The id for these
+# codes is put at the end (20 and 21) so that they can easily be ignored if
+# desired.
+HHBLITS_AA_TO_ID = {
+    'A': 0,
+    'B': 2,
+    'C': 1,
+    'D': 2,
+    'E': 3,
+    'F': 4,
+    'G': 5,
+    'H': 6,
+    'I': 7,
+    'J': 20,
+    'K': 8,
+    'L': 9,
+    'M': 10,
+    'N': 11,
+    'O': 20,
+    'P': 12,
+    'Q': 13,
+    'R': 14,
+    'S': 15,
+    'T': 16,
+    'U': 1,
+    'V': 17,
+    'W': 18,
+    'X': 20,
+    'Y': 19,
+    'Z': 3,
+    '-': 21,
+}
+
+# Partial inversion of HHBLITS_AA_TO_ID.
+ID_TO_HHBLITS_AA = {
+    0: 'A',
+    1: 'C',  # Also U.
+    2: 'D',  # Also B.
+    3: 'E',  # Also Z.
+    4: 'F',
+    5: 'G',
+    6: 'H',
+    7: 'I',
+    8: 'K',
+    9: 'L',
+    10: 'M',
+    11: 'N',
+    12: 'P',
+    13: 'Q',
+    14: 'R',
+    15: 'S',
+    16: 'T',
+    17: 'V',
+    18: 'W',
+    19: 'Y',
+    20: 'X',  # Includes J and O.
+    21: '-',
+}
+
+restypes_with_x_and_gap = restypes + ['X', '-']
+MAP_HHBLITS_AATYPE_TO_OUR_AATYPE = tuple(
+    restypes_with_x_and_gap.index(ID_TO_HHBLITS_AA[i])
+    for i in range(len(restypes_with_x_and_gap)))
+
+
+def _make_standard_atom_mask() -> np.ndarray:
+  """Returns [num_res_types, num_atom_types] mask array."""
+  # +1 to account for unknown (all 0s).
+  mask = np.zeros([restype_num + 1, atom_type_num], dtype=np.int32)
+  for restype, restype_letter in enumerate(restypes):
+    restype_name = restype_1to3[restype_letter]
+    atom_names = residue_atoms[restype_name]
+    for atom_name in atom_names:
+      atom_type = atom_order[atom_name]
+      mask[restype, atom_type] = 1
+  return mask
+
+
+STANDARD_ATOM_MASK = _make_standard_atom_mask()
+
+
+# A one hot representation for the first and second atoms defining the axis
+# of rotation for each chi-angle in each residue.
+def chi_angle_atom(atom_index: int) -> np.ndarray:
+  """Define chi-angle rigid groups via one-hot representations."""
+  chi_angles_index = {}
+  one_hots = []
+
+  for k, v in chi_angles_atoms.items():
+    indices = [atom_types.index(s[atom_index]) for s in v]
+    indices.extend([-1]*(4-len(indices)))
+    chi_angles_index[k] = indices
+
+  for r in restypes:
+    res3 = restype_1to3[r]
+    one_hot = np.eye(atom_type_num)[chi_angles_index[res3]]
+    one_hots.append(one_hot)
+
+  one_hots.append(np.zeros([4, atom_type_num]))  # Add zeros for residue `X`.
+  one_hot = np.stack(one_hots, axis=0)
+  one_hot = np.transpose(one_hot, [0, 2, 1])
+
+  return one_hot
+
+chi_atom_1_one_hot = chi_angle_atom(1)
+chi_atom_2_one_hot = chi_angle_atom(2)
+
+# An array like chi_angles_atoms but using indices rather than names.
+chi_angles_atom_indices = [chi_angles_atoms[restype_1to3[r]] for r in restypes]
+chi_angles_atom_indices = tree.map_structure(
+    lambda atom_name: atom_order[atom_name], chi_angles_atom_indices)
+chi_angles_atom_indices = np.array([
+    chi_atoms + ([[0, 0, 0, 0]] * (4 - len(chi_atoms)))
+    for chi_atoms in chi_angles_atom_indices])
+
+# Mapping from (res_name, atom_name) pairs to the atom's chi group index
+# and atom index within that group.
+chi_groups_for_atom = collections.defaultdict(list)
+for res_name, chi_angle_atoms_for_res in chi_angles_atoms.items():
+  for chi_group_i, chi_group in enumerate(chi_angle_atoms_for_res):
+    for atom_i, atom in enumerate(chi_group):
+      chi_groups_for_atom[(res_name, atom)].append((chi_group_i, atom_i))
+chi_groups_for_atom = dict(chi_groups_for_atom)
+
+
+def _make_rigid_transformation_4x4(ex, ey, translation):
+  """Create a rigid 4x4 transformation matrix from two axes and transl."""
+  # Normalize ex.
+  ex_normalized = ex / np.linalg.norm(ex)
+
+  # make ey perpendicular to ex
+  ey_normalized = ey - np.dot(ey, ex_normalized) * ex_normalized
+  ey_normalized /= np.linalg.norm(ey_normalized)
+
+  # compute ez as cross product
+  eznorm = np.cross(ex_normalized, ey_normalized)
+  m = np.stack([ex_normalized, ey_normalized, eznorm, translation]).transpose()
+  m = np.concatenate([m, [[0., 0., 0., 1.]]], axis=0)
+  return m
+
+
+# create an array with (restype, atomtype) --> rigid_group_idx
+# and an array with (restype, atomtype, coord) for the atom positions
+# and compute affine transformation matrices (4,4) from one rigid group to the
+# previous group
+restype_atom37_to_rigid_group = np.zeros([21, 37], dtype=np.int)
+restype_atom37_mask = np.zeros([21, 37], dtype=np.float32)
+restype_atom37_rigid_group_positions = np.zeros([21, 37, 3], dtype=np.float32)
+restype_atom14_to_rigid_group = np.zeros([21, 14], dtype=np.int)
+restype_atom14_mask = np.zeros([21, 14], dtype=np.float32)
+restype_atom14_rigid_group_positions = np.zeros([21, 14, 3], dtype=np.float32)
+restype_rigid_group_default_frame = np.zeros([21, 8, 4, 4], dtype=np.float32)
+
+
+def _make_rigid_group_constants():
+  """Fill the arrays above."""
+  for restype, restype_letter in enumerate(restypes):
+    resname = restype_1to3[restype_letter]
+    for atomname, group_idx, atom_position in rigid_group_atom_positions[
+        resname]:
+      atomtype = atom_order[atomname]
+      restype_atom37_to_rigid_group[restype, atomtype] = group_idx
+      restype_atom37_mask[restype, atomtype] = 1
+      restype_atom37_rigid_group_positions[restype, atomtype, :] = atom_position
+
+      atom14idx = restype_name_to_atom14_names[resname].index(atomname)
+      restype_atom14_to_rigid_group[restype, atom14idx] = group_idx
+      restype_atom14_mask[restype, atom14idx] = 1
+      restype_atom14_rigid_group_positions[restype,
+                                           atom14idx, :] = atom_position
+
+  for restype, restype_letter in enumerate(restypes):
+    resname = restype_1to3[restype_letter]
+    atom_positions = {name: np.array(pos) for name, _, pos
+                      in rigid_group_atom_positions[resname]}
+
+    # backbone to backbone is the identity transform
+    restype_rigid_group_default_frame[restype, 0, :, :] = np.eye(4)
+
+    # pre-omega-frame to backbone (currently dummy identity matrix)
+    restype_rigid_group_default_frame[restype, 1, :, :] = np.eye(4)
+
+    # phi-frame to backbone
+    mat = _make_rigid_transformation_4x4(
+        ex=atom_positions['N'] - atom_positions['CA'],
+        ey=np.array([1., 0., 0.]),
+        translation=atom_positions['N'])
+    restype_rigid_group_default_frame[restype, 2, :, :] = mat
+
+    # psi-frame to backbone
+    mat = _make_rigid_transformation_4x4(
+        ex=atom_positions['C'] - atom_positions['CA'],
+        ey=atom_positions['CA'] - atom_positions['N'],
+        translation=atom_positions['C'])
+    restype_rigid_group_default_frame[restype, 3, :, :] = mat
+
+    # chi1-frame to backbone
+    if chi_angles_mask[restype][0]:
+      base_atom_names = chi_angles_atoms[resname][0]
+      base_atom_positions = [atom_positions[name] for name in base_atom_names]
+      mat = _make_rigid_transformation_4x4(
+          ex=base_atom_positions[2] - base_atom_positions[1],
+          ey=base_atom_positions[0] - base_atom_positions[1],
+          translation=base_atom_positions[2])
+      restype_rigid_group_default_frame[restype, 4, :, :] = mat
+
+    # chi2-frame to chi1-frame
+    # chi3-frame to chi2-frame
+    # chi4-frame to chi3-frame
+    # luckily all rotation axes for the next frame start at (0,0,0) of the
+    # previous frame
+    for chi_idx in range(1, 4):
+      if chi_angles_mask[restype][chi_idx]:
+        axis_end_atom_name = chi_angles_atoms[resname][chi_idx][2]
+        axis_end_atom_position = atom_positions[axis_end_atom_name]
+        mat = _make_rigid_transformation_4x4(
+            ex=axis_end_atom_position,
+            ey=np.array([-1., 0., 0.]),
+            translation=axis_end_atom_position)
+        restype_rigid_group_default_frame[restype, 4 + chi_idx, :, :] = mat
+
+
+_make_rigid_group_constants()
+
+
+def make_atom14_dists_bounds(overlap_tolerance=1.5,
+                             bond_length_tolerance_factor=15):
+  """compute upper and lower bounds for bonds to assess violations."""
+  restype_atom14_bond_lower_bound = np.zeros([21, 14, 14], np.float32)
+  restype_atom14_bond_upper_bound = np.zeros([21, 14, 14], np.float32)
+  restype_atom14_bond_stddev = np.zeros([21, 14, 14], np.float32)
+  residue_bonds, residue_virtual_bonds, _ = load_stereo_chemical_props()
+  for restype, restype_letter in enumerate(restypes):
+    resname = restype_1to3[restype_letter]
+    atom_list = restype_name_to_atom14_names[resname]
+
+    # create lower and upper bounds for clashes
+    for atom1_idx, atom1_name in enumerate(atom_list):
+      if not atom1_name:
+        continue
+      atom1_radius = van_der_waals_radius[atom1_name[0]]
+      for atom2_idx, atom2_name in enumerate(atom_list):
+        if (not atom2_name) or atom1_idx == atom2_idx:
+          continue
+        atom2_radius = van_der_waals_radius[atom2_name[0]]
+        lower = atom1_radius + atom2_radius - overlap_tolerance
+        upper = 1e10
+        restype_atom14_bond_lower_bound[restype, atom1_idx, atom2_idx] = lower
+        restype_atom14_bond_lower_bound[restype, atom2_idx, atom1_idx] = lower
+        restype_atom14_bond_upper_bound[restype, atom1_idx, atom2_idx] = upper
+        restype_atom14_bond_upper_bound[restype, atom2_idx, atom1_idx] = upper
+
+    # overwrite lower and upper bounds for bonds and angles
+    for b in residue_bonds[resname] + residue_virtual_bonds[resname]:
+      atom1_idx = atom_list.index(b.atom1_name)
+      atom2_idx = atom_list.index(b.atom2_name)
+      lower = b.length - bond_length_tolerance_factor * b.stddev
+      upper = b.length + bond_length_tolerance_factor * b.stddev
+      restype_atom14_bond_lower_bound[restype, atom1_idx, atom2_idx] = lower
+      restype_atom14_bond_lower_bound[restype, atom2_idx, atom1_idx] = lower
+      restype_atom14_bond_upper_bound[restype, atom1_idx, atom2_idx] = upper
+      restype_atom14_bond_upper_bound[restype, atom2_idx, atom1_idx] = upper
+      restype_atom14_bond_stddev[restype, atom1_idx, atom2_idx] = b.stddev
+      restype_atom14_bond_stddev[restype, atom2_idx, atom1_idx] = b.stddev
+  return {'lower_bound': restype_atom14_bond_lower_bound,  # shape (21,14,14)
+          'upper_bound': restype_atom14_bond_upper_bound,  # shape (21,14,14)
+          'stddev': restype_atom14_bond_stddev,  # shape (21,14,14)
+         }
diff --git a/alphafold/alphafold/common/residue_constants_test.py b/alphafold/alphafold/common/residue_constants_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..3a7981e0d1bb59b58274194b69e23afe9da89bf4
--- /dev/null
+++ b/alphafold/alphafold/common/residue_constants_test.py
@@ -0,0 +1,190 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Test that residue_constants generates correct values."""
+
+from absl.testing import absltest
+from absl.testing import parameterized
+from alphafold.common import residue_constants
+import numpy as np
+
+
+class ResidueConstantsTest(parameterized.TestCase):
+
+  @parameterized.parameters(
+      ('ALA', 0),
+      ('CYS', 1),
+      ('HIS', 2),
+      ('MET', 3),
+      ('LYS', 4),
+      ('ARG', 4),
+  )
+  def testChiAnglesAtoms(self, residue_name, chi_num):
+    chi_angles_atoms = residue_constants.chi_angles_atoms[residue_name]
+    self.assertLen(chi_angles_atoms, chi_num)
+    for chi_angle_atoms in chi_angles_atoms:
+      self.assertLen(chi_angle_atoms, 4)
+
+  def testChiGroupsForAtom(self):
+    for k, chi_groups in residue_constants.chi_groups_for_atom.items():
+      res_name, atom_name = k
+      for chi_group_i, atom_i in chi_groups:
+        self.assertEqual(
+            atom_name,
+            residue_constants.chi_angles_atoms[res_name][chi_group_i][atom_i])
+
+  @parameterized.parameters(
+      ('ALA', 5), ('ARG', 11), ('ASN', 8), ('ASP', 8), ('CYS', 6), ('GLN', 9),
+      ('GLU', 9), ('GLY', 4), ('HIS', 10), ('ILE', 8), ('LEU', 8), ('LYS', 9),
+      ('MET', 8), ('PHE', 11), ('PRO', 7), ('SER', 6), ('THR', 7), ('TRP', 14),
+      ('TYR', 12), ('VAL', 7)
+  )
+  def testResidueAtoms(self, atom_name, num_residue_atoms):
+    residue_atoms = residue_constants.residue_atoms[atom_name]
+    self.assertLen(residue_atoms, num_residue_atoms)
+
+  def testStandardAtomMask(self):
+    with self.subTest('Check shape'):
+      self.assertEqual(residue_constants.STANDARD_ATOM_MASK.shape, (21, 37,))
+
+    with self.subTest('Check values'):
+      str_to_row = lambda s: [c == '1' for c in s]  # More clear/concise.
+      np.testing.assert_array_equal(
+          residue_constants.STANDARD_ATOM_MASK,
+          np.array([
+              # NB This was defined by c+p but looks sane.
+              str_to_row('11111                                '),  # ALA
+              str_to_row('111111     1           1     11 1    '),  # ARG
+              str_to_row('111111         11                    '),  # ASP
+              str_to_row('111111          11                   '),  # ASN
+              str_to_row('11111     1                          '),  # CYS
+              str_to_row('111111     1             11          '),  # GLU
+              str_to_row('111111     1              11         '),  # GLN
+              str_to_row('111 1                                '),  # GLY
+              str_to_row('111111       11     1    1           '),  # HIS
+              str_to_row('11111 11    1                        '),  # ILE
+              str_to_row('111111      11                       '),  # LEU
+              str_to_row('111111     1       1               1 '),  # LYS
+              str_to_row('111111            11                 '),  # MET
+              str_to_row('111111      11      11          1    '),  # PHE
+              str_to_row('111111     1                         '),  # PRO
+              str_to_row('11111   1                            '),  # SER
+              str_to_row('11111  1 1                           '),  # THR
+              str_to_row('111111      11       11 1   1    11  '),  # TRP
+              str_to_row('111111      11      11         11    '),  # TYR
+              str_to_row('11111 11                             '),  # VAL
+              str_to_row('                                     '),  # UNK
+          ]))
+
+    with self.subTest('Check row totals'):
+      # Check each row has the right number of atoms.
+      for row, restype in enumerate(residue_constants.restypes):  # A, R, ...
+        long_restype = residue_constants.restype_1to3[restype]  # ALA, ARG, ...
+        atoms_names = residue_constants.residue_atoms[
+            long_restype]  # ['C', 'CA', 'CB', 'N', 'O'], ...
+        self.assertLen(atoms_names,
+                       residue_constants.STANDARD_ATOM_MASK[row, :].sum(),
+                       long_restype)
+
+  def testAtomTypes(self):
+    self.assertEqual(residue_constants.atom_type_num, 37)
+
+    self.assertEqual(residue_constants.atom_types[0], 'N')
+    self.assertEqual(residue_constants.atom_types[1], 'CA')
+    self.assertEqual(residue_constants.atom_types[2], 'C')
+    self.assertEqual(residue_constants.atom_types[3], 'CB')
+    self.assertEqual(residue_constants.atom_types[4], 'O')
+
+    self.assertEqual(residue_constants.atom_order['N'], 0)
+    self.assertEqual(residue_constants.atom_order['CA'], 1)
+    self.assertEqual(residue_constants.atom_order['C'], 2)
+    self.assertEqual(residue_constants.atom_order['CB'], 3)
+    self.assertEqual(residue_constants.atom_order['O'], 4)
+    self.assertEqual(residue_constants.atom_type_num, 37)
+
+  def testRestypes(self):
+    three_letter_restypes = [
+        residue_constants.restype_1to3[r] for r  in residue_constants.restypes]
+    for restype, exp_restype in zip(
+        three_letter_restypes, sorted(residue_constants.restype_1to3.values())):
+      self.assertEqual(restype, exp_restype)
+    self.assertEqual(residue_constants.restype_num, 20)
+
+  def testSequenceToOneHotHHBlits(self):
+    one_hot = residue_constants.sequence_to_onehot(
+        'ABCDEFGHIJKLMNOPQRSTUVWXYZ-', residue_constants.HHBLITS_AA_TO_ID)
+    exp_one_hot = np.array(
+        [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
+         [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
+         [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]])
+    np.testing.assert_array_equal(one_hot, exp_one_hot)
+
+  def testSequenceToOneHotStandard(self):
+    one_hot = residue_constants.sequence_to_onehot(
+        'ARNDCQEGHILKMFPSTWYV', residue_constants.restype_order)
+    np.testing.assert_array_equal(one_hot, np.eye(20))
+
+  def testSequenceToOneHotUnknownMapping(self):
+    seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+    expected_out = np.zeros([26, 21])
+    for row, position in enumerate(
+        [0, 20, 4, 3, 6, 13, 7, 8, 9, 20, 11, 10, 12, 2, 20, 14, 5, 1, 15, 16,
+         20, 19, 17, 20, 18, 20]):
+      expected_out[row, position] = 1
+    aa_types = residue_constants.sequence_to_onehot(
+        sequence=seq,
+        mapping=residue_constants.restype_order_with_x,
+        map_unknown_to_x=True)
+    self.assertTrue((aa_types == expected_out).all())
+
+  @parameterized.named_parameters(
+      ('lowercase', 'aaa'),  # Insertions in A3M.
+      ('gaps', '---'),  # Gaps in A3M.
+      ('dots', '...'),  # Gaps in A3M.
+      ('metadata', '>TEST'),  # FASTA metadata line.
+  )
+  def testSequenceToOneHotUnknownMappingError(self, seq):
+    with self.assertRaises(ValueError):
+      residue_constants.sequence_to_onehot(
+          sequence=seq,
+          mapping=residue_constants.restype_order_with_x,
+          map_unknown_to_x=True)
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/common/testdata/2rbg.pdb b/alphafold/alphafold/common/testdata/2rbg.pdb
new file mode 100755
index 0000000000000000000000000000000000000000..f480d512dc2991f7168d99cb78407db314042a54
--- /dev/null
+++ b/alphafold/alphafold/common/testdata/2rbg.pdb
@@ -0,0 +1,2784 @@
+HEADER    STRUCTURAL GENOMICS, UNKNOWN FUNCTION   19-SEP-07   2RBG              
+TITLE     CRYSTAL STRUCTURE OF HYPOTHETICAL PROTEIN(ST0493) FROM                
+TITLE    2 SULFOLOBUS TOKODAII                                                  
+COMPND    MOL_ID: 1;                                                            
+COMPND   2 MOLECULE: PUTATIVE UNCHARACTERIZED PROTEIN ST0493;                   
+COMPND   3 CHAIN: A, B;                                                         
+COMPND   4 ENGINEERED: YES                                                      
+SOURCE    MOL_ID: 1;                                                            
+SOURCE   2 ORGANISM_SCIENTIFIC: SULFOLOBUS TOKODAII;                            
+SOURCE   3 ORGANISM_TAXID: 111955;                                              
+SOURCE   4 STRAIN: STRAIN 7;                                                    
+SOURCE   5 EXPRESSION_SYSTEM: ESCHERICHIA COLI;                                 
+SOURCE   6 EXPRESSION_SYSTEM_TAXID: 562;                                        
+SOURCE   7 EXPRESSION_SYSTEM_STRAIN: ROSETTA834(DE3);                           
+SOURCE   8 EXPRESSION_SYSTEM_VECTOR_TYPE: PLASMID;                              
+SOURCE   9 EXPRESSION_SYSTEM_PLASMID: PET-21A                                   
+KEYWDS    HYPOTHETICAL PROTEIN, STRUCTURAL GENOMICS, UNKNOWN FUNCTION,          
+KEYWDS   2 NPPSFA, NATIONAL PROJECT ON PROTEIN STRUCTURAL AND                   
+KEYWDS   3 FUNCTIONAL ANALYSES, RIKEN STRUCTURAL GENOMICS/PROTEOMICS            
+KEYWDS   4 INITIATIVE, RSGI                                                     
+EXPDTA    X-RAY DIFFRACTION                                                     
+AUTHOR    J.JEYAKANTHAN,S.KURAMITSU,S.YOKOYAMA,RIKEN STRUCTURAL                 
+AUTHOR   2 GENOMICS/PROTEOMICS INITIATIVE (RSGI)                                
+REVDAT   2   24-FEB-09 2RBG    1       VERSN                                    
+REVDAT   1   30-SEP-08 2RBG    0                                                
+JRNL        AUTH   J.JEYAKANTHAN,S.KURAMITSU,S.YOKOYAMA                         
+JRNL        TITL   CRYSTAL STRUCTURE OF HYPOTHETICAL PROTEIN(ST0493)            
+JRNL        TITL 2 FROM SULFOLOBUS TOKODAII                                     
+JRNL        REF    TO BE PUBLISHED                                              
+JRNL        REFN                                                                
+REMARK   1                                                                      
+REMARK   2                                                                      
+REMARK   2 RESOLUTION.    1.75 ANGSTROMS.                                       
+REMARK   3                                                                      
+REMARK   3 REFINEMENT.                                                          
+REMARK   3   PROGRAM     : CNS 1.1                                              
+REMARK   3   AUTHORS     : BRUNGER,ADAMS,CLORE,DELANO,GROS,GROSSE-              
+REMARK   3               : KUNSTLEVE,JIANG,KUSZEWSKI,NILGES, PANNU,             
+REMARK   3               : READ,RICE,SIMONSON,WARREN                            
+REMARK   3                                                                      
+REMARK   3  REFINEMENT TARGET : ENGH & HUBER                                    
+REMARK   3                                                                      
+REMARK   3  DATA USED IN REFINEMENT.                                            
+REMARK   3   RESOLUTION RANGE HIGH (ANGSTROMS) : 1.75                           
+REMARK   3   RESOLUTION RANGE LOW  (ANGSTROMS) : 33.49                          
+REMARK   3   DATA CUTOFF            (SIGMA(F)) : 0.000                          
+REMARK   3   DATA CUTOFF HIGH         (ABS(F)) : 2067291.840                    
+REMARK   3   DATA CUTOFF LOW          (ABS(F)) : 0.0000                         
+REMARK   3   COMPLETENESS (WORKING+TEST)   (%) : 99.3                           
+REMARK   3   NUMBER OF REFLECTIONS             : 25029                          
+REMARK   3                                                                      
+REMARK   3  FIT TO DATA USED IN REFINEMENT.                                     
+REMARK   3   CROSS-VALIDATION METHOD          : THROUGHOUT                      
+REMARK   3   FREE R VALUE TEST SET SELECTION  : RANDOM                          
+REMARK   3   R VALUE            (WORKING SET) : 0.173                           
+REMARK   3   FREE R VALUE                     : 0.196                           
+REMARK   3   FREE R VALUE TEST SET SIZE   (%) : 4.900                           
+REMARK   3   FREE R VALUE TEST SET COUNT      : 1216                            
+REMARK   3   ESTIMATED ERROR OF FREE R VALUE  : 0.006                           
+REMARK   3                                                                      
+REMARK   3  FIT IN THE HIGHEST RESOLUTION BIN.                                  
+REMARK   3   TOTAL NUMBER OF BINS USED           : 8                            
+REMARK   3   BIN RESOLUTION RANGE HIGH       (A) : 1.75                         
+REMARK   3   BIN RESOLUTION RANGE LOW        (A) : 1.83                         
+REMARK   3   BIN COMPLETENESS (WORKING+TEST) (%) : 96.80                        
+REMARK   3   REFLECTIONS IN BIN    (WORKING SET) : 2906                         
+REMARK   3   BIN R VALUE           (WORKING SET) : 0.1980                       
+REMARK   3   BIN FREE R VALUE                    : 0.2420                       
+REMARK   3   BIN FREE R VALUE TEST SET SIZE  (%) : 5.10                         
+REMARK   3   BIN FREE R VALUE TEST SET COUNT     : 156                          
+REMARK   3   ESTIMATED ERROR OF BIN FREE R VALUE : 0.019                        
+REMARK   3                                                                      
+REMARK   3  NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT.                    
+REMARK   3   PROTEIN ATOMS            : 2060                                    
+REMARK   3   NUCLEIC ACID ATOMS       : 0                                       
+REMARK   3   HETEROGEN ATOMS          : 5                                       
+REMARK   3   SOLVENT ATOMS            : 316                                     
+REMARK   3                                                                      
+REMARK   3  B VALUES.                                                           
+REMARK   3   FROM WILSON PLOT           (A**2) : 13.30                          
+REMARK   3   MEAN B VALUE      (OVERALL, A**2) : 16.90                          
+REMARK   3   OVERALL ANISOTROPIC B VALUE.                                       
+REMARK   3    B11 (A**2) : 2.81000                                              
+REMARK   3    B22 (A**2) : -1.00000                                             
+REMARK   3    B33 (A**2) : -1.81000                                             
+REMARK   3    B12 (A**2) : 0.00000                                              
+REMARK   3    B13 (A**2) : -1.31000                                             
+REMARK   3    B23 (A**2) : 0.00000                                              
+REMARK   3                                                                      
+REMARK   3  ESTIMATED COORDINATE ERROR.                                         
+REMARK   3   ESD FROM LUZZATI PLOT        (A) : 0.16                            
+REMARK   3   ESD FROM SIGMAA              (A) : 0.06                            
+REMARK   3   LOW RESOLUTION CUTOFF        (A) : 5.00                            
+REMARK   3                                                                      
+REMARK   3  CROSS-VALIDATED ESTIMATED COORDINATE ERROR.                         
+REMARK   3   ESD FROM C-V LUZZATI PLOT    (A) : 0.19                            
+REMARK   3   ESD FROM C-V SIGMAA          (A) : 0.14                            
+REMARK   3                                                                      
+REMARK   3  RMS DEVIATIONS FROM IDEAL VALUES.                                   
+REMARK   3   BOND LENGTHS                 (A) : 0.005                           
+REMARK   3   BOND ANGLES            (DEGREES) : 1.10                            
+REMARK   3   DIHEDRAL ANGLES        (DEGREES) : 22.00                           
+REMARK   3   IMPROPER ANGLES        (DEGREES) : 0.70                            
+REMARK   3                                                                      
+REMARK   3  ISOTROPIC THERMAL MODEL : RESTRAINED                                
+REMARK   3                                                                      
+REMARK   3  ISOTROPIC THERMAL FACTOR RESTRAINTS.    RMS    SIGMA                
+REMARK   3   MAIN-CHAIN BOND              (A**2) : NULL  ; NULL                 
+REMARK   3   MAIN-CHAIN ANGLE             (A**2) : NULL  ; NULL                 
+REMARK   3   SIDE-CHAIN BOND              (A**2) : NULL  ; NULL                 
+REMARK   3   SIDE-CHAIN ANGLE             (A**2) : NULL  ; NULL                 
+REMARK   3                                                                      
+REMARK   3  BULK SOLVENT MODELING.                                              
+REMARK   3   METHOD USED : FLAT MODEL                                           
+REMARK   3   KSOL        : 0.37                                                 
+REMARK   3   BSOL        : 51.20                                                
+REMARK   3                                                                      
+REMARK   3  NCS MODEL : NULL                                                    
+REMARK   3                                                                      
+REMARK   3  NCS RESTRAINTS.                         RMS   SIGMA/WEIGHT          
+REMARK   3   GROUP  1  POSITIONAL            (A) : NULL  ; NULL                 
+REMARK   3   GROUP  1  B-FACTOR           (A**2) : NULL  ; NULL                 
+REMARK   3                                                                      
+REMARK   3  PARAMETER FILE  1  : PROTEIN_REP.PARAM                              
+REMARK   3  PARAMETER FILE  2  : LIGAND.PARAM                                   
+REMARK   3  PARAMETER FILE  3  : ION.PARAM                                      
+REMARK   3  PARAMETER FILE  5  : WATER_REP.PARAM                                
+REMARK   3  PARAMETER FILE  6  : NULL                                           
+REMARK   3  TOPOLOGY FILE  1   : PROTEIN.TOP                                    
+REMARK   3  TOPOLOGY FILE  2   : LIGAND.TOP                                     
+REMARK   3  TOPOLOGY FILE  3   : ION.TOP                                        
+REMARK   3  TOPOLOGY FILE  5   : WATER_PROTIN.TOP                               
+REMARK   3  TOPOLOGY FILE  6   : NULL                                           
+REMARK   3                                                                      
+REMARK   3  OTHER REFINEMENT REMARKS: NULL                                      
+REMARK   4                                                                      
+REMARK   4 2RBG COMPLIES WITH FORMAT V. 3.15, 01-DEC-08                         
+REMARK 100                                                                      
+REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY PDBJ ON 27-SEP-07.                  
+REMARK 100 THE RCSB ID CODE IS RCSB044658.                                      
+REMARK 200                                                                      
+REMARK 200 EXPERIMENTAL DETAILS                                                 
+REMARK 200  EXPERIMENT TYPE                : X-RAY DIFFRACTION                  
+REMARK 200  DATE OF DATA COLLECTION        : 16-JUN-07                          
+REMARK 200  TEMPERATURE           (KELVIN) : 100                                
+REMARK 200  PH                             : 7.5                                
+REMARK 200  NUMBER OF CRYSTALS USED        : 1                                  
+REMARK 200                                                                      
+REMARK 200  SYNCHROTRON              (Y/N) : Y                                  
+REMARK 200  RADIATION SOURCE               : SPRING-8                           
+REMARK 200  BEAMLINE                       : BL26B2                             
+REMARK 200  X-RAY GENERATOR MODEL          : NULL                               
+REMARK 200  MONOCHROMATIC OR LAUE    (M/L) : M                                  
+REMARK 200  WAVELENGTH OR RANGE        (A) : 0.97899, 0.9, 0.97931              
+REMARK 200  MONOCHROMATOR                  : SI-1 1 1 DOUBLE CRYSTAL            
+REMARK 200                                   MONOCHROMATOR                      
+REMARK 200  OPTICS                         : RH COATED BENT-CYRINDRICAL         
+REMARK 200                                   MIRROR                             
+REMARK 200                                                                      
+REMARK 200  DETECTOR TYPE                  : CCD                                
+REMARK 200  DETECTOR MANUFACTURER          : MARMOSAIC 225 MM CCD               
+REMARK 200  INTENSITY-INTEGRATION SOFTWARE : HKL-2000                           
+REMARK 200  DATA SCALING SOFTWARE          : SCALEPACK                          
+REMARK 200                                                                      
+REMARK 200  NUMBER OF UNIQUE REFLECTIONS   : 25105                              
+REMARK 200  RESOLUTION RANGE HIGH      (A) : 1.750                              
+REMARK 200  RESOLUTION RANGE LOW       (A) : 50.000                             
+REMARK 200  REJECTION CRITERIA  (SIGMA(I)) : NULL                               
+REMARK 200                                                                      
+REMARK 200 OVERALL.                                                             
+REMARK 200  COMPLETENESS FOR RANGE     (%) : 99.6                               
+REMARK 200  DATA REDUNDANCY                : NULL                               
+REMARK 200  R MERGE                    (I) : 0.05900                            
+REMARK 200  R SYM                      (I) : 0.06300                            
+REMARK 200  <I/SIGMA(I)> FOR THE DATA SET  : NULL                               
+REMARK 200                                                                      
+REMARK 200 IN THE HIGHEST RESOLUTION SHELL.                                     
+REMARK 200  HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : 1.75                     
+REMARK 200  HIGHEST RESOLUTION SHELL, RANGE LOW  (A) : 1.81                     
+REMARK 200  COMPLETENESS FOR SHELL     (%) : 96.9                               
+REMARK 200  DATA REDUNDANCY IN SHELL       : NULL                               
+REMARK 200  R MERGE FOR SHELL          (I) : 0.14300                            
+REMARK 200  R SYM FOR SHELL            (I) : 0.13300                            
+REMARK 200  <I/SIGMA(I)> FOR SHELL         : NULL                               
+REMARK 200                                                                      
+REMARK 200 DIFFRACTION PROTOCOL: MAD                                            
+REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MAD                          
+REMARK 200 SOFTWARE USED: SOLVE                                                 
+REMARK 200 STARTING MODEL: NULL                                                 
+REMARK 200                                                                      
+REMARK 200 REMARK: NULL                                                         
+REMARK 280                                                                      
+REMARK 280 CRYSTAL                                                              
+REMARK 280 SOLVENT CONTENT, VS   (%): 41.69                                     
+REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.11                     
+REMARK 280                                                                      
+REMARK 280 CRYSTALLIZATION CONDITIONS: 30% PEG 4K, 0.2M AMMONIUM SULFATE,       
+REMARK 280  PH 7.5, MICROBATCH, TEMPERATURE 293K                                
+REMARK 290                                                                      
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY                                            
+REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 1 21 1                         
+REMARK 290                                                                      
+REMARK 290      SYMOP   SYMMETRY                                                
+REMARK 290     NNNMMM   OPERATOR                                                
+REMARK 290       1555   X,Y,Z                                                   
+REMARK 290       2555   -X,Y+1/2,-Z                                             
+REMARK 290                                                                      
+REMARK 290     WHERE NNN -> OPERATOR NUMBER                                     
+REMARK 290           MMM -> TRANSLATION VECTOR                                  
+REMARK 290                                                                      
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS                            
+REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM             
+REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY                
+REMARK 290 RELATED MOLECULES.                                                   
+REMARK 290   SMTRY1   1  1.000000  0.000000  0.000000        0.00000            
+REMARK 290   SMTRY2   1  0.000000  1.000000  0.000000        0.00000            
+REMARK 290   SMTRY3   1  0.000000  0.000000  1.000000        0.00000            
+REMARK 290   SMTRY1   2 -1.000000  0.000000  0.000000        0.00000            
+REMARK 290   SMTRY2   2  0.000000  1.000000  0.000000       32.59200            
+REMARK 290   SMTRY3   2  0.000000  0.000000 -1.000000        0.00000            
+REMARK 290                                                                      
+REMARK 290 REMARK: NULL                                                         
+REMARK 300                                                                      
+REMARK 300 BIOMOLECULE: 1, 2, 3                                                 
+REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM                
+REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN                  
+REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON               
+REMARK 300 BURIED SURFACE AREA.                                                 
+REMARK 350                                                                      
+REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN           
+REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE                
+REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS          
+REMARK 350 GIVEN BELOW.  BOTH NON-CRYSTALLOGRAPHIC AND                          
+REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.                               
+REMARK 350                                                                      
+REMARK 350 BIOMOLECULE: 1                                                       
+REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DIMERIC                           
+REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B                                  
+REMARK 350   BIOMT1   1  1.000000  0.000000  0.000000        0.00000            
+REMARK 350   BIOMT2   1  0.000000  1.000000  0.000000        0.00000            
+REMARK 350   BIOMT3   1  0.000000  0.000000  1.000000        0.00000            
+REMARK 350                                                                      
+REMARK 350 BIOMOLECULE: 2                                                       
+REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: MONOMERIC                  
+REMARK 350 SOFTWARE USED: PISA                                                  
+REMARK 350 APPLY THE FOLLOWING TO CHAINS: A                                     
+REMARK 350   BIOMT1   1  1.000000  0.000000  0.000000        0.00000            
+REMARK 350   BIOMT2   1  0.000000  1.000000  0.000000        0.00000            
+REMARK 350   BIOMT3   1  0.000000  0.000000  1.000000        0.00000            
+REMARK 350                                                                      
+REMARK 350 BIOMOLECULE: 3                                                       
+REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: MONOMERIC                  
+REMARK 350 SOFTWARE USED: PISA                                                  
+REMARK 350 APPLY THE FOLLOWING TO CHAINS: B                                     
+REMARK 350   BIOMT1   1  1.000000  0.000000  0.000000        0.00000            
+REMARK 350   BIOMT2   1  0.000000  1.000000  0.000000        0.00000            
+REMARK 350   BIOMT3   1  0.000000  0.000000  1.000000        0.00000            
+REMARK 465                                                                      
+REMARK 465 MISSING RESIDUES                                                     
+REMARK 465 THE FOLLOWING RESIDUES WERE NOT LOCATED IN THE                       
+REMARK 465 EXPERIMENT. (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN               
+REMARK 465 IDENTIFIER; SSSEQ=SEQUENCE NUMBER; I=INSERTION CODE.)                
+REMARK 465                                                                      
+REMARK 465   M RES C SSSEQI                                                     
+REMARK 465     MSE A     1                                                      
+REMARK 465     PRO A     2                                                      
+REMARK 465     MSE B     1                                                      
+REMARK 465     PRO B     2                                                      
+REMARK 500                                                                      
+REMARK 500 GEOMETRY AND STEREOCHEMISTRY                                         
+REMARK 500 SUBTOPIC: TORSION ANGLES                                             
+REMARK 500                                                                      
+REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS:            
+REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER;               
+REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE).                             
+REMARK 500                                                                      
+REMARK 500 STANDARD TABLE:                                                      
+REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2)                    
+REMARK 500                                                                      
+REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI-           
+REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400            
+REMARK 500                                                                      
+REMARK 500  M RES CSSEQI        PSI       PHI                                   
+REMARK 500    PHE A 121       76.88   -102.11                                   
+REMARK 500    CYS A 122      -73.41   -165.90                                   
+REMARK 500    CYS B 122      -70.28   -161.68                                   
+REMARK 500                                                                      
+REMARK 500 REMARK: NULL                                                         
+REMARK 800                                                                      
+REMARK 800 SITE                                                                 
+REMARK 800 SITE_IDENTIFIER: AC1                                                 
+REMARK 800 EVIDENCE_CODE: SOFTWARE                                              
+REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE SO4 B 127                 
+REMARK 900                                                                      
+REMARK 900 RELATED ENTRIES                                                      
+REMARK 900 RELATED ID: STO001000493.1   RELATED DB: TARGETDB                    
+DBREF  2RBG A    1   126  UNP    Q975B5   Q975B5_SULTO     1    126             
+DBREF  2RBG B    1   126  UNP    Q975B5   Q975B5_SULTO     1    126             
+SEQRES   1 A  126  MSE PRO TYR LYS ASN ILE LEU THR LEU ILE SER VAL ASN          
+SEQRES   2 A  126  ASN ASP ASN PHE GLU ASN TYR PHE ARG LYS ILE PHE LEU          
+SEQRES   3 A  126  ASP VAL ARG SER SER GLY SER LYS LYS THR THR ILE ASN          
+SEQRES   4 A  126  VAL PHE THR GLU ILE GLN TYR GLN GLU LEU VAL THR LEU          
+SEQRES   5 A  126  ILE ARG GLU ALA LEU LEU GLU ASN ILE ASP ILE GLY TYR          
+SEQRES   6 A  126  GLU LEU PHE LEU TRP LYS LYS ASN GLU VAL ASP ILE PHE          
+SEQRES   7 A  126  LEU LYS ASN LEU GLU LYS SER GLU VAL ASP GLY LEU LEU          
+SEQRES   8 A  126  VAL TYR CYS ASP ASP GLU ASN LYS VAL PHE MSE SER LYS          
+SEQRES   9 A  126  ILE VAL ASP ASN LEU PRO THR ALA ILE LYS ARG ASN LEU          
+SEQRES  10 A  126  ILE LYS ASP PHE CYS ARG LYS LEU SER                          
+SEQRES   1 B  126  MSE PRO TYR LYS ASN ILE LEU THR LEU ILE SER VAL ASN          
+SEQRES   2 B  126  ASN ASP ASN PHE GLU ASN TYR PHE ARG LYS ILE PHE LEU          
+SEQRES   3 B  126  ASP VAL ARG SER SER GLY SER LYS LYS THR THR ILE ASN          
+SEQRES   4 B  126  VAL PHE THR GLU ILE GLN TYR GLN GLU LEU VAL THR LEU          
+SEQRES   5 B  126  ILE ARG GLU ALA LEU LEU GLU ASN ILE ASP ILE GLY TYR          
+SEQRES   6 B  126  GLU LEU PHE LEU TRP LYS LYS ASN GLU VAL ASP ILE PHE          
+SEQRES   7 B  126  LEU LYS ASN LEU GLU LYS SER GLU VAL ASP GLY LEU LEU          
+SEQRES   8 B  126  VAL TYR CYS ASP ASP GLU ASN LYS VAL PHE MSE SER LYS          
+SEQRES   9 B  126  ILE VAL ASP ASN LEU PRO THR ALA ILE LYS ARG ASN LEU          
+SEQRES  10 B  126  ILE LYS ASP PHE CYS ARG LYS LEU SER                          
+MODRES 2RBG MSE A  102  MET  SELENOMETHIONINE                                   
+MODRES 2RBG MSE B  102  MET  SELENOMETHIONINE                                   
+HET    MSE  A 102       8                                                       
+HET    MSE  B 102       8                                                       
+HET    SO4  B 127       5                                                       
+HETNAM     MSE SELENOMETHIONINE                                                 
+HETNAM     SO4 SULFATE ION                                                      
+FORMUL   1  MSE    2(C5 H11 N O2 SE)                                            
+FORMUL   3  SO4    O4 S 2-                                                      
+FORMUL   4  HOH   *316(H2 O)                                                    
+HELIX    1   1 ASN A   13  ASP A   15  5                                   3    
+HELIX    2   2 ASN A   16  GLY A   32  1                                  17    
+HELIX    3   3 GLN A   45  ILE A   53  1                                   9    
+HELIX    4   4 ILE A   53  ASN A   60  1                                   8    
+HELIX    5   5 LYS A   71  ASN A   73  5                                   3    
+HELIX    6   6 GLU A   74  GLU A   83  1                                  10    
+HELIX    7   7 ASN A   98  ASN A  108  1                                  11    
+HELIX    8   8 PRO A  110  ARG A  115  1                                   6    
+HELIX    9   9 ASN B   13  ASP B   15  5                                   3    
+HELIX   10  10 ASN B   16  GLY B   32  1                                  17    
+HELIX   11  11 GLN B   45  ILE B   53  1                                   9    
+HELIX   12  12 ILE B   53  GLU B   59  1                                   7    
+HELIX   13  13 LYS B   71  ASN B   73  5                                   3    
+HELIX   14  14 GLU B   74  LEU B   82  1                                   9    
+HELIX   15  15 GLU B   83  SER B   85  5                                   3    
+HELIX   16  16 ASN B   98  ASN B  108  1                                  11    
+HELIX   17  17 PRO B  110  ASN B  116  1                                   7    
+SHEET    1   A 5 GLY A  64  TRP A  70  0                                        
+SHEET    2   A 5 LYS A  35  PHE A  41  1  N  VAL A  40   O  PHE A  68           
+SHEET    3   A 5 ILE A   6  SER A  11  1  N  THR A   8   O  ASN A  39           
+SHEET    4   A 5 GLY A  89  CYS A  94  1  O  GLY A  89   N  LEU A   7           
+SHEET    5   A 5 LEU A 117  PHE A 121  1  O  ILE A 118   N  LEU A  90           
+SHEET    1   B 5 GLY B  64  TRP B  70  0                                        
+SHEET    2   B 5 LYS B  35  PHE B  41  1  N  VAL B  40   O  TRP B  70           
+SHEET    3   B 5 ILE B   6  SER B  11  1  N  THR B   8   O  ASN B  39           
+SHEET    4   B 5 GLY B  89  CYS B  94  1  O  GLY B  89   N  LEU B   7           
+SHEET    5   B 5 LEU B 117  PHE B 121  1  O  ILE B 118   N  LEU B  90           
+SSBOND   1 CYS A   94    CYS A  122                          1555   1555  2.03  
+SSBOND   2 CYS B   94    CYS B  122                          1555   1555  2.03  
+LINK         C   PHE A 101                 N   MSE A 102     1555   1555  1.33  
+LINK         C   MSE A 102                 N   SER A 103     1555   1555  1.33  
+LINK         C   PHE B 101                 N   MSE B 102     1555   1555  1.33  
+LINK         C   MSE B 102                 N   SER B 103     1555   1555  1.33  
+SITE     1 AC1  5 GLU B  18  ARG B  22  GLU B  55  HOH B 217                    
+SITE     2 AC1  5 HOH B 234                                                     
+CRYST1   39.444   65.184   49.604  90.00  98.19  90.00 P 1 21 1      4          
+ORIGX1      1.000000  0.000000  0.000000        0.00000                         
+ORIGX2      0.000000  1.000000  0.000000        0.00000                         
+ORIGX3      0.000000  0.000000  1.000000        0.00000                         
+SCALE1      0.025352  0.000000  0.003650        0.00000                         
+SCALE2      0.000000  0.015341  0.000000        0.00000                         
+SCALE3      0.000000  0.000000  0.020368        0.00000                         
+ATOM      1  N   TYR A   3      33.471   9.062  24.101  1.00 24.34           N  
+ATOM      2  CA  TYR A   3      32.068   8.798  23.671  1.00 22.76           C  
+ATOM      3  C   TYR A   3      31.421  10.059  23.108  1.00 22.12           C  
+ATOM      4  O   TYR A   3      31.551  11.144  23.678  1.00 23.86           O  
+ATOM      5  CB  TYR A   3      31.252   8.265  24.852  1.00 22.59           C  
+ATOM      6  CG  TYR A   3      31.720   6.909  25.338  1.00 23.54           C  
+ATOM      7  CD1 TYR A   3      32.254   6.746  26.616  1.00 23.82           C  
+ATOM      8  CD2 TYR A   3      31.647   5.792  24.508  1.00 23.93           C  
+ATOM      9  CE1 TYR A   3      32.705   5.500  27.055  1.00 25.31           C  
+ATOM     10  CE2 TYR A   3      32.095   4.544  24.936  1.00 22.68           C  
+ATOM     11  CZ  TYR A   3      32.622   4.405  26.208  1.00 25.21           C  
+ATOM     12  OH  TYR A   3      33.070   3.171  26.625  1.00 27.53           O  
+ATOM     13  N   LYS A   4      30.720   9.903  21.989  1.00 18.90           N  
+ATOM     14  CA  LYS A   4      30.060  11.019  21.317  1.00 18.65           C  
+ATOM     15  C   LYS A   4      28.537  10.918  21.313  1.00 15.20           C  
+ATOM     16  O   LYS A   4      27.850  11.932  21.232  1.00 13.13           O  
+ATOM     17  CB  LYS A   4      30.555  11.114  19.870  1.00 21.41           C  
+ATOM     18  CG  LYS A   4      32.064  11.283  19.734  1.00 32.01           C  
+ATOM     19  CD  LYS A   4      32.527  12.652  20.213  1.00 36.58           C  
+ATOM     20  CE  LYS A   4      32.002  13.760  19.311  1.00 39.57           C  
+ATOM     21  NZ  LYS A   4      32.463  15.105  19.752  1.00 43.99           N  
+ATOM     22  N   ASN A   5      28.009   9.699  21.374  1.00 13.77           N  
+ATOM     23  CA  ASN A   5      26.560   9.508  21.373  1.00 13.94           C  
+ATOM     24  C   ASN A   5      26.217   8.213  22.092  1.00 14.07           C  
+ATOM     25  O   ASN A   5      26.368   7.121  21.548  1.00 13.93           O  
+ATOM     26  CB  ASN A   5      26.022   9.489  19.936  1.00 15.07           C  
+ATOM     27  CG  ASN A   5      24.503   9.457  19.879  1.00 19.05           C  
+ATOM     28  OD1 ASN A   5      23.826  10.028  20.734  1.00 18.93           O  
+ATOM     29  ND2 ASN A   5      23.960   8.805  18.857  1.00 23.13           N  
+ATOM     30  N   ILE A   6      25.749   8.359  23.324  1.00 12.56           N  
+ATOM     31  CA  ILE A   6      25.398   7.232  24.174  1.00 10.81           C  
+ATOM     32  C   ILE A   6      24.026   6.636  23.871  1.00  9.05           C  
+ATOM     33  O   ILE A   6      23.032   7.360  23.784  1.00 10.03           O  
+ATOM     34  CB  ILE A   6      25.409   7.661  25.661  1.00 10.42           C  
+ATOM     35  CG1 ILE A   6      26.761   8.291  26.015  1.00 14.05           C  
+ATOM     36  CG2 ILE A   6      25.114   6.465  26.555  1.00 10.54           C  
+ATOM     37  CD1 ILE A   6      27.942   7.352  25.864  1.00 13.83           C  
+ATOM     38  N   LEU A   7      23.978   5.317  23.695  1.00  7.97           N  
+ATOM     39  CA  LEU A   7      22.708   4.638  23.468  1.00  7.84           C  
+ATOM     40  C   LEU A   7      22.167   4.341  24.862  1.00  6.49           C  
+ATOM     41  O   LEU A   7      22.786   3.598  25.623  1.00  7.93           O  
+ATOM     42  CB  LEU A   7      22.901   3.315  22.724  1.00  7.80           C  
+ATOM     43  CG  LEU A   7      21.627   2.465  22.610  1.00  8.47           C  
+ATOM     44  CD1 LEU A   7      20.587   3.198  21.769  1.00  8.00           C  
+ATOM     45  CD2 LEU A   7      21.961   1.115  21.988  1.00 10.59           C  
+ATOM     46  N   THR A   8      21.029   4.936  25.201  1.00  5.70           N  
+ATOM     47  CA  THR A   8      20.419   4.719  26.508  1.00  6.42           C  
+ATOM     48  C   THR A   8      19.137   3.917  26.352  1.00  6.87           C  
+ATOM     49  O   THR A   8      18.243   4.298  25.595  1.00  7.76           O  
+ATOM     50  CB  THR A   8      20.101   6.061  27.208  1.00  6.58           C  
+ATOM     51  OG1 THR A   8      21.328   6.729  27.538  1.00  7.53           O  
+ATOM     52  CG2 THR A   8      19.310   5.826  28.490  1.00  7.99           C  
+ATOM     53  N   LEU A   9      19.067   2.792  27.057  1.00  7.67           N  
+ATOM     54  CA  LEU A   9      17.898   1.930  27.012  1.00  8.24           C  
+ATOM     55  C   LEU A   9      17.289   1.878  28.404  1.00  8.48           C  
+ATOM     56  O   LEU A   9      18.000   1.681  29.391  1.00  7.88           O  
+ATOM     57  CB  LEU A   9      18.293   0.514  26.583  1.00  9.90           C  
+ATOM     58  CG  LEU A   9      19.140   0.391  25.315  1.00 11.56           C  
+ATOM     59  CD1 LEU A   9      19.413  -1.082  25.031  1.00 10.95           C  
+ATOM     60  CD2 LEU A   9      18.418   1.039  24.145  1.00 10.46           C  
+ATOM     61  N   ILE A  10      15.976   2.056  28.484  1.00  7.53           N  
+ATOM     62  CA  ILE A  10      15.301   2.010  29.771  1.00  7.34           C  
+ATOM     63  C   ILE A  10      13.911   1.408  29.690  1.00  8.82           C  
+ATOM     64  O   ILE A  10      13.146   1.683  28.767  1.00 10.17           O  
+ATOM     65  CB  ILE A  10      15.190   3.420  30.412  1.00  8.96           C  
+ATOM     66  CG1 ILE A  10      14.388   3.338  31.717  1.00  7.62           C  
+ATOM     67  CG2 ILE A  10      14.524   4.392  29.433  1.00  9.63           C  
+ATOM     68  CD1 ILE A  10      14.445   4.613  32.566  1.00 11.33           C  
+ATOM     69  N   SER A  11      13.605   0.560  30.664  1.00  8.33           N  
+ATOM     70  CA  SER A  11      12.297  -0.060  30.761  1.00 10.47           C  
+ATOM     71  C   SER A  11      11.962  -0.145  32.245  1.00  9.11           C  
+ATOM     72  O   SER A  11      12.520  -0.964  32.972  1.00 11.58           O  
+ATOM     73  CB  SER A  11      12.300  -1.457  30.143  1.00 13.19           C  
+ATOM     74  OG  SER A  11      10.990  -1.998  30.156  1.00 19.72           O  
+ATOM     75  N   VAL A  12      11.067   0.730  32.687  1.00 11.21           N  
+ATOM     76  CA  VAL A  12      10.643   0.770  34.081  1.00 11.41           C  
+ATOM     77  C   VAL A  12       9.161   1.098  34.156  1.00 15.63           C  
+ATOM     78  O   VAL A  12       8.563   1.528  33.170  1.00 16.75           O  
+ATOM     79  CB  VAL A  12      11.402   1.858  34.886  1.00 11.30           C  
+ATOM     80  CG1 VAL A  12      12.884   1.530  34.945  1.00  8.11           C  
+ATOM     81  CG2 VAL A  12      11.178   3.230  34.255  1.00 12.03           C  
+ATOM     82  N   ASN A  13       8.575   0.887  35.330  1.00 17.25           N  
+ATOM     83  CA  ASN A  13       7.170   1.200  35.547  1.00 20.47           C  
+ATOM     84  C   ASN A  13       7.075   2.724  35.563  1.00 19.38           C  
+ATOM     85  O   ASN A  13       8.061   3.404  35.845  1.00 18.17           O  
+ATOM     86  CB  ASN A  13       6.700   0.622  36.885  1.00 23.13           C  
+ATOM     87  CG  ASN A  13       6.713  -0.895  36.900  1.00 31.36           C  
+ATOM     88  OD1 ASN A  13       6.035  -1.541  36.099  1.00 36.96           O  
+ATOM     89  ND2 ASN A  13       7.484  -1.472  37.817  1.00 34.18           N  
+ATOM     90  N   ASN A  14       5.896   3.259  35.266  1.00 18.03           N  
+ATOM     91  CA  ASN A  14       5.707   4.707  35.224  1.00 19.51           C  
+ATOM     92  C   ASN A  14       6.148   5.468  36.472  1.00 20.09           C  
+ATOM     93  O   ASN A  14       6.659   6.582  36.372  1.00 20.91           O  
+ATOM     94  CB  ASN A  14       4.242   5.048  34.941  1.00 20.73           C  
+ATOM     95  CG  ASN A  14       3.742   4.437  33.653  1.00 23.53           C  
+ATOM     96  OD1 ASN A  14       4.496   4.276  32.696  1.00 22.26           O  
+ATOM     97  ND2 ASN A  14       2.456   4.108  33.615  1.00 26.38           N  
+ATOM     98  N   ASP A  15       5.954   4.876  37.645  1.00 20.00           N  
+ATOM     99  CA  ASP A  15       6.319   5.543  38.890  1.00 23.11           C  
+ATOM    100  C   ASP A  15       7.828   5.697  39.071  1.00 20.27           C  
+ATOM    101  O   ASP A  15       8.275   6.420  39.958  1.00 21.58           O  
+ATOM    102  CB  ASP A  15       5.736   4.783  40.086  1.00 23.65           C  
+ATOM    103  CG  ASP A  15       6.495   3.509  40.394  1.00 33.42           C  
+ATOM    104  OD1 ASP A  15       6.862   2.787  39.443  1.00 37.24           O  
+ATOM    105  OD2 ASP A  15       6.719   3.222  41.591  1.00 40.07           O  
+ATOM    106  N   ASN A  16       8.607   5.025  38.228  1.00 17.28           N  
+ATOM    107  CA  ASN A  16      10.063   5.089  38.322  1.00 16.22           C  
+ATOM    108  C   ASN A  16      10.757   6.035  37.343  1.00 17.13           C  
+ATOM    109  O   ASN A  16      11.960   6.258  37.458  1.00 15.71           O  
+ATOM    110  CB  ASN A  16      10.670   3.691  38.150  1.00 18.31           C  
+ATOM    111  CG  ASN A  16      10.692   2.896  39.440  1.00 21.25           C  
+ATOM    112  OD1 ASN A  16      11.056   3.416  40.495  1.00 23.56           O  
+ATOM    113  ND2 ASN A  16      10.323   1.623  39.357  1.00 19.07           N  
+ATOM    114  N   PHE A  17      10.020   6.598  36.392  1.00 14.63           N  
+ATOM    115  CA  PHE A  17      10.641   7.486  35.409  1.00 14.77           C  
+ATOM    116  C   PHE A  17      11.409   8.670  35.984  1.00 14.87           C  
+ATOM    117  O   PHE A  17      12.552   8.913  35.604  1.00  9.25           O  
+ATOM    118  CB  PHE A  17       9.602   7.998  34.404  1.00 12.16           C  
+ATOM    119  CG  PHE A  17       9.216   6.987  33.365  1.00 11.38           C  
+ATOM    120  CD1 PHE A  17      10.192   6.337  32.614  1.00 13.83           C  
+ATOM    121  CD2 PHE A  17       7.878   6.680  33.135  1.00 14.52           C  
+ATOM    122  CE1 PHE A  17       9.842   5.393  31.649  1.00 14.54           C  
+ATOM    123  CE2 PHE A  17       7.518   5.740  32.174  1.00 14.67           C  
+ATOM    124  CZ  PHE A  17       8.500   5.095  31.429  1.00 14.46           C  
+ATOM    125  N   GLU A  18      10.792   9.411  36.897  1.00 16.23           N  
+ATOM    126  CA  GLU A  18      11.464  10.565  37.475  1.00 16.73           C  
+ATOM    127  C   GLU A  18      12.805  10.207  38.106  1.00 16.00           C  
+ATOM    128  O   GLU A  18      13.818  10.842  37.814  1.00 16.65           O  
+ATOM    129  CB  GLU A  18      10.557  11.247  38.505  1.00 23.36           C  
+ATOM    130  CG  GLU A  18       9.338  11.909  37.879  1.00 30.35           C  
+ATOM    131  CD  GLU A  18       8.469  12.633  38.889  1.00 37.35           C  
+ATOM    132  OE1 GLU A  18       8.971  13.562  39.558  1.00 37.02           O  
+ATOM    133  OE2 GLU A  18       7.280  12.273  39.010  1.00 40.39           O  
+ATOM    134  N   ASN A  19      12.816   9.184  38.954  1.00 16.87           N  
+ATOM    135  CA  ASN A  19      14.049   8.770  39.618  1.00 15.97           C  
+ATOM    136  C   ASN A  19      15.094   8.227  38.649  1.00 15.31           C  
+ATOM    137  O   ASN A  19      16.278   8.557  38.756  1.00 13.61           O  
+ATOM    138  CB  ASN A  19      13.761   7.713  40.690  1.00 19.94           C  
+ATOM    139  CG  ASN A  19      12.921   8.251  41.831  1.00 26.59           C  
+ATOM    140  OD1 ASN A  19      13.143   9.361  42.313  1.00 28.74           O  
+ATOM    141  ND2 ASN A  19      11.958   7.454  42.283  1.00 31.96           N  
+ATOM    142  N   TYR A  20      14.667   7.395  37.705  1.00  9.62           N  
+ATOM    143  CA  TYR A  20      15.612   6.830  36.750  1.00  8.42           C  
+ATOM    144  C   TYR A  20      16.193   7.835  35.765  1.00 10.15           C  
+ATOM    145  O   TYR A  20      17.354   7.718  35.390  1.00  8.97           O  
+ATOM    146  CB  TYR A  20      14.988   5.667  35.975  1.00  8.90           C  
+ATOM    147  CG  TYR A  20      15.099   4.331  36.683  1.00 11.47           C  
+ATOM    148  CD1 TYR A  20      14.377   4.074  37.848  1.00 11.36           C  
+ATOM    149  CD2 TYR A  20      15.916   3.319  36.178  1.00  9.86           C  
+ATOM    150  CE1 TYR A  20      14.461   2.838  38.488  1.00 10.09           C  
+ATOM    151  CE2 TYR A  20      16.008   2.080  36.808  1.00 11.95           C  
+ATOM    152  CZ  TYR A  20      15.272   1.847  37.965  1.00 10.22           C  
+ATOM    153  OH  TYR A  20      15.329   0.615  38.579  1.00 12.19           O  
+ATOM    154  N   PHE A  21      15.407   8.817  35.331  1.00 10.83           N  
+ATOM    155  CA  PHE A  21      15.961   9.786  34.396  1.00 10.37           C  
+ATOM    156  C   PHE A  21      17.015  10.652  35.066  1.00  9.86           C  
+ATOM    157  O   PHE A  21      17.893  11.207  34.403  1.00 10.68           O  
+ATOM    158  CB  PHE A  21      14.863  10.640  33.760  1.00 10.02           C  
+ATOM    159  CG  PHE A  21      14.380  10.090  32.448  1.00  9.94           C  
+ATOM    160  CD1 PHE A  21      13.536   8.984  32.413  1.00 10.87           C  
+ATOM    161  CD2 PHE A  21      14.844  10.618  31.247  1.00 11.58           C  
+ATOM    162  CE1 PHE A  21      13.166   8.405  31.199  1.00 10.52           C  
+ATOM    163  CE2 PHE A  21      14.479  10.046  30.021  1.00 12.43           C  
+ATOM    164  CZ  PHE A  21      13.640   8.937  29.999  1.00 11.64           C  
+ATOM    165  N   ARG A  22      16.937  10.756  36.386  1.00 10.63           N  
+ATOM    166  CA  ARG A  22      17.930  11.519  37.121  1.00 12.46           C  
+ATOM    167  C   ARG A  22      19.243  10.741  36.990  1.00 12.16           C  
+ATOM    168  O   ARG A  22      20.314  11.326  36.831  1.00 12.50           O  
+ATOM    169  CB  ARG A  22      17.521  11.653  38.592  1.00 12.81           C  
+ATOM    170  CG  ARG A  22      18.512  12.441  39.436  1.00 17.97           C  
+ATOM    171  CD  ARG A  22      18.033  12.635  40.873  1.00 15.56           C  
+ATOM    172  NE  ARG A  22      16.944  13.605  40.993  1.00 15.48           N  
+ATOM    173  CZ  ARG A  22      16.484  14.056  42.158  1.00 17.00           C  
+ATOM    174  NH1 ARG A  22      17.020  13.622  43.293  1.00 13.10           N  
+ATOM    175  NH2 ARG A  22      15.495  14.941  42.195  1.00 16.86           N  
+ATOM    176  N   LYS A  23      19.150   9.414  37.040  1.00  9.11           N  
+ATOM    177  CA  LYS A  23      20.330   8.562  36.910  1.00  8.13           C  
+ATOM    178  C   LYS A  23      20.899   8.647  35.497  1.00  8.65           C  
+ATOM    179  O   LYS A  23      22.109   8.744  35.305  1.00 11.79           O  
+ATOM    180  CB  LYS A  23      19.983   7.099  37.206  1.00 10.36           C  
+ATOM    181  CG  LYS A  23      19.601   6.794  38.646  1.00 10.87           C  
+ATOM    182  CD  LYS A  23      19.398   5.289  38.832  1.00 14.62           C  
+ATOM    183  CE  LYS A  23      19.222   4.926  40.294  1.00 23.04           C  
+ATOM    184  NZ  LYS A  23      20.438   5.264  41.088  1.00 16.09           N  
+ATOM    185  N   ILE A  24      20.015   8.600  34.505  1.00  7.43           N  
+ATOM    186  CA  ILE A  24      20.443   8.660  33.116  1.00  6.12           C  
+ATOM    187  C   ILE A  24      21.374   9.834  32.842  1.00  8.47           C  
+ATOM    188  O   ILE A  24      22.446   9.661  32.271  1.00  9.39           O  
+ATOM    189  CB  ILE A  24      19.226   8.750  32.168  1.00  6.49           C  
+ATOM    190  CG1 ILE A  24      18.475   7.414  32.183  1.00  5.04           C  
+ATOM    191  CG2 ILE A  24      19.684   9.104  30.748  1.00  7.14           C  
+ATOM    192  CD1 ILE A  24      17.160   7.432  31.432  1.00  5.89           C  
+ATOM    193  N   PHE A  25      20.976  11.031  33.254  1.00  8.27           N  
+ATOM    194  CA  PHE A  25      21.814  12.192  32.991  1.00 10.11           C  
+ATOM    195  C   PHE A  25      23.098  12.230  33.813  1.00  8.55           C  
+ATOM    196  O   PHE A  25      24.106  12.772  33.361  1.00  9.67           O  
+ATOM    197  CB  PHE A  25      20.985  13.470  33.142  1.00  9.31           C  
+ATOM    198  CG  PHE A  25      20.000  13.667  32.016  1.00 11.97           C  
+ATOM    199  CD1 PHE A  25      20.452  13.926  30.721  1.00 13.37           C  
+ATOM    200  CD2 PHE A  25      18.635  13.523  32.230  1.00 12.47           C  
+ATOM    201  CE1 PHE A  25      19.556  14.034  29.657  1.00 12.22           C  
+ATOM    202  CE2 PHE A  25      17.728  13.627  31.173  1.00 15.03           C  
+ATOM    203  CZ  PHE A  25      18.193  13.883  29.883  1.00 13.24           C  
+ATOM    204  N   LEU A  26      23.077  11.647  35.008  1.00  8.53           N  
+ATOM    205  CA  LEU A  26      24.284  11.592  35.825  1.00 10.27           C  
+ATOM    206  C   LEU A  26      25.305  10.752  35.054  1.00  7.43           C  
+ATOM    207  O   LEU A  26      26.474  11.116  34.935  1.00  8.43           O  
+ATOM    208  CB  LEU A  26      24.005  10.915  37.172  1.00 12.37           C  
+ATOM    209  CG  LEU A  26      23.874  11.773  38.432  1.00 23.05           C  
+ATOM    210  CD1 LEU A  26      22.666  12.653  38.319  1.00 28.50           C  
+ATOM    211  CD2 LEU A  26      23.748  10.880  39.654  1.00 23.45           C  
+ATOM    212  N   ASP A  27      24.847   9.626  34.519  1.00  8.78           N  
+ATOM    213  CA  ASP A  27      25.724   8.732  33.779  1.00  6.87           C  
+ATOM    214  C   ASP A  27      26.167   9.306  32.439  1.00  7.47           C  
+ATOM    215  O   ASP A  27      27.331   9.171  32.059  1.00  8.28           O  
+ATOM    216  CB  ASP A  27      25.053   7.370  33.581  1.00 10.81           C  
+ATOM    217  CG  ASP A  27      24.911   6.601  34.882  1.00 11.54           C  
+ATOM    218  OD1 ASP A  27      25.857   6.645  35.699  1.00  9.76           O  
+ATOM    219  OD2 ASP A  27      23.868   5.947  35.086  1.00 10.25           O  
+ATOM    220  N   VAL A  28      25.251   9.952  31.723  1.00  6.57           N  
+ATOM    221  CA  VAL A  28      25.619  10.536  30.437  1.00  8.12           C  
+ATOM    222  C   VAL A  28      26.681  11.616  30.644  1.00 10.25           C  
+ATOM    223  O   VAL A  28      27.683  11.663  29.928  1.00  9.64           O  
+ATOM    224  CB  VAL A  28      24.399  11.150  29.718  1.00  8.01           C  
+ATOM    225  CG1 VAL A  28      24.862  11.969  28.515  1.00  9.50           C  
+ATOM    226  CG2 VAL A  28      23.457  10.034  29.253  1.00  8.04           C  
+ATOM    227  N   ARG A  29      26.475  12.475  31.636  1.00 10.05           N  
+ATOM    228  CA  ARG A  29      27.444  13.536  31.898  1.00 11.15           C  
+ATOM    229  C   ARG A  29      28.827  12.967  32.214  1.00 11.79           C  
+ATOM    230  O   ARG A  29      29.835  13.455  31.704  1.00 12.01           O  
+ATOM    231  CB  ARG A  29      26.970  14.422  33.053  1.00  9.99           C  
+ATOM    232  CG  ARG A  29      25.831  15.367  32.695  1.00 10.18           C  
+ATOM    233  CD  ARG A  29      25.445  16.189  33.912  1.00 10.25           C  
+ATOM    234  NE  ARG A  29      24.425  17.192  33.628  1.00 14.64           N  
+ATOM    235  CZ  ARG A  29      24.640  18.502  33.651  1.00 20.85           C  
+ATOM    236  NH1 ARG A  29      25.844  18.976  33.943  1.00 20.73           N  
+ATOM    237  NH2 ARG A  29      23.645  19.341  33.398  1.00 23.29           N  
+ATOM    238  N   SER A  30      28.875  11.926  33.040  1.00 10.27           N  
+ATOM    239  CA  SER A  30      30.149  11.310  33.406  1.00 10.98           C  
+ATOM    240  C   SER A  30      30.842  10.609  32.239  1.00 13.07           C  
+ATOM    241  O   SER A  30      32.064  10.454  32.245  1.00 12.79           O  
+ATOM    242  CB  SER A  30      29.953  10.298  34.543  1.00  8.79           C  
+ATOM    243  OG  SER A  30      29.665  10.953  35.765  1.00 12.96           O  
+ATOM    244  N   SER A  31      30.067  10.189  31.243  1.00 12.07           N  
+ATOM    245  CA  SER A  31      30.625   9.488  30.087  1.00 12.63           C  
+ATOM    246  C   SER A  31      31.478  10.385  29.197  1.00 14.41           C  
+ATOM    247  O   SER A  31      32.286   9.894  28.411  1.00 16.95           O  
+ATOM    248  CB  SER A  31      29.507   8.879  29.237  1.00 15.15           C  
+ATOM    249  OG  SER A  31      28.857   9.877  28.469  1.00 12.95           O  
+ATOM    250  N   GLY A  32      31.289  11.694  29.312  1.00 16.32           N  
+ATOM    251  CA  GLY A  32      32.051  12.623  28.496  1.00 17.33           C  
+ATOM    252  C   GLY A  32      31.281  13.013  27.251  1.00 17.70           C  
+ATOM    253  O   GLY A  32      31.649  13.951  26.540  1.00 16.74           O  
+ATOM    254  N   SER A  33      30.205  12.284  26.981  1.00 14.11           N  
+ATOM    255  CA  SER A  33      29.375  12.562  25.818  1.00 12.55           C  
+ATOM    256  C   SER A  33      28.436  13.717  26.128  1.00 16.51           C  
+ATOM    257  O   SER A  33      28.044  13.919  27.281  1.00 17.01           O  
+ATOM    258  CB  SER A  33      28.557  11.324  25.442  1.00 12.31           C  
+ATOM    259  OG  SER A  33      27.756  11.569  24.299  1.00 11.59           O  
+ATOM    260  N   LYS A  34      28.081  14.476  25.099  1.00 15.42           N  
+ATOM    261  CA  LYS A  34      27.176  15.601  25.267  1.00 17.53           C  
+ATOM    262  C   LYS A  34      25.871  15.259  24.559  1.00 17.01           C  
+ATOM    263  O   LYS A  34      24.970  16.090  24.465  1.00 17.51           O  
+ATOM    264  CB  LYS A  34      27.785  16.869  24.656  1.00 21.02           C  
+ATOM    265  CG  LYS A  34      29.250  17.100  25.025  1.00 25.18           C  
+ATOM    266  CD  LYS A  34      29.463  17.088  26.533  1.00 29.46           C  
+ATOM    267  CE  LYS A  34      30.942  17.190  26.884  1.00 31.20           C  
+ATOM    268  NZ  LYS A  34      31.184  17.073  28.353  1.00 29.05           N  
+ATOM    269  N   LYS A  35      25.781  14.020  24.078  1.00 16.37           N  
+ATOM    270  CA  LYS A  35      24.604  13.544  23.358  1.00 13.55           C  
+ATOM    271  C   LYS A  35      24.222  12.119  23.748  1.00 10.82           C  
+ATOM    272  O   LYS A  35      25.074  11.303  24.092  1.00 12.00           O  
+ATOM    273  CB  LYS A  35      24.861  13.551  21.851  1.00 14.65           C  
+ATOM    274  CG  LYS A  35      25.180  14.899  21.239  1.00 23.77           C  
+ATOM    275  CD  LYS A  35      25.571  14.724  19.774  1.00 29.96           C  
+ATOM    276  CE  LYS A  35      25.766  16.063  19.075  1.00 34.03           C  
+ATOM    277  NZ  LYS A  35      24.495  16.835  18.986  1.00 39.83           N  
+ATOM    278  N   THR A  36      22.932  11.825  23.676  1.00 11.15           N  
+ATOM    279  CA  THR A  36      22.449  10.487  23.972  1.00  9.64           C  
+ATOM    280  C   THR A  36      21.129  10.278  23.253  1.00  8.90           C  
+ATOM    281  O   THR A  36      20.336  11.211  23.103  1.00 11.37           O  
+ATOM    282  CB  THR A  36      22.235  10.255  25.494  1.00  9.30           C  
+ATOM    283  OG1 THR A  36      21.808   8.903  25.714  1.00 11.46           O  
+ATOM    284  CG2 THR A  36      21.178  11.205  26.049  1.00 10.57           C  
+ATOM    285  N   THR A  37      20.918   9.064  22.766  1.00  8.09           N  
+ATOM    286  CA  THR A  37      19.669   8.733  22.098  1.00  8.90           C  
+ATOM    287  C   THR A  37      18.999   7.773  23.072  1.00  9.34           C  
+ATOM    288  O   THR A  37      19.467   6.652  23.292  1.00 10.35           O  
+ATOM    289  CB  THR A  37      19.916   8.084  20.710  1.00 16.76           C  
+ATOM    290  OG1 THR A  37      18.661   7.702  20.136  1.00 18.76           O  
+ATOM    291  CG2 THR A  37      20.828   6.875  20.819  1.00 17.18           C  
+ATOM    292  N   ILE A  38      17.924   8.254  23.685  1.00  8.42           N  
+ATOM    293  CA  ILE A  38      17.186   7.508  24.697  1.00  9.46           C  
+ATOM    294  C   ILE A  38      16.015   6.715  24.137  1.00 10.38           C  
+ATOM    295  O   ILE A  38      15.143   7.264  23.462  1.00 11.66           O  
+ATOM    296  CB  ILE A  38      16.668   8.472  25.778  1.00  9.91           C  
+ATOM    297  CG1 ILE A  38      17.829   9.320  26.300  1.00 12.94           C  
+ATOM    298  CG2 ILE A  38      16.015   7.697  26.913  1.00  9.08           C  
+ATOM    299  CD1 ILE A  38      17.408  10.432  27.235  1.00 11.43           C  
+ATOM    300  N   ASN A  39      15.999   5.422  24.441  1.00  6.80           N  
+ATOM    301  CA  ASN A  39      14.946   4.527  23.976  1.00  8.56           C  
+ATOM    302  C   ASN A  39      14.206   3.962  25.172  1.00  8.17           C  
+ATOM    303  O   ASN A  39      14.772   3.221  25.977  1.00 12.28           O  
+ATOM    304  CB  ASN A  39      15.563   3.409  23.141  1.00  6.67           C  
+ATOM    305  CG  ASN A  39      16.136   3.923  21.841  1.00 11.85           C  
+ATOM    306  OD1 ASN A  39      15.430   4.038  20.838  1.00 10.25           O  
+ATOM    307  ND2 ASN A  39      17.416   4.264  21.856  1.00 11.82           N  
+ATOM    308  N   VAL A  40      12.932   4.318  25.272  1.00  9.81           N  
+ATOM    309  CA  VAL A  40      12.091   3.905  26.380  1.00 10.60           C  
+ATOM    310  C   VAL A  40      11.061   2.874  25.947  1.00 11.33           C  
+ATOM    311  O   VAL A  40      10.274   3.117  25.035  1.00 13.32           O  
+ATOM    312  CB  VAL A  40      11.351   5.120  26.969  1.00 10.53           C  
+ATOM    313  CG1 VAL A  40      10.654   4.734  28.265  1.00  9.46           C  
+ATOM    314  CG2 VAL A  40      12.328   6.266  27.186  1.00 10.11           C  
+ATOM    315  N   PHE A  41      11.073   1.724  26.609  1.00 10.47           N  
+ATOM    316  CA  PHE A  41      10.134   0.655  26.303  1.00 10.56           C  
+ATOM    317  C   PHE A  41       9.024   0.767  27.336  1.00 14.51           C  
+ATOM    318  O   PHE A  41       9.169   0.343  28.482  1.00 12.82           O  
+ATOM    319  CB  PHE A  41      10.880  -0.674  26.364  1.00 11.18           C  
+ATOM    320  CG  PHE A  41      12.024  -0.741  25.393  1.00 13.39           C  
+ATOM    321  CD1 PHE A  41      11.798  -1.046  24.052  1.00 11.41           C  
+ATOM    322  CD2 PHE A  41      13.314  -0.401  25.795  1.00 13.82           C  
+ATOM    323  CE1 PHE A  41      12.837  -1.005  23.125  1.00 12.58           C  
+ATOM    324  CE2 PHE A  41      14.361  -0.357  24.875  1.00 16.09           C  
+ATOM    325  CZ  PHE A  41      14.120  -0.659  23.535  1.00 13.07           C  
+ATOM    326  N   THR A  42       7.918   1.371  26.909  1.00 15.02           N  
+ATOM    327  CA  THR A  42       6.788   1.623  27.790  1.00 14.54           C  
+ATOM    328  C   THR A  42       5.495   1.721  26.988  1.00 15.87           C  
+ATOM    329  O   THR A  42       5.521   1.803  25.764  1.00 14.97           O  
+ATOM    330  CB  THR A  42       7.011   2.962  28.532  1.00 16.35           C  
+ATOM    331  OG1 THR A  42       5.902   3.242  29.391  1.00 16.32           O  
+ATOM    332  CG2 THR A  42       7.166   4.098  27.525  1.00 15.89           C  
+ATOM    333  N   GLU A  43       4.366   1.718  27.689  1.00 18.33           N  
+ATOM    334  CA  GLU A  43       3.063   1.834  27.041  1.00 22.06           C  
+ATOM    335  C   GLU A  43       2.551   3.265  27.188  1.00 23.02           C  
+ATOM    336  O   GLU A  43       1.500   3.621  26.656  1.00 22.29           O  
+ATOM    337  CB  GLU A  43       2.065   0.859  27.673  1.00 21.32           C  
+ATOM    338  CG  GLU A  43       2.461  -0.607  27.557  1.00 26.43           C  
+ATOM    339  CD  GLU A  43       2.665  -1.048  26.118  1.00 31.13           C  
+ATOM    340  OE1 GLU A  43       1.763  -0.802  25.290  1.00 33.47           O  
+ATOM    341  OE2 GLU A  43       3.724  -1.642  25.815  1.00 32.35           O  
+ATOM    342  N   ILE A  44       3.311   4.083  27.910  1.00 23.91           N  
+ATOM    343  CA  ILE A  44       2.948   5.476  28.149  1.00 26.52           C  
+ATOM    344  C   ILE A  44       3.168   6.328  26.894  1.00 27.74           C  
+ATOM    345  O   ILE A  44       3.974   5.976  26.033  1.00 24.73           O  
+ATOM    346  CB  ILE A  44       3.783   6.040  29.326  1.00 28.12           C  
+ATOM    347  CG1 ILE A  44       2.971   7.072  30.104  1.00 28.57           C  
+ATOM    348  CG2 ILE A  44       5.080   6.650  28.810  1.00 24.21           C  
+ATOM    349  CD1 ILE A  44       3.649   7.523  31.384  1.00 31.00           C  
+ATOM    350  N   GLN A  45       2.447   7.444  26.787  1.00 29.19           N  
+ATOM    351  CA  GLN A  45       2.580   8.334  25.633  1.00 30.61           C  
+ATOM    352  C   GLN A  45       3.693   9.358  25.823  1.00 28.49           C  
+ATOM    353  O   GLN A  45       4.030   9.722  26.950  1.00 29.37           O  
+ATOM    354  CB  GLN A  45       1.258   9.058  25.363  1.00 36.95           C  
+ATOM    355  CG  GLN A  45       0.165   8.172  24.788  1.00 48.09           C  
+ATOM    356  CD  GLN A  45       0.496   7.672  23.394  1.00 54.95           C  
+ATOM    357  OE1 GLN A  45       0.715   8.463  22.477  1.00 59.19           O  
+ATOM    358  NE2 GLN A  45       0.531   6.354  23.229  1.00 59.21           N  
+ATOM    359  N   TYR A  46       4.248   9.823  24.708  1.00 24.28           N  
+ATOM    360  CA  TYR A  46       5.337  10.793  24.713  1.00 24.71           C  
+ATOM    361  C   TYR A  46       5.090  11.982  25.639  1.00 25.54           C  
+ATOM    362  O   TYR A  46       5.881  12.250  26.541  1.00 22.81           O  
+ATOM    363  CB  TYR A  46       5.583  11.314  23.296  1.00 23.11           C  
+ATOM    364  CG  TYR A  46       6.881  12.075  23.142  1.00 27.98           C  
+ATOM    365  CD1 TYR A  46       8.087  11.399  22.962  1.00 31.13           C  
+ATOM    366  CD2 TYR A  46       6.910  13.468  23.200  1.00 28.93           C  
+ATOM    367  CE1 TYR A  46       9.291  12.088  22.845  1.00 32.93           C  
+ATOM    368  CE2 TYR A  46       8.113  14.169  23.086  1.00 32.03           C  
+ATOM    369  CZ  TYR A  46       9.298  13.470  22.909  1.00 32.08           C  
+ATOM    370  OH  TYR A  46      10.492  14.148  22.803  1.00 33.47           O  
+ATOM    371  N   GLN A  47       3.994  12.697  25.406  1.00 24.63           N  
+ATOM    372  CA  GLN A  47       3.667  13.870  26.208  1.00 25.17           C  
+ATOM    373  C   GLN A  47       3.568  13.610  27.706  1.00 23.21           C  
+ATOM    374  O   GLN A  47       3.976  14.450  28.507  1.00 24.07           O  
+ATOM    375  CB  GLN A  47       2.370  14.508  25.706  1.00 28.35           C  
+ATOM    376  CG  GLN A  47       2.495  15.121  24.321  1.00 36.99           C  
+ATOM    377  CD  GLN A  47       3.718  16.012  24.190  1.00 43.34           C  
+ATOM    378  OE1 GLN A  47       3.944  16.904  25.011  1.00 46.34           O  
+ATOM    379  NE2 GLN A  47       4.514  15.776  23.152  1.00 45.64           N  
+ATOM    380  N   GLU A  48       3.025  12.459  28.091  1.00 23.97           N  
+ATOM    381  CA  GLU A  48       2.911  12.138  29.507  1.00 22.97           C  
+ATOM    382  C   GLU A  48       4.296  11.901  30.099  1.00 22.51           C  
+ATOM    383  O   GLU A  48       4.583  12.325  31.217  1.00 17.54           O  
+ATOM    384  CB  GLU A  48       2.029  10.903  29.720  1.00 27.75           C  
+ATOM    385  CG  GLU A  48       2.033  10.402  31.160  1.00 35.85           C  
+ATOM    386  CD  GLU A  48       0.862   9.493  31.483  1.00 42.98           C  
+ATOM    387  OE1 GLU A  48       0.527   8.621  30.652  1.00 46.34           O  
+ATOM    388  OE2 GLU A  48       0.281   9.645  32.578  1.00 44.85           O  
+ATOM    389  N   LEU A  49       5.157  11.228  29.342  1.00 18.62           N  
+ATOM    390  CA  LEU A  49       6.510  10.961  29.811  1.00 18.78           C  
+ATOM    391  C   LEU A  49       7.267  12.268  30.002  1.00 17.00           C  
+ATOM    392  O   LEU A  49       7.848  12.511  31.058  1.00 16.05           O  
+ATOM    393  CB  LEU A  49       7.269  10.084  28.811  1.00 16.29           C  
+ATOM    394  CG  LEU A  49       8.755   9.895  29.139  1.00 16.44           C  
+ATOM    395  CD1 LEU A  49       8.901   9.183  30.479  1.00 17.18           C  
+ATOM    396  CD2 LEU A  49       9.432   9.102  28.033  1.00 19.52           C  
+ATOM    397  N   VAL A  50       7.262  13.102  28.967  1.00 16.87           N  
+ATOM    398  CA  VAL A  50       7.953  14.385  29.010  1.00 15.59           C  
+ATOM    399  C   VAL A  50       7.490  15.214  30.201  1.00 17.36           C  
+ATOM    400  O   VAL A  50       8.260  15.984  30.771  1.00 15.94           O  
+ATOM    401  CB  VAL A  50       7.715  15.185  27.712  1.00 20.49           C  
+ATOM    402  CG1 VAL A  50       8.450  16.511  27.775  1.00 22.89           C  
+ATOM    403  CG2 VAL A  50       8.186  14.373  26.511  1.00 20.90           C  
+ATOM    404  N   THR A  51       6.222  15.061  30.568  1.00 16.58           N  
+ATOM    405  CA  THR A  51       5.677  15.789  31.705  1.00 13.61           C  
+ATOM    406  C   THR A  51       6.308  15.251  32.989  1.00 13.20           C  
+ATOM    407  O   THR A  51       6.723  16.020  33.856  1.00 14.98           O  
+ATOM    408  CB  THR A  51       4.147  15.633  31.774  1.00 16.56           C  
+ATOM    409  OG1 THR A  51       3.559  16.293  30.645  1.00 19.12           O  
+ATOM    410  CG2 THR A  51       3.597  16.237  33.060  1.00 17.52           C  
+ATOM    411  N   LEU A  52       6.396  13.929  33.099  1.00 13.91           N  
+ATOM    412  CA  LEU A  52       6.985  13.303  34.279  1.00 13.78           C  
+ATOM    413  C   LEU A  52       8.467  13.623  34.464  1.00 16.52           C  
+ATOM    414  O   LEU A  52       8.925  13.837  35.587  1.00 20.03           O  
+ATOM    415  CB  LEU A  52       6.814  11.781  34.219  1.00 15.00           C  
+ATOM    416  CG  LEU A  52       5.407  11.210  34.404  1.00 18.12           C  
+ATOM    417  CD1 LEU A  52       5.443   9.698  34.229  1.00 19.35           C  
+ATOM    418  CD2 LEU A  52       4.885  11.576  35.785  1.00 20.14           C  
+ATOM    419  N   ILE A  53       9.220  13.657  33.371  1.00 13.70           N  
+ATOM    420  CA  ILE A  53      10.653  13.921  33.466  1.00 15.34           C  
+ATOM    421  C   ILE A  53      11.051  15.357  33.146  1.00 16.08           C  
+ATOM    422  O   ILE A  53      12.228  15.643  32.926  1.00 12.68           O  
+ATOM    423  CB  ILE A  53      11.451  12.979  32.540  1.00 13.70           C  
+ATOM    424  CG1 ILE A  53      11.137  13.288  31.076  1.00 12.89           C  
+ATOM    425  CG2 ILE A  53      11.112  11.530  32.859  1.00 15.48           C  
+ATOM    426  CD1 ILE A  53      11.973  12.498  30.092  1.00 17.37           C  
+ATOM    427  N   ARG A  54      10.075  16.259  33.133  1.00 14.93           N  
+ATOM    428  CA  ARG A  54      10.339  17.663  32.831  1.00 17.46           C  
+ATOM    429  C   ARG A  54      11.521  18.227  33.615  1.00 15.05           C  
+ATOM    430  O   ARG A  54      12.396  18.875  33.043  1.00 13.17           O  
+ATOM    431  CB  ARG A  54       9.100  18.515  33.120  1.00 21.33           C  
+ATOM    432  CG  ARG A  54       9.292  19.993  32.805  1.00 27.86           C  
+ATOM    433  CD  ARG A  54       8.119  20.838  33.282  1.00 38.40           C  
+ATOM    434  NE  ARG A  54       7.921  20.738  34.727  1.00 45.55           N  
+ATOM    435  CZ  ARG A  54       6.935  20.058  35.304  1.00 48.28           C  
+ATOM    436  NH1 ARG A  54       6.838  20.021  36.627  1.00 49.43           N  
+ATOM    437  NH2 ARG A  54       6.037  19.424  34.560  1.00 44.89           N  
+ATOM    438  N   GLU A  55      11.542  17.982  34.922  1.00 14.40           N  
+ATOM    439  CA  GLU A  55      12.616  18.484  35.777  1.00 18.96           C  
+ATOM    440  C   GLU A  55      13.983  17.950  35.365  1.00 15.03           C  
+ATOM    441  O   GLU A  55      14.967  18.691  35.337  1.00 13.65           O  
+ATOM    442  CB  GLU A  55      12.335  18.123  37.240  1.00 20.18           C  
+ATOM    443  CG  GLU A  55      13.348  18.673  38.231  1.00 27.21           C  
+ATOM    444  CD  GLU A  55      13.525  20.176  38.117  1.00 30.48           C  
+ATOM    445  OE1 GLU A  55      12.515  20.882  37.911  1.00 32.00           O  
+ATOM    446  OE2 GLU A  55      14.673  20.653  38.246  1.00 30.82           O  
+ATOM    447  N   ALA A  56      14.046  16.664  35.041  1.00 15.12           N  
+ATOM    448  CA  ALA A  56      15.308  16.061  34.628  1.00 13.23           C  
+ATOM    449  C   ALA A  56      15.794  16.704  33.334  1.00 12.47           C  
+ATOM    450  O   ALA A  56      16.980  16.980  33.175  1.00 12.54           O  
+ATOM    451  CB  ALA A  56      15.137  14.559  34.439  1.00 12.68           C  
+ATOM    452  N   LEU A  57      14.873  16.938  32.404  1.00  8.74           N  
+ATOM    453  CA  LEU A  57      15.230  17.554  31.136  1.00  7.77           C  
+ATOM    454  C   LEU A  57      15.739  18.981  31.332  1.00  8.61           C  
+ATOM    455  O   LEU A  57      16.717  19.390  30.700  1.00  9.52           O  
+ATOM    456  CB  LEU A  57      14.023  17.558  30.189  1.00 10.14           C  
+ATOM    457  CG  LEU A  57      13.440  16.175  29.888  1.00  9.25           C  
+ATOM    458  CD1 LEU A  57      12.287  16.312  28.914  1.00 10.72           C  
+ATOM    459  CD2 LEU A  57      14.518  15.277  29.300  1.00 10.29           C  
+ATOM    460  N   LEU A  58      15.081  19.731  32.211  1.00  9.14           N  
+ATOM    461  CA  LEU A  58      15.472  21.111  32.480  1.00 10.13           C  
+ATOM    462  C   LEU A  58      16.850  21.191  33.132  1.00  9.44           C  
+ATOM    463  O   LEU A  58      17.678  22.021  32.756  1.00  9.82           O  
+ATOM    464  CB  LEU A  58      14.433  21.785  33.386  1.00 13.24           C  
+ATOM    465  CG  LEU A  58      14.756  23.201  33.871  1.00 18.30           C  
+ATOM    466  CD1 LEU A  58      14.880  24.140  32.686  1.00 21.51           C  
+ATOM    467  CD2 LEU A  58      13.657  23.679  34.814  1.00 25.65           C  
+ATOM    468  N   GLU A  59      17.090  20.322  34.107  1.00  8.78           N  
+ATOM    469  CA  GLU A  59      18.364  20.302  34.818  1.00 11.12           C  
+ATOM    470  C   GLU A  59      19.538  19.936  33.920  1.00 11.69           C  
+ATOM    471  O   GLU A  59      20.687  20.279  34.210  1.00 12.28           O  
+ATOM    472  CB  GLU A  59      18.304  19.309  35.980  1.00 13.15           C  
+ATOM    473  CG  GLU A  59      17.497  19.777  37.170  1.00 17.13           C  
+ATOM    474  CD  GLU A  59      17.449  18.742  38.275  1.00 18.20           C  
+ATOM    475  OE1 GLU A  59      18.404  17.944  38.381  1.00 18.34           O  
+ATOM    476  OE2 GLU A  59      16.466  18.734  39.045  1.00 19.18           O  
+ATOM    477  N   ASN A  60      19.249  19.245  32.826  1.00  9.78           N  
+ATOM    478  CA  ASN A  60      20.295  18.811  31.914  1.00 10.61           C  
+ATOM    479  C   ASN A  60      20.108  19.363  30.509  1.00 12.44           C  
+ATOM    480  O   ASN A  60      20.324  18.670  29.515  1.00 10.50           O  
+ATOM    481  CB  ASN A  60      20.327  17.286  31.914  1.00 11.88           C  
+ATOM    482  CG  ASN A  60      20.659  16.731  33.279  1.00 11.93           C  
+ATOM    483  OD1 ASN A  60      21.817  16.741  33.693  1.00 13.53           O  
+ATOM    484  ND2 ASN A  60      19.640  16.277  34.007  1.00  9.60           N  
+ATOM    485  N   ILE A  61      19.726  20.634  30.453  1.00 14.87           N  
+ATOM    486  CA  ILE A  61      19.486  21.340  29.203  1.00 14.76           C  
+ATOM    487  C   ILE A  61      20.688  21.322  28.253  1.00 15.03           C  
+ATOM    488  O   ILE A  61      20.517  21.351  27.035  1.00 13.45           O  
+ATOM    489  CB  ILE A  61      19.085  22.812  29.492  1.00 15.88           C  
+ATOM    490  CG1 ILE A  61      18.626  23.505  28.208  1.00 20.00           C  
+ATOM    491  CG2 ILE A  61      20.250  23.555  30.119  1.00 19.27           C  
+ATOM    492  CD1 ILE A  61      17.277  23.039  27.718  1.00 24.49           C  
+ATOM    493  N   ASP A  62      21.900  21.274  28.803  1.00 13.67           N  
+ATOM    494  CA  ASP A  62      23.103  21.264  27.972  1.00 14.54           C  
+ATOM    495  C   ASP A  62      23.280  19.967  27.191  1.00 14.65           C  
+ATOM    496  O   ASP A  62      23.929  19.953  26.146  1.00 18.15           O  
+ATOM    497  CB  ASP A  62      24.359  21.499  28.819  1.00 17.19           C  
+ATOM    498  CG  ASP A  62      24.426  22.899  29.397  1.00 23.32           C  
+ATOM    499  OD1 ASP A  62      23.613  23.757  28.991  1.00 22.32           O  
+ATOM    500  OD2 ASP A  62      25.304  23.141  30.253  1.00 23.74           O  
+ATOM    501  N   ILE A  63      22.711  18.880  27.699  1.00 12.30           N  
+ATOM    502  CA  ILE A  63      22.830  17.585  27.038  1.00 12.18           C  
+ATOM    503  C   ILE A  63      21.861  17.474  25.867  1.00 14.22           C  
+ATOM    504  O   ILE A  63      20.675  17.746  26.010  1.00 18.15           O  
+ATOM    505  CB  ILE A  63      22.543  16.420  28.018  1.00 13.92           C  
+ATOM    506  CG1 ILE A  63      23.548  16.441  29.172  1.00 17.28           C  
+ATOM    507  CG2 ILE A  63      22.620  15.091  27.280  1.00 14.00           C  
+ATOM    508  CD1 ILE A  63      24.995  16.287  28.735  1.00 17.06           C  
+ATOM    509  N   GLY A  64      22.375  17.081  24.708  1.00 14.14           N  
+ATOM    510  CA  GLY A  64      21.516  16.922  23.552  1.00 16.94           C  
+ATOM    511  C   GLY A  64      20.961  15.515  23.593  1.00 18.30           C  
+ATOM    512  O   GLY A  64      21.693  14.568  23.869  1.00 20.02           O  
+ATOM    513  N   TYR A  65      19.673  15.357  23.331  1.00 18.65           N  
+ATOM    514  CA  TYR A  65      19.100  14.024  23.372  1.00 18.31           C  
+ATOM    515  C   TYR A  65      17.954  13.851  22.395  1.00 20.44           C  
+ATOM    516  O   TYR A  65      17.351  14.821  21.934  1.00 19.03           O  
+ATOM    517  CB  TYR A  65      18.598  13.718  24.790  1.00 22.93           C  
+ATOM    518  CG  TYR A  65      17.282  14.393  25.118  1.00 22.93           C  
+ATOM    519  CD1 TYR A  65      16.071  13.842  24.693  1.00 27.91           C  
+ATOM    520  CD2 TYR A  65      17.249  15.608  25.797  1.00 24.79           C  
+ATOM    521  CE1 TYR A  65      14.862  14.486  24.929  1.00 26.74           C  
+ATOM    522  CE2 TYR A  65      16.042  16.264  26.040  1.00 26.83           C  
+ATOM    523  CZ  TYR A  65      14.853  15.695  25.600  1.00 28.42           C  
+ATOM    524  OH  TYR A  65      13.655  16.334  25.824  1.00 30.78           O  
+ATOM    525  N   GLU A  66      17.679  12.593  22.080  1.00 19.35           N  
+ATOM    526  CA  GLU A  66      16.576  12.221  21.212  1.00 18.13           C  
+ATOM    527  C   GLU A  66      15.814  11.238  22.081  1.00 17.07           C  
+ATOM    528  O   GLU A  66      16.422  10.477  22.836  1.00 13.89           O  
+ATOM    529  CB  GLU A  66      17.066  11.523  19.944  1.00 22.10           C  
+ATOM    530  CG  GLU A  66      17.781  12.427  18.959  1.00 31.96           C  
+ATOM    531  CD  GLU A  66      18.028  11.743  17.627  1.00 38.40           C  
+ATOM    532  OE1 GLU A  66      18.679  10.676  17.616  1.00 42.11           O  
+ATOM    533  OE2 GLU A  66      17.569  12.272  16.592  1.00 43.89           O  
+ATOM    534  N   LEU A  67      14.491  11.264  21.992  1.00 15.56           N  
+ATOM    535  CA  LEU A  67      13.666  10.376  22.794  1.00 14.40           C  
+ATOM    536  C   LEU A  67      12.745   9.543  21.909  1.00 14.70           C  
+ATOM    537  O   LEU A  67      11.996  10.080  21.093  1.00 15.80           O  
+ATOM    538  CB  LEU A  67      12.839  11.203  23.785  1.00 16.90           C  
+ATOM    539  CG  LEU A  67      11.914  10.470  24.757  1.00 19.24           C  
+ATOM    540  CD1 LEU A  67      12.727   9.532  25.637  1.00 21.66           C  
+ATOM    541  CD2 LEU A  67      11.172  11.489  25.610  1.00 20.68           C  
+ATOM    542  N   PHE A  68      12.818   8.227  22.076  1.00 11.13           N  
+ATOM    543  CA  PHE A  68      11.996   7.298  21.314  1.00 12.93           C  
+ATOM    544  C   PHE A  68      11.285   6.355  22.272  1.00 12.63           C  
+ATOM    545  O   PHE A  68      11.911   5.759  23.149  1.00 12.01           O  
+ATOM    546  CB  PHE A  68      12.866   6.479  20.355  1.00 12.05           C  
+ATOM    547  CG  PHE A  68      13.523   7.296  19.285  1.00 14.59           C  
+ATOM    548  CD1 PHE A  68      12.792   7.756  18.195  1.00 14.07           C  
+ATOM    549  CD2 PHE A  68      14.870   7.625  19.375  1.00 15.16           C  
+ATOM    550  CE1 PHE A  68      13.394   8.532  17.208  1.00 15.37           C  
+ATOM    551  CE2 PHE A  68      15.482   8.401  18.393  1.00 17.63           C  
+ATOM    552  CZ  PHE A  68      14.744   8.856  17.308  1.00 18.22           C  
+ATOM    553  N   LEU A  69       9.974   6.232  22.112  1.00 12.84           N  
+ATOM    554  CA  LEU A  69       9.198   5.334  22.955  1.00 13.24           C  
+ATOM    555  C   LEU A  69       8.765   4.137  22.123  1.00 14.32           C  
+ATOM    556  O   LEU A  69       8.332   4.289  20.978  1.00 13.65           O  
+ATOM    557  CB  LEU A  69       7.968   6.046  23.526  1.00 14.24           C  
+ATOM    558  CG  LEU A  69       8.206   6.979  24.718  1.00 18.28           C  
+ATOM    559  CD1 LEU A  69       9.175   8.085  24.331  1.00 18.52           C  
+ATOM    560  CD2 LEU A  69       6.879   7.565  25.175  1.00 19.14           C  
+ATOM    561  N   TRP A  70       8.900   2.949  22.702  1.00 12.36           N  
+ATOM    562  CA  TRP A  70       8.536   1.716  22.025  1.00 13.82           C  
+ATOM    563  C   TRP A  70       7.665   0.826  22.889  1.00 14.23           C  
+ATOM    564  O   TRP A  70       7.958   0.612  24.063  1.00 14.03           O  
+ATOM    565  CB  TRP A  70       9.783   0.908  21.663  1.00 10.85           C  
+ATOM    566  CG  TRP A  70      10.830   1.673  20.944  1.00 10.51           C  
+ATOM    567  CD1 TRP A  70      12.000   2.158  21.461  1.00 11.33           C  
+ATOM    568  CD2 TRP A  70      10.815   2.036  19.565  1.00  9.50           C  
+ATOM    569  NE1 TRP A  70      12.718   2.801  20.477  1.00 10.64           N  
+ATOM    570  CE2 TRP A  70      12.012   2.740  19.305  1.00  9.79           C  
+ATOM    571  CE3 TRP A  70       9.905   1.834  18.520  1.00 12.09           C  
+ATOM    572  CZ2 TRP A  70      12.322   3.243  18.038  1.00 11.85           C  
+ATOM    573  CZ3 TRP A  70      10.215   2.336  17.259  1.00 12.80           C  
+ATOM    574  CH2 TRP A  70      11.414   3.031  17.031  1.00 14.03           C  
+ATOM    575  N   LYS A  71       6.585   0.311  22.315  1.00 16.48           N  
+ATOM    576  CA  LYS A  71       5.751  -0.615  23.057  1.00 18.93           C  
+ATOM    577  C   LYS A  71       6.589  -1.886  22.981  1.00 22.72           C  
+ATOM    578  O   LYS A  71       7.369  -2.052  22.045  1.00 20.37           O  
+ATOM    579  CB  LYS A  71       4.404  -0.808  22.362  1.00 21.31           C  
+ATOM    580  CG  LYS A  71       3.515   0.422  22.417  1.00 26.79           C  
+ATOM    581  CD  LYS A  71       2.153   0.147  21.800  1.00 34.56           C  
+ATOM    582  CE  LYS A  71       1.226   1.341  21.964  1.00 38.54           C  
+ATOM    583  NZ  LYS A  71       1.787   2.569  21.336  1.00 42.94           N  
+ATOM    584  N   LYS A  72       6.453  -2.775  23.957  1.00 25.48           N  
+ATOM    585  CA  LYS A  72       7.250  -3.995  23.956  1.00 28.37           C  
+ATOM    586  C   LYS A  72       7.172  -4.780  22.646  1.00 25.79           C  
+ATOM    587  O   LYS A  72       8.112  -5.485  22.282  1.00 26.09           O  
+ATOM    588  CB  LYS A  72       6.847  -4.875  25.142  1.00 33.91           C  
+ATOM    589  CG  LYS A  72       7.142  -4.215  26.484  1.00 41.92           C  
+ATOM    590  CD  LYS A  72       6.760  -5.093  27.661  1.00 49.29           C  
+ATOM    591  CE  LYS A  72       7.062  -4.389  28.976  1.00 53.30           C  
+ATOM    592  NZ  LYS A  72       6.675  -5.210  30.154  1.00 56.26           N  
+ATOM    593  N   ASN A  73       6.063  -4.638  21.929  1.00 22.90           N  
+ATOM    594  CA  ASN A  73       5.882  -5.339  20.663  1.00 22.29           C  
+ATOM    595  C   ASN A  73       6.590  -4.636  19.501  1.00 18.11           C  
+ATOM    596  O   ASN A  73       6.606  -5.141  18.379  1.00 16.58           O  
+ATOM    597  CB  ASN A  73       4.388  -5.471  20.351  1.00 26.17           C  
+ATOM    598  CG  ASN A  73       3.713  -4.126  20.148  1.00 30.05           C  
+ATOM    599  OD1 ASN A  73       3.996  -3.417  19.182  1.00 34.23           O  
+ATOM    600  ND2 ASN A  73       2.815  -3.767  21.060  1.00 33.29           N  
+ATOM    601  N   GLU A  74       7.181  -3.476  19.774  1.00 15.76           N  
+ATOM    602  CA  GLU A  74       7.876  -2.716  18.737  1.00 12.60           C  
+ATOM    603  C   GLU A  74       9.394  -2.799  18.865  1.00 10.48           C  
+ATOM    604  O   GLU A  74      10.123  -2.059  18.200  1.00  9.42           O  
+ATOM    605  CB  GLU A  74       7.441  -1.250  18.779  1.00 16.35           C  
+ATOM    606  CG  GLU A  74       5.944  -1.042  18.607  1.00 17.92           C  
+ATOM    607  CD  GLU A  74       5.549   0.420  18.673  1.00 20.34           C  
+ATOM    608  OE1 GLU A  74       5.999   1.117  19.606  1.00 16.46           O  
+ATOM    609  OE2 GLU A  74       4.782   0.874  17.800  1.00 19.67           O  
+ATOM    610  N   VAL A  75       9.871  -3.700  19.715  1.00  9.06           N  
+ATOM    611  CA  VAL A  75      11.307  -3.853  19.904  1.00 10.52           C  
+ATOM    612  C   VAL A  75      12.000  -4.150  18.577  1.00 10.22           C  
+ATOM    613  O   VAL A  75      13.149  -3.753  18.366  1.00 11.77           O  
+ATOM    614  CB  VAL A  75      11.630  -4.984  20.903  1.00 11.34           C  
+ATOM    615  CG1 VAL A  75      13.144  -5.106  21.081  1.00 15.60           C  
+ATOM    616  CG2 VAL A  75      10.972  -4.693  22.241  1.00 17.33           C  
+ATOM    617  N   ASP A  76      11.312  -4.838  17.672  1.00  9.91           N  
+ATOM    618  CA  ASP A  76      11.929  -5.147  16.387  1.00 12.34           C  
+ATOM    619  C   ASP A  76      12.226  -3.892  15.563  1.00  9.21           C  
+ATOM    620  O   ASP A  76      13.214  -3.852  14.831  1.00  9.36           O  
+ATOM    621  CB  ASP A  76      11.070  -6.145  15.589  1.00 14.04           C  
+ATOM    622  CG  ASP A  76       9.660  -5.646  15.307  1.00 17.54           C  
+ATOM    623  OD1 ASP A  76       9.238  -4.607  15.857  1.00 13.26           O  
+ATOM    624  OD2 ASP A  76       8.960  -6.325  14.525  1.00 15.98           O  
+ATOM    625  N   ILE A  77      11.388  -2.865  15.690  1.00  7.60           N  
+ATOM    626  CA  ILE A  77      11.612  -1.620  14.956  1.00  8.71           C  
+ATOM    627  C   ILE A  77      12.832  -0.927  15.568  1.00  9.62           C  
+ATOM    628  O   ILE A  77      13.683  -0.391  14.857  1.00  8.90           O  
+ATOM    629  CB  ILE A  77      10.393  -0.676  15.051  1.00 10.93           C  
+ATOM    630  CG1 ILE A  77       9.149  -1.364  14.476  1.00 10.71           C  
+ATOM    631  CG2 ILE A  77      10.673   0.611  14.282  1.00 10.85           C  
+ATOM    632  CD1 ILE A  77       7.862  -0.594  14.705  1.00 12.30           C  
+ATOM    633  N   PHE A  78      12.907  -0.944  16.894  1.00  7.81           N  
+ATOM    634  CA  PHE A  78      14.037  -0.347  17.592  1.00  8.65           C  
+ATOM    635  C   PHE A  78      15.349  -0.969  17.115  1.00 11.53           C  
+ATOM    636  O   PHE A  78      16.296  -0.264  16.767  1.00 11.69           O  
+ATOM    637  CB  PHE A  78      13.900  -0.555  19.101  1.00  8.63           C  
+ATOM    638  CG  PHE A  78      15.210  -0.506  19.831  1.00 10.37           C  
+ATOM    639  CD1 PHE A  78      15.906   0.690  19.962  1.00 13.42           C  
+ATOM    640  CD2 PHE A  78      15.776  -1.673  20.335  1.00 11.53           C  
+ATOM    641  CE1 PHE A  78      17.155   0.722  20.581  1.00 15.39           C  
+ATOM    642  CE2 PHE A  78      17.025  -1.651  20.955  1.00 11.81           C  
+ATOM    643  CZ  PHE A  78      17.713  -0.451  21.077  1.00 14.87           C  
+ATOM    644  N   LEU A  79      15.400  -2.296  17.108  1.00 10.16           N  
+ATOM    645  CA  LEU A  79      16.603  -3.000  16.689  1.00  9.69           C  
+ATOM    646  C   LEU A  79      16.961  -2.733  15.231  1.00 10.98           C  
+ATOM    647  O   LEU A  79      18.139  -2.623  14.893  1.00 10.05           O  
+ATOM    648  CB  LEU A  79      16.443  -4.500  16.940  1.00 11.59           C  
+ATOM    649  CG  LEU A  79      16.470  -4.879  18.425  1.00  9.25           C  
+ATOM    650  CD1 LEU A  79      15.977  -6.304  18.620  1.00 13.42           C  
+ATOM    651  CD2 LEU A  79      17.888  -4.720  18.953  1.00 12.07           C  
+ATOM    652  N   LYS A  80      15.954  -2.620  14.369  1.00 10.41           N  
+ATOM    653  CA  LYS A  80      16.218  -2.349  12.958  1.00 10.15           C  
+ATOM    654  C   LYS A  80      16.780  -0.939  12.799  1.00 10.76           C  
+ATOM    655  O   LYS A  80      17.782  -0.733  12.114  1.00 10.37           O  
+ATOM    656  CB  LYS A  80      14.940  -2.495  12.126  1.00 12.27           C  
+ATOM    657  CG  LYS A  80      15.145  -2.238  10.633  1.00 16.44           C  
+ATOM    658  CD  LYS A  80      16.171  -3.193  10.040  1.00 20.17           C  
+ATOM    659  CE  LYS A  80      16.448  -2.877   8.575  1.00 24.66           C  
+ATOM    660  NZ  LYS A  80      17.426  -3.837   7.977  1.00 25.43           N  
+ATOM    661  N   ASN A  81      16.134   0.032  13.438  1.00  8.82           N  
+ATOM    662  CA  ASN A  81      16.580   1.417  13.367  1.00  9.52           C  
+ATOM    663  C   ASN A  81      17.985   1.579  13.938  1.00  9.21           C  
+ATOM    664  O   ASN A  81      18.736   2.458  13.516  1.00  8.16           O  
+ATOM    665  CB  ASN A  81      15.615   2.325  14.133  1.00  6.26           C  
+ATOM    666  CG  ASN A  81      14.281   2.498  13.423  1.00  9.62           C  
+ATOM    667  OD1 ASN A  81      14.035   1.894  12.378  1.00  9.19           O  
+ATOM    668  ND2 ASN A  81      13.414   3.328  13.993  1.00  6.70           N  
+ATOM    669  N   LEU A  82      18.331   0.736  14.904  1.00  8.29           N  
+ATOM    670  CA  LEU A  82      19.650   0.796  15.531  1.00  9.25           C  
+ATOM    671  C   LEU A  82      20.761   0.619  14.493  1.00 10.59           C  
+ATOM    672  O   LEU A  82      21.870   1.130  14.661  1.00  9.88           O  
+ATOM    673  CB  LEU A  82      19.762  -0.282  16.614  1.00  9.95           C  
+ATOM    674  CG  LEU A  82      21.043  -0.292  17.456  1.00 14.09           C  
+ATOM    675  CD1 LEU A  82      21.245   1.066  18.111  1.00 13.71           C  
+ATOM    676  CD2 LEU A  82      20.950  -1.389  18.509  1.00 10.74           C  
+ATOM    677  N   GLU A  83      20.458  -0.095  13.413  1.00  9.50           N  
+ATOM    678  CA  GLU A  83      21.448  -0.317  12.362  1.00 11.88           C  
+ATOM    679  C   GLU A  83      21.947   0.992  11.755  1.00 12.86           C  
+ATOM    680  O   GLU A  83      23.071   1.058  11.257  1.00 13.04           O  
+ATOM    681  CB  GLU A  83      20.865  -1.191  11.249  1.00 12.61           C  
+ATOM    682  CG  GLU A  83      20.452  -2.577  11.705  1.00 14.42           C  
+ATOM    683  CD  GLU A  83      19.991  -3.454  10.558  1.00 18.48           C  
+ATOM    684  OE1 GLU A  83      19.859  -2.939   9.430  1.00 18.66           O  
+ATOM    685  OE2 GLU A  83      19.754  -4.658  10.787  1.00 22.59           O  
+ATOM    686  N   LYS A  84      21.115   2.030  11.799  1.00 11.63           N  
+ATOM    687  CA  LYS A  84      21.477   3.330  11.232  1.00 14.14           C  
+ATOM    688  C   LYS A  84      21.896   4.374  12.268  1.00 16.24           C  
+ATOM    689  O   LYS A  84      22.274   5.489  11.911  1.00 17.54           O  
+ATOM    690  CB  LYS A  84      20.302   3.900  10.431  1.00 13.67           C  
+ATOM    691  CG  LYS A  84      19.888   3.087   9.219  1.00 18.74           C  
+ATOM    692  CD  LYS A  84      18.672   3.720   8.549  1.00 19.43           C  
+ATOM    693  CE  LYS A  84      18.253   2.953   7.308  1.00 25.40           C  
+ATOM    694  NZ  LYS A  84      19.315   2.959   6.266  1.00 30.14           N  
+ATOM    695  N   SER A  85      21.823   4.016  13.544  1.00 12.83           N  
+ATOM    696  CA  SER A  85      22.165   4.943  14.616  1.00 16.34           C  
+ATOM    697  C   SER A  85      23.641   4.895  14.983  1.00 17.60           C  
+ATOM    698  O   SER A  85      24.186   3.830  15.267  1.00 14.60           O  
+ATOM    699  CB  SER A  85      21.316   4.638  15.855  1.00 18.24           C  
+ATOM    700  OG  SER A  85      21.550   5.583  16.885  1.00 25.32           O  
+ATOM    701  N   GLU A  86      24.281   6.058  14.976  1.00 16.65           N  
+ATOM    702  CA  GLU A  86      25.691   6.148  15.318  1.00 20.54           C  
+ATOM    703  C   GLU A  86      25.847   6.356  16.818  1.00 19.99           C  
+ATOM    704  O   GLU A  86      25.795   7.484  17.308  1.00 23.78           O  
+ATOM    705  CB  GLU A  86      26.349   7.301  14.555  1.00 25.96           C  
+ATOM    706  CG  GLU A  86      27.754   7.656  15.035  1.00 39.12           C  
+ATOM    707  CD  GLU A  86      28.656   6.445  15.179  1.00 45.75           C  
+ATOM    708  OE1 GLU A  86      28.753   5.654  14.216  1.00 50.19           O  
+ATOM    709  OE2 GLU A  86      29.275   6.290  16.256  1.00 50.06           O  
+ATOM    710  N   VAL A  87      26.020   5.254  17.540  1.00 20.16           N  
+ATOM    711  CA  VAL A  87      26.198   5.286  18.989  1.00 18.68           C  
+ATOM    712  C   VAL A  87      27.523   4.612  19.338  1.00 18.77           C  
+ATOM    713  O   VAL A  87      27.977   3.724  18.616  1.00 17.50           O  
+ATOM    714  CB  VAL A  87      25.051   4.552  19.704  1.00 18.06           C  
+ATOM    715  CG1 VAL A  87      23.748   5.309  19.504  1.00 20.67           C  
+ATOM    716  CG2 VAL A  87      24.926   3.138  19.163  1.00 18.82           C  
+ATOM    717  N   ASP A  88      28.144   5.031  20.439  1.00 16.11           N  
+ATOM    718  CA  ASP A  88      29.428   4.461  20.846  1.00 16.31           C  
+ATOM    719  C   ASP A  88      29.521   4.009  22.300  1.00 20.76           C  
+ATOM    720  O   ASP A  88      30.507   3.385  22.698  1.00 25.38           O  
+ATOM    721  CB  ASP A  88      30.556   5.454  20.570  1.00 19.28           C  
+ATOM    722  CG  ASP A  88      30.224   6.857  21.036  1.00 18.16           C  
+ATOM    723  OD1 ASP A  88      29.422   7.004  21.984  1.00 19.26           O  
+ATOM    724  OD2 ASP A  88      30.779   7.813  20.458  1.00 20.16           O  
+ATOM    725  N   GLY A  89      28.514   4.344  23.094  1.00 14.98           N  
+ATOM    726  CA  GLY A  89      28.505   3.944  24.492  1.00 11.49           C  
+ATOM    727  C   GLY A  89      27.131   3.392  24.807  1.00 11.28           C  
+ATOM    728  O   GLY A  89      26.179   3.676  24.081  1.00 11.07           O  
+ATOM    729  N   LEU A  90      27.014   2.623  25.887  1.00  7.86           N  
+ATOM    730  CA  LEU A  90      25.732   2.028  26.248  1.00  8.27           C  
+ATOM    731  C   LEU A  90      25.364   2.179  27.720  1.00  6.84           C  
+ATOM    732  O   LEU A  90      26.191   1.947  28.599  1.00  8.06           O  
+ATOM    733  CB  LEU A  90      25.743   0.539  25.897  1.00  9.22           C  
+ATOM    734  CG  LEU A  90      24.518  -0.287  26.296  1.00  7.17           C  
+ATOM    735  CD1 LEU A  90      23.307   0.167  25.493  1.00  7.45           C  
+ATOM    736  CD2 LEU A  90      24.793  -1.763  26.048  1.00 10.76           C  
+ATOM    737  N   LEU A  91      24.115   2.563  27.969  1.00  6.67           N  
+ATOM    738  CA  LEU A  91      23.578   2.701  29.323  1.00  5.88           C  
+ATOM    739  C   LEU A  91      22.297   1.877  29.362  1.00  7.65           C  
+ATOM    740  O   LEU A  91      21.460   1.981  28.461  1.00  7.92           O  
+ATOM    741  CB  LEU A  91      23.271   4.165  29.649  1.00  6.06           C  
+ATOM    742  CG  LEU A  91      24.490   5.069  29.862  1.00  7.72           C  
+ATOM    743  CD1 LEU A  91      24.037   6.516  30.030  1.00  9.04           C  
+ATOM    744  CD2 LEU A  91      25.261   4.604  31.098  1.00 11.40           C  
+ATOM    745  N   VAL A  92      22.147   1.056  30.397  1.00  7.74           N  
+ATOM    746  CA  VAL A  92      20.973   0.196  30.526  1.00  9.41           C  
+ATOM    747  C   VAL A  92      20.280   0.360  31.876  1.00  8.85           C  
+ATOM    748  O   VAL A  92      20.929   0.302  32.920  1.00  9.80           O  
+ATOM    749  CB  VAL A  92      21.368  -1.292  30.351  1.00  9.33           C  
+ATOM    750  CG1 VAL A  92      20.167  -2.188  30.602  1.00 11.21           C  
+ATOM    751  CG2 VAL A  92      21.923  -1.520  28.949  1.00  9.68           C  
+ATOM    752  N   TYR A  93      18.962   0.546  31.846  1.00  8.30           N  
+ATOM    753  CA  TYR A  93      18.179   0.713  33.072  1.00  7.46           C  
+ATOM    754  C   TYR A  93      16.867  -0.059  33.053  1.00  9.64           C  
+ATOM    755  O   TYR A  93      16.169  -0.096  32.039  1.00  9.58           O  
+ATOM    756  CB  TYR A  93      17.833   2.185  33.292  1.00  7.49           C  
+ATOM    757  CG  TYR A  93      19.013   3.115  33.250  1.00  7.32           C  
+ATOM    758  CD1 TYR A  93      19.727   3.425  34.408  1.00 10.22           C  
+ATOM    759  CD2 TYR A  93      19.428   3.677  32.045  1.00  8.50           C  
+ATOM    760  CE1 TYR A  93      20.827   4.275  34.363  1.00  7.50           C  
+ATOM    761  CE2 TYR A  93      20.519   4.520  31.989  1.00 10.65           C  
+ATOM    762  CZ  TYR A  93      21.217   4.818  33.149  1.00  9.17           C  
+ATOM    763  OH  TYR A  93      22.297   5.665  33.083  1.00  9.81           O  
+ATOM    764  N   CYS A  94      16.525  -0.652  34.191  1.00  9.58           N  
+ATOM    765  CA  CYS A  94      15.270  -1.383  34.321  1.00 11.58           C  
+ATOM    766  C   CYS A  94      14.964  -1.598  35.795  1.00 11.27           C  
+ATOM    767  O   CYS A  94      15.816  -1.357  36.656  1.00 12.83           O  
+ATOM    768  CB  CYS A  94      15.356  -2.754  33.632  1.00 11.71           C  
+ATOM    769  SG  CYS A  94      16.168  -4.070  34.608  1.00 12.06           S  
+ATOM    770  N   ASP A  95      13.733  -2.008  36.085  1.00 13.29           N  
+ATOM    771  CA  ASP A  95      13.353  -2.344  37.450  1.00 15.28           C  
+ATOM    772  C   ASP A  95      13.033  -3.840  37.408  1.00 15.81           C  
+ATOM    773  O   ASP A  95      13.032  -4.440  36.335  1.00 14.16           O  
+ATOM    774  CB  ASP A  95      12.152  -1.522  37.960  1.00 14.63           C  
+ATOM    775  CG  ASP A  95      11.055  -1.342  36.927  1.00 16.19           C  
+ATOM    776  OD1 ASP A  95      10.946  -2.160  35.993  1.00 16.16           O  
+ATOM    777  OD2 ASP A  95      10.279  -0.370  37.074  1.00 16.66           O  
+ATOM    778  N   ASP A  96      12.781  -4.451  38.561  1.00 18.96           N  
+ATOM    779  CA  ASP A  96      12.504  -5.884  38.602  1.00 20.56           C  
+ATOM    780  C   ASP A  96      11.413  -6.363  37.654  1.00 20.25           C  
+ATOM    781  O   ASP A  96      11.549  -7.411  37.027  1.00 19.79           O  
+ATOM    782  CB  ASP A  96      12.154  -6.317  40.026  1.00 25.74           C  
+ATOM    783  CG  ASP A  96      13.353  -6.310  40.945  1.00 27.79           C  
+ATOM    784  OD1 ASP A  96      14.408  -6.847  40.547  1.00 33.13           O  
+ATOM    785  OD2 ASP A  96      13.237  -5.779  42.067  1.00 35.26           O  
+ATOM    786  N   GLU A  97      10.333  -5.599  37.556  1.00 20.92           N  
+ATOM    787  CA  GLU A  97       9.216  -5.962  36.693  1.00 22.17           C  
+ATOM    788  C   GLU A  97       9.593  -6.037  35.216  1.00 22.07           C  
+ATOM    789  O   GLU A  97       8.908  -6.691  34.431  1.00 21.21           O  
+ATOM    790  CB  GLU A  97       8.068  -4.964  36.869  1.00 25.44           C  
+ATOM    791  CG  GLU A  97       7.371  -5.031  38.219  1.00 37.78           C  
+ATOM    792  CD  GLU A  97       8.317  -4.805  39.384  1.00 43.22           C  
+ATOM    793  OE1 GLU A  97       9.043  -3.786  39.372  1.00 45.28           O  
+ATOM    794  OE2 GLU A  97       8.330  -5.642  40.314  1.00 42.89           O  
+ATOM    795  N   ASN A  98      10.685  -5.380  34.840  1.00 17.80           N  
+ATOM    796  CA  ASN A  98      11.110  -5.371  33.443  1.00 15.94           C  
+ATOM    797  C   ASN A  98      12.511  -5.926  33.204  1.00 16.06           C  
+ATOM    798  O   ASN A  98      13.054  -5.792  32.104  1.00 13.18           O  
+ATOM    799  CB  ASN A  98      11.031  -3.942  32.901  1.00 16.46           C  
+ATOM    800  CG  ASN A  98       9.621  -3.391  32.918  1.00 19.73           C  
+ATOM    801  OD1 ASN A  98       8.775  -3.797  32.120  1.00 23.19           O  
+ATOM    802  ND2 ASN A  98       9.354  -2.468  33.837  1.00 17.02           N  
+ATOM    803  N   LYS A  99      13.088  -6.561  34.218  1.00 13.73           N  
+ATOM    804  CA  LYS A  99      14.437  -7.107  34.102  1.00 14.87           C  
+ATOM    805  C   LYS A  99      14.580  -8.218  33.063  1.00 14.96           C  
+ATOM    806  O   LYS A  99      15.552  -8.238  32.307  1.00 14.14           O  
+ATOM    807  CB  LYS A  99      14.920  -7.605  35.468  1.00 16.79           C  
+ATOM    808  CG  LYS A  99      16.342  -8.144  35.460  1.00 18.70           C  
+ATOM    809  CD  LYS A  99      16.878  -8.325  36.875  1.00 25.73           C  
+ATOM    810  CE  LYS A  99      16.023  -9.280  37.685  1.00 30.36           C  
+ATOM    811  NZ  LYS A  99      16.496  -9.377  39.094  1.00 34.03           N  
+ATOM    812  N   VAL A 100      13.628  -9.147  33.025  1.00 15.47           N  
+ATOM    813  CA  VAL A 100      13.688 -10.233  32.049  1.00 14.52           C  
+ATOM    814  C   VAL A 100      13.612  -9.647  30.641  1.00 13.62           C  
+ATOM    815  O   VAL A 100      14.373 -10.028  29.752  1.00 13.40           O  
+ATOM    816  CB  VAL A 100      12.520 -11.229  32.240  1.00 17.58           C  
+ATOM    817  CG1 VAL A 100      12.531 -12.268  31.124  1.00 14.99           C  
+ATOM    818  CG2 VAL A 100      12.641 -11.914  33.593  1.00 18.88           C  
+ATOM    819  N   PHE A 101      12.694  -8.707  30.454  1.00 14.49           N  
+ATOM    820  CA  PHE A 101      12.518  -8.053  29.166  1.00 16.41           C  
+ATOM    821  C   PHE A 101      13.790  -7.329  28.728  1.00 16.42           C  
+ATOM    822  O   PHE A 101      14.326  -7.593  27.650  1.00 13.50           O  
+ATOM    823  CB  PHE A 101      11.368  -7.052  29.243  1.00 16.85           C  
+ATOM    824  CG  PHE A 101      11.188  -6.238  27.995  1.00 21.20           C  
+ATOM    825  CD1 PHE A 101      10.807  -6.843  26.801  1.00 22.47           C  
+ATOM    826  CD2 PHE A 101      11.394  -4.864  28.013  1.00 24.04           C  
+ATOM    827  CE1 PHE A 101      10.633  -6.091  25.642  1.00 24.25           C  
+ATOM    828  CE2 PHE A 101      11.224  -4.101  26.861  1.00 28.34           C  
+ATOM    829  CZ  PHE A 101      10.842  -4.716  25.672  1.00 27.51           C  
+HETATM  830  N   MSE A 102      14.271  -6.413  29.562  1.00 15.07           N  
+HETATM  831  CA  MSE A 102      15.471  -5.656  29.229  1.00 15.73           C  
+HETATM  832  C   MSE A 102      16.697  -6.542  29.030  1.00 15.29           C  
+HETATM  833  O   MSE A 102      17.510  -6.291  28.138  1.00 14.86           O  
+HETATM  834  CB  MSE A 102      15.761  -4.609  30.308  1.00 16.50           C  
+HETATM  835  CG  MSE A 102      16.999  -3.766  30.031  1.00 12.98           C  
+HETATM  836 SE   MSE A 102      16.938  -2.880  28.300  1.00 27.13          SE  
+HETATM  837  CE  MSE A 102      15.668  -1.533  28.732  1.00  8.64           C  
+ATOM    838  N   SER A 103      16.835  -7.578  29.852  1.00 17.48           N  
+ATOM    839  CA  SER A 103      17.978  -8.478  29.733  1.00 17.27           C  
+ATOM    840  C   SER A 103      18.018  -9.139  28.360  1.00 17.75           C  
+ATOM    841  O   SER A 103      19.089  -9.324  27.783  1.00 18.72           O  
+ATOM    842  CB  SER A 103      17.930  -9.555  30.822  1.00 17.33           C  
+ATOM    843  OG  SER A 103      18.125  -8.986  32.103  1.00 22.22           O  
+ATOM    844  N   LYS A 104      16.848  -9.489  27.836  1.00 18.40           N  
+ATOM    845  CA  LYS A 104      16.772 -10.126  26.526  1.00 17.38           C  
+ATOM    846  C   LYS A 104      17.196  -9.150  25.431  1.00 17.58           C  
+ATOM    847  O   LYS A 104      17.929  -9.518  24.512  1.00 19.01           O  
+ATOM    848  CB  LYS A 104      15.349 -10.623  26.261  1.00 18.69           C  
+ATOM    849  CG  LYS A 104      15.172 -11.313  24.916  1.00 22.54           C  
+ATOM    850  CD  LYS A 104      13.791 -11.952  24.792  1.00 23.95           C  
+ATOM    851  CE  LYS A 104      12.674 -10.929  24.964  1.00 27.27           C  
+ATOM    852  NZ  LYS A 104      11.319 -11.539  24.823  1.00 29.03           N  
+ATOM    853  N   ILE A 105      16.734  -7.906  25.533  1.00 16.37           N  
+ATOM    854  CA  ILE A 105      17.081  -6.884  24.551  1.00 16.07           C  
+ATOM    855  C   ILE A 105      18.596  -6.688  24.526  1.00 14.20           C  
+ATOM    856  O   ILE A 105      19.206  -6.640  23.458  1.00 15.34           O  
+ATOM    857  CB  ILE A 105      16.404  -5.529  24.878  1.00 15.75           C  
+ATOM    858  CG1 ILE A 105      14.885  -5.662  24.757  1.00 18.48           C  
+ATOM    859  CG2 ILE A 105      16.901  -4.445  23.925  1.00 16.56           C  
+ATOM    860  CD1 ILE A 105      14.134  -4.377  25.044  1.00 22.69           C  
+ATOM    861  N   VAL A 106      19.198  -6.572  25.706  1.00 11.65           N  
+ATOM    862  CA  VAL A 106      20.641  -6.388  25.798  1.00 13.23           C  
+ATOM    863  C   VAL A 106      21.380  -7.546  25.132  1.00 17.19           C  
+ATOM    864  O   VAL A 106      22.370  -7.336  24.431  1.00 15.73           O  
+ATOM    865  CB  VAL A 106      21.103  -6.275  27.268  1.00 14.34           C  
+ATOM    866  CG1 VAL A 106      22.621  -6.188  27.332  1.00 14.51           C  
+ATOM    867  CG2 VAL A 106      20.482  -5.042  27.909  1.00 12.30           C  
+ATOM    868  N   ASP A 107      20.894  -8.767  25.344  1.00 15.92           N  
+ATOM    869  CA  ASP A 107      21.528  -9.939  24.748  1.00 19.28           C  
+ATOM    870  C   ASP A 107      21.531  -9.877  23.224  1.00 18.25           C  
+ATOM    871  O   ASP A 107      22.408 -10.453  22.581  1.00 19.40           O  
+ATOM    872  CB  ASP A 107      20.820 -11.232  25.174  1.00 21.10           C  
+ATOM    873  CG  ASP A 107      20.957 -11.522  26.654  1.00 24.44           C  
+ATOM    874  OD1 ASP A 107      22.031 -11.238  27.225  1.00 24.29           O  
+ATOM    875  OD2 ASP A 107      19.993 -12.057  27.244  1.00 26.54           O  
+ATOM    876  N   ASN A 108      20.550  -9.187  22.650  1.00 16.67           N  
+ATOM    877  CA  ASN A 108      20.448  -9.090  21.196  1.00 16.97           C  
+ATOM    878  C   ASN A 108      21.076  -7.848  20.570  1.00 15.91           C  
+ATOM    879  O   ASN A 108      20.954  -7.636  19.366  1.00 13.39           O  
+ATOM    880  CB  ASN A 108      18.984  -9.189  20.759  1.00 19.30           C  
+ATOM    881  CG  ASN A 108      18.415 -10.582  20.944  1.00 23.83           C  
+ATOM    882  OD1 ASN A 108      18.184 -11.032  22.068  1.00 26.90           O  
+ATOM    883  ND2 ASN A 108      18.194 -11.278  19.835  1.00 22.68           N  
+ATOM    884  N   LEU A 109      21.741  -7.026  21.374  1.00 14.98           N  
+ATOM    885  CA  LEU A 109      22.385  -5.828  20.840  1.00 14.18           C  
+ATOM    886  C   LEU A 109      23.672  -6.221  20.135  1.00 16.48           C  
+ATOM    887  O   LEU A 109      24.253  -7.265  20.431  1.00 14.47           O  
+ATOM    888  CB  LEU A 109      22.727  -4.847  21.963  1.00 11.94           C  
+ATOM    889  CG  LEU A 109      21.578  -4.194  22.728  1.00  9.62           C  
+ATOM    890  CD1 LEU A 109      22.146  -3.384  23.887  1.00  8.05           C  
+ATOM    891  CD2 LEU A 109      20.769  -3.304  21.795  1.00  8.93           C  
+ATOM    892  N   PRO A 110      24.137  -5.388  19.190  1.00 16.03           N  
+ATOM    893  CA  PRO A 110      25.377  -5.682  18.467  1.00 18.68           C  
+ATOM    894  C   PRO A 110      26.539  -5.848  19.445  1.00 18.36           C  
+ATOM    895  O   PRO A 110      26.588  -5.189  20.486  1.00 16.80           O  
+ATOM    896  CB  PRO A 110      25.551  -4.459  17.572  1.00 17.68           C  
+ATOM    897  CG  PRO A 110      24.137  -4.055  17.288  1.00 20.90           C  
+ATOM    898  CD  PRO A 110      23.488  -4.181  18.649  1.00 17.75           C  
+ATOM    899  N   THR A 111      27.473  -6.725  19.102  1.00 17.87           N  
+ATOM    900  CA  THR A 111      28.631  -6.987  19.946  1.00 19.17           C  
+ATOM    901  C   THR A 111      29.378  -5.717  20.354  1.00 18.59           C  
+ATOM    902  O   THR A 111      29.683  -5.518  21.529  1.00 15.29           O  
+ATOM    903  CB  THR A 111      29.625  -7.918  19.230  1.00 18.45           C  
+ATOM    904  OG1 THR A 111      28.975  -9.154  18.913  1.00 26.33           O  
+ATOM    905  CG2 THR A 111      30.828  -8.193  20.116  1.00 22.32           C  
+ATOM    906  N   ALA A 112      29.671  -4.864  19.377  1.00 16.37           N  
+ATOM    907  CA  ALA A 112      30.402  -3.627  19.631  1.00 18.47           C  
+ATOM    908  C   ALA A 112      29.717  -2.716  20.643  1.00 17.46           C  
+ATOM    909  O   ALA A 112      30.381  -2.010  21.401  1.00 19.35           O  
+ATOM    910  CB  ALA A 112      30.624  -2.875  18.321  1.00 18.49           C  
+ATOM    911  N   ILE A 113      28.390  -2.731  20.658  1.00 12.89           N  
+ATOM    912  CA  ILE A 113      27.644  -1.887  21.583  1.00 16.15           C  
+ATOM    913  C   ILE A 113      27.695  -2.444  23.001  1.00 15.76           C  
+ATOM    914  O   ILE A 113      27.925  -1.706  23.959  1.00 17.40           O  
+ATOM    915  CB  ILE A 113      26.179  -1.734  21.130  1.00 15.62           C  
+ATOM    916  CG1 ILE A 113      26.143  -1.026  19.771  1.00 16.32           C  
+ATOM    917  CG2 ILE A 113      25.391  -0.936  22.162  1.00 15.49           C  
+ATOM    918  CD1 ILE A 113      24.753  -0.743  19.245  1.00 16.88           C  
+ATOM    919  N   LYS A 114      27.491  -3.749  23.134  1.00 16.40           N  
+ATOM    920  CA  LYS A 114      27.527  -4.383  24.446  1.00 17.88           C  
+ATOM    921  C   LYS A 114      28.898  -4.255  25.099  1.00 18.65           C  
+ATOM    922  O   LYS A 114      29.004  -4.206  26.323  1.00 19.90           O  
+ATOM    923  CB  LYS A 114      27.149  -5.863  24.332  1.00 20.13           C  
+ATOM    924  CG  LYS A 114      25.693  -6.097  23.967  1.00 23.14           C  
+ATOM    925  CD  LYS A 114      25.324  -7.573  24.001  1.00 28.04           C  
+ATOM    926  CE  LYS A 114      25.952  -8.340  22.854  1.00 31.86           C  
+ATOM    927  NZ  LYS A 114      25.460  -9.747  22.805  1.00 36.71           N  
+ATOM    928  N   ARG A 115      29.946  -4.185  24.285  1.00 19.13           N  
+ATOM    929  CA  ARG A 115      31.299  -4.081  24.819  1.00 21.63           C  
+ATOM    930  C   ARG A 115      31.620  -2.708  25.393  1.00 21.69           C  
+ATOM    931  O   ARG A 115      32.625  -2.540  26.082  1.00 19.57           O  
+ATOM    932  CB  ARG A 115      32.322  -4.458  23.745  1.00 29.14           C  
+ATOM    933  CG  ARG A 115      32.066  -5.832  23.150  1.00 40.81           C  
+ATOM    934  CD  ARG A 115      33.338  -6.510  22.674  1.00 51.82           C  
+ATOM    935  NE  ARG A 115      33.045  -7.808  22.070  1.00 60.88           N  
+ATOM    936  CZ  ARG A 115      33.959  -8.734  21.800  1.00 65.54           C  
+ATOM    937  NH1 ARG A 115      35.235  -8.513  22.083  1.00 68.77           N  
+ATOM    938  NH2 ARG A 115      33.595  -9.882  21.242  1.00 67.23           N  
+ATOM    939  N   ASN A 116      30.768  -1.727  25.116  1.00 16.60           N  
+ATOM    940  CA  ASN A 116      30.983  -0.385  25.639  1.00 13.28           C  
+ATOM    941  C   ASN A 116      29.921  -0.012  26.664  1.00 13.98           C  
+ATOM    942  O   ASN A 116      29.466   1.131  26.721  1.00 11.77           O  
+ATOM    943  CB  ASN A 116      31.011   0.644  24.508  1.00 17.96           C  
+ATOM    944  CG  ASN A 116      32.280   0.560  23.682  1.00 23.95           C  
+ATOM    945  OD1 ASN A 116      32.393  -0.258  22.771  1.00 27.65           O  
+ATOM    946  ND2 ASN A 116      33.253   1.399  24.014  1.00 24.96           N  
+ATOM    947  N   LEU A 117      29.532  -0.993  27.472  1.00 14.76           N  
+ATOM    948  CA  LEU A 117      28.539  -0.790  28.520  1.00 16.01           C  
+ATOM    949  C   LEU A 117      29.169   0.082  29.606  1.00 16.50           C  
+ATOM    950  O   LEU A 117      30.149  -0.311  30.238  1.00 19.94           O  
+ATOM    951  CB  LEU A 117      28.119  -2.142  29.100  1.00 13.89           C  
+ATOM    952  CG  LEU A 117      27.156  -2.147  30.288  1.00 15.07           C  
+ATOM    953  CD1 LEU A 117      25.825  -1.532  29.881  1.00 13.69           C  
+ATOM    954  CD2 LEU A 117      26.961  -3.579  30.766  1.00 16.68           C  
+ATOM    955  N   ILE A 118      28.601   1.266  29.813  1.00 11.74           N  
+ATOM    956  CA  ILE A 118      29.109   2.215  30.801  1.00 13.36           C  
+ATOM    957  C   ILE A 118      28.505   1.995  32.180  1.00 12.53           C  
+ATOM    958  O   ILE A 118      29.206   2.033  33.191  1.00 12.37           O  
+ATOM    959  CB  ILE A 118      28.810   3.664  30.367  1.00 14.81           C  
+ATOM    960  CG1 ILE A 118      29.505   3.958  29.037  1.00 17.20           C  
+ATOM    961  CG2 ILE A 118      29.273   4.644  31.445  1.00 16.33           C  
+ATOM    962  CD1 ILE A 118      29.137   5.297  28.442  1.00 15.95           C  
+ATOM    963  N   LYS A 119      27.196   1.782  32.216  1.00  9.94           N  
+ATOM    964  CA  LYS A 119      26.491   1.553  33.470  1.00  8.83           C  
+ATOM    965  C   LYS A 119      25.264   0.711  33.185  1.00 12.00           C  
+ATOM    966  O   LYS A 119      24.547   0.953  32.216  1.00  9.96           O  
+ATOM    967  CB  LYS A 119      26.062   2.883  34.105  1.00 10.54           C  
+ATOM    968  CG  LYS A 119      25.176   2.742  35.358  1.00 12.68           C  
+ATOM    969  CD  LYS A 119      25.904   2.066  36.516  1.00 12.97           C  
+ATOM    970  CE  LYS A 119      25.005   1.904  37.747  1.00  9.78           C  
+ATOM    971  NZ  LYS A 119      24.704   3.205  38.415  1.00  9.17           N  
+ATOM    972  N   ASP A 120      25.043  -0.291  34.025  1.00 11.88           N  
+ATOM    973  CA  ASP A 120      23.892  -1.164  33.887  1.00 12.15           C  
+ATOM    974  C   ASP A 120      23.189  -1.204  35.238  1.00 13.35           C  
+ATOM    975  O   ASP A 120      23.647  -1.875  36.158  1.00 13.72           O  
+ATOM    976  CB  ASP A 120      24.332  -2.579  33.492  1.00 13.47           C  
+ATOM    977  CG  ASP A 120      23.156  -3.506  33.216  1.00 18.79           C  
+ATOM    978  OD1 ASP A 120      22.239  -3.586  34.061  1.00 19.37           O  
+ATOM    979  OD2 ASP A 120      23.149  -4.162  32.155  1.00 26.90           O  
+ATOM    980  N   PHE A 121      22.112  -0.440  35.374  1.00  9.12           N  
+ATOM    981  CA  PHE A 121      21.345  -0.460  36.612  1.00  8.53           C  
+ATOM    982  C   PHE A 121      20.158  -1.323  36.233  1.00 10.99           C  
+ATOM    983  O   PHE A 121      19.062  -0.820  35.976  1.00 12.01           O  
+ATOM    984  CB  PHE A 121      20.864   0.938  37.000  1.00  8.25           C  
+ATOM    985  CG  PHE A 121      20.292   1.008  38.388  1.00  9.71           C  
+ATOM    986  CD1 PHE A 121      21.126   1.167  39.490  1.00  9.45           C  
+ATOM    987  CD2 PHE A 121      18.926   0.875  38.597  1.00 13.08           C  
+ATOM    988  CE1 PHE A 121      20.606   1.190  40.781  1.00 10.63           C  
+ATOM    989  CE2 PHE A 121      18.394   0.895  39.887  1.00 11.99           C  
+ATOM    990  CZ  PHE A 121      19.238   1.054  40.981  1.00 12.89           C  
+ATOM    991  N   CYS A 122      20.385  -2.631  36.182  1.00 12.06           N  
+ATOM    992  CA  CYS A 122      19.331  -3.542  35.781  1.00 13.91           C  
+ATOM    993  C   CYS A 122      19.612  -5.009  36.086  1.00 15.31           C  
+ATOM    994  O   CYS A 122      19.032  -5.583  37.008  1.00 15.62           O  
+ATOM    995  CB  CYS A 122      19.078  -3.364  34.280  1.00 13.84           C  
+ATOM    996  SG  CYS A 122      17.857  -4.508  33.568  1.00 13.88           S  
+ATOM    997  N   ARG A 123      20.511  -5.611  35.318  1.00 16.09           N  
+ATOM    998  CA  ARG A 123      20.827  -7.025  35.485  1.00 18.40           C  
+ATOM    999  C   ARG A 123      21.351  -7.484  36.846  1.00 17.94           C  
+ATOM   1000  O   ARG A 123      21.097  -8.621  37.244  1.00 17.65           O  
+ATOM   1001  CB  ARG A 123      21.772  -7.468  34.366  1.00 19.65           C  
+ATOM   1002  CG  ARG A 123      21.072  -7.500  33.007  1.00 28.18           C  
+ATOM   1003  CD  ARG A 123      22.004  -7.899  31.879  1.00 29.84           C  
+ATOM   1004  NE  ARG A 123      23.045  -6.901  31.658  1.00 32.33           N  
+ATOM   1005  CZ  ARG A 123      24.006  -7.013  30.748  1.00 29.90           C  
+ATOM   1006  NH1 ARG A 123      24.060  -8.083  29.967  1.00 27.70           N  
+ATOM   1007  NH2 ARG A 123      24.913  -6.056  30.619  1.00 29.83           N  
+ATOM   1008  N   LYS A 124      22.063  -6.621  37.567  1.00 13.84           N  
+ATOM   1009  CA  LYS A 124      22.574  -7.010  38.881  1.00 12.49           C  
+ATOM   1010  C   LYS A 124      21.558  -6.778  40.004  1.00 10.77           C  
+ATOM   1011  O   LYS A 124      21.839  -7.074  41.164  1.00 12.23           O  
+ATOM   1012  CB  LYS A 124      23.877  -6.264  39.210  1.00 15.02           C  
+ATOM   1013  CG  LYS A 124      25.124  -6.785  38.485  1.00 17.86           C  
+ATOM   1014  CD  LYS A 124      26.376  -6.035  38.942  1.00 21.21           C  
+ATOM   1015  CE  LYS A 124      27.647  -6.566  38.282  1.00 24.54           C  
+ATOM   1016  NZ  LYS A 124      28.878  -5.873  38.791  1.00 21.46           N  
+ATOM   1017  N   LEU A 125      20.385  -6.246  39.670  1.00  9.74           N  
+ATOM   1018  CA  LEU A 125      19.359  -6.009  40.684  1.00 11.32           C  
+ATOM   1019  C   LEU A 125      18.803  -7.337  41.180  1.00 14.53           C  
+ATOM   1020  O   LEU A 125      18.539  -8.239  40.388  1.00 14.63           O  
+ATOM   1021  CB  LEU A 125      18.213  -5.171  40.115  1.00 11.72           C  
+ATOM   1022  CG  LEU A 125      18.482  -3.693  39.848  1.00 13.13           C  
+ATOM   1023  CD1 LEU A 125      17.307  -3.105  39.084  1.00 13.14           C  
+ATOM   1024  CD2 LEU A 125      18.690  -2.955  41.168  1.00 13.06           C  
+ATOM   1025  N   SER A 126      18.630  -7.454  42.493  1.00 13.97           N  
+ATOM   1026  CA  SER A 126      18.095  -8.673  43.087  1.00 18.03           C  
+ATOM   1027  C   SER A 126      16.570  -8.624  43.178  1.00 20.57           C  
+ATOM   1028  O   SER A 126      15.954  -9.708  43.269  1.00 24.85           O  
+ATOM   1029  CB  SER A 126      18.697  -8.899  44.479  1.00 18.07           C  
+ATOM   1030  OG  SER A 126      18.407  -7.823  45.351  1.00 15.78           O  
+TER    1031      SER A 126                                                      
+ATOM   1032  N   TYR B   3      24.874 -14.238  65.592  1.00 21.36           N  
+ATOM   1033  CA  TYR B   3      24.778 -13.845  64.154  1.00 14.51           C  
+ATOM   1034  C   TYR B   3      24.644 -15.062  63.250  1.00 13.36           C  
+ATOM   1035  O   TYR B   3      25.275 -16.090  63.494  1.00 14.59           O  
+ATOM   1036  CB  TYR B   3      26.025 -13.057  63.736  1.00 14.32           C  
+ATOM   1037  CG  TYR B   3      26.252 -11.805  64.544  1.00 12.05           C  
+ATOM   1038  CD1 TYR B   3      27.202 -11.769  65.564  1.00 12.30           C  
+ATOM   1039  CD2 TYR B   3      25.492 -10.662  64.309  1.00 10.81           C  
+ATOM   1040  CE1 TYR B   3      27.388 -10.616  66.331  1.00 14.06           C  
+ATOM   1041  CE2 TYR B   3      25.667  -9.512  65.069  1.00 13.41           C  
+ATOM   1042  CZ  TYR B   3      26.614  -9.496  66.076  1.00 15.79           C  
+ATOM   1043  OH  TYR B   3      26.781  -8.356  66.825  1.00 14.76           O  
+ATOM   1044  N   LYS B   4      23.823 -14.950  62.210  1.00 11.22           N  
+ATOM   1045  CA  LYS B   4      23.663 -16.057  61.274  1.00 13.45           C  
+ATOM   1046  C   LYS B   4      23.831 -15.659  59.804  1.00 10.36           C  
+ATOM   1047  O   LYS B   4      23.870 -16.522  58.933  1.00 10.86           O  
+ATOM   1048  CB  LYS B   4      22.316 -16.761  61.471  1.00 16.58           C  
+ATOM   1049  CG  LYS B   4      21.093 -15.942  61.128  1.00 16.48           C  
+ATOM   1050  CD  LYS B   4      19.882 -16.859  61.028  1.00 21.17           C  
+ATOM   1051  CE  LYS B   4      18.595 -16.085  60.822  1.00 27.98           C  
+ATOM   1052  NZ  LYS B   4      18.247 -15.263  62.014  1.00 29.87           N  
+ATOM   1053  N   ASN B   5      23.921 -14.359  59.523  1.00  8.93           N  
+ATOM   1054  CA  ASN B   5      24.134 -13.899  58.150  1.00  8.93           C  
+ATOM   1055  C   ASN B   5      24.842 -12.553  58.160  1.00  8.91           C  
+ATOM   1056  O   ASN B   5      24.222 -11.500  58.322  1.00 10.65           O  
+ATOM   1057  CB  ASN B   5      22.820 -13.791  57.372  1.00 11.88           C  
+ATOM   1058  CG  ASN B   5      23.049 -13.491  55.898  1.00 13.66           C  
+ATOM   1059  OD1 ASN B   5      24.105 -13.815  55.347  1.00 19.21           O  
+ATOM   1060  ND2 ASN B   5      22.060 -12.887  55.250  1.00 22.41           N  
+ATOM   1061  N   ILE B   6      26.152 -12.612  57.965  1.00  8.00           N  
+ATOM   1062  CA  ILE B   6      27.003 -11.433  57.994  1.00  9.10           C  
+ATOM   1063  C   ILE B   6      27.177 -10.713  56.666  1.00  8.01           C  
+ATOM   1064  O   ILE B   6      27.518 -11.327  55.654  1.00  9.10           O  
+ATOM   1065  CB  ILE B   6      28.416 -11.809  58.500  1.00  9.03           C  
+ATOM   1066  CG1 ILE B   6      28.320 -12.480  59.874  1.00  9.90           C  
+ATOM   1067  CG2 ILE B   6      29.303 -10.572  58.544  1.00 10.80           C  
+ATOM   1068  CD1 ILE B   6      27.770 -11.591  60.966  1.00  9.93           C  
+ATOM   1069  N   LEU B   7      26.941  -9.405  56.678  1.00  8.14           N  
+ATOM   1070  CA  LEU B   7      27.147  -8.591  55.489  1.00  6.09           C  
+ATOM   1071  C   LEU B   7      28.588  -8.124  55.596  1.00  6.79           C  
+ATOM   1072  O   LEU B   7      28.950  -7.434  56.551  1.00  7.97           O  
+ATOM   1073  CB  LEU B   7      26.225  -7.367  55.478  1.00  7.81           C  
+ATOM   1074  CG  LEU B   7      26.529  -6.349  54.369  1.00  8.36           C  
+ATOM   1075  CD1 LEU B   7      26.304  -6.988  53.002  1.00  9.26           C  
+ATOM   1076  CD2 LEU B   7      25.638  -5.118  54.545  1.00  7.47           C  
+ATOM   1077  N   THR B   8      29.417  -8.518  54.635  1.00  6.69           N  
+ATOM   1078  CA  THR B   8      30.821  -8.123  54.639  1.00  7.81           C  
+ATOM   1079  C   THR B   8      31.088  -7.181  53.468  1.00  6.38           C  
+ATOM   1080  O   THR B   8      30.726  -7.481  52.328  1.00  6.46           O  
+ATOM   1081  CB  THR B   8      31.759  -9.352  54.501  1.00 10.09           C  
+ATOM   1082  OG1 THR B   8      31.631 -10.194  55.656  1.00  7.20           O  
+ATOM   1083  CG2 THR B   8      33.214  -8.901  54.370  1.00  8.79           C  
+ATOM   1084  N   LEU B   9      31.706  -6.039  53.757  1.00  4.35           N  
+ATOM   1085  CA  LEU B   9      32.043  -5.062  52.729  1.00  5.78           C  
+ATOM   1086  C   LEU B   9      33.558  -4.900  52.689  1.00  6.78           C  
+ATOM   1087  O   LEU B   9      34.209  -4.773  53.731  1.00  6.68           O  
+ATOM   1088  CB  LEU B   9      31.407  -3.701  53.039  1.00  6.10           C  
+ATOM   1089  CG  LEU B   9      29.928  -3.657  53.430  1.00  6.69           C  
+ATOM   1090  CD1 LEU B   9      29.491  -2.202  53.589  1.00  7.98           C  
+ATOM   1091  CD2 LEU B   9      29.087  -4.351  52.367  1.00  8.90           C  
+ATOM   1092  N   ILE B  10      34.125  -4.911  51.490  1.00  5.68           N  
+ATOM   1093  CA  ILE B  10      35.562  -4.744  51.369  1.00  6.72           C  
+ATOM   1094  C   ILE B  10      35.965  -4.002  50.110  1.00  7.62           C  
+ATOM   1095  O   ILE B  10      35.402  -4.206  49.037  1.00  5.59           O  
+ATOM   1096  CB  ILE B  10      36.308  -6.109  51.406  1.00  6.91           C  
+ATOM   1097  CG1 ILE B  10      37.820  -5.882  51.274  1.00  7.02           C  
+ATOM   1098  CG2 ILE B  10      35.802  -7.021  50.297  1.00  6.03           C  
+ATOM   1099  CD1 ILE B  10      38.662  -7.130  51.515  1.00  8.43           C  
+ATOM   1100  N   SER B  11      36.934  -3.110  50.267  1.00  7.10           N  
+ATOM   1101  CA  SER B  11      37.476  -2.363  49.148  1.00  6.62           C  
+ATOM   1102  C   SER B  11      38.942  -2.164  49.466  1.00  8.26           C  
+ATOM   1103  O   SER B  11      39.288  -1.400  50.368  1.00  7.92           O  
+ATOM   1104  CB  SER B  11      36.790  -1.008  48.984  1.00  6.11           C  
+ATOM   1105  OG  SER B  11      37.256  -0.365  47.808  1.00  9.34           O  
+ATOM   1106  N   VAL B  12      39.792  -2.885  48.742  1.00  7.09           N  
+ATOM   1107  CA  VAL B  12      41.239  -2.801  48.918  1.00 10.34           C  
+ATOM   1108  C   VAL B  12      41.924  -2.927  47.557  1.00 12.03           C  
+ATOM   1109  O   VAL B  12      41.310  -3.347  46.576  1.00 10.61           O  
+ATOM   1110  CB  VAL B  12      41.782  -3.938  49.832  1.00 10.18           C  
+ATOM   1111  CG1 VAL B  12      41.208  -3.817  51.237  1.00  7.55           C  
+ATOM   1112  CG2 VAL B  12      41.446  -5.301  49.234  1.00 11.44           C  
+ATOM   1113  N   ASN B  13      43.197  -2.553  47.500  1.00 11.33           N  
+ATOM   1114  CA  ASN B  13      43.973  -2.680  46.275  1.00 11.60           C  
+ATOM   1115  C   ASN B  13      44.161  -4.169  46.021  1.00 10.16           C  
+ATOM   1116  O   ASN B  13      44.092  -4.971  46.953  1.00 11.25           O  
+ATOM   1117  CB  ASN B  13      45.327  -1.996  46.446  1.00 14.31           C  
+ATOM   1118  CG  ASN B  13      45.205  -0.496  46.587  1.00 19.40           C  
+ATOM   1119  OD1 ASN B  13      46.076   0.158  47.157  1.00 27.47           O  
+ATOM   1120  ND2 ASN B  13      44.121   0.060  46.054  1.00 20.72           N  
+ATOM   1121  N   ASN B  14      44.410  -4.534  44.769  1.00 10.10           N  
+ATOM   1122  CA  ASN B  14      44.581  -5.938  44.400  1.00 11.06           C  
+ATOM   1123  C   ASN B  14      45.570  -6.732  45.250  1.00 10.81           C  
+ATOM   1124  O   ASN B  14      45.307  -7.888  45.580  1.00 10.95           O  
+ATOM   1125  CB  ASN B  14      44.995  -6.057  42.930  1.00 10.61           C  
+ATOM   1126  CG  ASN B  14      43.954  -5.496  41.982  1.00 15.18           C  
+ATOM   1127  OD1 ASN B  14      42.782  -5.372  42.330  1.00 14.69           O  
+ATOM   1128  ND2 ASN B  14      44.378  -5.164  40.769  1.00 19.56           N  
+ATOM   1129  N   ASP B  15      46.702  -6.125  45.602  1.00 10.94           N  
+ATOM   1130  CA  ASP B  15      47.705  -6.838  46.383  1.00 10.98           C  
+ATOM   1131  C   ASP B  15      47.330  -7.096  47.836  1.00 10.19           C  
+ATOM   1132  O   ASP B  15      48.071  -7.759  48.557  1.00 10.38           O  
+ATOM   1133  CB  ASP B  15      49.065  -6.124  46.325  1.00 14.95           C  
+ATOM   1134  CG  ASP B  15      49.000  -4.684  46.787  1.00 21.05           C  
+ATOM   1135  OD1 ASP B  15      48.229  -4.376  47.719  1.00 22.00           O  
+ATOM   1136  OD2 ASP B  15      49.746  -3.853  46.223  1.00 30.99           O  
+ATOM   1137  N   ASN B  16      46.183  -6.581  48.267  1.00 11.48           N  
+ATOM   1138  CA  ASN B  16      45.732  -6.790  49.641  1.00  7.76           C  
+ATOM   1139  C   ASN B  16      44.579  -7.784  49.751  1.00  8.08           C  
+ATOM   1140  O   ASN B  16      44.177  -8.141  50.855  1.00  8.44           O  
+ATOM   1141  CB  ASN B  16      45.291  -5.466  50.279  1.00 10.28           C  
+ATOM   1142  CG  ASN B  16      46.462  -4.627  50.763  1.00 15.33           C  
+ATOM   1143  OD1 ASN B  16      47.456  -5.156  51.263  1.00 15.34           O  
+ATOM   1144  ND2 ASN B  16      46.339  -3.308  50.640  1.00 12.76           N  
+ATOM   1145  N   PHE B  17      44.050  -8.238  48.619  1.00  7.20           N  
+ATOM   1146  CA  PHE B  17      42.923  -9.167  48.655  1.00  8.00           C  
+ATOM   1147  C   PHE B  17      43.147 -10.464  49.434  1.00  8.33           C  
+ATOM   1148  O   PHE B  17      42.342 -10.807  50.296  1.00  7.68           O  
+ATOM   1149  CB  PHE B  17      42.446  -9.503  47.237  1.00  9.52           C  
+ATOM   1150  CG  PHE B  17      41.524  -8.472  46.637  1.00  8.82           C  
+ATOM   1151  CD1 PHE B  17      40.442  -7.979  47.362  1.00  9.39           C  
+ATOM   1152  CD2 PHE B  17      41.709  -8.030  45.330  1.00  9.79           C  
+ATOM   1153  CE1 PHE B  17      39.554  -7.063  46.793  1.00 11.35           C  
+ATOM   1154  CE2 PHE B  17      40.827  -7.116  44.753  1.00  9.80           C  
+ATOM   1155  CZ  PHE B  17      39.746  -6.631  45.487  1.00 12.77           C  
+ATOM   1156  N   GLU B  18      44.218 -11.194  49.136  1.00  8.33           N  
+ATOM   1157  CA  GLU B  18      44.467 -12.456  49.833  1.00  9.72           C  
+ATOM   1158  C   GLU B  18      44.568 -12.297  51.348  1.00  6.59           C  
+ATOM   1159  O   GLU B  18      43.893 -13.004  52.094  1.00  7.10           O  
+ATOM   1160  CB  GLU B  18      45.735 -13.128  49.290  1.00  9.13           C  
+ATOM   1161  CG  GLU B  18      46.238 -14.336  50.100  1.00  9.85           C  
+ATOM   1162  CD  GLU B  18      45.206 -15.448  50.289  1.00  8.42           C  
+ATOM   1163  OE1 GLU B  18      44.234 -15.524  49.511  1.00  9.56           O  
+ATOM   1164  OE2 GLU B  18      45.382 -16.271  51.218  1.00  8.00           O  
+ATOM   1165  N   ASN B  19      45.401 -11.369  51.806  1.00  9.24           N  
+ATOM   1166  CA  ASN B  19      45.557 -11.164  53.242  1.00  9.87           C  
+ATOM   1167  C   ASN B  19      44.248 -10.732  53.898  1.00  8.85           C  
+ATOM   1168  O   ASN B  19      43.897 -11.222  54.976  1.00  8.14           O  
+ATOM   1169  CB  ASN B  19      46.644 -10.121  53.523  1.00 14.61           C  
+ATOM   1170  CG  ASN B  19      48.006 -10.540  52.996  1.00 22.00           C  
+ATOM   1171  OD1 ASN B  19      48.394 -11.704  53.106  1.00 25.40           O  
+ATOM   1172  ND2 ASN B  19      48.743  -9.590  52.434  1.00 24.63           N  
+ATOM   1173  N   TYR B  20      43.531  -9.813  53.257  1.00  8.18           N  
+ATOM   1174  CA  TYR B  20      42.266  -9.340  53.804  1.00  8.95           C  
+ATOM   1175  C   TYR B  20      41.182 -10.413  53.812  1.00  6.99           C  
+ATOM   1176  O   TYR B  20      40.396 -10.486  54.756  1.00  6.01           O  
+ATOM   1177  CB  TYR B  20      41.754  -8.112  53.038  1.00  7.13           C  
+ATOM   1178  CG  TYR B  20      42.236  -6.785  53.592  1.00 10.34           C  
+ATOM   1179  CD1 TYR B  20      43.548  -6.365  53.404  1.00 10.74           C  
+ATOM   1180  CD2 TYR B  20      41.368  -5.940  54.287  1.00  8.51           C  
+ATOM   1181  CE1 TYR B  20      43.987  -5.135  53.886  1.00 12.05           C  
+ATOM   1182  CE2 TYR B  20      41.797  -4.704  54.778  1.00 10.80           C  
+ATOM   1183  CZ  TYR B  20      43.110  -4.309  54.569  1.00  8.47           C  
+ATOM   1184  OH  TYR B  20      43.553  -3.083  55.017  1.00  8.55           O  
+ATOM   1185  N   PHE B  21      41.125 -11.248  52.780  1.00  5.65           N  
+ATOM   1186  CA  PHE B  21      40.097 -12.284  52.766  1.00  7.22           C  
+ATOM   1187  C   PHE B  21      40.299 -13.326  53.856  1.00  6.90           C  
+ATOM   1188  O   PHE B  21      39.324 -13.832  54.410  1.00  8.49           O  
+ATOM   1189  CB  PHE B  21      39.983 -12.952  51.392  1.00  5.51           C  
+ATOM   1190  CG  PHE B  21      38.875 -12.384  50.547  1.00  7.65           C  
+ATOM   1191  CD1 PHE B  21      39.053 -11.194  49.852  1.00  6.57           C  
+ATOM   1192  CD2 PHE B  21      37.629 -13.008  50.502  1.00  8.14           C  
+ATOM   1193  CE1 PHE B  21      38.005 -10.630  49.123  1.00  8.19           C  
+ATOM   1194  CE2 PHE B  21      36.577 -12.451  49.778  1.00  7.92           C  
+ATOM   1195  CZ  PHE B  21      36.765 -11.262  49.089  1.00  7.63           C  
+ATOM   1196  N   ARG B  22      41.545 -13.654  54.184  1.00  8.64           N  
+ATOM   1197  CA  ARG B  22      41.753 -14.615  55.260  1.00  7.68           C  
+ATOM   1198  C   ARG B  22      41.218 -13.986  56.546  1.00  9.23           C  
+ATOM   1199  O   ARG B  22      40.626 -14.672  57.380  1.00  9.14           O  
+ATOM   1200  CB  ARG B  22      43.234 -14.984  55.408  1.00  9.83           C  
+ATOM   1201  CG  ARG B  22      43.737 -15.893  54.292  1.00 10.47           C  
+ATOM   1202  CD  ARG B  22      45.028 -16.626  54.665  1.00 13.14           C  
+ATOM   1203  NE  ARG B  22      46.093 -15.705  55.047  1.00 13.85           N  
+ATOM   1204  CZ  ARG B  22      46.393 -15.381  56.301  1.00 16.65           C  
+ATOM   1205  NH1 ARG B  22      47.374 -14.525  56.546  1.00 19.74           N  
+ATOM   1206  NH2 ARG B  22      45.724 -15.926  57.310  1.00 16.23           N  
+ATOM   1207  N   LYS B  23      41.398 -12.673  56.692  1.00  7.74           N  
+ATOM   1208  CA  LYS B  23      40.906 -11.974  57.875  1.00  7.68           C  
+ATOM   1209  C   LYS B  23      39.377 -11.989  57.872  1.00  5.61           C  
+ATOM   1210  O   LYS B  23      38.747 -12.230  58.905  1.00  7.57           O  
+ATOM   1211  CB  LYS B  23      41.417 -10.528  57.899  1.00  9.24           C  
+ATOM   1212  CG  LYS B  23      41.097  -9.790  59.192  1.00 11.93           C  
+ATOM   1213  CD  LYS B  23      41.651  -8.368  59.170  1.00 14.74           C  
+ATOM   1214  CE  LYS B  23      41.414  -7.664  60.495  1.00 14.38           C  
+ATOM   1215  NZ  LYS B  23      42.184  -8.300  61.608  1.00 14.94           N  
+ATOM   1216  N   ILE B  24      38.780 -11.740  56.710  1.00  5.67           N  
+ATOM   1217  CA  ILE B  24      37.320 -11.754  56.607  1.00  7.29           C  
+ATOM   1218  C   ILE B  24      36.753 -13.062  57.160  1.00  6.15           C  
+ATOM   1219  O   ILE B  24      35.866 -13.060  58.012  1.00  5.44           O  
+ATOM   1220  CB  ILE B  24      36.851 -11.614  55.145  1.00  7.36           C  
+ATOM   1221  CG1 ILE B  24      37.094 -10.182  54.655  1.00  8.85           C  
+ATOM   1222  CG2 ILE B  24      35.367 -11.981  55.032  1.00  6.64           C  
+ATOM   1223  CD1 ILE B  24      36.766  -9.965  53.187  1.00 10.23           C  
+ATOM   1224  N   PHE B  25      37.273 -14.181  56.675  1.00  7.30           N  
+ATOM   1225  CA  PHE B  25      36.786 -15.477  57.122  1.00  6.63           C  
+ATOM   1226  C   PHE B  25      37.036 -15.736  58.600  1.00  6.31           C  
+ATOM   1227  O   PHE B  25      36.211 -16.363  59.267  1.00  8.06           O  
+ATOM   1228  CB  PHE B  25      37.379 -16.585  56.248  1.00  6.24           C  
+ATOM   1229  CG  PHE B  25      36.784 -16.631  54.864  1.00  7.17           C  
+ATOM   1230  CD1 PHE B  25      35.424 -16.880  54.690  1.00 10.68           C  
+ATOM   1231  CD2 PHE B  25      37.574 -16.405  53.740  1.00  8.30           C  
+ATOM   1232  CE1 PHE B  25      34.854 -16.902  53.414  1.00  9.57           C  
+ATOM   1233  CE2 PHE B  25      37.018 -16.424  52.459  1.00  9.90           C  
+ATOM   1234  CZ  PHE B  25      35.653 -16.674  52.295  1.00  9.39           C  
+ATOM   1235  N   LEU B  26      38.160 -15.256  59.125  1.00  6.24           N  
+ATOM   1236  CA  LEU B  26      38.429 -15.438  60.548  1.00  7.07           C  
+ATOM   1237  C   LEU B  26      37.368 -14.669  61.341  1.00  8.61           C  
+ATOM   1238  O   LEU B  26      36.790 -15.187  62.301  1.00  5.92           O  
+ATOM   1239  CB  LEU B  26      39.826 -14.922  60.903  1.00  9.61           C  
+ATOM   1240  CG  LEU B  26      40.979 -15.783  60.382  1.00 11.99           C  
+ATOM   1241  CD1 LEU B  26      42.318 -15.135  60.716  1.00 15.65           C  
+ATOM   1242  CD2 LEU B  26      40.888 -17.159  61.010  1.00 15.48           C  
+ATOM   1243  N   ASP B  27      37.096 -13.436  60.929  1.00  8.13           N  
+ATOM   1244  CA  ASP B  27      36.103 -12.634  61.626  1.00  7.07           C  
+ATOM   1245  C   ASP B  27      34.694 -13.209  61.508  1.00  7.64           C  
+ATOM   1246  O   ASP B  27      33.921 -13.169  62.470  1.00  7.91           O  
+ATOM   1247  CB  ASP B  27      36.155 -11.187  61.136  1.00  7.16           C  
+ATOM   1248  CG  ASP B  27      37.445 -10.494  61.533  1.00 11.83           C  
+ATOM   1249  OD1 ASP B  27      38.008 -10.859  62.590  1.00 13.94           O  
+ATOM   1250  OD2 ASP B  27      37.894  -9.586  60.805  1.00  9.25           O  
+ATOM   1251  N   VAL B  28      34.356 -13.751  60.342  1.00  7.89           N  
+ATOM   1252  CA  VAL B  28      33.037 -14.357  60.160  1.00  7.06           C  
+ATOM   1253  C   VAL B  28      32.926 -15.562  61.097  1.00  9.16           C  
+ATOM   1254  O   VAL B  28      31.903 -15.760  61.754  1.00  7.46           O  
+ATOM   1255  CB  VAL B  28      32.816 -14.809  58.693  1.00  6.73           C  
+ATOM   1256  CG1 VAL B  28      31.580 -15.694  58.589  1.00  7.73           C  
+ATOM   1257  CG2 VAL B  28      32.634 -13.586  57.804  1.00  7.11           C  
+ATOM   1258  N   ARG B  29      33.987 -16.359  61.174  1.00  8.79           N  
+ATOM   1259  CA  ARG B  29      33.973 -17.523  62.054  1.00  7.46           C  
+ATOM   1260  C   ARG B  29      33.776 -17.098  63.509  1.00  8.15           C  
+ATOM   1261  O   ARG B  29      33.002 -17.712  64.242  1.00  9.77           O  
+ATOM   1262  CB  ARG B  29      35.277 -18.318  61.898  1.00  8.24           C  
+ATOM   1263  CG  ARG B  29      35.368 -19.078  60.575  1.00  9.41           C  
+ATOM   1264  CD  ARG B  29      36.749 -19.682  60.375  1.00  8.70           C  
+ATOM   1265  NE  ARG B  29      36.866 -20.456  59.139  1.00  8.62           N  
+ATOM   1266  CZ  ARG B  29      36.483 -21.722  59.003  1.00  8.78           C  
+ATOM   1267  NH1 ARG B  29      35.950 -22.369  60.030  1.00  9.82           N  
+ATOM   1268  NH2 ARG B  29      36.656 -22.349  57.843  1.00  7.70           N  
+ATOM   1269  N   SER B  30      34.465 -16.037  63.918  1.00  8.47           N  
+ATOM   1270  CA  SER B  30      34.359 -15.538  65.287  1.00  8.70           C  
+ATOM   1271  C   SER B  30      32.961 -15.039  65.643  1.00 11.97           C  
+ATOM   1272  O   SER B  30      32.552 -15.105  66.807  1.00 10.24           O  
+ATOM   1273  CB  SER B  30      35.365 -14.405  65.520  1.00 10.41           C  
+ATOM   1274  OG  SER B  30      36.696 -14.894  65.528  1.00 11.54           O  
+ATOM   1275  N   SER B  31      32.233 -14.544  64.644  1.00  9.60           N  
+ATOM   1276  CA  SER B  31      30.889 -14.011  64.854  1.00 10.45           C  
+ATOM   1277  C   SER B  31      29.856 -15.081  65.192  1.00 14.38           C  
+ATOM   1278  O   SER B  31      28.767 -14.765  65.677  1.00 12.30           O  
+ATOM   1279  CB  SER B  31      30.422 -13.255  63.607  1.00 11.04           C  
+ATOM   1280  OG  SER B  31      30.032 -14.161  62.589  1.00 12.20           O  
+ATOM   1281  N   GLY B  32      30.193 -16.340  64.928  1.00 10.52           N  
+ATOM   1282  CA  GLY B  32      29.270 -17.425  65.206  1.00 11.98           C  
+ATOM   1283  C   GLY B  32      28.446 -17.773  63.980  1.00 13.86           C  
+ATOM   1284  O   GLY B  32      27.744 -18.785  63.947  1.00 12.72           O  
+ATOM   1285  N   SER B  33      28.535 -16.928  62.959  1.00 10.25           N  
+ATOM   1286  CA  SER B  33      27.795 -17.154  61.730  1.00 10.12           C  
+ATOM   1287  C   SER B  33      28.492 -18.175  60.842  1.00 13.27           C  
+ATOM   1288  O   SER B  33      29.716 -18.303  60.857  1.00 14.12           O  
+ATOM   1289  CB  SER B  33      27.634 -15.844  60.953  1.00 11.43           C  
+ATOM   1290  OG  SER B  33      26.877 -16.052  59.770  1.00  9.60           O  
+ATOM   1291  N   LYS B  34      27.692 -18.904  60.075  1.00 12.90           N  
+ATOM   1292  CA  LYS B  34      28.201 -19.903  59.151  1.00 16.28           C  
+ATOM   1293  C   LYS B  34      28.040 -19.350  57.738  1.00 15.90           C  
+ATOM   1294  O   LYS B  34      28.468 -19.973  56.766  1.00 17.22           O  
+ATOM   1295  CB  LYS B  34      27.387 -21.195  59.265  1.00 20.08           C  
+ATOM   1296  CG  LYS B  34      27.424 -21.879  60.621  1.00 26.09           C  
+ATOM   1297  CD  LYS B  34      28.788 -22.475  60.911  1.00 34.94           C  
+ATOM   1298  CE  LYS B  34      28.685 -23.580  61.956  1.00 40.70           C  
+ATOM   1299  NZ  LYS B  34      27.976 -23.125  63.184  1.00 42.62           N  
+ATOM   1300  N   LYS B  35      27.418 -18.177  57.635  1.00 15.00           N  
+ATOM   1301  CA  LYS B  35      27.156 -17.559  56.339  1.00 11.11           C  
+ATOM   1302  C   LYS B  35      27.487 -16.076  56.267  1.00 10.39           C  
+ATOM   1303  O   LYS B  35      27.381 -15.347  57.255  1.00 11.24           O  
+ATOM   1304  CB  LYS B  35      25.683 -17.740  55.977  1.00 15.77           C  
+ATOM   1305  CG  LYS B  35      25.189 -19.176  56.068  1.00 20.51           C  
+ATOM   1306  CD  LYS B  35      23.718 -19.269  55.693  1.00 27.36           C  
+ATOM   1307  CE  LYS B  35      23.207 -20.698  55.805  1.00 30.29           C  
+ATOM   1308  NZ  LYS B  35      21.767 -20.799  55.436  1.00 32.88           N  
+ATOM   1309  N   THR B  36      27.878 -15.635  55.080  1.00  9.45           N  
+ATOM   1310  CA  THR B  36      28.195 -14.235  54.860  1.00  6.93           C  
+ATOM   1311  C   THR B  36      28.056 -13.890  53.388  1.00  9.04           C  
+ATOM   1312  O   THR B  36      28.339 -14.711  52.515  1.00  8.55           O  
+ATOM   1313  CB  THR B  36      29.639 -13.890  55.312  1.00  8.94           C  
+ATOM   1314  OG1 THR B  36      29.877 -12.488  55.108  1.00  7.64           O  
+ATOM   1315  CG2 THR B  36      30.668 -14.686  54.509  1.00  8.11           C  
+ATOM   1316  N   THR B  37      27.575 -12.685  53.116  1.00  6.55           N  
+ATOM   1317  CA  THR B  37      27.456 -12.220  51.747  1.00  7.22           C  
+ATOM   1318  C   THR B  37      28.550 -11.157  51.653  1.00  8.96           C  
+ATOM   1319  O   THR B  37      28.499 -10.132  52.332  1.00 10.00           O  
+ATOM   1320  CB  THR B  37      26.045 -11.642  51.461  1.00  9.54           C  
+ATOM   1321  OG1 THR B  37      26.030 -11.052  50.157  1.00 19.34           O  
+ATOM   1322  CG2 THR B  37      25.651 -10.610  52.505  1.00 10.53           C  
+ATOM   1323  N   ILE B  38      29.562 -11.441  50.837  1.00  8.16           N  
+ATOM   1324  CA  ILE B  38      30.718 -10.567  50.672  1.00  8.94           C  
+ATOM   1325  C   ILE B  38      30.612  -9.660  49.451  1.00 10.05           C  
+ATOM   1326  O   ILE B  38      30.499 -10.126  48.319  1.00  9.73           O  
+ATOM   1327  CB  ILE B  38      32.004 -11.415  50.574  1.00  7.92           C  
+ATOM   1328  CG1 ILE B  38      32.062 -12.379  51.763  1.00  9.45           C  
+ATOM   1329  CG2 ILE B  38      33.238 -10.515  50.565  1.00  8.79           C  
+ATOM   1330  CD1 ILE B  38      33.220 -13.372  51.715  1.00  7.50           C  
+ATOM   1331  N   ASN B  39      30.662  -8.357  49.696  1.00  6.83           N  
+ATOM   1332  CA  ASN B  39      30.555  -7.375  48.632  1.00  7.60           C  
+ATOM   1333  C   ASN B  39      31.892  -6.676  48.469  1.00  7.50           C  
+ATOM   1334  O   ASN B  39      32.391  -6.020  49.387  1.00  7.74           O  
+ATOM   1335  CB  ASN B  39      29.431  -6.397  48.972  1.00  6.86           C  
+ATOM   1336  CG  ASN B  39      28.067  -7.076  48.974  1.00  9.10           C  
+ATOM   1337  OD1 ASN B  39      27.369  -7.091  47.962  1.00  8.69           O  
+ATOM   1338  ND2 ASN B  39      27.695  -7.661  50.108  1.00  7.52           N  
+ATOM   1339  N   VAL B  40      32.458  -6.839  47.279  1.00  7.15           N  
+ATOM   1340  CA  VAL B  40      33.767  -6.311  46.936  1.00  7.12           C  
+ATOM   1341  C   VAL B  40      33.661  -5.146  45.967  1.00  5.32           C  
+ATOM   1342  O   VAL B  40      33.176  -5.295  44.850  1.00  7.18           O  
+ATOM   1343  CB  VAL B  40      34.619  -7.420  46.298  1.00  7.37           C  
+ATOM   1344  CG1 VAL B  40      36.071  -6.974  46.193  1.00  8.05           C  
+ATOM   1345  CG2 VAL B  40      34.495  -8.707  47.128  1.00  8.26           C  
+ATOM   1346  N   PHE B  41      34.125  -3.985  46.407  1.00  6.40           N  
+ATOM   1347  CA  PHE B  41      34.074  -2.781  45.595  1.00  7.08           C  
+ATOM   1348  C   PHE B  41      35.436  -2.650  44.936  1.00  8.59           C  
+ATOM   1349  O   PHE B  41      36.407  -2.182  45.533  1.00  9.38           O  
+ATOM   1350  CB  PHE B  41      33.711  -1.605  46.501  1.00  7.78           C  
+ATOM   1351  CG  PHE B  41      32.379  -1.790  47.188  1.00  6.03           C  
+ATOM   1352  CD1 PHE B  41      31.199  -1.394  46.565  1.00  7.43           C  
+ATOM   1353  CD2 PHE B  41      32.299  -2.440  48.419  1.00  9.83           C  
+ATOM   1354  CE1 PHE B  41      29.961  -1.645  47.155  1.00  7.05           C  
+ATOM   1355  CE2 PHE B  41      31.067  -2.696  49.017  1.00  6.67           C  
+ATOM   1356  CZ  PHE B  41      29.894  -2.297  48.381  1.00  8.89           C  
+ATOM   1357  N   THR B  42      35.482  -3.107  43.690  1.00  7.50           N  
+ATOM   1358  CA  THR B  42      36.710  -3.151  42.912  1.00  8.15           C  
+ATOM   1359  C   THR B  42      36.402  -3.075  41.421  1.00  9.00           C  
+ATOM   1360  O   THR B  42      35.268  -3.300  40.997  1.00  9.92           O  
+ATOM   1361  CB  THR B  42      37.437  -4.487  43.196  1.00  8.93           C  
+ATOM   1362  OG1 THR B  42      38.652  -4.557  42.448  1.00 10.65           O  
+ATOM   1363  CG2 THR B  42      36.541  -5.666  42.806  1.00 11.87           C  
+ATOM   1364  N   GLU B  43      37.422  -2.775  40.624  1.00 10.57           N  
+ATOM   1365  CA  GLU B  43      37.249  -2.693  39.181  1.00 12.53           C  
+ATOM   1366  C   GLU B  43      37.648  -3.989  38.483  1.00 14.07           C  
+ATOM   1367  O   GLU B  43      37.383  -4.157  37.293  1.00 16.11           O  
+ATOM   1368  CB  GLU B  43      38.075  -1.536  38.611  1.00 16.12           C  
+ATOM   1369  CG  GLU B  43      37.726  -0.181  39.197  1.00 15.81           C  
+ATOM   1370  CD  GLU B  43      36.268   0.189  38.986  1.00 23.61           C  
+ATOM   1371  OE1 GLU B  43      35.846   0.301  37.816  1.00 24.60           O  
+ATOM   1372  OE2 GLU B  43      35.545   0.365  39.989  1.00 18.58           O  
+ATOM   1373  N   ILE B  44      38.278  -4.910  39.208  1.00 14.38           N  
+ATOM   1374  CA  ILE B  44      38.701  -6.163  38.588  1.00 13.44           C  
+ATOM   1375  C   ILE B  44      37.572  -7.170  38.400  1.00 15.13           C  
+ATOM   1376  O   ILE B  44      36.524  -7.074  39.036  1.00 15.84           O  
+ATOM   1377  CB  ILE B  44      39.841  -6.843  39.375  1.00 14.02           C  
+ATOM   1378  CG1 ILE B  44      39.340  -7.340  40.733  1.00 11.19           C  
+ATOM   1379  CG2 ILE B  44      40.994  -5.866  39.553  1.00 16.33           C  
+ATOM   1380  CD1 ILE B  44      40.359  -8.210  41.455  1.00 15.68           C  
+ATOM   1381  N   GLN B  45      37.807  -8.134  37.514  1.00 16.76           N  
+ATOM   1382  CA  GLN B  45      36.832  -9.174  37.202  1.00 19.24           C  
+ATOM   1383  C   GLN B  45      36.789 -10.271  38.260  1.00 16.19           C  
+ATOM   1384  O   GLN B  45      37.752 -10.479  38.996  1.00 14.16           O  
+ATOM   1385  CB  GLN B  45      37.155  -9.808  35.845  1.00 24.48           C  
+ATOM   1386  CG  GLN B  45      37.228  -8.825  34.687  1.00 36.32           C  
+ATOM   1387  CD  GLN B  45      35.945  -8.039  34.503  1.00 44.19           C  
+ATOM   1388  OE1 GLN B  45      35.594  -7.194  35.328  1.00 48.12           O  
+ATOM   1389  NE2 GLN B  45      35.232  -8.317  33.416  1.00 48.87           N  
+ATOM   1390  N   TYR B  46      35.667 -10.979  38.312  1.00 14.44           N  
+ATOM   1391  CA  TYR B  46      35.469 -12.063  39.267  1.00 15.86           C  
+ATOM   1392  C   TYR B  46      36.586 -13.102  39.193  1.00 15.61           C  
+ATOM   1393  O   TYR B  46      37.147 -13.498  40.215  1.00 13.79           O  
+ATOM   1394  CB  TYR B  46      34.119 -12.740  39.004  1.00 18.12           C  
+ATOM   1395  CG  TYR B  46      33.872 -13.978  39.836  1.00 21.54           C  
+ATOM   1396  CD1 TYR B  46      33.393 -13.885  41.142  1.00 25.49           C  
+ATOM   1397  CD2 TYR B  46      34.141 -15.242  39.324  1.00 25.07           C  
+ATOM   1398  CE1 TYR B  46      33.190 -15.030  41.917  1.00 27.73           C  
+ATOM   1399  CE2 TYR B  46      33.944 -16.387  40.088  1.00 28.82           C  
+ATOM   1400  CZ  TYR B  46      33.470 -16.274  41.381  1.00 26.16           C  
+ATOM   1401  OH  TYR B  46      33.292 -17.410  42.136  1.00 35.66           O  
+ATOM   1402  N   GLN B  47      36.904 -13.545  37.980  1.00 14.94           N  
+ATOM   1403  CA  GLN B  47      37.942 -14.550  37.785  1.00 16.78           C  
+ATOM   1404  C   GLN B  47      39.307 -14.112  38.297  1.00 13.48           C  
+ATOM   1405  O   GLN B  47      40.060 -14.923  38.834  1.00 14.27           O  
+ATOM   1406  CB  GLN B  47      38.049 -14.931  36.306  1.00 22.36           C  
+ATOM   1407  CG  GLN B  47      36.854 -15.712  35.777  1.00 35.45           C  
+ATOM   1408  CD  GLN B  47      36.478 -16.881  36.668  1.00 40.51           C  
+ATOM   1409  OE1 GLN B  47      37.328 -17.687  37.049  1.00 47.75           O  
+ATOM   1410  NE2 GLN B  47      35.195 -16.982  37.001  1.00 44.08           N  
+ATOM   1411  N   GLU B  48      39.635 -12.835  38.127  1.00 14.84           N  
+ATOM   1412  CA  GLU B  48      40.919 -12.340  38.598  1.00 15.28           C  
+ATOM   1413  C   GLU B  48      40.953 -12.332  40.122  1.00 11.23           C  
+ATOM   1414  O   GLU B  48      41.966 -12.685  40.728  1.00 12.95           O  
+ATOM   1415  CB  GLU B  48      41.194 -10.929  38.068  1.00 19.97           C  
+ATOM   1416  CG  GLU B  48      42.401 -10.274  38.728  1.00 27.02           C  
+ATOM   1417  CD  GLU B  48      42.936  -9.080  37.961  1.00 35.49           C  
+ATOM   1418  OE1 GLU B  48      42.132  -8.218  37.548  1.00 40.04           O  
+ATOM   1419  OE2 GLU B  48      44.169  -8.997  37.783  1.00 40.61           O  
+ATOM   1420  N   LEU B  49      39.846 -11.926  40.736  1.00 11.02           N  
+ATOM   1421  CA  LEU B  49      39.762 -11.885  42.193  1.00 11.31           C  
+ATOM   1422  C   LEU B  49      39.961 -13.280  42.770  1.00 10.26           C  
+ATOM   1423  O   LEU B  49      40.787 -13.481  43.656  1.00  9.70           O  
+ATOM   1424  CB  LEU B  49      38.404 -11.336  42.644  1.00 10.72           C  
+ATOM   1425  CG  LEU B  49      38.112 -11.444  44.146  1.00 11.65           C  
+ATOM   1426  CD1 LEU B  49      39.136 -10.645  44.939  1.00 10.78           C  
+ATOM   1427  CD2 LEU B  49      36.704 -10.938  44.434  1.00 11.81           C  
+ATOM   1428  N   VAL B  50      39.202 -14.244  42.261  1.00 10.32           N  
+ATOM   1429  CA  VAL B  50      39.306 -15.613  42.748  1.00 10.38           C  
+ATOM   1430  C   VAL B  50      40.726 -16.154  42.600  1.00 10.88           C  
+ATOM   1431  O   VAL B  50      41.206 -16.896  43.455  1.00 13.41           O  
+ATOM   1432  CB  VAL B  50      38.310 -16.535  42.016  1.00 13.49           C  
+ATOM   1433  CG1 VAL B  50      38.539 -17.985  42.420  1.00 17.72           C  
+ATOM   1434  CG2 VAL B  50      36.884 -16.117  42.361  1.00 15.41           C  
+ATOM   1435  N   THR B  51      41.407 -15.783  41.523  1.00 11.07           N  
+ATOM   1436  CA  THR B  51      42.776 -16.248  41.341  1.00 10.86           C  
+ATOM   1437  C   THR B  51      43.654 -15.720  42.478  1.00 11.23           C  
+ATOM   1438  O   THR B  51      44.450 -16.459  43.060  1.00 10.30           O  
+ATOM   1439  CB  THR B  51      43.347 -15.788  39.984  1.00 12.39           C  
+ATOM   1440  OG1 THR B  51      42.631 -16.439  38.926  1.00 15.79           O  
+ATOM   1441  CG2 THR B  51      44.827 -16.145  39.877  1.00 18.33           C  
+ATOM   1442  N   LEU B  52      43.487 -14.445  42.810  1.00  9.34           N  
+ATOM   1443  CA  LEU B  52      44.268 -13.828  43.879  1.00  9.57           C  
+ATOM   1444  C   LEU B  52      43.998 -14.404  45.271  1.00 11.04           C  
+ATOM   1445  O   LEU B  52      44.922 -14.555  46.074  1.00  9.13           O  
+ATOM   1446  CB  LEU B  52      44.007 -12.317  43.913  1.00 10.77           C  
+ATOM   1447  CG  LEU B  52      44.517 -11.502  42.726  1.00 12.17           C  
+ATOM   1448  CD1 LEU B  52      43.986 -10.074  42.826  1.00  9.44           C  
+ATOM   1449  CD2 LEU B  52      46.042 -11.518  42.710  1.00 12.47           C  
+ATOM   1450  N   ILE B  53      42.737 -14.722  45.555  1.00  9.03           N  
+ATOM   1451  CA  ILE B  53      42.364 -15.239  46.870  1.00  7.73           C  
+ATOM   1452  C   ILE B  53      42.152 -16.749  46.942  1.00  7.93           C  
+ATOM   1453  O   ILE B  53      41.464 -17.244  47.836  1.00  8.40           O  
+ATOM   1454  CB  ILE B  53      41.103 -14.523  47.406  1.00  5.70           C  
+ATOM   1455  CG1 ILE B  53      39.873 -14.863  46.556  1.00  6.12           C  
+ATOM   1456  CG2 ILE B  53      41.334 -13.011  47.401  1.00  9.05           C  
+ATOM   1457  CD1 ILE B  53      38.572 -14.312  47.139  1.00  8.25           C  
+ATOM   1458  N   ARG B  54      42.758 -17.477  46.014  1.00  9.29           N  
+ATOM   1459  CA  ARG B  54      42.631 -18.928  45.974  1.00  9.99           C  
+ATOM   1460  C   ARG B  54      42.875 -19.572  47.327  1.00  8.02           C  
+ATOM   1461  O   ARG B  54      42.100 -20.417  47.756  1.00  9.00           O  
+ATOM   1462  CB  ARG B  54      43.621 -19.514  44.970  1.00 10.84           C  
+ATOM   1463  CG  ARG B  54      43.545 -21.034  44.825  1.00 15.54           C  
+ATOM   1464  CD  ARG B  54      44.889 -21.574  44.350  1.00 25.54           C  
+ATOM   1465  NE  ARG B  54      45.874 -21.548  45.431  1.00 35.40           N  
+ATOM   1466  CZ  ARG B  54      45.931 -22.444  46.417  1.00 35.95           C  
+ATOM   1467  NH1 ARG B  54      46.855 -22.337  47.363  1.00 34.18           N  
+ATOM   1468  NH2 ARG B  54      45.084 -23.463  46.445  1.00 36.89           N  
+ATOM   1469  N   GLU B  55      43.955 -19.179  48.001  1.00  7.65           N  
+ATOM   1470  CA  GLU B  55      44.280 -19.755  49.306  1.00  8.27           C  
+ATOM   1471  C   GLU B  55      43.230 -19.447  50.378  1.00  8.18           C  
+ATOM   1472  O   GLU B  55      42.825 -20.334  51.128  1.00  7.81           O  
+ATOM   1473  CB  GLU B  55      45.660 -19.268  49.765  1.00  7.59           C  
+ATOM   1474  CG  GLU B  55      46.121 -19.813  51.110  1.00  9.10           C  
+ATOM   1475  CD  GLU B  55      46.189 -21.334  51.151  1.00 11.01           C  
+ATOM   1476  OE1 GLU B  55      46.581 -21.942  50.133  1.00 11.02           O  
+ATOM   1477  OE2 GLU B  55      45.871 -21.924  52.210  1.00 14.73           O  
+ATOM   1478  N   ALA B  56      42.780 -18.197  50.450  1.00  5.58           N  
+ATOM   1479  CA  ALA B  56      41.766 -17.826  51.441  1.00  8.49           C  
+ATOM   1480  C   ALA B  56      40.509 -18.678  51.253  1.00  6.38           C  
+ATOM   1481  O   ALA B  56      39.930 -19.169  52.222  1.00  7.61           O  
+ATOM   1482  CB  ALA B  56      41.421 -16.341  51.305  1.00  7.15           C  
+ATOM   1483  N   LEU B  57      40.087 -18.854  50.003  1.00  6.97           N  
+ATOM   1484  CA  LEU B  57      38.895 -19.654  49.723  1.00  6.21           C  
+ATOM   1485  C   LEU B  57      39.125 -21.130  50.040  1.00  6.89           C  
+ATOM   1486  O   LEU B  57      38.231 -21.810  50.550  1.00  7.94           O  
+ATOM   1487  CB  LEU B  57      38.481 -19.495  48.256  1.00  6.42           C  
+ATOM   1488  CG  LEU B  57      38.129 -18.065  47.838  1.00  5.28           C  
+ATOM   1489  CD1 LEU B  57      37.753 -18.044  46.360  1.00  9.60           C  
+ATOM   1490  CD2 LEU B  57      36.975 -17.546  48.688  1.00  8.97           C  
+ATOM   1491  N   LEU B  58      40.328 -21.617  49.746  1.00  7.19           N  
+ATOM   1492  CA  LEU B  58      40.682 -23.014  50.003  1.00  6.27           C  
+ATOM   1493  C   LEU B  58      40.545 -23.373  51.479  1.00  7.53           C  
+ATOM   1494  O   LEU B  58      40.129 -24.481  51.820  1.00  8.25           O  
+ATOM   1495  CB  LEU B  58      42.121 -23.282  49.548  1.00  6.35           C  
+ATOM   1496  CG  LEU B  58      42.717 -24.658  49.858  1.00  7.35           C  
+ATOM   1497  CD1 LEU B  58      41.888 -25.747  49.182  1.00  7.89           C  
+ATOM   1498  CD2 LEU B  58      44.163 -24.708  49.380  1.00 10.98           C  
+ATOM   1499  N   GLU B  59      40.896 -22.431  52.349  1.00  7.39           N  
+ATOM   1500  CA  GLU B  59      40.833 -22.649  53.795  1.00  5.78           C  
+ATOM   1501  C   GLU B  59      39.439 -22.459  54.377  1.00  7.88           C  
+ATOM   1502  O   GLU B  59      39.225 -22.688  55.567  1.00  7.81           O  
+ATOM   1503  CB  GLU B  59      41.794 -21.689  54.508  1.00  7.90           C  
+ATOM   1504  CG  GLU B  59      43.269 -21.913  54.189  1.00  9.78           C  
+ATOM   1505  CD  GLU B  59      44.161 -20.852  54.813  1.00 14.31           C  
+ATOM   1506  OE1 GLU B  59      43.781 -20.303  55.868  1.00 14.64           O  
+ATOM   1507  OE2 GLU B  59      45.246 -20.578  54.261  1.00 12.79           O  
+ATOM   1508  N   ASN B  60      38.487 -22.056  53.543  1.00  7.83           N  
+ATOM   1509  CA  ASN B  60      37.139 -21.803  54.034  1.00  6.84           C  
+ATOM   1510  C   ASN B  60      36.024 -22.395  53.193  1.00  9.20           C  
+ATOM   1511  O   ASN B  60      34.979 -21.777  52.989  1.00  7.74           O  
+ATOM   1512  CB  ASN B  60      36.959 -20.295  54.187  1.00  7.58           C  
+ATOM   1513  CG  ASN B  60      37.812 -19.737  55.302  1.00  7.35           C  
+ATOM   1514  OD1 ASN B  60      37.463 -19.854  56.474  1.00  8.74           O  
+ATOM   1515  ND2 ASN B  60      38.955 -19.151  54.947  1.00  7.82           N  
+ATOM   1516  N   ILE B  61      36.254 -23.612  52.716  1.00  7.19           N  
+ATOM   1517  CA  ILE B  61      35.274 -24.308  51.903  1.00  8.45           C  
+ATOM   1518  C   ILE B  61      33.970 -24.537  52.664  1.00  6.57           C  
+ATOM   1519  O   ILE B  61      32.893 -24.505  52.067  1.00  7.89           O  
+ATOM   1520  CB  ILE B  61      35.847 -25.659  51.421  1.00  5.90           C  
+ATOM   1521  CG1 ILE B  61      36.984 -25.406  50.425  1.00  9.41           C  
+ATOM   1522  CG2 ILE B  61      34.754 -26.509  50.796  1.00  8.75           C  
+ATOM   1523  CD1 ILE B  61      37.798 -26.654  50.073  1.00  8.14           C  
+ATOM   1524  N   ASP B  62      34.053 -24.753  53.977  1.00  7.51           N  
+ATOM   1525  CA  ASP B  62      32.839 -24.992  54.752  1.00  7.54           C  
+ATOM   1526  C   ASP B  62      32.080 -23.742  55.198  1.00  8.49           C  
+ATOM   1527  O   ASP B  62      31.092 -23.839  55.927  1.00  9.19           O  
+ATOM   1528  CB  ASP B  62      33.125 -25.913  55.954  1.00  8.95           C  
+ATOM   1529  CG  ASP B  62      34.151 -25.345  56.931  1.00 11.12           C  
+ATOM   1530  OD1 ASP B  62      34.862 -24.373  56.603  1.00 11.35           O  
+ATOM   1531  OD2 ASP B  62      34.250 -25.905  58.043  1.00 12.08           O  
+ATOM   1532  N   ILE B  63      32.526 -22.570  54.754  1.00  6.73           N  
+ATOM   1533  CA  ILE B  63      31.831 -21.333  55.099  1.00  7.47           C  
+ATOM   1534  C   ILE B  63      30.831 -21.025  53.983  1.00  6.96           C  
+ATOM   1535  O   ILE B  63      31.175 -21.080  52.801  1.00  8.12           O  
+ATOM   1536  CB  ILE B  63      32.812 -20.143  55.247  1.00  7.47           C  
+ATOM   1537  CG1 ILE B  63      33.789 -20.415  56.397  1.00  8.97           C  
+ATOM   1538  CG2 ILE B  63      32.041 -18.852  55.484  1.00  9.26           C  
+ATOM   1539  CD1 ILE B  63      33.126 -20.594  57.752  1.00 13.96           C  
+ATOM   1540  N   GLY B  64      29.594 -20.718  54.361  1.00  8.71           N  
+ATOM   1541  CA  GLY B  64      28.574 -20.414  53.371  1.00  9.81           C  
+ATOM   1542  C   GLY B  64      28.652 -18.974  52.900  1.00 11.60           C  
+ATOM   1543  O   GLY B  64      27.928 -18.109  53.392  1.00 16.00           O  
+ATOM   1544  N   TYR B  65      29.521 -18.716  51.931  1.00  9.38           N  
+ATOM   1545  CA  TYR B  65      29.691 -17.360  51.422  1.00  9.58           C  
+ATOM   1546  C   TYR B  65      29.271 -17.191  49.968  1.00  9.17           C  
+ATOM   1547  O   TYR B  65      29.208 -18.152  49.198  1.00 10.42           O  
+ATOM   1548  CB  TYR B  65      31.159 -16.940  51.560  1.00  8.00           C  
+ATOM   1549  CG  TYR B  65      32.102 -17.727  50.671  1.00  8.44           C  
+ATOM   1550  CD1 TYR B  65      32.355 -17.325  49.358  1.00  8.81           C  
+ATOM   1551  CD2 TYR B  65      32.707 -18.900  51.130  1.00  7.86           C  
+ATOM   1552  CE1 TYR B  65      33.186 -18.072  48.522  1.00  9.11           C  
+ATOM   1553  CE2 TYR B  65      33.542 -19.655  50.300  1.00  7.54           C  
+ATOM   1554  CZ  TYR B  65      33.773 -19.233  48.997  1.00  8.70           C  
+ATOM   1555  OH  TYR B  65      34.584 -19.970  48.162  1.00  8.32           O  
+ATOM   1556  N   GLU B  66      28.971 -15.950  49.609  1.00  9.95           N  
+ATOM   1557  CA  GLU B  66      28.626 -15.599  48.244  1.00 10.88           C  
+ATOM   1558  C   GLU B  66      29.390 -14.316  47.987  1.00 10.98           C  
+ATOM   1559  O   GLU B  66      29.493 -13.463  48.869  1.00 11.96           O  
+ATOM   1560  CB  GLU B  66      27.117 -15.390  48.066  1.00 16.40           C  
+ATOM   1561  CG  GLU B  66      26.420 -14.541  49.113  1.00 22.87           C  
+ATOM   1562  CD  GLU B  66      24.932 -14.377  48.814  1.00 29.66           C  
+ATOM   1563  OE1 GLU B  66      24.317 -15.340  48.309  1.00 28.07           O  
+ATOM   1564  OE2 GLU B  66      24.372 -13.294  49.089  1.00 28.91           O  
+ATOM   1565  N   LEU B  67      29.958 -14.200  46.793  1.00 10.09           N  
+ATOM   1566  CA  LEU B  67      30.736 -13.023  46.438  1.00  9.45           C  
+ATOM   1567  C   LEU B  67      30.013 -12.174  45.404  1.00  9.82           C  
+ATOM   1568  O   LEU B  67      29.510 -12.684  44.405  1.00  9.58           O  
+ATOM   1569  CB  LEU B  67      32.098 -13.436  45.864  1.00 10.31           C  
+ATOM   1570  CG  LEU B  67      33.024 -14.359  46.663  1.00 12.61           C  
+ATOM   1571  CD1 LEU B  67      34.260 -14.652  45.824  1.00 14.54           C  
+ATOM   1572  CD2 LEU B  67      33.416 -13.716  47.986  1.00 16.56           C  
+ATOM   1573  N   PHE B  68      29.965 -10.874  45.655  1.00  7.13           N  
+ATOM   1574  CA  PHE B  68      29.349  -9.941  44.731  1.00  8.35           C  
+ATOM   1575  C   PHE B  68      30.373  -8.842  44.496  1.00  8.15           C  
+ATOM   1576  O   PHE B  68      30.893  -8.265  45.452  1.00  9.87           O  
+ATOM   1577  CB  PHE B  68      28.079  -9.342  45.338  1.00  6.56           C  
+ATOM   1578  CG  PHE B  68      26.940 -10.313  45.438  1.00 11.63           C  
+ATOM   1579  CD1 PHE B  68      26.211 -10.667  44.306  1.00 15.37           C  
+ATOM   1580  CD2 PHE B  68      26.596 -10.875  46.662  1.00 12.83           C  
+ATOM   1581  CE1 PHE B  68      25.152 -11.568  44.393  1.00 13.27           C  
+ATOM   1582  CE2 PHE B  68      25.539 -11.778  46.760  1.00 15.36           C  
+ATOM   1583  CZ  PHE B  68      24.817 -12.124  45.626  1.00 16.24           C  
+ATOM   1584  N   LEU B  69      30.692  -8.578  43.234  1.00  5.68           N  
+ATOM   1585  CA  LEU B  69      31.650  -7.527  42.914  1.00  4.44           C  
+ATOM   1586  C   LEU B  69      30.907  -6.317  42.384  1.00  6.39           C  
+ATOM   1587  O   LEU B  69      29.952  -6.459  41.617  1.00  7.09           O  
+ATOM   1588  CB  LEU B  69      32.661  -8.008  41.873  1.00  5.18           C  
+ATOM   1589  CG  LEU B  69      33.798  -8.882  42.412  1.00 10.26           C  
+ATOM   1590  CD1 LEU B  69      33.221 -10.151  43.019  1.00 11.61           C  
+ATOM   1591  CD2 LEU B  69      34.768  -9.215  41.286  1.00 11.86           C  
+ATOM   1592  N   TRP B  70      31.340  -5.130  42.800  1.00  6.32           N  
+ATOM   1593  CA  TRP B  70      30.705  -3.894  42.360  1.00  6.17           C  
+ATOM   1594  C   TRP B  70      31.718  -2.869  41.889  1.00  6.61           C  
+ATOM   1595  O   TRP B  70      32.664  -2.547  42.611  1.00  7.06           O  
+ATOM   1596  CB  TRP B  70      29.895  -3.267  43.501  1.00  7.19           C  
+ATOM   1597  CG  TRP B  70      28.922  -4.198  44.142  1.00  8.42           C  
+ATOM   1598  CD1 TRP B  70      29.044  -4.803  45.358  1.00  9.62           C  
+ATOM   1599  CD2 TRP B  70      27.671  -4.631  43.600  1.00 10.62           C  
+ATOM   1600  NE1 TRP B  70      27.941  -5.588  45.610  1.00  8.49           N  
+ATOM   1601  CE2 TRP B  70      27.083  -5.499  44.545  1.00  7.83           C  
+ATOM   1602  CE3 TRP B  70      26.989  -4.369  42.403  1.00 11.10           C  
+ATOM   1603  CZ2 TRP B  70      25.840  -6.108  44.333  1.00 10.76           C  
+ATOM   1604  CZ3 TRP B  70      25.756  -4.974  42.191  1.00 13.52           C  
+ATOM   1605  CH2 TRP B  70      25.194  -5.835  43.152  1.00 12.87           C  
+ATOM   1606  N   LYS B  71      31.529  -2.358  40.679  1.00  7.61           N  
+ATOM   1607  CA  LYS B  71      32.419  -1.326  40.172  1.00  6.82           C  
+ATOM   1608  C   LYS B  71      32.048  -0.038  40.905  1.00  7.46           C  
+ATOM   1609  O   LYS B  71      30.964   0.055  41.489  1.00  8.76           O  
+ATOM   1610  CB  LYS B  71      32.262  -1.184  38.657  1.00 10.45           C  
+ATOM   1611  CG  LYS B  71      32.688  -2.447  37.920  1.00 14.60           C  
+ATOM   1612  CD  LYS B  71      32.776  -2.235  36.424  1.00 21.45           C  
+ATOM   1613  CE  LYS B  71      33.170  -3.528  35.718  1.00 28.85           C  
+ATOM   1614  NZ  LYS B  71      34.417  -4.119  36.279  1.00 29.47           N  
+ATOM   1615  N   LYS B  72      32.934   0.952  40.881  1.00 10.20           N  
+ATOM   1616  CA  LYS B  72      32.683   2.190  41.615  1.00 10.67           C  
+ATOM   1617  C   LYS B  72      31.363   2.895  41.325  1.00 11.13           C  
+ATOM   1618  O   LYS B  72      30.823   3.562  42.204  1.00 12.36           O  
+ATOM   1619  CB  LYS B  72      33.845   3.175  41.423  1.00 12.82           C  
+ATOM   1620  CG  LYS B  72      34.057   3.639  40.001  1.00 18.96           C  
+ATOM   1621  CD  LYS B  72      35.183   4.664  39.913  1.00 28.19           C  
+ATOM   1622  CE  LYS B  72      36.520   4.078  40.352  1.00 32.59           C  
+ATOM   1623  NZ  LYS B  72      37.623   5.080  40.287  1.00 35.96           N  
+ATOM   1624  N   ASN B  73      30.832   2.751  40.113  1.00  8.90           N  
+ATOM   1625  CA  ASN B  73      29.574   3.414  39.788  1.00  9.56           C  
+ATOM   1626  C   ASN B  73      28.354   2.527  40.037  1.00 10.10           C  
+ATOM   1627  O   ASN B  73      27.233   2.896  39.693  1.00 10.34           O  
+ATOM   1628  CB  ASN B  73      29.592   3.918  38.328  1.00  8.81           C  
+ATOM   1629  CG  ASN B  73      29.639   2.794  37.304  1.00 10.55           C  
+ATOM   1630  OD1 ASN B  73      29.998   1.660  37.616  1.00 12.03           O  
+ATOM   1631  ND2 ASN B  73      29.290   3.117  36.060  1.00  9.29           N  
+ATOM   1632  N   GLU B  74      28.569   1.373  40.666  1.00  9.00           N  
+ATOM   1633  CA  GLU B  74      27.469   0.454  40.940  1.00  6.85           C  
+ATOM   1634  C   GLU B  74      27.067   0.383  42.410  1.00  8.04           C  
+ATOM   1635  O   GLU B  74      26.327  -0.515  42.811  1.00  7.33           O  
+ATOM   1636  CB  GLU B  74      27.822  -0.950  40.445  1.00  9.08           C  
+ATOM   1637  CG  GLU B  74      28.150  -1.011  38.957  1.00  8.15           C  
+ATOM   1638  CD  GLU B  74      28.526  -2.404  38.503  1.00 12.67           C  
+ATOM   1639  OE1 GLU B  74      29.315  -3.068  39.207  1.00 10.13           O  
+ATOM   1640  OE2 GLU B  74      28.042  -2.832  37.435  1.00 15.47           O  
+ATOM   1641  N   VAL B  75      27.546   1.323  43.217  1.00  6.01           N  
+ATOM   1642  CA  VAL B  75      27.194   1.309  44.628  1.00  6.91           C  
+ATOM   1643  C   VAL B  75      25.682   1.445  44.799  1.00  6.67           C  
+ATOM   1644  O   VAL B  75      25.110   0.892  45.736  1.00  8.26           O  
+ATOM   1645  CB  VAL B  75      27.912   2.439  45.412  1.00  7.12           C  
+ATOM   1646  CG1 VAL B  75      27.420   2.463  46.858  1.00  5.38           C  
+ATOM   1647  CG2 VAL B  75      29.418   2.209  45.390  1.00  6.09           C  
+ATOM   1648  N   ASP B  76      25.025   2.163  43.893  1.00  6.82           N  
+ATOM   1649  CA  ASP B  76      23.583   2.319  44.020  1.00  7.89           C  
+ATOM   1650  C   ASP B  76      22.834   1.000  43.830  1.00  7.12           C  
+ATOM   1651  O   ASP B  76      21.776   0.803  44.422  1.00  8.14           O  
+ATOM   1652  CB  ASP B  76      23.051   3.404  43.064  1.00  7.64           C  
+ATOM   1653  CG  ASP B  76      23.365   3.132  41.602  1.00 11.13           C  
+ATOM   1654  OD1 ASP B  76      24.132   2.203  41.297  1.00 10.63           O  
+ATOM   1655  OD2 ASP B  76      22.837   3.878  40.751  1.00 13.20           O  
+ATOM   1656  N   ILE B  77      23.387   0.092  43.028  1.00  6.11           N  
+ATOM   1657  CA  ILE B  77      22.744  -1.205  42.808  1.00  8.01           C  
+ATOM   1658  C   ILE B  77      22.865  -2.010  44.101  1.00  8.15           C  
+ATOM   1659  O   ILE B  77      21.906  -2.637  44.558  1.00  9.44           O  
+ATOM   1660  CB  ILE B  77      23.425  -2.003  41.673  1.00  9.58           C  
+ATOM   1661  CG1 ILE B  77      23.411  -1.197  40.376  1.00  7.88           C  
+ATOM   1662  CG2 ILE B  77      22.686  -3.322  41.452  1.00  8.83           C  
+ATOM   1663  CD1 ILE B  77      24.174  -1.865  39.240  1.00 12.83           C  
+ATOM   1664  N   PHE B  78      24.063  -1.987  44.677  1.00  6.79           N  
+ATOM   1665  CA  PHE B  78      24.345  -2.679  45.931  1.00  8.25           C  
+ATOM   1666  C   PHE B  78      23.391  -2.195  47.028  1.00  8.65           C  
+ATOM   1667  O   PHE B  78      22.766  -2.994  47.732  1.00  7.35           O  
+ATOM   1668  CB  PHE B  78      25.797  -2.404  46.343  1.00  8.13           C  
+ATOM   1669  CG  PHE B  78      26.064  -2.614  47.804  1.00  9.18           C  
+ATOM   1670  CD1 PHE B  78      26.089  -3.896  48.347  1.00 11.50           C  
+ATOM   1671  CD2 PHE B  78      26.260  -1.525  48.647  1.00  9.14           C  
+ATOM   1672  CE1 PHE B  78      26.302  -4.091  49.710  1.00 12.70           C  
+ATOM   1673  CE2 PHE B  78      26.472  -1.709  50.011  1.00  8.09           C  
+ATOM   1674  CZ  PHE B  78      26.492  -2.997  50.543  1.00  8.89           C  
+ATOM   1675  N   LEU B  79      23.280  -0.879  47.174  1.00  6.99           N  
+ATOM   1676  CA  LEU B  79      22.406  -0.309  48.195  1.00  8.19           C  
+ATOM   1677  C   LEU B  79      20.935  -0.653  47.975  1.00  9.19           C  
+ATOM   1678  O   LEU B  79      20.199  -0.903  48.933  1.00 10.56           O  
+ATOM   1679  CB  LEU B  79      22.586   1.212  48.258  1.00  7.77           C  
+ATOM   1680  CG  LEU B  79      23.921   1.718  48.820  1.00  5.84           C  
+ATOM   1681  CD1 LEU B  79      23.942   3.241  48.802  1.00  6.51           C  
+ATOM   1682  CD2 LEU B  79      24.111   1.209  50.245  1.00  8.59           C  
+ATOM   1683  N   LYS B  80      20.506  -0.667  46.717  1.00  8.80           N  
+ATOM   1684  CA  LYS B  80      19.117  -0.992  46.399  1.00 11.21           C  
+ATOM   1685  C   LYS B  80      18.807  -2.433  46.794  1.00 10.33           C  
+ATOM   1686  O   LYS B  80      17.754  -2.720  47.370  1.00 11.42           O  
+ATOM   1687  CB  LYS B  80      18.856  -0.805  44.901  1.00  8.58           C  
+ATOM   1688  CG  LYS B  80      17.441  -1.174  44.457  1.00 13.04           C  
+ATOM   1689  CD  LYS B  80      16.393  -0.278  45.106  1.00 19.56           C  
+ATOM   1690  CE  LYS B  80      14.994  -0.616  44.612  1.00 20.22           C  
+ATOM   1691  NZ  LYS B  80      14.629  -2.024  44.919  1.00 31.99           N  
+ATOM   1692  N   ASN B  81      19.731  -3.335  46.486  1.00  7.78           N  
+ATOM   1693  CA  ASN B  81      19.559  -4.746  46.801  1.00  8.85           C  
+ATOM   1694  C   ASN B  81      19.494  -5.008  48.302  1.00 11.79           C  
+ATOM   1695  O   ASN B  81      18.920  -6.005  48.733  1.00 13.02           O  
+ATOM   1696  CB  ASN B  81      20.695  -5.571  46.195  1.00  8.56           C  
+ATOM   1697  CG  ASN B  81      20.609  -5.668  44.686  1.00 11.64           C  
+ATOM   1698  OD1 ASN B  81      19.701  -5.116  44.060  1.00 10.80           O  
+ATOM   1699  ND2 ASN B  81      21.561  -6.377  44.091  1.00 10.75           N  
+ATOM   1700  N   LEU B  82      20.082  -4.120  49.098  1.00  9.55           N  
+ATOM   1701  CA  LEU B  82      20.057  -4.301  50.545  1.00 10.33           C  
+ATOM   1702  C   LEU B  82      18.641  -4.223  51.100  1.00 11.86           C  
+ATOM   1703  O   LEU B  82      18.372  -4.695  52.203  1.00 13.00           O  
+ATOM   1704  CB  LEU B  82      20.930  -3.254  51.240  1.00  9.26           C  
+ATOM   1705  CG  LEU B  82      22.442  -3.431  51.116  1.00  9.05           C  
+ATOM   1706  CD1 LEU B  82      23.140  -2.329  51.907  1.00  8.92           C  
+ATOM   1707  CD2 LEU B  82      22.851  -4.799  51.646  1.00 10.02           C  
+ATOM   1708  N   GLU B  83      17.731  -3.629  50.339  1.00 14.53           N  
+ATOM   1709  CA  GLU B  83      16.353  -3.521  50.798  1.00 19.28           C  
+ATOM   1710  C   GLU B  83      15.740  -4.909  50.969  1.00 16.91           C  
+ATOM   1711  O   GLU B  83      14.796  -5.087  51.740  1.00 22.85           O  
+ATOM   1712  CB  GLU B  83      15.523  -2.705  49.806  1.00 17.82           C  
+ATOM   1713  CG  GLU B  83      16.124  -1.348  49.480  1.00 20.84           C  
+ATOM   1714  CD  GLU B  83      15.169  -0.450  48.720  1.00 24.65           C  
+ATOM   1715  OE1 GLU B  83      14.455  -0.957  47.831  1.00 24.44           O  
+ATOM   1716  OE2 GLU B  83      15.143   0.766  49.008  1.00 29.53           O  
+ATOM   1717  N   LYS B  84      16.288  -5.890  50.257  1.00 18.37           N  
+ATOM   1718  CA  LYS B  84      15.791  -7.263  50.318  1.00 19.92           C  
+ATOM   1719  C   LYS B  84      16.692  -8.213  51.104  1.00 21.36           C  
+ATOM   1720  O   LYS B  84      16.516  -9.429  51.038  1.00 22.42           O  
+ATOM   1721  CB  LYS B  84      15.623  -7.824  48.905  1.00 19.42           C  
+ATOM   1722  CG  LYS B  84      14.672  -7.046  48.012  1.00 20.23           C  
+ATOM   1723  CD  LYS B  84      14.571  -7.707  46.647  1.00 19.41           C  
+ATOM   1724  CE  LYS B  84      13.602  -6.969  45.739  1.00 21.89           C  
+ATOM   1725  NZ  LYS B  84      13.462  -7.655  44.424  1.00 22.51           N  
+ATOM   1726  N   SER B  85      17.653  -7.668  51.842  1.00 20.41           N  
+ATOM   1727  CA  SER B  85      18.573  -8.503  52.610  1.00 23.07           C  
+ATOM   1728  C   SER B  85      18.061  -8.818  54.011  1.00 23.57           C  
+ATOM   1729  O   SER B  85      17.211  -8.109  54.546  1.00 24.14           O  
+ATOM   1730  CB  SER B  85      19.933  -7.813  52.728  1.00 21.57           C  
+ATOM   1731  OG  SER B  85      19.832  -6.638  53.513  1.00 25.20           O  
+ATOM   1732  N   GLU B  86      18.589  -9.890  54.595  1.00 26.07           N  
+ATOM   1733  CA  GLU B  86      18.218 -10.297  55.947  1.00 27.12           C  
+ATOM   1734  C   GLU B  86      19.449 -10.455  56.833  1.00 25.62           C  
+ATOM   1735  O   GLU B  86      19.457 -11.265  57.761  1.00 29.42           O  
+ATOM   1736  CB  GLU B  86      17.442 -11.616  55.932  1.00 33.85           C  
+ATOM   1737  CG  GLU B  86      15.974 -11.483  55.572  1.00 46.71           C  
+ATOM   1738  CD  GLU B  86      15.149 -12.647  56.094  1.00 55.10           C  
+ATOM   1739  OE1 GLU B  86      15.076 -12.816  57.331  1.00 58.77           O  
+ATOM   1740  OE2 GLU B  86      14.577 -13.393  55.272  1.00 60.31           O  
+ATOM   1741  N   VAL B  87      20.487  -9.678  56.549  1.00 19.87           N  
+ATOM   1742  CA  VAL B  87      21.721  -9.739  57.325  1.00 15.79           C  
+ATOM   1743  C   VAL B  87      21.506  -9.220  58.747  1.00 15.58           C  
+ATOM   1744  O   VAL B  87      20.686  -8.329  58.969  1.00 16.78           O  
+ATOM   1745  CB  VAL B  87      22.835  -8.920  56.642  1.00 13.99           C  
+ATOM   1746  CG1 VAL B  87      23.189  -9.550  55.304  1.00 14.84           C  
+ATOM   1747  CG2 VAL B  87      22.378  -7.485  56.435  1.00 15.74           C  
+ATOM   1748  N   ASP B  88      22.243  -9.777  59.707  1.00 12.15           N  
+ATOM   1749  CA  ASP B  88      22.111  -9.363  61.103  1.00 12.58           C  
+ATOM   1750  C   ASP B  88      23.424  -8.891  61.719  1.00 12.85           C  
+ATOM   1751  O   ASP B  88      23.489  -8.607  62.913  1.00 12.10           O  
+ATOM   1752  CB  ASP B  88      21.535 -10.510  61.946  1.00 12.92           C  
+ATOM   1753  CG  ASP B  88      22.373 -11.778  61.865  1.00 16.42           C  
+ATOM   1754  OD1 ASP B  88      23.456 -11.748  61.248  1.00 13.85           O  
+ATOM   1755  OD2 ASP B  88      21.945 -12.809  62.426  1.00 18.60           O  
+ATOM   1756  N   GLY B  89      24.465  -8.810  60.898  1.00  9.61           N  
+ATOM   1757  CA  GLY B  89      25.765  -8.370  61.375  1.00  8.63           C  
+ATOM   1758  C   GLY B  89      26.526  -7.749  60.220  1.00  8.43           C  
+ATOM   1759  O   GLY B  89      26.303  -8.118  59.068  1.00  9.07           O  
+ATOM   1760  N   LEU B  90      27.431  -6.824  60.526  1.00  6.06           N  
+ATOM   1761  CA  LEU B  90      28.197  -6.125  59.495  1.00  7.92           C  
+ATOM   1762  C   LEU B  90      29.699  -6.040  59.755  1.00  8.64           C  
+ATOM   1763  O   LEU B  90      30.126  -5.642  60.839  1.00  8.63           O  
+ATOM   1764  CB  LEU B  90      27.641  -4.703  59.335  1.00  6.14           C  
+ATOM   1765  CG  LEU B  90      28.462  -3.683  58.540  1.00  7.39           C  
+ATOM   1766  CD1 LEU B  90      28.459  -4.048  57.061  1.00  8.17           C  
+ATOM   1767  CD2 LEU B  90      27.865  -2.287  58.742  1.00  7.67           C  
+ATOM   1768  N   LEU B  91      30.488  -6.410  58.747  1.00  8.03           N  
+ATOM   1769  CA  LEU B  91      31.948  -6.346  58.821  1.00  7.73           C  
+ATOM   1770  C   LEU B  91      32.418  -5.421  57.696  1.00  7.16           C  
+ATOM   1771  O   LEU B  91      31.980  -5.560  56.556  1.00  7.44           O  
+ATOM   1772  CB  LEU B  91      32.566  -7.739  58.630  1.00  8.30           C  
+ATOM   1773  CG  LEU B  91      32.297  -8.804  59.697  1.00  9.27           C  
+ATOM   1774  CD1 LEU B  91      32.918 -10.122  59.253  1.00  8.84           C  
+ATOM   1775  CD2 LEU B  91      32.879  -8.366  61.036  1.00  9.26           C  
+ATOM   1776  N   VAL B  92      33.300  -4.476  58.020  1.00  5.28           N  
+ATOM   1777  CA  VAL B  92      33.805  -3.528  57.030  1.00  7.29           C  
+ATOM   1778  C   VAL B  92      35.331  -3.537  56.959  1.00  8.28           C  
+ATOM   1779  O   VAL B  92      36.003  -3.466  57.991  1.00  8.12           O  
+ATOM   1780  CB  VAL B  92      33.333  -2.097  57.360  1.00  6.10           C  
+ATOM   1781  CG1 VAL B  92      33.953  -1.102  56.387  1.00  9.80           C  
+ATOM   1782  CG2 VAL B  92      31.810  -2.031  57.295  1.00  8.41           C  
+ATOM   1783  N   TYR B  93      35.865  -3.613  55.739  1.00  7.56           N  
+ATOM   1784  CA  TYR B  93      37.314  -3.644  55.512  1.00  8.52           C  
+ATOM   1785  C   TYR B  93      37.751  -2.746  54.368  1.00  8.93           C  
+ATOM   1786  O   TYR B  93      37.059  -2.635  53.356  1.00  8.79           O  
+ATOM   1787  CB  TYR B  93      37.777  -5.054  55.143  1.00  6.28           C  
+ATOM   1788  CG  TYR B  93      37.401  -6.110  56.135  1.00  7.75           C  
+ATOM   1789  CD1 TYR B  93      38.258  -6.448  57.178  1.00  8.54           C  
+ATOM   1790  CD2 TYR B  93      36.173  -6.760  56.047  1.00  6.62           C  
+ATOM   1791  CE1 TYR B  93      37.899  -7.410  58.112  1.00  7.93           C  
+ATOM   1792  CE2 TYR B  93      35.805  -7.720  56.973  1.00  7.24           C  
+ATOM   1793  CZ  TYR B  93      36.668  -8.041  58.001  1.00  6.95           C  
+ATOM   1794  OH  TYR B  93      36.297  -8.983  58.924  1.00  8.30           O  
+ATOM   1795  N   CYS B  94      38.916  -2.126  54.519  1.00 10.13           N  
+ATOM   1796  CA  CYS B  94      39.474  -1.296  53.458  1.00  6.30           C  
+ATOM   1797  C   CYS B  94      40.934  -1.012  53.768  1.00  9.34           C  
+ATOM   1798  O   CYS B  94      41.413  -1.327  54.855  1.00  9.31           O  
+ATOM   1799  CB  CYS B  94      38.720   0.038  53.327  1.00  9.03           C  
+ATOM   1800  SG  CYS B  94      39.178   1.336  54.530  1.00  9.87           S  
+ATOM   1801  N   ASP B  95      41.650  -0.461  52.793  1.00  8.48           N  
+ATOM   1802  CA  ASP B  95      43.035  -0.071  53.012  1.00 10.08           C  
+ATOM   1803  C   ASP B  95      43.051   1.444  52.844  1.00 11.80           C  
+ATOM   1804  O   ASP B  95      42.013   2.040  52.560  1.00 10.63           O  
+ATOM   1805  CB  ASP B  95      44.006  -0.766  52.039  1.00 10.61           C  
+ATOM   1806  CG  ASP B  95      43.580  -0.672  50.585  1.00  8.45           C  
+ATOM   1807  OD1 ASP B  95      42.664   0.111  50.255  1.00 12.75           O  
+ATOM   1808  OD2 ASP B  95      44.191  -1.392  49.765  1.00 11.59           O  
+ATOM   1809  N   ASP B  96      44.202   2.080  53.024  1.00 12.83           N  
+ATOM   1810  CA  ASP B  96      44.246   3.534  52.912  1.00 12.81           C  
+ATOM   1811  C   ASP B  96      43.786   4.116  51.581  1.00 12.83           C  
+ATOM   1812  O   ASP B  96      43.073   5.124  51.555  1.00 12.12           O  
+ATOM   1813  CB  ASP B  96      45.646   4.051  53.243  1.00 14.63           C  
+ATOM   1814  CG  ASP B  96      45.965   3.940  54.717  1.00 18.00           C  
+ATOM   1815  OD1 ASP B  96      45.036   4.107  55.539  1.00 20.62           O  
+ATOM   1816  OD2 ASP B  96      47.142   3.704  55.055  1.00 20.71           O  
+ATOM   1817  N   GLU B  97      44.181   3.493  50.480  1.00 13.53           N  
+ATOM   1818  CA  GLU B  97      43.797   3.990  49.165  1.00 16.29           C  
+ATOM   1819  C   GLU B  97      42.293   3.999  48.910  1.00 15.06           C  
+ATOM   1820  O   GLU B  97      41.811   4.738  48.053  1.00 13.57           O  
+ATOM   1821  CB  GLU B  97      44.491   3.177  48.068  1.00 19.19           C  
+ATOM   1822  CG  GLU B  97      45.967   3.506  47.915  1.00 33.67           C  
+ATOM   1823  CD  GLU B  97      46.597   2.839  46.710  1.00 39.74           C  
+ATOM   1824  OE1 GLU B  97      46.065   3.000  45.590  1.00 44.51           O  
+ATOM   1825  OE2 GLU B  97      47.631   2.159  46.883  1.00 45.30           O  
+ATOM   1826  N   ASN B  98      41.549   3.195  49.661  1.00 12.17           N  
+ATOM   1827  CA  ASN B  98      40.107   3.113  49.459  1.00 11.15           C  
+ATOM   1828  C   ASN B  98      39.261   3.487  50.674  1.00 11.99           C  
+ATOM   1829  O   ASN B  98      38.048   3.275  50.679  1.00 10.72           O  
+ATOM   1830  CB  ASN B  98      39.754   1.699  48.991  1.00 11.64           C  
+ATOM   1831  CG  ASN B  98      40.408   1.347  47.664  1.00 10.09           C  
+ATOM   1832  OD1 ASN B  98      39.992   1.828  46.607  1.00 13.42           O  
+ATOM   1833  ND2 ASN B  98      41.447   0.520  47.713  1.00  8.18           N  
+ATOM   1834  N   LYS B  99      39.896   4.064  51.689  1.00 10.70           N  
+ATOM   1835  CA  LYS B  99      39.202   4.453  52.914  1.00  9.28           C  
+ATOM   1836  C   LYS B  99      38.101   5.505  52.754  1.00 10.44           C  
+ATOM   1837  O   LYS B  99      37.004   5.350  53.298  1.00  9.09           O  
+ATOM   1838  CB  LYS B  99      40.223   4.933  53.946  1.00 14.04           C  
+ATOM   1839  CG  LYS B  99      39.622   5.373  55.271  1.00 15.01           C  
+ATOM   1840  CD  LYS B  99      40.712   5.559  56.327  1.00 19.90           C  
+ATOM   1841  CE  LYS B  99      41.761   6.564  55.878  1.00 26.11           C  
+ATOM   1842  NZ  LYS B  99      42.944   6.571  56.785  1.00 26.96           N  
+ATOM   1843  N   VAL B 100      38.390   6.580  52.030  1.00  9.93           N  
+ATOM   1844  CA  VAL B 100      37.398   7.632  51.838  1.00  7.71           C  
+ATOM   1845  C   VAL B 100      36.164   7.083  51.128  1.00  6.80           C  
+ATOM   1846  O   VAL B 100      35.033   7.363  51.524  1.00  8.22           O  
+ATOM   1847  CB  VAL B 100      37.983   8.805  51.019  1.00  9.27           C  
+ATOM   1848  CG1 VAL B 100      36.916   9.865  50.786  1.00 11.14           C  
+ATOM   1849  CG2 VAL B 100      39.168   9.414  51.769  1.00 15.69           C  
+ATOM   1850  N   PHE B 101      36.398   6.280  50.097  1.00  7.70           N  
+ATOM   1851  CA  PHE B 101      35.322   5.675  49.312  1.00  8.14           C  
+ATOM   1852  C   PHE B 101      34.479   4.742  50.180  1.00  8.71           C  
+ATOM   1853  O   PHE B 101      33.250   4.853  50.224  1.00  7.41           O  
+ATOM   1854  CB  PHE B 101      35.927   4.907  48.130  1.00  5.31           C  
+ATOM   1855  CG  PHE B 101      34.907   4.246  47.230  1.00  7.28           C  
+ATOM   1856  CD1 PHE B 101      33.906   4.989  46.616  1.00  8.36           C  
+ATOM   1857  CD2 PHE B 101      34.976   2.880  46.976  1.00  8.23           C  
+ATOM   1858  CE1 PHE B 101      32.985   4.381  45.754  1.00 12.37           C  
+ATOM   1859  CE2 PHE B 101      34.066   2.261  46.120  1.00  9.85           C  
+ATOM   1860  CZ  PHE B 101      33.068   3.012  45.506  1.00 11.79           C  
+HETATM 1861  N   MSE B 102      35.133   3.819  50.878  1.00  8.34           N  
+HETATM 1862  CA  MSE B 102      34.399   2.889  51.728  1.00  7.79           C  
+HETATM 1863  C   MSE B 102      33.624   3.614  52.821  1.00  8.44           C  
+HETATM 1864  O   MSE B 102      32.502   3.230  53.152  1.00  7.89           O  
+HETATM 1865  CB  MSE B 102      35.342   1.866  52.363  1.00  7.74           C  
+HETATM 1866  CG  MSE B 102      34.653   0.952  53.367  1.00  7.13           C  
+HETATM 1867 SE   MSE B 102      33.179  -0.057  52.589  1.00 21.70          SE  
+HETATM 1868  CE  MSE B 102      34.237  -1.244  51.580  1.00  3.62           C  
+ATOM   1869  N   SER B 103      34.214   4.667  53.379  1.00 10.25           N  
+ATOM   1870  CA  SER B 103      33.543   5.428  54.423  1.00  9.15           C  
+ATOM   1871  C   SER B 103      32.213   5.987  53.913  1.00  9.43           C  
+ATOM   1872  O   SER B 103      31.223   6.000  54.643  1.00  8.98           O  
+ATOM   1873  CB  SER B 103      34.438   6.569  54.911  1.00 12.94           C  
+ATOM   1874  OG  SER B 103      35.597   6.055  55.542  1.00 22.39           O  
+ATOM   1875  N   LYS B 104      32.194   6.449  52.664  1.00  9.19           N  
+ATOM   1876  CA  LYS B 104      30.970   6.986  52.078  1.00  8.57           C  
+ATOM   1877  C   LYS B 104      29.930   5.884  51.887  1.00  8.03           C  
+ATOM   1878  O   LYS B 104      28.731   6.110  52.064  1.00  8.00           O  
+ATOM   1879  CB  LYS B 104      31.268   7.676  50.740  1.00  8.00           C  
+ATOM   1880  CG  LYS B 104      31.871   9.067  50.906  1.00  9.99           C  
+ATOM   1881  CD  LYS B 104      32.200   9.726  49.569  1.00  7.11           C  
+ATOM   1882  CE  LYS B 104      33.320   8.997  48.840  1.00  6.13           C  
+ATOM   1883  NZ  LYS B 104      33.713   9.685  47.577  1.00  5.13           N  
+ATOM   1884  N   ILE B 105      30.384   4.688  51.531  1.00  6.44           N  
+ATOM   1885  CA  ILE B 105      29.462   3.573  51.353  1.00  6.44           C  
+ATOM   1886  C   ILE B 105      28.830   3.272  52.708  1.00  6.86           C  
+ATOM   1887  O   ILE B 105      27.612   3.161  52.822  1.00  6.84           O  
+ATOM   1888  CB  ILE B 105      30.192   2.306  50.833  1.00  7.27           C  
+ATOM   1889  CG1 ILE B 105      30.792   2.582  49.447  1.00  6.29           C  
+ATOM   1890  CG2 ILE B 105      29.221   1.133  50.772  1.00  8.00           C  
+ATOM   1891  CD1 ILE B 105      31.576   1.404  48.858  1.00  7.28           C  
+ATOM   1892  N   VAL B 106      29.661   3.163  53.743  1.00  7.24           N  
+ATOM   1893  CA  VAL B 106      29.164   2.872  55.084  1.00  9.20           C  
+ATOM   1894  C   VAL B 106      28.161   3.927  55.551  1.00  7.38           C  
+ATOM   1895  O   VAL B 106      27.119   3.595  56.122  1.00  8.51           O  
+ATOM   1896  CB  VAL B 106      30.323   2.788  56.108  1.00  7.67           C  
+ATOM   1897  CG1 VAL B 106      29.766   2.577  57.510  1.00 11.73           C  
+ATOM   1898  CG2 VAL B 106      31.254   1.633  55.740  1.00 12.47           C  
+ATOM   1899  N   ASP B 107      28.473   5.195  55.298  1.00  7.77           N  
+ATOM   1900  CA  ASP B 107      27.600   6.297  55.700  1.00  9.68           C  
+ATOM   1901  C   ASP B 107      26.195   6.181  55.132  1.00  9.43           C  
+ATOM   1902  O   ASP B 107      25.243   6.702  55.715  1.00 10.12           O  
+ATOM   1903  CB  ASP B 107      28.160   7.649  55.246  1.00 11.43           C  
+ATOM   1904  CG  ASP B 107      29.454   8.021  55.935  1.00 14.81           C  
+ATOM   1905  OD1 ASP B 107      29.679   7.575  57.079  1.00 13.62           O  
+ATOM   1906  OD2 ASP B 107      30.238   8.783  55.327  1.00 15.91           O  
+ATOM   1907  N   ASN B 108      26.071   5.508  53.992  1.00  6.57           N  
+ATOM   1908  CA  ASN B 108      24.786   5.373  53.330  1.00  6.46           C  
+ATOM   1909  C   ASN B 108      24.078   4.036  53.473  1.00  7.81           C  
+ATOM   1910  O   ASN B 108      23.088   3.775  52.787  1.00  6.91           O  
+ATOM   1911  CB  ASN B 108      24.944   5.724  51.854  1.00  5.98           C  
+ATOM   1912  CG  ASN B 108      25.294   7.180  51.656  1.00 11.56           C  
+ATOM   1913  OD1 ASN B 108      26.455   7.536  51.435  1.00 13.06           O  
+ATOM   1914  ND2 ASN B 108      24.288   8.038  51.762  1.00  7.03           N  
+ATOM   1915  N   LEU B 109      24.574   3.193  54.367  1.00  8.14           N  
+ATOM   1916  CA  LEU B 109      23.942   1.902  54.592  1.00  9.38           C  
+ATOM   1917  C   LEU B 109      22.630   2.122  55.329  1.00  9.65           C  
+ATOM   1918  O   LEU B 109      22.479   3.106  56.056  1.00 11.76           O  
+ATOM   1919  CB  LEU B 109      24.843   1.007  55.443  1.00  7.90           C  
+ATOM   1920  CG  LEU B 109      26.133   0.519  54.786  1.00  9.37           C  
+ATOM   1921  CD1 LEU B 109      27.005  -0.174  55.820  1.00 11.40           C  
+ATOM   1922  CD2 LEU B 109      25.797  -0.421  53.642  1.00  9.65           C  
+ATOM   1923  N   PRO B 110      21.658   1.219  55.136  1.00  9.50           N  
+ATOM   1924  CA  PRO B 110      20.372   1.357  55.826  1.00 11.16           C  
+ATOM   1925  C   PRO B 110      20.658   1.400  57.325  1.00 11.60           C  
+ATOM   1926  O   PRO B 110      21.537   0.692  57.816  1.00 11.71           O  
+ATOM   1927  CB  PRO B 110      19.628   0.090  55.417  1.00  9.96           C  
+ATOM   1928  CG  PRO B 110      20.142  -0.164  54.034  1.00 14.79           C  
+ATOM   1929  CD  PRO B 110      21.629   0.087  54.192  1.00 12.17           C  
+ATOM   1930  N   THR B 111      19.915   2.230  58.045  1.00 10.64           N  
+ATOM   1931  CA  THR B 111      20.094   2.385  59.485  1.00 11.86           C  
+ATOM   1932  C   THR B 111      20.244   1.077  60.269  1.00 12.74           C  
+ATOM   1933  O   THR B 111      21.185   0.923  61.051  1.00 15.22           O  
+ATOM   1934  CB  THR B 111      18.921   3.195  60.078  1.00 14.73           C  
+ATOM   1935  OG1 THR B 111      18.902   4.497  59.480  1.00 19.58           O  
+ATOM   1936  CG2 THR B 111      19.062   3.336  61.581  1.00 15.13           C  
+ATOM   1937  N   ALA B 112      19.323   0.142  60.053  1.00 12.23           N  
+ATOM   1938  CA  ALA B 112      19.331  -1.141  60.754  1.00 11.14           C  
+ATOM   1939  C   ALA B 112      20.574  -1.979  60.483  1.00 12.34           C  
+ATOM   1940  O   ALA B 112      21.040  -2.715  61.355  1.00 13.84           O  
+ATOM   1941  CB  ALA B 112      18.080  -1.932  60.391  1.00 12.37           C  
+ATOM   1942  N   ILE B 113      21.111  -1.869  59.274  1.00  9.34           N  
+ATOM   1943  CA  ILE B 113      22.304  -2.621  58.913  1.00  9.05           C  
+ATOM   1944  C   ILE B 113      23.555  -1.956  59.482  1.00  7.74           C  
+ATOM   1945  O   ILE B 113      24.417  -2.625  60.057  1.00 11.19           O  
+ATOM   1946  CB  ILE B 113      22.432  -2.740  57.378  1.00 10.56           C  
+ATOM   1947  CG1 ILE B 113      21.304  -3.629  56.844  1.00 10.65           C  
+ATOM   1948  CG2 ILE B 113      23.796  -3.307  57.002  1.00 13.59           C  
+ATOM   1949  CD1 ILE B 113      21.297  -3.801  55.332  1.00 15.03           C  
+ATOM   1950  N   LYS B 114      23.645  -0.639  59.327  1.00 10.63           N  
+ATOM   1951  CA  LYS B 114      24.794   0.124  59.815  1.00 11.86           C  
+ATOM   1952  C   LYS B 114      24.963  -0.081  61.318  1.00 11.42           C  
+ATOM   1953  O   LYS B 114      26.074  -0.212  61.827  1.00 11.28           O  
+ATOM   1954  CB  LYS B 114      24.588   1.614  59.527  1.00 14.01           C  
+ATOM   1955  CG  LYS B 114      25.802   2.487  59.815  1.00 17.21           C  
+ATOM   1956  CD  LYS B 114      25.454   3.972  59.759  1.00 21.95           C  
+ATOM   1957  CE  LYS B 114      24.861   4.377  58.417  1.00 22.79           C  
+ATOM   1958  NZ  LYS B 114      24.536   5.835  58.380  1.00 25.75           N  
+ATOM   1959  N   ARG B 115      23.831  -0.098  62.012  1.00 11.17           N  
+ATOM   1960  CA  ARG B 115      23.769  -0.271  63.455  1.00 12.50           C  
+ATOM   1961  C   ARG B 115      24.406  -1.587  63.920  1.00 13.03           C  
+ATOM   1962  O   ARG B 115      24.989  -1.654  65.005  1.00 12.52           O  
+ATOM   1963  CB  ARG B 115      22.293  -0.205  63.865  1.00 17.05           C  
+ATOM   1964  CG  ARG B 115      21.964  -0.530  65.299  1.00 24.23           C  
+ATOM   1965  CD  ARG B 115      20.478  -0.855  65.396  1.00 17.93           C  
+ATOM   1966  NE  ARG B 115      19.625   0.260  64.986  1.00 17.89           N  
+ATOM   1967  CZ  ARG B 115      18.384   0.122  64.528  1.00 15.78           C  
+ATOM   1968  NH1 ARG B 115      17.848  -1.084  64.406  1.00 18.02           N  
+ATOM   1969  NH2 ARG B 115      17.665   1.191  64.219  1.00 16.37           N  
+ATOM   1970  N   ASN B 116      24.299  -2.623  63.091  1.00 11.67           N  
+ATOM   1971  CA  ASN B 116      24.841  -3.943  63.414  1.00 11.83           C  
+ATOM   1972  C   ASN B 116      26.324  -4.121  63.093  1.00 10.94           C  
+ATOM   1973  O   ASN B 116      26.787  -5.246  62.882  1.00  8.87           O  
+ATOM   1974  CB  ASN B 116      24.043  -5.033  62.688  1.00 16.10           C  
+ATOM   1975  CG  ASN B 116      22.639  -5.197  63.240  1.00 25.97           C  
+ATOM   1976  OD1 ASN B 116      22.443  -5.273  64.453  1.00 29.95           O  
+ATOM   1977  ND2 ASN B 116      21.656  -5.268  62.348  1.00 29.56           N  
+ATOM   1978  N   LEU B 117      27.063  -3.018  63.057  1.00 11.88           N  
+ATOM   1979  CA  LEU B 117      28.491  -3.063  62.772  1.00 12.36           C  
+ATOM   1980  C   LEU B 117      29.195  -3.846  63.874  1.00 14.22           C  
+ATOM   1981  O   LEU B 117      29.126  -3.479  65.049  1.00 15.46           O  
+ATOM   1982  CB  LEU B 117      29.061  -1.640  62.696  1.00 14.10           C  
+ATOM   1983  CG  LEU B 117      30.572  -1.486  62.471  1.00 14.06           C  
+ATOM   1984  CD1 LEU B 117      30.963  -2.022  61.099  1.00 11.30           C  
+ATOM   1985  CD2 LEU B 117      30.951  -0.014  62.586  1.00 15.66           C  
+ATOM   1986  N   ILE B 118      29.860  -4.931  63.487  1.00 11.99           N  
+ATOM   1987  CA  ILE B 118      30.584  -5.786  64.424  1.00 14.24           C  
+ATOM   1988  C   ILE B 118      32.050  -5.387  64.479  1.00 14.47           C  
+ATOM   1989  O   ILE B 118      32.655  -5.317  65.551  1.00 15.41           O  
+ATOM   1990  CB  ILE B 118      30.537  -7.271  63.985  1.00 13.78           C  
+ATOM   1991  CG1 ILE B 118      29.107  -7.801  64.047  1.00 17.05           C  
+ATOM   1992  CG2 ILE B 118      31.464  -8.106  64.863  1.00 21.57           C  
+ATOM   1993  CD1 ILE B 118      28.975  -9.211  63.506  1.00 13.64           C  
+ATOM   1994  N   LYS B 119      32.617  -5.133  63.307  1.00 12.50           N  
+ATOM   1995  CA  LYS B 119      34.020  -4.779  63.206  1.00 13.01           C  
+ATOM   1996  C   LYS B 119      34.268  -3.873  62.013  1.00 13.28           C  
+ATOM   1997  O   LYS B 119      33.690  -4.068  60.943  1.00 10.47           O  
+ATOM   1998  CB  LYS B 119      34.845  -6.058  63.061  1.00 15.90           C  
+ATOM   1999  CG  LYS B 119      36.341  -5.859  62.985  1.00 20.79           C  
+ATOM   2000  CD  LYS B 119      37.027  -7.195  62.754  1.00 22.35           C  
+ATOM   2001  CE  LYS B 119      38.522  -7.087  62.940  1.00 23.28           C  
+ATOM   2002  NZ  LYS B 119      38.848  -6.704  64.340  1.00 21.74           N  
+ATOM   2003  N   ASP B 120      35.123  -2.875  62.207  1.00 11.74           N  
+ATOM   2004  CA  ASP B 120      35.468  -1.949  61.143  1.00 13.09           C  
+ATOM   2005  C   ASP B 120      36.980  -1.826  61.068  1.00 15.64           C  
+ATOM   2006  O   ASP B 120      37.588  -1.076  61.830  1.00 18.59           O  
+ATOM   2007  CB  ASP B 120      34.859  -0.566  61.395  1.00 14.18           C  
+ATOM   2008  CG  ASP B 120      35.133   0.406  60.255  1.00 21.36           C  
+ATOM   2009  OD1 ASP B 120      36.318   0.667  59.958  1.00 18.80           O  
+ATOM   2010  OD2 ASP B 120      34.162   0.905  59.651  1.00 24.72           O  
+ATOM   2011  N   PHE B 121      37.586  -2.590  60.165  1.00 10.68           N  
+ATOM   2012  CA  PHE B 121      39.028  -2.547  59.977  1.00  8.67           C  
+ATOM   2013  C   PHE B 121      39.187  -1.661  58.755  1.00  9.80           C  
+ATOM   2014  O   PHE B 121      39.505  -2.131  57.658  1.00 10.45           O  
+ATOM   2015  CB  PHE B 121      39.567  -3.948  59.690  1.00 11.06           C  
+ATOM   2016  CG  PHE B 121      41.064  -4.048  59.755  1.00  8.57           C  
+ATOM   2017  CD1 PHE B 121      41.720  -4.053  60.981  1.00  7.88           C  
+ATOM   2018  CD2 PHE B 121      41.819  -4.133  58.589  1.00 11.03           C  
+ATOM   2019  CE1 PHE B 121      43.108  -4.144  61.049  1.00  9.29           C  
+ATOM   2020  CE2 PHE B 121      43.210  -4.224  58.644  1.00 12.45           C  
+ATOM   2021  CZ  PHE B 121      43.857  -4.230  59.876  1.00 11.76           C  
+ATOM   2022  N   CYS B 122      38.954  -0.368  58.952  1.00  9.68           N  
+ATOM   2023  CA  CYS B 122      39.012   0.558  57.842  1.00 11.76           C  
+ATOM   2024  C   CYS B 122      39.164   2.035  58.195  1.00 12.00           C  
+ATOM   2025  O   CYS B 122      40.214   2.631  57.964  1.00 11.46           O  
+ATOM   2026  CB  CYS B 122      37.749   0.362  56.999  1.00 10.50           C  
+ATOM   2027  SG  CYS B 122      37.515   1.575  55.670  1.00 12.06           S  
+ATOM   2028  N   ARG B 123      38.109   2.618  58.753  1.00 13.81           N  
+ATOM   2029  CA  ARG B 123      38.098   4.038  59.077  1.00 13.54           C  
+ATOM   2030  C   ARG B 123      39.199   4.550  60.003  1.00 15.49           C  
+ATOM   2031  O   ARG B 123      39.665   5.677  59.835  1.00 15.89           O  
+ATOM   2032  CB  ARG B 123      36.724   4.424  59.631  1.00 17.36           C  
+ATOM   2033  CG  ARG B 123      35.592   4.061  58.678  1.00 27.63           C  
+ATOM   2034  CD  ARG B 123      34.225   4.502  59.180  1.00 35.34           C  
+ATOM   2035  NE  ARG B 123      34.042   5.948  59.100  1.00 40.69           N  
+ATOM   2036  CZ  ARG B 123      32.965   6.534  58.583  1.00 43.50           C  
+ATOM   2037  NH1 ARG B 123      32.876   7.856  58.550  1.00 44.75           N  
+ATOM   2038  NH2 ARG B 123      31.979   5.797  58.087  1.00 40.61           N  
+ATOM   2039  N   LYS B 124      39.622   3.735  60.964  1.00 12.28           N  
+ATOM   2040  CA  LYS B 124      40.664   4.165  61.897  1.00 10.38           C  
+ATOM   2041  C   LYS B 124      42.094   3.826  61.471  1.00 11.81           C  
+ATOM   2042  O   LYS B 124      43.044   4.116  62.200  1.00 10.66           O  
+ATOM   2043  CB  LYS B 124      40.400   3.591  63.293  1.00 12.36           C  
+ATOM   2044  CG  LYS B 124      39.249   4.256  64.030  1.00 15.36           C  
+ATOM   2045  CD  LYS B 124      39.132   3.712  65.448  1.00 24.54           C  
+ATOM   2046  CE  LYS B 124      38.082   4.458  66.251  1.00 31.08           C  
+ATOM   2047  NZ  LYS B 124      38.118   4.064  67.691  1.00 36.16           N  
+ATOM   2048  N   LEU B 125      42.251   3.215  60.301  1.00 10.78           N  
+ATOM   2049  CA  LEU B 125      43.581   2.873  59.807  1.00  9.35           C  
+ATOM   2050  C   LEU B 125      44.342   4.140  59.430  1.00 13.02           C  
+ATOM   2051  O   LEU B 125      43.768   5.079  58.880  1.00 16.48           O  
+ATOM   2052  CB  LEU B 125      43.482   1.964  58.579  1.00 12.38           C  
+ATOM   2053  CG  LEU B 125      43.052   0.517  58.828  1.00  9.98           C  
+ATOM   2054  CD1 LEU B 125      42.807  -0.166  57.488  1.00 15.34           C  
+ATOM   2055  CD2 LEU B 125      44.125  -0.216  59.624  1.00 10.78           C  
+ATOM   2056  N   SER B 126      45.634   4.162  59.737  1.00 10.00           N  
+ATOM   2057  CA  SER B 126      46.478   5.305  59.416  1.00 14.06           C  
+ATOM   2058  C   SER B 126      47.202   5.060  58.094  1.00 16.28           C  
+ATOM   2059  O   SER B 126      47.689   6.043  57.498  1.00 15.23           O  
+ATOM   2060  CB  SER B 126      47.498   5.546  60.535  1.00 15.40           C  
+ATOM   2061  OG  SER B 126      48.333   4.419  60.724  1.00 18.55           O  
+TER    2062      SER B 126                                                      
+HETATM 2063  S   SO4 B 127      48.867 -16.604  52.271  1.00 25.56           S  
+HETATM 2064  O1  SO4 B 127      49.341 -16.224  50.947  1.00 28.92           O  
+HETATM 2065  O2  SO4 B 127      48.593 -18.036  52.303  1.00 28.08           O  
+HETATM 2066  O3  SO4 B 127      47.644 -15.882  52.588  1.00 25.89           O  
+HETATM 2067  O4  SO4 B 127      49.897 -16.287  53.254  1.00 29.35           O  
+HETATM 2068  O   HOH A 127      28.458   6.021  35.670  1.00 18.16           O  
+HETATM 2069  O   HOH A 128      15.890   4.410  18.138  1.00 20.16           O  
+HETATM 2070  O   HOH A 129      27.529   3.101  15.774  1.00 15.18           O  
+HETATM 2071  O   HOH A 130      32.450  11.412  36.797  1.00 19.18           O  
+HETATM 2072  O   HOH A 131       8.531   7.793  20.199  1.00 17.77           O  
+HETATM 2073  O   HOH A 132      14.364   5.265  15.973  1.00 14.05           O  
+HETATM 2074  O   HOH A 133      21.168 -10.826  39.672  1.00 40.57           O  
+HETATM 2075  O   HOH A 134      13.915  13.483  37.608  1.00 27.78           O  
+HETATM 2076  O   HOH A 135      26.790  -7.651  16.405  1.00 24.21           O  
+HETATM 2077  O   HOH A 136       6.144   2.232  31.847  1.00 13.55           O  
+HETATM 2078  O   HOH A 137      23.212   5.252  37.469  1.00 16.16           O  
+HETATM 2079  O   HOH A 138      32.876  14.054  31.321  1.00 14.52           O  
+HETATM 2080  O   HOH A 139      18.750  15.727  36.860  1.00 13.89           O  
+HETATM 2081  O   HOH A 140      20.509  13.974  37.699  1.00 18.12           O  
+HETATM 2082  O   HOH A 141      12.567  16.103  40.950  1.00 47.04           O  
+HETATM 2083  O   HOH A 142       9.021  -9.289  16.267  1.00 17.98           O  
+HETATM 2084  O   HOH A 143      17.666   0.546   9.599  1.00 17.59           O  
+HETATM 2085  O   HOH A 144      20.509  19.781  39.096  1.00 16.70           O  
+HETATM 2086  O   HOH A 145      29.542  14.893  29.222  1.00 19.74           O  
+HETATM 2087  O   HOH A 146      24.207   0.245   8.979  1.00 13.69           O  
+HETATM 2088  O   HOH A 147      19.424  -0.651   7.809  1.00 27.68           O  
+HETATM 2089  O   HOH A 148       9.795   2.207  30.687  1.00 15.45           O  
+HETATM 2090  O   HOH A 149      18.090   5.197  13.129  1.00 16.39           O  
+HETATM 2091  O   HOH A 150      10.390   8.107  40.116  1.00 22.43           O  
+HETATM 2092  O   HOH A 151       9.065  -6.856  18.209  1.00 15.48           O  
+HETATM 2093  O   HOH A 152       0.569   7.297  34.180  1.00 59.53           O  
+HETATM 2094  O   HOH A 153      15.795 -12.274  29.582  1.00 22.45           O  
+HETATM 2095  O   HOH A 154       0.364   8.593  28.085  1.00 32.19           O  
+HETATM 2096  O   HOH A 155      14.526  -6.119  13.878  1.00 17.77           O  
+HETATM 2097  O   HOH A 156      32.185  -6.589  38.208  1.00 18.38           O  
+HETATM 2098  O   HOH A 157       7.829   8.695  37.464  1.00 26.42           O  
+HETATM 2099  O   HOH A 158      34.392  10.333  26.308  1.00 36.60           O  
+HETATM 2100  O   HOH A 159      23.565  -8.918  42.385  1.00 17.23           O  
+HETATM 2101  O   HOH A 160      13.468  -2.601  41.021  1.00 31.02           O  
+HETATM 2102  O   HOH A 161      15.974 -11.974  39.259  1.00 46.44           O  
+HETATM 2103  O   HOH A 162      20.465  -3.746  15.557  1.00 19.08           O  
+HETATM 2104  O   HOH A 163      10.423  -8.380  32.230  1.00 20.38           O  
+HETATM 2105  O   HOH A 164      26.461  20.839  31.209  1.00 31.39           O  
+HETATM 2106  O   HOH A 165      29.295  -9.281  16.094  1.00 23.95           O  
+HETATM 2107  O   HOH A 166      26.125   5.967  38.272  1.00 11.91           O  
+HETATM 2108  O   HOH A 167      29.108   7.237  33.084  1.00 20.47           O  
+HETATM 2109  O   HOH A 168      34.636  11.173  33.949  1.00 30.19           O  
+HETATM 2110  O   HOH A 169       6.420  -3.918  15.489  1.00 25.60           O  
+HETATM 2111  O   HOH A 170      23.472  24.694  26.504  1.00 26.33           O  
+HETATM 2112  O   HOH A 171      34.478  14.634  27.057  1.00 37.21           O  
+HETATM 2113  O   HOH A 172      18.881   4.081  43.149  1.00 24.39           O  
+HETATM 2114  O   HOH A 173      28.866  14.402  22.340  1.00 18.69           O  
+HETATM 2115  O   HOH A 174       4.439   4.023  24.306  1.00 23.70           O  
+HETATM 2116  O   HOH A 175      31.755   2.603  33.263  1.00 16.38           O  
+HETATM 2117  O   HOH A 176      23.200  -4.358  36.680  1.00 31.65           O  
+HETATM 2118  O   HOH A 177      21.150  21.348  36.961  1.00 26.97           O  
+HETATM 2119  O   HOH A 178      11.925  20.572  30.823  1.00 22.88           O  
+HETATM 2120  O   HOH A 179      16.017 -13.071  21.195  1.00 25.75           O  
+HETATM 2121  O   HOH A 180      14.731  -0.038  41.120  1.00 26.44           O  
+HETATM 2122  O   HOH A 181      11.300  -9.182  34.868  1.00 21.65           O  
+HETATM 2123  O   HOH A 182      18.427   8.411  15.853  1.00 38.01           O  
+HETATM 2124  O   HOH A 183      14.795  -4.039  42.949  1.00 21.73           O  
+HETATM 2125  O   HOH A 184      21.308   0.911   6.430  1.00 32.59           O  
+HETATM 2126  O   HOH A 185       4.527   0.507  15.147  1.00 25.41           O  
+HETATM 2127  O   HOH A 186      29.661   0.827  20.631  1.00 25.66           O  
+HETATM 2128  O   HOH A 187      21.751  11.717  19.933  1.00 32.92           O  
+HETATM 2129  O   HOH A 188      21.736  -9.779  17.752  1.00 27.30           O  
+HETATM 2130  O   HOH A 189      11.316 -12.582  27.378  1.00 29.15           O  
+HETATM 2131  O   HOH A 190       9.669   5.484  18.610  1.00 26.69           O  
+HETATM 2132  O   HOH A 191      19.318   3.820  18.119  1.00 38.74           O  
+HETATM 2133  O   HOH A 192      18.070 -13.805  22.871  1.00 25.31           O  
+HETATM 2134  O   HOH A 193      22.731   8.761  14.625  1.00 41.11           O  
+HETATM 2135  O   HOH A 194       4.385   2.690  38.102  1.00 35.23           O  
+HETATM 2136  O   HOH A 195      23.645  19.112  17.947  1.00 46.35           O  
+HETATM 2137  O   HOH A 196      30.774   3.605  16.864  1.00 28.90           O  
+HETATM 2138  O   HOH A 197      19.222 -10.903  33.649  1.00 28.13           O  
+HETATM 2139  O   HOH A 198      17.347   9.215  41.145  1.00 22.51           O  
+HETATM 2140  O   HOH A 199      21.370   8.664  17.154  1.00 38.09           O  
+HETATM 2141  O   HOH A 200      18.365 -12.649  29.262  1.00 33.71           O  
+HETATM 2142  O   HOH A 201       2.634   2.625  18.276  1.00 42.51           O  
+HETATM 2143  O   HOH A 202      13.378  13.206  20.148  1.00 35.17           O  
+HETATM 2144  O   HOH A 203       8.441  -6.718  31.351  1.00 38.20           O  
+HETATM 2145  O   HOH A 204      21.225  -5.776  17.077  1.00 25.88           O  
+HETATM 2146  O   HOH A 205       9.449  -9.504  24.578  1.00 41.50           O  
+HETATM 2147  O   HOH A 206      33.653   8.582  34.021  1.00 37.11           O  
+HETATM 2148  O   HOH A 207      32.071  -2.237  29.668  1.00 38.24           O  
+HETATM 2149  O   HOH A 208      22.846  20.908  31.331  1.00 24.85           O  
+HETATM 2150  O   HOH A 209       9.709  16.523  36.392  1.00 34.23           O  
+HETATM 2151  O   HOH A 210      19.545  -8.901  47.793  1.00 19.93           O  
+HETATM 2152  O   HOH A 211       3.834   1.410  34.546  1.00 29.83           O  
+HETATM 2153  O   HOH A 212       9.928  10.065  19.432  1.00 23.37           O  
+HETATM 2154  O   HOH A 213      17.316   2.456  17.331  1.00 23.33           O  
+HETATM 2155  O   HOH A 214      18.932 -10.214  38.460  1.00 51.98           O  
+HETATM 2156  O   HOH A 215      12.017  14.522  36.271  1.00 20.10           O  
+HETATM 2157  O   HOH A 216      16.337   6.663  14.598  1.00 20.86           O  
+HETATM 2158  O   HOH A 217      11.392  -9.367  14.836  1.00 24.37           O  
+HETATM 2159  O   HOH A 218      24.178  -2.514   8.091  1.00 29.18           O  
+HETATM 2160  O   HOH A 219      19.046   7.405  11.509  1.00 24.46           O  
+HETATM 2161  O   HOH A 220      13.723  -7.995  15.643  1.00 19.27           O  
+HETATM 2162  O   HOH A 221      16.915  -6.210  12.855  1.00 34.03           O  
+HETATM 2163  O   HOH A 222      15.213 -12.334  36.436  1.00 43.21           O  
+HETATM 2164  O   HOH A 223      16.447 -11.679  34.274  1.00 31.98           O  
+HETATM 2165  O   HOH A 224      22.688  -2.690  14.501  1.00 17.55           O  
+HETATM 2166  O   HOH A 225       9.995 -10.442  28.308  1.00 27.23           O  
+HETATM 2167  O   HOH A 226      31.864   6.950  32.720  1.00 21.11           O  
+HETATM 2168  O   HOH A 227       4.229  -2.360  15.587  1.00 23.38           O  
+HETATM 2169  O   HOH A 228       4.505   0.687  30.549  1.00 23.25           O  
+HETATM 2170  O   HOH A 229       6.174   9.648  39.470  1.00 41.45           O  
+HETATM 2171  O   HOH A 230       4.610  12.718  39.742  1.00 35.21           O  
+HETATM 2172  O   HOH A 231      15.402  10.740  42.875  1.00 36.92           O  
+HETATM 2173  O   HOH A 232      16.260  14.730  38.071  1.00 25.76           O  
+HETATM 2174  O   HOH A 233      15.127  16.485  39.592  1.00 30.08           O  
+HETATM 2175  O   HOH A 234      28.618   7.242  38.403  1.00 15.53           O  
+HETATM 2176  O   HOH A 235      28.047  16.891  29.963  1.00 23.89           O  
+HETATM 2177  O   HOH A 236      27.988  19.477  29.092  1.00 28.80           O  
+HETATM 2178  O   HOH A 237      26.753  23.936  32.222  1.00 31.67           O  
+HETATM 2179  O   HOH A 238      28.048  21.800  33.174  1.00 21.45           O  
+HETATM 2180  O   HOH A 239      33.571  13.322  35.119  1.00 15.52           O  
+HETATM 2181  O   HOH A 240      32.541   8.637  36.660  1.00 36.94           O  
+HETATM 2182  O   HOH A 241      34.452  16.574  29.303  1.00 48.18           O  
+HETATM 2183  O   HOH A 242      18.024   5.361  19.430  1.00 47.32           O  
+HETATM 2184  O   HOH A 243      14.592  11.263  14.709  1.00 42.99           O  
+HETATM 2185  O   HOH A 244      14.557  12.387  17.278  1.00 40.04           O  
+HETATM 2186  O   HOH A 245       5.402  11.533  19.367  1.00 37.99           O  
+HETATM 2187  O   HOH A 246       1.547  10.483  34.966  1.00 50.86           O  
+HETATM 2188  O   HOH A 247       8.347  19.301  29.971  1.00 34.22           O  
+HETATM 2189  O   HOH A 248       4.474   5.156  21.778  1.00 35.03           O  
+HETATM 2190  O   HOH A 249       4.468  -6.497  29.200  1.00 55.94           O  
+HETATM 2191  O   HOH A 250      19.651  -5.640  13.417  1.00 36.65           O  
+HETATM 2192  O   HOH A 251      21.605  -7.187  12.499  1.00 40.70           O  
+HETATM 2193  O   HOH A 252      23.453  -4.868  12.762  1.00 29.49           O  
+HETATM 2194  O   HOH A 253      23.477   2.365   7.143  1.00 32.07           O  
+HETATM 2195  O   HOH A 254       9.360 -11.007  35.370  1.00 34.26           O  
+HETATM 2196  O   HOH A 255      13.398 -14.109  27.878  1.00 35.77           O  
+HETATM 2197  O   HOH A 256      21.048 -13.292  21.921  1.00 33.01           O  
+HETATM 2198  O   HOH A 257      33.756  -0.353  28.616  1.00 50.01           O  
+HETATM 2199  O   HOH A 258      23.567 -10.992  38.444  1.00 31.78           O  
+HETATM 2200  O   HOH A 259      17.284 -11.906  42.550  1.00 54.66           O  
+HETATM 2201  O   HOH A 260      30.748  19.823  29.133  1.00 25.39           O  
+HETATM 2202  O   HOH A 261      25.043  -8.497  14.937  1.00 41.33           O  
+HETATM 2203  O   HOH A 262      19.440   8.016  41.932  1.00 35.29           O  
+HETATM 2204  O   HOH A 263      29.159   5.342  11.721  1.00 43.86           O  
+HETATM 2205  O   HOH A 264      10.175  16.614  23.367  1.00 47.96           O  
+HETATM 2206  O   HOH A 265       8.888  19.630  27.509  1.00 45.65           O  
+HETATM 2207  O   HOH A 266      15.171   8.791  13.449  1.00 28.77           O  
+HETATM 2208  O   HOH A 267      17.008   9.159  11.329  1.00 40.73           O  
+HETATM 2209  O   HOH A 268      20.272 -10.986  36.161  1.00 41.24           O  
+HETATM 2210  O   HOH A 269      21.708 -11.083  42.464  1.00 33.85           O  
+HETATM 2211  O   HOH A 270      34.883  19.761  29.704  1.00 42.92           O  
+HETATM 2212  O   HOH A 271      33.870  21.990  30.733  1.00 43.19           O  
+HETATM 2213  O   HOH A 272      10.579 -15.293  33.494  1.00 39.64           O  
+HETATM 2214  O   HOH A 273       9.508 -13.518  35.159  1.00 38.76           O  
+HETATM 2215  O   HOH A 274      12.930 -11.463  37.352  1.00 43.18           O  
+HETATM 2216  O   HOH A 275      16.007 -13.401  32.247  1.00 39.13           O  
+HETATM 2217  O   HOH A 276       9.398 -14.257  28.668  1.00 33.79           O  
+HETATM 2218  O   HOH A 277       1.835  11.932  23.571  1.00 30.16           O  
+HETATM 2219  O   HOH A 278       9.119 -10.573  30.966  1.00 37.25           O  
+HETATM 2220  O   HOH A 279       7.930  -9.110  27.143  1.00 42.11           O  
+HETATM 2221  O   HOH A 280      26.814  17.987  16.451  1.00 51.41           O  
+HETATM 2222  O   HOH A 281       9.758   9.876  16.768  1.00 40.33           O  
+HETATM 2223  O   HOH A 282       7.752  12.854  19.320  1.00 35.83           O  
+HETATM 2224  O   HOH A 283       6.752  15.361  19.555  1.00 39.15           O  
+HETATM 2225  O   HOH A 284      12.304  -3.776  44.474  1.00 42.18           O  
+HETATM 2226  O   HOH B 128      21.749   7.845  52.818  1.00 14.25           O  
+HETATM 2227  O   HOH B 129      35.392 -13.107  35.614  1.00 25.17           O  
+HETATM 2228  O   HOH B 130      35.727   8.326  46.410  1.00 12.99           O  
+HETATM 2229  O   HOH B 131      23.311  -8.504  45.288  1.00 12.61           O  
+HETATM 2230  O   HOH B 132      29.110 -18.789  46.047  1.00 23.45           O  
+HETATM 2231  O   HOH B 133      47.502   1.457  58.755  1.00 14.50           O  
+HETATM 2232  O   HOH B 134      27.493  10.307  51.644  1.00 12.27           O  
+HETATM 2233  O   HOH B 135      24.522  10.723  51.950  1.00 10.99           O  
+HETATM 2234  O   HOH B 136      39.003   6.377  48.604  1.00 14.10           O  
+HETATM 2235  O   HOH B 137      27.459  -7.921  41.927  1.00 18.41           O  
+HETATM 2236  O   HOH B 138      27.538   1.783  63.090  1.00 19.30           O  
+HETATM 2237  O   HOH B 139      24.761  -7.627  47.446  1.00 12.74           O  
+HETATM 2238  O   HOH B 140      39.216   4.896  46.269  1.00 19.66           O  
+HETATM 2239  O   HOH B 141      29.205  10.791  53.689  1.00 15.87           O  
+HETATM 2240  O   HOH B 142      19.940   2.678  45.179  1.00 13.59           O  
+HETATM 2241  O   HOH B 143      29.698 -20.740  49.396  1.00 16.97           O  
+HETATM 2242  O   HOH B 144      41.100   6.919  50.486  1.00 10.64           O  
+HETATM 2243  O   HOH B 145      20.931   5.078  51.843  1.00 29.27           O  
+HETATM 2244  O   HOH B 146      27.235  -1.233  35.422  1.00 19.56           O  
+HETATM 2245  O   HOH B 147      46.212   1.487  50.336  1.00 23.03           O  
+HETATM 2246  O   HOH B 148      22.198 -11.958  48.612  1.00 24.32           O  
+HETATM 2247  O   HOH B 149      29.694 -10.191  41.013  1.00 18.37           O  
+HETATM 2248  O   HOH B 150      33.598 -20.124  45.598  1.00 15.74           O  
+HETATM 2249  O   HOH B 151      36.668   7.905  57.359  1.00 28.27           O  
+HETATM 2250  O   HOH B 152      22.383   3.251  62.407  1.00 21.39           O  
+HETATM 2251  O   HOH B 153      30.112 -16.483  44.979  1.00 20.97           O  
+HETATM 2252  O   HOH B 154      34.356  -5.386  39.413  1.00 16.41           O  
+HETATM 2253  O   HOH B 155      15.656  -4.125  46.248  1.00 18.93           O  
+HETATM 2254  O   HOH B 156      16.874  -4.983  44.105  1.00 17.87           O  
+HETATM 2255  O   HOH B 157      33.806  -0.151  43.682  1.00 16.12           O  
+HETATM 2256  O   HOH B 158      15.326   3.157  46.586  1.00 41.28           O  
+HETATM 2257  O   HOH B 159      32.716   9.399  55.235  1.00 21.01           O  
+HETATM 2258  O   HOH B 160      34.643   9.442  53.256  1.00 16.07           O  
+HETATM 2259  O   HOH B 161      29.968  -0.287  35.588  1.00 19.95           O  
+HETATM 2260  O   HOH B 162      23.577   9.066  55.922  1.00 30.60           O  
+HETATM 2261  O   HOH B 163      29.571  -4.628  36.083  1.00 31.15           O  
+HETATM 2262  O   HOH B 164      28.896 -12.583  41.636  1.00 33.44           O  
+HETATM 2263  O   HOH B 165      46.622   0.764  53.966  1.00 19.11           O  
+HETATM 2264  O   HOH B 166      22.306   5.686  56.691  1.00 29.21           O  
+HETATM 2265  O   HOH B 167      36.992   7.644  39.802  1.00 35.51           O  
+HETATM 2266  O   HOH B 168      25.761  -3.624  36.491  1.00 38.29           O  
+HETATM 2267  O   HOH B 169      18.592   1.549  49.716  1.00 27.31           O  
+HETATM 2268  O   HOH B 170      42.868   7.188  46.987  1.00 35.86           O  
+HETATM 2269  O   HOH B 171      27.292 -14.274  43.160  1.00 37.43           O  
+HETATM 2270  O   HOH B 172      25.362 -15.750  45.104  1.00 30.52           O  
+HETATM 2271  O   HOH B 173      43.076   9.501  56.562  1.00 43.34           O  
+HETATM 2272  O   HOH B 174      32.204   2.950  60.662  1.00 32.82           O  
+HETATM 2273  O   HOH B 175      33.831   1.926  37.009  1.00 29.41           O  
+HETATM 2274  O   HOH B 176      47.425   8.687  58.230  1.00 35.83           O  
+HETATM 2275  O   HOH B 177      43.492   7.252  53.386  1.00 29.73           O  
+HETATM 2276  O   HOH B 178      32.958 -17.842  44.639  1.00 36.54           O  
+HETATM 2277  O   HOH B 179      23.971   6.496  39.400  1.00 31.56           O  
+HETATM 2278  O   HOH B 180      38.250   8.614  47.381  1.00 19.44           O  
+HETATM 2279  O   HOH B 181      21.536 -10.246  46.303  1.00 20.07           O  
+HETATM 2280  O   HOH B 182      30.890 -20.716  46.247  1.00 18.53           O  
+HETATM 2281  O   HOH B 183      26.565 -19.302  45.680  1.00 34.84           O  
+HETATM 2282  O   HOH B 184      46.915  -0.253  56.738  1.00 18.35           O  
+HETATM 2283  O   HOH B 185      45.975  -2.818  56.285  1.00 19.90           O  
+HETATM 2284  O   HOH B 186      25.009   3.263  63.422  1.00 16.72           O  
+HETATM 2285  O   HOH B 187      25.048  -8.829  50.066  1.00 15.00           O  
+HETATM 2286  O   HOH B 188      17.988   2.155  47.022  1.00 26.39           O  
+HETATM 2287  O   HOH B 189      20.881   4.644  46.848  1.00 14.77           O  
+HETATM 2288  O   HOH B 190      23.050   5.646  45.819  1.00 13.73           O  
+HETATM 2289  O   HOH B 191      19.937   4.058  49.511  1.00 15.75           O  
+HETATM 2290  O   HOH B 192      17.160   1.434  51.955  1.00 32.82           O  
+HETATM 2291  O   HOH B 193      48.590  -1.720  48.336  1.00 27.63           O  
+HETATM 2292  O   HOH B 194      47.845  -3.678  44.065  1.00 28.54           O  
+HETATM 2293  O   HOH B 195      44.564  -2.291  42.836  1.00 25.85           O  
+HETATM 2294  O   HOH B 196      40.878  -3.749  43.732  1.00 11.38           O  
+HETATM 2295  O   HOH B 197      38.402  -3.964  46.400  1.00 14.57           O  
+HETATM 2296  O   HOH B 198      18.847  -6.953  56.593  1.00 25.01           O  
+HETATM 2297  O   HOH B 199      17.606  -2.703  54.515  1.00 27.07           O  
+HETATM 2298  O   HOH B 200      35.941 -22.085  49.046  1.00  8.69           O  
+HETATM 2299  O   HOH B 201      36.529   9.884  55.225  1.00 34.94           O  
+HETATM 2300  O   HOH B 202      21.808   7.078  43.858  1.00 15.74           O  
+HETATM 2301  O   HOH B 203      33.310 -10.259  36.870  1.00 28.74           O  
+HETATM 2302  O   HOH B 204      24.861 -18.928  59.731  1.00 19.32           O  
+HETATM 2303  O   HOH B 205      32.609   0.477  35.005  1.00 33.68           O  
+HETATM 2304  O   HOH B 206      25.908  -5.820  34.938  1.00 32.89           O  
+HETATM 2305  O   HOH B 207      25.406  -5.983  66.383  1.00 18.21           O  
+HETATM 2306  O   HOH B 208      22.532 -12.430  65.714  1.00 21.91           O  
+HETATM 2307  O   HOH B 209      36.385   0.150  42.555  1.00 21.29           O  
+HETATM 2308  O   HOH B 210      40.011  -1.866  41.602  1.00 16.46           O  
+HETATM 2309  O   HOH B 211      45.990 -10.409  46.937  1.00 15.14           O  
+HETATM 2310  O   HOH B 212      47.299 -12.855  46.122  1.00 37.65           O  
+HETATM 2311  O   HOH B 213      47.300 -10.021  50.070  1.00 11.57           O  
+HETATM 2312  O   HOH B 214      49.415 -11.742  49.384  1.00 25.56           O  
+HETATM 2313  O   HOH B 215      50.432  -8.592  48.180  1.00 34.76           O  
+HETATM 2314  O   HOH B 216      45.950 -17.117  47.140  1.00 11.91           O  
+HETATM 2315  O   HOH B 217      48.209 -16.855  48.400  1.00 20.67           O  
+HETATM 2316  O   HOH B 218      49.622 -19.497  48.902  1.00 36.91           O  
+HETATM 2317  O   HOH B 219      41.472 -19.513  42.460  1.00 22.18           O  
+HETATM 2318  O   HOH B 220      41.314 -19.608  39.815  1.00 29.27           O  
+HETATM 2319  O   HOH B 221      39.856 -17.844  38.429  1.00 27.86           O  
+HETATM 2320  O   HOH B 222      42.340 -15.231  36.539  1.00 36.18           O  
+HETATM 2321  O   HOH B 223      44.862 -13.117  36.832  1.00 31.70           O  
+HETATM 2322  O   HOH B 224      40.127  -8.641  36.131  1.00 26.48           O  
+HETATM 2323  O   HOH B 225      51.919 -10.132  49.666  1.00 40.48           O  
+HETATM 2324  O   HOH B 226      45.494 -11.393  57.214  1.00 17.13           O  
+HETATM 2325  O   HOH B 227      40.907 -17.643  56.706  1.00 12.60           O  
+HETATM 2326  O   HOH B 228      43.628 -18.106  57.649  1.00 17.39           O  
+HETATM 2327  O   HOH B 229      44.061 -22.668  57.601  1.00 21.34           O  
+HETATM 2328  O   HOH B 230      40.771 -24.364  57.020  1.00 20.20           O  
+HETATM 2329  O   HOH B 231      45.333 -24.598  53.420  1.00 28.40           O  
+HETATM 2330  O   HOH B 232      46.233 -26.590  51.909  1.00 21.65           O  
+HETATM 2331  O   HOH B 233      47.659 -24.550  50.161  1.00 20.60           O  
+HETATM 2332  O   HOH B 234      49.724 -20.577  51.545  1.00 34.06           O  
+HETATM 2333  O   HOH B 235      40.623 -10.464  63.091  1.00 15.64           O  
+HETATM 2334  O   HOH B 236      33.734 -11.034  64.366  1.00 21.79           O  
+HETATM 2335  O   HOH B 237      26.492 -22.373  55.525  1.00 23.99           O  
+HETATM 2336  O   HOH B 238      25.286 -19.773  52.394  1.00 35.79           O  
+HETATM 2337  O   HOH B 239      25.742 -17.045  51.744  1.00 29.50           O  
+HETATM 2338  O   HOH B 240      20.699 -11.436  52.346  1.00 31.96           O  
+HETATM 2339  O   HOH B 241      17.839 -12.847  51.084  1.00 53.96           O  
+HETATM 2340  O   HOH B 242      17.325 -14.512  53.143  1.00 48.01           O  
+HETATM 2341  O   HOH B 243      35.255 -19.515  41.312  1.00 31.47           O  
+HETATM 2342  O   HOH B 244      33.856 -21.721  40.045  1.00 48.42           O  
+HETATM 2343  O   HOH B 245      39.732 -21.420  43.520  1.00 21.00           O  
+HETATM 2344  O   HOH B 246      46.284 -18.521  42.584  1.00 31.72           O  
+HETATM 2345  O   HOH B 247      48.066 -14.706  42.752  1.00 40.32           O  
+HETATM 2346  O   HOH B 248      26.797 -21.029  50.222  1.00 33.09           O  
+HETATM 2347  O   HOH B 249      25.231 -19.819  48.034  1.00 34.56           O  
+HETATM 2348  O   HOH B 250      26.390 -12.057  40.877  1.00 38.86           O  
+HETATM 2349  O   HOH B 251      18.719  -5.241  58.774  1.00 33.80           O  
+HETATM 2350  O   HOH B 252      28.694  -8.590  68.622  1.00 44.04           O  
+HETATM 2351  O   HOH B 253      46.080   7.186  51.268  1.00 44.97           O  
+HETATM 2352  O   HOH B 254      28.373   6.487  59.114  1.00 33.05           O  
+HETATM 2353  O   HOH B 255      27.450  11.405  55.672  1.00 31.86           O  
+HETATM 2354  O   HOH B 256      16.075  -0.438  53.582  1.00 38.00           O  
+HETATM 2355  O   HOH B 257      19.558  -3.430  63.621  1.00 18.86           O  
+HETATM 2356  O   HOH B 258      25.992   0.299  66.754  1.00 27.95           O  
+HETATM 2357  O   HOH B 259      28.314   0.884  65.617  1.00 32.35           O  
+HETATM 2358  O   HOH B 260      38.082   1.529  62.092  1.00 20.93           O  
+HETATM 2359  O   HOH B 261      43.837   6.147  64.045  1.00 24.66           O  
+HETATM 2360  O   HOH B 262      41.759   6.912  65.427  1.00 32.58           O  
+HETATM 2361  O   HOH B 263      36.427   5.947  43.277  1.00 54.89           O  
+HETATM 2362  O   HOH B 264      28.281   6.171  42.732  1.00 30.95           O  
+HETATM 2363  O   HOH B 265      28.532   3.758  42.855  1.00 31.26           O  
+HETATM 2364  O   HOH B 266      26.279   4.488  42.304  1.00 18.18           O  
+HETATM 2365  O   HOH B 267      38.450 -25.374  53.625  1.00 11.50           O  
+HETATM 2366  O   HOH B 268      33.268 -11.967  34.839  1.00 44.52           O  
+HETATM 2367  O   HOH B 269      21.291   7.640  55.382  1.00 37.07           O  
+HETATM 2368  O   HOH B 270      40.543  -6.191  35.086  1.00 46.78           O  
+HETATM 2369  O   HOH B 271      36.278   8.494  43.716  1.00 39.94           O  
+HETATM 2370  O   HOH B 272      38.077   0.885  44.425  1.00 37.70           O  
+HETATM 2371  O   HOH B 273      36.624   2.995  44.072  1.00 44.84           O  
+HETATM 2372  O   HOH B 274      47.680  -3.802  54.241  1.00 29.52           O  
+HETATM 2373  O   HOH B 275      47.542 -25.183  47.426  1.00 44.28           O  
+HETATM 2374  O   HOH B 276      47.958  -0.641  51.434  1.00 41.18           O  
+HETATM 2375  O   HOH B 277      48.773  -1.142  45.731  1.00 47.19           O  
+HETATM 2376  O   HOH B 278      52.432  -3.449  47.286  1.00 34.07           O  
+HETATM 2377  O   HOH B 279      22.927 -20.727  46.764  1.00 43.74           O  
+HETATM 2378  O   HOH B 280      19.895 -12.192  66.540  1.00 37.79           O  
+HETATM 2379  O   HOH B 281      41.198  10.198  58.267  1.00 48.98           O  
+HETATM 2380  O   HOH B 282      44.205  11.703  55.646  1.00 52.92           O  
+HETATM 2381  O   HOH B 283      42.359   7.497  60.196  1.00 46.88           O  
+HETATM 2382  O   HOH B 284      43.862 -18.935  38.363  1.00 32.12           O  
+HETATM 2383  O   HOH B 285      44.692 -12.023  39.188  1.00 33.96           O  
+CONECT  769  996                                                                
+CONECT  821  830                                                                
+CONECT  830  821  831                                                           
+CONECT  831  830  832  834                                                      
+CONECT  832  831  833  838                                                      
+CONECT  833  832                                                                
+CONECT  834  831  835                                                           
+CONECT  835  834  836                                                           
+CONECT  836  835  837                                                           
+CONECT  837  836                                                                
+CONECT  838  832                                                                
+CONECT  996  769                                                                
+CONECT 1800 2027                                                                
+CONECT 1852 1861                                                                
+CONECT 1861 1852 1862                                                           
+CONECT 1862 1861 1863 1865                                                      
+CONECT 1863 1862 1864 1869                                                      
+CONECT 1864 1863                                                                
+CONECT 1865 1862 1866                                                           
+CONECT 1866 1865 1867                                                           
+CONECT 1867 1866 1868                                                           
+CONECT 1868 1867                                                                
+CONECT 1869 1863                                                                
+CONECT 2027 1800                                                                
+CONECT 2063 2064 2065 2066 2067                                                 
+CONECT 2064 2063                                                                
+CONECT 2065 2063                                                                
+CONECT 2066 2063                                                                
+CONECT 2067 2063                                                                
+MASTER      266    0    3   17   10    0    2    6 2381    2   29   20          
+END                                                                             
diff --git a/alphafold/alphafold/data/__init__.py b/alphafold/alphafold/data/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..9821d212c3c7781e601ea8d2137493942d0937d4
--- /dev/null
+++ b/alphafold/alphafold/data/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Data pipeline for model features."""
diff --git a/alphafold/alphafold/data/__pycache__/__init__.cpython-36.pyc b/alphafold/alphafold/data/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d9b141a5e9376bd4797f5b1e9f750144436dacfc
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/__init__.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/__init__.cpython-38.pyc b/alphafold/alphafold/data/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..80b064dd17378044e88a5eac1e0593f80839244a
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/__init__.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/mmcif_parsing.cpython-36.pyc b/alphafold/alphafold/data/__pycache__/mmcif_parsing.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..529bbf55c8594a32359ad209c84073d1ec86c70b
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/mmcif_parsing.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/mmcif_parsing.cpython-38.pyc b/alphafold/alphafold/data/__pycache__/mmcif_parsing.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..311157aa7c941630d04197befaacd14452bdd943
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/mmcif_parsing.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/parsers.cpython-36.pyc b/alphafold/alphafold/data/__pycache__/parsers.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..42cba15965d846f97405da7b726d5534f7c207f5
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/parsers.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/parsers.cpython-38.pyc b/alphafold/alphafold/data/__pycache__/parsers.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d79eb841d19c9b9d4add12e8521ddec45809ebd6
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/parsers.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/pipeline.cpython-36.pyc b/alphafold/alphafold/data/__pycache__/pipeline.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b4147ad7eb5416b2ec935f9f8f731030c3f6a8a1
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/pipeline.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/pipeline.cpython-38.pyc b/alphafold/alphafold/data/__pycache__/pipeline.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0f1e62640b283668e021ac33b98ed29d0549484c
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/pipeline.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/templates.cpython-36.pyc b/alphafold/alphafold/data/__pycache__/templates.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ee9c04ccdc756c9d825ac4bd76fb03f928134286
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/templates.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/__pycache__/templates.cpython-38.pyc b/alphafold/alphafold/data/__pycache__/templates.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..32a7b67256b5f13610dde10d82d53541a8252717
Binary files /dev/null and b/alphafold/alphafold/data/__pycache__/templates.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/mmcif_parsing.py b/alphafold/alphafold/data/mmcif_parsing.py
new file mode 100644
index 0000000000000000000000000000000000000000..18375165a526a780f2e602a3800e12833dbb3e67
--- /dev/null
+++ b/alphafold/alphafold/data/mmcif_parsing.py
@@ -0,0 +1,384 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Parses the mmCIF file format."""
+import collections
+import dataclasses
+import io
+from typing import Any, Mapping, Optional, Sequence, Tuple
+
+from absl import logging
+from Bio import PDB
+from Bio.Data import SCOPData
+
+# Type aliases:
+ChainId = str
+PdbHeader = Mapping[str, Any]
+PdbStructure = PDB.Structure.Structure
+SeqRes = str
+MmCIFDict = Mapping[str, Sequence[str]]
+
+
+@dataclasses.dataclass(frozen=True)
+class Monomer:
+  id: str
+  num: int
+
+
+# Note - mmCIF format provides no guarantees on the type of author-assigned
+# sequence numbers. They need not be integers.
+@dataclasses.dataclass(frozen=True)
+class AtomSite:
+  residue_name: str
+  author_chain_id: str
+  mmcif_chain_id: str
+  author_seq_num: str
+  mmcif_seq_num: int
+  insertion_code: str
+  hetatm_atom: str
+  model_num: int
+
+
+# Used to map SEQRES index to a residue in the structure.
+@dataclasses.dataclass(frozen=True)
+class ResiduePosition:
+  chain_id: str
+  residue_number: int
+  insertion_code: str
+
+
+@dataclasses.dataclass(frozen=True)
+class ResidueAtPosition:
+  position: Optional[ResiduePosition]
+  name: str
+  is_missing: bool
+  hetflag: str
+
+
+@dataclasses.dataclass(frozen=True)
+class MmcifObject:
+  """Representation of a parsed mmCIF file.
+
+  Contains:
+    file_id: A meaningful name, e.g. a pdb_id. Should be unique amongst all
+      files being processed.
+    header: Biopython header.
+    structure: Biopython structure.
+    chain_to_seqres: Dict mapping chain_id to 1 letter amino acid sequence. E.g.
+      {'A': 'ABCDEFG'}
+    seqres_to_structure: Dict; for each chain_id contains a mapping between
+      SEQRES index and a ResidueAtPosition. e.g. {'A': {0: ResidueAtPosition,
+                                                        1: ResidueAtPosition,
+                                                        ...}}
+    raw_string: The raw string used to construct the MmcifObject.
+  """
+  file_id: str
+  header: PdbHeader
+  structure: PdbStructure
+  chain_to_seqres: Mapping[ChainId, SeqRes]
+  seqres_to_structure: Mapping[ChainId, Mapping[int, ResidueAtPosition]]
+  raw_string: Any
+
+
+@dataclasses.dataclass(frozen=True)
+class ParsingResult:
+  """Returned by the parse function.
+
+  Contains:
+    mmcif_object: A MmcifObject, may be None if no chain could be successfully
+      parsed.
+    errors: A dict mapping (file_id, chain_id) to any exception generated.
+  """
+  mmcif_object: Optional[MmcifObject]
+  errors: Mapping[Tuple[str, str], Any]
+
+
+class ParseError(Exception):
+  """An error indicating that an mmCIF file could not be parsed."""
+
+
+def mmcif_loop_to_list(prefix: str,
+                       parsed_info: MmCIFDict) -> Sequence[Mapping[str, str]]:
+  """Extracts loop associated with a prefix from mmCIF data as a list.
+
+  Reference for loop_ in mmCIF:
+    http://mmcif.wwpdb.org/docs/tutorials/mechanics/pdbx-mmcif-syntax.html
+
+  Args:
+    prefix: Prefix shared by each of the data items in the loop.
+      e.g. '_entity_poly_seq.', where the data items are _entity_poly_seq.num,
+      _entity_poly_seq.mon_id. Should include the trailing period.
+    parsed_info: A dict of parsed mmCIF data, e.g. _mmcif_dict from a Biopython
+      parser.
+
+  Returns:
+    Returns a list of dicts; each dict represents 1 entry from an mmCIF loop.
+  """
+  cols = []
+  data = []
+  for key, value in parsed_info.items():
+    if key.startswith(prefix):
+      cols.append(key)
+      data.append(value)
+
+  assert all([len(xs) == len(data[0]) for xs in data]), (
+      'mmCIF error: Not all loops are the same length: %s' % cols)
+
+  return [dict(zip(cols, xs)) for xs in zip(*data)]
+
+
+def mmcif_loop_to_dict(prefix: str,
+                       index: str,
+                       parsed_info: MmCIFDict,
+                       ) -> Mapping[str, Mapping[str, str]]:
+  """Extracts loop associated with a prefix from mmCIF data as a dictionary.
+
+  Args:
+    prefix: Prefix shared by each of the data items in the loop.
+      e.g. '_entity_poly_seq.', where the data items are _entity_poly_seq.num,
+      _entity_poly_seq.mon_id. Should include the trailing period.
+    index: Which item of loop data should serve as the key.
+    parsed_info: A dict of parsed mmCIF data, e.g. _mmcif_dict from a Biopython
+      parser.
+
+  Returns:
+    Returns a dict of dicts; each dict represents 1 entry from an mmCIF loop,
+    indexed by the index column.
+  """
+  entries = mmcif_loop_to_list(prefix, parsed_info)
+  return {entry[index]: entry for entry in entries}
+
+
+def parse(*,
+          file_id: str,
+          mmcif_string: str,
+          catch_all_errors: bool = True) -> ParsingResult:
+  """Entry point, parses an mmcif_string.
+
+  Args:
+    file_id: A string identifier for this file. Should be unique within the
+      collection of files being processed.
+    mmcif_string: Contents of an mmCIF file.
+    catch_all_errors: If True, all exceptions are caught and error messages are
+      returned as part of the ParsingResult. If False exceptions will be allowed
+      to propagate.
+
+  Returns:
+    A ParsingResult.
+  """
+  errors = {}
+  try:
+    parser = PDB.MMCIFParser(QUIET=True)
+    handle = io.StringIO(mmcif_string)
+    full_structure = parser.get_structure('', handle)
+    first_model_structure = _get_first_model(full_structure)
+    # Extract the _mmcif_dict from the parser, which contains useful fields not
+    # reflected in the Biopython structure.
+    parsed_info = parser._mmcif_dict  # pylint:disable=protected-access
+
+    # Ensure all values are lists, even if singletons.
+    for key, value in parsed_info.items():
+      if not isinstance(value, list):
+        parsed_info[key] = [value]
+
+    header = _get_header(parsed_info)
+
+    # Determine the protein chains, and their start numbers according to the
+    # internal mmCIF numbering scheme (likely but not guaranteed to be 1).
+    valid_chains = _get_protein_chains(parsed_info=parsed_info)
+    if not valid_chains:
+      return ParsingResult(
+          None, {(file_id, ''): 'No protein chains found in this file.'})
+    seq_start_num = {chain_id: min([monomer.num for monomer in seq])
+                     for chain_id, seq in valid_chains.items()}
+
+    # Loop over the atoms for which we have coordinates. Populate two mappings:
+    # -mmcif_to_author_chain_id (maps internal mmCIF chain ids to chain ids used
+    # the authors / Biopython).
+    # -seq_to_structure_mappings (maps idx into sequence to ResidueAtPosition).
+    mmcif_to_author_chain_id = {}
+    seq_to_structure_mappings = {}
+    for atom in _get_atom_site_list(parsed_info):
+      if atom.model_num != '1':
+        # We only process the first model at the moment.
+        continue
+
+      mmcif_to_author_chain_id[atom.mmcif_chain_id] = atom.author_chain_id
+
+      if atom.mmcif_chain_id in valid_chains:
+        hetflag = ' '
+        if atom.hetatm_atom == 'HETATM':
+          # Water atoms are assigned a special hetflag of W in Biopython. We
+          # need to do the same, so that this hetflag can be used to fetch
+          # a residue from the Biopython structure by id.
+          if atom.residue_name in ('HOH', 'WAT'):
+            hetflag = 'W'
+          else:
+            hetflag = 'H_' + atom.residue_name
+        insertion_code = atom.insertion_code
+        if not _is_set(atom.insertion_code):
+          insertion_code = ' '
+        position = ResiduePosition(chain_id=atom.author_chain_id,
+                                   residue_number=int(atom.author_seq_num),
+                                   insertion_code=insertion_code)
+        seq_idx = int(atom.mmcif_seq_num) - seq_start_num[atom.mmcif_chain_id]
+        current = seq_to_structure_mappings.get(atom.author_chain_id, {})
+        current[seq_idx] = ResidueAtPosition(position=position,
+                                             name=atom.residue_name,
+                                             is_missing=False,
+                                             hetflag=hetflag)
+        seq_to_structure_mappings[atom.author_chain_id] = current
+
+    # Add missing residue information to seq_to_structure_mappings.
+    for chain_id, seq_info in valid_chains.items():
+      author_chain = mmcif_to_author_chain_id[chain_id]
+      current_mapping = seq_to_structure_mappings[author_chain]
+      for idx, monomer in enumerate(seq_info):
+        if idx not in current_mapping:
+          current_mapping[idx] = ResidueAtPosition(position=None,
+                                                   name=monomer.id,
+                                                   is_missing=True,
+                                                   hetflag=' ')
+
+    author_chain_to_sequence = {}
+    for chain_id, seq_info in valid_chains.items():
+      author_chain = mmcif_to_author_chain_id[chain_id]
+      seq = []
+      for monomer in seq_info:
+        code = SCOPData.protein_letters_3to1.get(monomer.id, 'X')
+        seq.append(code if len(code) == 1 else 'X')
+      seq = ''.join(seq)
+      author_chain_to_sequence[author_chain] = seq
+
+    mmcif_object = MmcifObject(
+        file_id=file_id,
+        header=header,
+        structure=first_model_structure,
+        chain_to_seqres=author_chain_to_sequence,
+        seqres_to_structure=seq_to_structure_mappings,
+        raw_string=parsed_info)
+
+    return ParsingResult(mmcif_object=mmcif_object, errors=errors)
+  except Exception as e:  # pylint:disable=broad-except
+    errors[(file_id, '')] = e
+    if not catch_all_errors:
+      raise
+    return ParsingResult(mmcif_object=None, errors=errors)
+
+
+def _get_first_model(structure: PdbStructure) -> PdbStructure:
+  """Returns the first model in a Biopython structure."""
+  return next(structure.get_models())
+
+_MIN_LENGTH_OF_CHAIN_TO_BE_COUNTED_AS_PEPTIDE = 21
+
+
+def get_release_date(parsed_info: MmCIFDict) -> str:
+  """Returns the oldest revision date."""
+  revision_dates = parsed_info['_pdbx_audit_revision_history.revision_date']
+  return min(revision_dates)
+
+
+def _get_header(parsed_info: MmCIFDict) -> PdbHeader:
+  """Returns a basic header containing method, release date and resolution."""
+  header = {}
+
+  experiments = mmcif_loop_to_list('_exptl.', parsed_info)
+  header['structure_method'] = ','.join([
+      experiment['_exptl.method'].lower() for experiment in experiments])
+
+  # Note: The release_date here corresponds to the oldest revision. We prefer to
+  # use this for dataset filtering over the deposition_date.
+  if '_pdbx_audit_revision_history.revision_date' in parsed_info:
+    header['release_date'] = get_release_date(parsed_info)
+  else:
+    logging.warning('Could not determine release_date: %s',
+                    parsed_info['_entry.id'])
+
+  header['resolution'] = 0.00
+  for res_key in ('_refine.ls_d_res_high', '_em_3d_reconstruction.resolution',
+                  '_reflns.d_resolution_high'):
+    if res_key in parsed_info:
+      try:
+        raw_resolution = parsed_info[res_key][0]
+        header['resolution'] = float(raw_resolution)
+      except ValueError:
+        logging.warning('Invalid resolution format: %s', parsed_info[res_key])
+
+  return header
+
+
+def _get_atom_site_list(parsed_info: MmCIFDict) -> Sequence[AtomSite]:
+  """Returns list of atom sites; contains data not present in the structure."""
+  return [AtomSite(*site) for site in zip(  # pylint:disable=g-complex-comprehension
+      parsed_info['_atom_site.label_comp_id'],
+      parsed_info['_atom_site.auth_asym_id'],
+      parsed_info['_atom_site.label_asym_id'],
+      parsed_info['_atom_site.auth_seq_id'],
+      parsed_info['_atom_site.label_seq_id'],
+      parsed_info['_atom_site.pdbx_PDB_ins_code'],
+      parsed_info['_atom_site.group_PDB'],
+      parsed_info['_atom_site.pdbx_PDB_model_num'],
+      )]
+
+
+def _get_protein_chains(
+    *, parsed_info: Mapping[str, Any]) -> Mapping[ChainId, Sequence[Monomer]]:
+  """Extracts polymer information for protein chains only.
+
+  Args:
+    parsed_info: _mmcif_dict produced by the Biopython parser.
+
+  Returns:
+    A dict mapping mmcif chain id to a list of Monomers.
+  """
+  # Get polymer information for each entity in the structure.
+  entity_poly_seqs = mmcif_loop_to_list('_entity_poly_seq.', parsed_info)
+
+  polymers = collections.defaultdict(list)
+  for entity_poly_seq in entity_poly_seqs:
+    polymers[entity_poly_seq['_entity_poly_seq.entity_id']].append(
+        Monomer(id=entity_poly_seq['_entity_poly_seq.mon_id'],
+                num=int(entity_poly_seq['_entity_poly_seq.num'])))
+
+  # Get chemical compositions. Will allow us to identify which of these polymers
+  # are proteins.
+  chem_comps = mmcif_loop_to_dict('_chem_comp.', '_chem_comp.id', parsed_info)
+
+  # Get chains information for each entity. Necessary so that we can return a
+  # dict keyed on chain id rather than entity.
+  struct_asyms = mmcif_loop_to_list('_struct_asym.', parsed_info)
+
+  entity_to_mmcif_chains = collections.defaultdict(list)
+  for struct_asym in struct_asyms:
+    chain_id = struct_asym['_struct_asym.id']
+    entity_id = struct_asym['_struct_asym.entity_id']
+    entity_to_mmcif_chains[entity_id].append(chain_id)
+
+  # Identify and return the valid protein chains.
+  valid_chains = {}
+  for entity_id, seq_info in polymers.items():
+    chain_ids = entity_to_mmcif_chains[entity_id]
+
+    # Reject polymers without any peptide-like components, such as DNA/RNA.
+    if any(['peptide' in chem_comps[monomer.id]['_chem_comp.type']
+            for monomer in seq_info]):
+      for chain_id in chain_ids:
+        valid_chains[chain_id] = seq_info
+  return valid_chains
+
+
+def _is_set(data: str) -> bool:
+  """Returns False if data is a special mmCIF character indicating 'unset'."""
+  return data not in ('.', '?')
diff --git a/alphafold/alphafold/data/parsers.py b/alphafold/alphafold/data/parsers.py
new file mode 100644
index 0000000000000000000000000000000000000000..edc21bbeb897520baae2352dbfb4ac0ebfbb7a59
--- /dev/null
+++ b/alphafold/alphafold/data/parsers.py
@@ -0,0 +1,364 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Functions for parsing various file formats."""
+import collections
+import dataclasses
+import re
+import string
+from typing import Dict, Iterable, List, Optional, Sequence, Tuple
+
+DeletionMatrix = Sequence[Sequence[int]]
+
+
+@dataclasses.dataclass(frozen=True)
+class TemplateHit:
+  """Class representing a template hit."""
+  index: int
+  name: str
+  aligned_cols: int
+  sum_probs: float
+  query: str
+  hit_sequence: str
+  indices_query: List[int]
+  indices_hit: List[int]
+
+
+def parse_fasta(fasta_string: str) -> Tuple[Sequence[str], Sequence[str]]:
+  """Parses FASTA string and returns list of strings with amino-acid sequences.
+
+  Arguments:
+    fasta_string: The string contents of a FASTA file.
+
+  Returns:
+    A tuple of two lists:
+    * A list of sequences.
+    * A list of sequence descriptions taken from the comment lines. In the
+      same order as the sequences.
+  """
+  sequences = []
+  descriptions = []
+  index = -1
+  for line in fasta_string.splitlines():
+    line = line.strip()
+    if line.startswith('>'):
+      index += 1
+      descriptions.append(line[1:])  # Remove the '>' at the beginning.
+      sequences.append('')
+      continue
+    elif not line:
+      continue  # Skip blank lines.
+    sequences[index] += line
+
+  return sequences, descriptions
+
+
+def parse_stockholm(
+    stockholm_string: str
+) -> Tuple[Sequence[str], DeletionMatrix, Sequence[str]]:
+  """Parses sequences and deletion matrix from stockholm format alignment.
+
+  Args:
+    stockholm_string: The string contents of a stockholm file. The first
+      sequence in the file should be the query sequence.
+
+  Returns:
+    A tuple of:
+      * A list of sequences that have been aligned to the query. These
+        might contain duplicates.
+      * The deletion matrix for the alignment as a list of lists. The element
+        at `deletion_matrix[i][j]` is the number of residues deleted from
+        the aligned sequence i at residue position j.
+      * The names of the targets matched, including the jackhmmer subsequence
+        suffix.
+  """
+  name_to_sequence = collections.OrderedDict()
+  for line in stockholm_string.splitlines():
+    line = line.strip()
+    if not line or line.startswith(('#', '//')):
+      continue
+    name, sequence = line.split()
+    if name not in name_to_sequence:
+      name_to_sequence[name] = ''
+    name_to_sequence[name] += sequence
+
+  msa = []
+  deletion_matrix = []
+
+  query = ''
+  keep_columns = []
+  for seq_index, sequence in enumerate(name_to_sequence.values()):
+    if seq_index == 0:
+      # Gather the columns with gaps from the query
+      query = sequence
+      keep_columns = [i for i, res in enumerate(query) if res != '-']
+
+    # Remove the columns with gaps in the query from all sequences.
+    aligned_sequence = ''.join([sequence[c] for c in keep_columns])
+
+    msa.append(aligned_sequence)
+
+    # Count the number of deletions w.r.t. query.
+    deletion_vec = []
+    deletion_count = 0
+    for seq_res, query_res in zip(sequence, query):
+      if seq_res != '-' or query_res != '-':
+        if query_res == '-':
+          deletion_count += 1
+        else:
+          deletion_vec.append(deletion_count)
+          deletion_count = 0
+    deletion_matrix.append(deletion_vec)
+
+  return msa, deletion_matrix, list(name_to_sequence.keys())
+
+
+def parse_a3m(a3m_string: str) -> Tuple[Sequence[str], DeletionMatrix]:
+  """Parses sequences and deletion matrix from a3m format alignment.
+
+  Args:
+    a3m_string: The string contents of a a3m file. The first sequence in the
+      file should be the query sequence.
+
+  Returns:
+    A tuple of:
+      * A list of sequences that have been aligned to the query. These
+        might contain duplicates.
+      * The deletion matrix for the alignment as a list of lists. The element
+        at `deletion_matrix[i][j]` is the number of residues deleted from
+        the aligned sequence i at residue position j.
+  """
+  sequences, _ = parse_fasta(a3m_string)
+  deletion_matrix = []
+  for msa_sequence in sequences:
+    deletion_vec = []
+    deletion_count = 0
+    for j in msa_sequence:
+      if j.islower():
+        deletion_count += 1
+      else:
+        deletion_vec.append(deletion_count)
+        deletion_count = 0
+    deletion_matrix.append(deletion_vec)
+
+  # Make the MSA matrix out of aligned (deletion-free) sequences.
+  deletion_table = str.maketrans('', '', string.ascii_lowercase)
+  aligned_sequences = [s.translate(deletion_table) for s in sequences]
+  return aligned_sequences, deletion_matrix
+
+
+def _convert_sto_seq_to_a3m(
+    query_non_gaps: Sequence[bool], sto_seq: str) -> Iterable[str]:
+  for is_query_res_non_gap, sequence_res in zip(query_non_gaps, sto_seq):
+    if is_query_res_non_gap:
+      yield sequence_res
+    elif sequence_res != '-':
+      yield sequence_res.lower()
+
+
+def convert_stockholm_to_a3m(stockholm_format: str,
+                             max_sequences: Optional[int] = None) -> str:
+  """Converts MSA in Stockholm format to the A3M format."""
+  descriptions = {}
+  sequences = {}
+  reached_max_sequences = False
+
+  for line in stockholm_format.splitlines():
+    reached_max_sequences = max_sequences and len(sequences) >= max_sequences
+    if line.strip() and not line.startswith(('#', '//')):
+      # Ignore blank lines, markup and end symbols - remainder are alignment
+      # sequence parts.
+      seqname, aligned_seq = line.split(maxsplit=1)
+      if seqname not in sequences:
+        if reached_max_sequences:
+          continue
+        sequences[seqname] = ''
+      sequences[seqname] += aligned_seq
+
+  for line in stockholm_format.splitlines():
+    if line[:4] == '#=GS':
+      # Description row - example format is:
+      # #=GS UniRef90_Q9H5Z4/4-78            DE [subseq from] cDNA: FLJ22755 ...
+      columns = line.split(maxsplit=3)
+      seqname, feature = columns[1:3]
+      value = columns[3] if len(columns) == 4 else ''
+      if feature != 'DE':
+        continue
+      if reached_max_sequences and seqname not in sequences:
+        continue
+      descriptions[seqname] = value
+      if len(descriptions) == len(sequences):
+        break
+
+  # Convert sto format to a3m line by line
+  a3m_sequences = {}
+  # query_sequence is assumed to be the first sequence
+  query_sequence = next(iter(sequences.values()))
+  query_non_gaps = [res != '-' for res in query_sequence]
+  for seqname, sto_sequence in sequences.items():
+    a3m_sequences[seqname] = ''.join(
+        _convert_sto_seq_to_a3m(query_non_gaps, sto_sequence))
+
+  fasta_chunks = (f">{k} {descriptions.get(k, '')}\n{a3m_sequences[k]}"
+                  for k in a3m_sequences)
+  return '\n'.join(fasta_chunks) + '\n'  # Include terminating newline.
+
+
+def _get_hhr_line_regex_groups(
+    regex_pattern: str, line: str) -> Sequence[Optional[str]]:
+  match = re.match(regex_pattern, line)
+  if match is None:
+    raise RuntimeError(f'Could not parse query line {line}')
+  return match.groups()
+
+
+def _update_hhr_residue_indices_list(
+    sequence: str, start_index: int, indices_list: List[int]):
+  """Computes the relative indices for each residue with respect to the original sequence."""
+  counter = start_index
+  for symbol in sequence:
+    if symbol == '-':
+      indices_list.append(-1)
+    else:
+      indices_list.append(counter)
+      counter += 1
+
+
+def _parse_hhr_hit(detailed_lines: Sequence[str]) -> TemplateHit:
+  """Parses the detailed HMM HMM comparison section for a single Hit.
+
+  This works on .hhr files generated from both HHBlits and HHSearch.
+
+  Args:
+    detailed_lines: A list of lines from a single comparison section between 2
+      sequences (which each have their own HMM's)
+
+  Returns:
+    A dictionary with the information from that detailed comparison section
+
+  Raises:
+    RuntimeError: If a certain line cannot be processed
+  """
+  # Parse first 2 lines.
+  number_of_hit = int(detailed_lines[0].split()[-1])
+  name_hit = detailed_lines[1][1:]
+
+  # Parse the summary line.
+  pattern = (
+      'Probab=(.*)[\t ]*E-value=(.*)[\t ]*Score=(.*)[\t ]*Aligned_cols=(.*)[\t'
+      ' ]*Identities=(.*)%[\t ]*Similarity=(.*)[\t ]*Sum_probs=(.*)[\t '
+      ']*Template_Neff=(.*)')
+  match = re.match(pattern, detailed_lines[2])
+  if match is None:
+    raise RuntimeError(
+        'Could not parse section: %s. Expected this: \n%s to contain summary.' %
+        (detailed_lines, detailed_lines[2]))
+  (prob_true, e_value, _, aligned_cols, _, _, sum_probs,
+   neff) = [float(x) for x in match.groups()]
+
+  # The next section reads the detailed comparisons. These are in a 'human
+  # readable' format which has a fixed length. The strategy employed is to
+  # assume that each block starts with the query sequence line, and to parse
+  # that with a regexp in order to deduce the fixed length used for that block.
+  query = ''
+  hit_sequence = ''
+  indices_query = []
+  indices_hit = []
+  length_block = None
+
+  for line in detailed_lines[3:]:
+    # Parse the query sequence line
+    if (line.startswith('Q ') and not line.startswith('Q ss_dssp') and
+        not line.startswith('Q ss_pred') and
+        not line.startswith('Q Consensus')):
+      # Thus the first 17 characters must be 'Q <query_name> ', and we can parse
+      # everything after that.
+      #              start    sequence       end       total_sequence_length
+      patt = r'[\t ]*([0-9]*) ([A-Z-]*)[\t ]*([0-9]*) \([0-9]*\)'
+      groups = _get_hhr_line_regex_groups(patt, line[17:])
+
+      # Get the length of the parsed block using the start and finish indices,
+      # and ensure it is the same as the actual block length.
+      start = int(groups[0]) - 1  # Make index zero based.
+      delta_query = groups[1]
+      end = int(groups[2])
+      num_insertions = len([x for x in delta_query if x == '-'])
+      length_block = end - start + num_insertions
+      assert length_block == len(delta_query)
+
+      # Update the query sequence and indices list.
+      query += delta_query
+      _update_hhr_residue_indices_list(delta_query, start, indices_query)
+
+    elif line.startswith('T '):
+      # Parse the hit sequence.
+      if (not line.startswith('T ss_dssp') and
+          not line.startswith('T ss_pred') and
+          not line.startswith('T Consensus')):
+        # Thus the first 17 characters must be 'T <hit_name> ', and we can
+        # parse everything after that.
+        #              start    sequence       end     total_sequence_length
+        patt = r'[\t ]*([0-9]*) ([A-Z-]*)[\t ]*[0-9]* \([0-9]*\)'
+        groups = _get_hhr_line_regex_groups(patt, line[17:])
+        start = int(groups[0]) - 1  # Make index zero based.
+        delta_hit_sequence = groups[1]
+        assert length_block == len(delta_hit_sequence)
+
+        # Update the hit sequence and indices list.
+        hit_sequence += delta_hit_sequence
+        _update_hhr_residue_indices_list(delta_hit_sequence, start, indices_hit)
+
+  return TemplateHit(
+      index=number_of_hit,
+      name=name_hit,
+      aligned_cols=int(aligned_cols),
+      sum_probs=sum_probs,
+      query=query,
+      hit_sequence=hit_sequence,
+      indices_query=indices_query,
+      indices_hit=indices_hit,
+  )
+
+
+def parse_hhr(hhr_string: str) -> Sequence[TemplateHit]:
+  """Parses the content of an entire HHR file."""
+  lines = hhr_string.splitlines()
+
+  # Each .hhr file starts with a results table, then has a sequence of hit
+  # "paragraphs", each paragraph starting with a line 'No <hit number>'. We
+  # iterate through each paragraph to parse each hit.
+
+  block_starts = [i for i, line in enumerate(lines) if line.startswith('No ')]
+
+  hits = []
+  if block_starts:
+    block_starts.append(len(lines))  # Add the end of the final block.
+    for i in range(len(block_starts) - 1):
+      hits.append(_parse_hhr_hit(lines[block_starts[i]:block_starts[i + 1]]))
+  return hits
+
+
+def parse_e_values_from_tblout(tblout: str) -> Dict[str, float]:
+  """Parse target to e-value mapping parsed from Jackhmmer tblout string."""
+  e_values = {'query': 0}
+  lines = [line for line in tblout.splitlines() if line[0] != '#']
+  # As per http://eddylab.org/software/hmmer/Userguide.pdf fields are
+  # space-delimited. Relevant fields are (1) target name:  and
+  # (5) E-value (full sequence) (numbering from 1).
+  for line in lines:
+    fields = line.split()
+    e_value = fields[4]
+    target_name = fields[0]
+    e_values[target_name] = float(e_value)
+  return e_values
diff --git a/alphafold/alphafold/data/pipeline.py b/alphafold/alphafold/data/pipeline.py
new file mode 100644
index 0000000000000000000000000000000000000000..461bce875ab6f9cad4e2b0897c44a6cf1ef399ae
--- /dev/null
+++ b/alphafold/alphafold/data/pipeline.py
@@ -0,0 +1,209 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Functions for building the input features for the AlphaFold model."""
+
+import os
+from typing import Mapping, Optional, Sequence
+from absl import logging
+from alphafold.common import residue_constants
+from alphafold.data import parsers
+from alphafold.data import templates
+from alphafold.data.tools import hhblits
+from alphafold.data.tools import hhsearch
+from alphafold.data.tools import jackhmmer
+import numpy as np
+
+# Internal import (7716).
+
+FeatureDict = Mapping[str, np.ndarray]
+
+
+def make_sequence_features(
+    sequence: str, description: str, num_res: int) -> FeatureDict:
+  """Constructs a feature dict of sequence features."""
+  features = {}
+  features['aatype'] = residue_constants.sequence_to_onehot(
+      sequence=sequence,
+      mapping=residue_constants.restype_order_with_x,
+      map_unknown_to_x=True)
+  features['between_segment_residues'] = np.zeros((num_res,), dtype=np.int32)
+  features['domain_name'] = np.array([description.encode('utf-8')],
+                                     dtype=np.object_)
+  features['residue_index'] = np.array(range(num_res), dtype=np.int32)
+  features['seq_length'] = np.array([num_res] * num_res, dtype=np.int32)
+  features['sequence'] = np.array([sequence.encode('utf-8')], dtype=np.object_)
+  return features
+
+
+def make_msa_features(
+    msas: Sequence[Sequence[str]],
+    deletion_matrices: Sequence[parsers.DeletionMatrix]) -> FeatureDict:
+  """Constructs a feature dict of MSA features."""
+  if not msas:
+    raise ValueError('At least one MSA must be provided.')
+
+  int_msa = []
+  deletion_matrix = []
+  seen_sequences = set()
+  for msa_index, msa in enumerate(msas):
+    if not msa:
+      raise ValueError(f'MSA {msa_index} must contain at least one sequence.')
+    for sequence_index, sequence in enumerate(msa):
+      if sequence in seen_sequences:
+        continue
+      seen_sequences.add(sequence)
+      int_msa.append(
+          [residue_constants.HHBLITS_AA_TO_ID[res] for res in sequence])
+      deletion_matrix.append(deletion_matrices[msa_index][sequence_index])
+
+  num_res = len(msas[0][0])
+  num_alignments = len(int_msa)
+  features = {}
+  features['deletion_matrix_int'] = np.array(deletion_matrix, dtype=np.int32)
+  features['msa'] = np.array(int_msa, dtype=np.int32)
+  features['num_alignments'] = np.array(
+      [num_alignments] * num_res, dtype=np.int32)
+  return features
+
+
+class DataPipeline:
+  """Runs the alignment tools and assembles the input features."""
+
+  def __init__(self,
+               jackhmmer_binary_path: str,
+               hhblits_binary_path: str,
+               hhsearch_binary_path: str,
+               uniref90_database_path: str,
+               mgnify_database_path: str,
+               bfd_database_path: Optional[str],
+               uniclust30_database_path: Optional[str],
+               small_bfd_database_path: Optional[str],
+               pdb70_database_path: str,
+               template_featurizer: templates.TemplateHitFeaturizer,
+               use_small_bfd: bool,
+               mgnify_max_hits: int = 501,
+               uniref_max_hits: int = 10000):
+    """Constructs a feature dict for a given FASTA file."""
+    self._use_small_bfd = use_small_bfd
+    self.jackhmmer_uniref90_runner = jackhmmer.Jackhmmer(
+        binary_path=jackhmmer_binary_path,
+        database_path=uniref90_database_path)
+    if use_small_bfd:
+      self.jackhmmer_small_bfd_runner = jackhmmer.Jackhmmer(
+          binary_path=jackhmmer_binary_path,
+          database_path=small_bfd_database_path)
+    else:
+      self.hhblits_bfd_uniclust_runner = hhblits.HHBlits(
+          binary_path=hhblits_binary_path,
+          databases=[bfd_database_path, uniclust30_database_path])
+    self.jackhmmer_mgnify_runner = jackhmmer.Jackhmmer(
+        binary_path=jackhmmer_binary_path,
+        database_path=mgnify_database_path)
+    self.hhsearch_pdb70_runner = hhsearch.HHSearch(
+        binary_path=hhsearch_binary_path,
+        databases=[pdb70_database_path])
+    self.template_featurizer = template_featurizer
+    self.mgnify_max_hits = mgnify_max_hits
+    self.uniref_max_hits = uniref_max_hits
+
+  def process(self, input_fasta_path: str, msa_output_dir: str) -> FeatureDict:
+    """Runs alignment tools on the input sequence and creates features."""
+    with open(input_fasta_path) as f:
+      input_fasta_str = f.read()
+    input_seqs, input_descs = parsers.parse_fasta(input_fasta_str)
+    if len(input_seqs) != 1:
+      raise ValueError(
+          f'More than one input sequence found in {input_fasta_path}.')
+    input_sequence = input_seqs[0]
+    input_description = input_descs[0]
+    num_res = len(input_sequence)
+
+    jackhmmer_uniref90_result = self.jackhmmer_uniref90_runner.query(
+        input_fasta_path)[0]
+    jackhmmer_mgnify_result = self.jackhmmer_mgnify_runner.query(
+        input_fasta_path)[0]
+
+    uniref90_msa_as_a3m = parsers.convert_stockholm_to_a3m(
+        jackhmmer_uniref90_result['sto'], max_sequences=self.uniref_max_hits)
+    hhsearch_result = self.hhsearch_pdb70_runner.query(uniref90_msa_as_a3m)
+
+    uniref90_out_path = os.path.join(msa_output_dir, 'uniref90_hits.sto')
+    with open(uniref90_out_path, 'w') as f:
+      f.write(jackhmmer_uniref90_result['sto'])
+
+    mgnify_out_path = os.path.join(msa_output_dir, 'mgnify_hits.sto')
+    with open(mgnify_out_path, 'w') as f:
+      f.write(jackhmmer_mgnify_result['sto'])
+
+    pdb70_out_path = os.path.join(msa_output_dir, 'pdb70_hits.hhr')
+    with open(pdb70_out_path, 'w') as f:
+      f.write(hhsearch_result)
+
+    uniref90_msa, uniref90_deletion_matrix, _ = parsers.parse_stockholm(
+        jackhmmer_uniref90_result['sto'])
+    mgnify_msa, mgnify_deletion_matrix, _ = parsers.parse_stockholm(
+        jackhmmer_mgnify_result['sto'])
+    hhsearch_hits = parsers.parse_hhr(hhsearch_result)
+    mgnify_msa = mgnify_msa[:self.mgnify_max_hits]
+    mgnify_deletion_matrix = mgnify_deletion_matrix[:self.mgnify_max_hits]
+
+    if self._use_small_bfd:
+      jackhmmer_small_bfd_result = self.jackhmmer_small_bfd_runner.query(
+          input_fasta_path)[0]
+
+      bfd_out_path = os.path.join(msa_output_dir, 'small_bfd_hits.a3m')
+      with open(bfd_out_path, 'w') as f:
+        f.write(jackhmmer_small_bfd_result['sto'])
+
+      bfd_msa, bfd_deletion_matrix, _ = parsers.parse_stockholm(
+          jackhmmer_small_bfd_result['sto'])
+    else:
+      hhblits_bfd_uniclust_result = self.hhblits_bfd_uniclust_runner.query(
+          input_fasta_path)
+
+      bfd_out_path = os.path.join(msa_output_dir, 'bfd_uniclust_hits.a3m')
+      with open(bfd_out_path, 'w') as f:
+        f.write(hhblits_bfd_uniclust_result['a3m'])
+
+      bfd_msa, bfd_deletion_matrix = parsers.parse_a3m(
+          hhblits_bfd_uniclust_result['a3m'])
+
+    templates_result = self.template_featurizer.get_templates(
+        query_sequence=input_sequence,
+        query_pdb_code=None,
+        query_release_date=None,
+        hits=hhsearch_hits)
+
+    sequence_features = make_sequence_features(
+        sequence=input_sequence,
+        description=input_description,
+        num_res=num_res)
+
+    msa_features = make_msa_features(
+        msas=(uniref90_msa, bfd_msa, mgnify_msa),
+        deletion_matrices=(uniref90_deletion_matrix,
+                           bfd_deletion_matrix,
+                           mgnify_deletion_matrix))
+
+    logging.info('Uniref90 MSA size: %d sequences.', len(uniref90_msa))
+    logging.info('BFD MSA size: %d sequences.', len(bfd_msa))
+    logging.info('MGnify MSA size: %d sequences.', len(mgnify_msa))
+    logging.info('Final (deduplicated) MSA size: %d sequences.',
+                 msa_features['num_alignments'][0])
+    logging.info('Total number of templates (NB: this can include bad '
+                 'templates and is later filtered to top 4): %d.',
+                 templates_result.features['template_domain_names'].shape[0])
+
+    return {**sequence_features, **msa_features, **templates_result.features}
diff --git a/alphafold/alphafold/data/templates.py b/alphafold/alphafold/data/templates.py
new file mode 100644
index 0000000000000000000000000000000000000000..9c1f2077351125b272b5970db5356631a29722f0
--- /dev/null
+++ b/alphafold/alphafold/data/templates.py
@@ -0,0 +1,922 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Functions for getting templates and calculating template features."""
+import dataclasses
+import datetime
+import glob
+import os
+import re
+from typing import Any, Dict, Mapping, Optional, Sequence, Tuple
+
+from absl import logging
+from alphafold.common import residue_constants
+from alphafold.data import mmcif_parsing
+from alphafold.data import parsers
+from alphafold.data.tools import kalign
+import numpy as np
+
+# Internal import (7716).
+
+
+class Error(Exception):
+  """Base class for exceptions."""
+
+
+class NoChainsError(Error):
+  """An error indicating that template mmCIF didn't have any chains."""
+
+
+class SequenceNotInTemplateError(Error):
+  """An error indicating that template mmCIF didn't contain the sequence."""
+
+
+class NoAtomDataInTemplateError(Error):
+  """An error indicating that template mmCIF didn't contain atom positions."""
+
+
+class TemplateAtomMaskAllZerosError(Error):
+  """An error indicating that template mmCIF had all atom positions masked."""
+
+
+class QueryToTemplateAlignError(Error):
+  """An error indicating that the query can't be aligned to the template."""
+
+
+class CaDistanceError(Error):
+  """An error indicating that a CA atom distance exceeds a threshold."""
+
+
+class MultipleChainsError(Error):
+  """An error indicating that multiple chains were found for a given ID."""
+
+
+# Prefilter exceptions.
+class PrefilterError(Exception):
+  """A base class for template prefilter exceptions."""
+
+
+class DateError(PrefilterError):
+  """An error indicating that the hit date was after the max allowed date."""
+
+
+class PdbIdError(PrefilterError):
+  """An error indicating that the hit PDB ID was identical to the query."""
+
+
+class AlignRatioError(PrefilterError):
+  """An error indicating that the hit align ratio to the query was too small."""
+
+
+class DuplicateError(PrefilterError):
+  """An error indicating that the hit was an exact subsequence of the query."""
+
+
+class LengthError(PrefilterError):
+  """An error indicating that the hit was too short."""
+
+
+TEMPLATE_FEATURES = {
+    'template_aatype': np.float32,
+    'template_all_atom_masks': np.float32,
+    'template_all_atom_positions': np.float32,
+    'template_domain_names': np.object,
+    'template_sequence': np.object,
+    'template_sum_probs': np.float32,
+}
+
+
+def _get_pdb_id_and_chain(hit: parsers.TemplateHit) -> Tuple[str, str]:
+  """Returns PDB id and chain id for an HHSearch Hit."""
+  # PDB ID: 4 letters. Chain ID: 1+ alphanumeric letters or "." if unknown.
+  id_match = re.match(r'[a-zA-Z\d]{4}_[a-zA-Z0-9.]+', hit.name)
+  if not id_match:
+    raise ValueError(f'hit.name did not start with PDBID_chain: {hit.name}')
+  pdb_id, chain_id = id_match.group(0).split('_')
+  return pdb_id.lower(), chain_id
+
+
+def _is_after_cutoff(
+    pdb_id: str,
+    release_dates: Mapping[str, datetime.datetime],
+    release_date_cutoff: Optional[datetime.datetime]) -> bool:
+  """Checks if the template date is after the release date cutoff.
+
+  Args:
+    pdb_id: 4 letter pdb code.
+    release_dates: Dictionary mapping PDB ids to their structure release dates.
+    release_date_cutoff: Max release date that is valid for this query.
+
+  Returns:
+    True if the template release date is after the cutoff, False otherwise.
+  """
+  if release_date_cutoff is None:
+    raise ValueError('The release_date_cutoff must not be None.')
+  if pdb_id in release_dates:
+    return release_dates[pdb_id] > release_date_cutoff
+  else:
+    # Since this is just a quick prefilter to reduce the number of mmCIF files
+    # we need to parse, we don't have to worry about returning True here.
+    logging.warning('Template structure not in release dates dict: %s', pdb_id)
+    return False
+
+
+def _parse_obsolete(obsolete_file_path: str) -> Mapping[str, Optional[str]]:
+  """Parses the data file from PDB that lists which pdb_ids are obsolete."""
+  with open(obsolete_file_path) as f:
+    result = {}
+    for line in f:
+      line = line.strip()
+      # Format:    Date      From     To
+      # 'OBSLTE    06-NOV-19 6G9Y'                - Removed, rare
+      # 'OBSLTE    31-JUL-94 116L     216L'       - Replaced, common
+      # 'OBSLTE    26-SEP-06 2H33     2JM5 2OWI'  - Replaced by multiple, rare
+      if line.startswith('OBSLTE'):
+        if len(line) > 30:
+          # Replaced by at least one structure.
+          from_id = line[20:24].lower()
+          to_id = line[29:33].lower()
+          result[from_id] = to_id
+        elif len(line) == 24:
+          # Removed.
+          from_id = line[20:24].lower()
+          result[from_id] = None
+    return result
+
+
+def _parse_release_dates(path: str) -> Mapping[str, datetime.datetime]:
+  """Parses release dates file, returns a mapping from PDBs to release dates."""
+  if path.endswith('txt'):
+    release_dates = {}
+    with open(path, 'r') as f:
+      for line in f:
+        pdb_id, date = line.split(':')
+        date = date.strip()
+        # Python 3.6 doesn't have datetime.date.fromisoformat() which is about
+        # 90x faster than strptime. However, splitting the string manually is
+        # about 10x faster than strptime.
+        release_dates[pdb_id.strip()] = datetime.datetime(
+            year=int(date[:4]), month=int(date[5:7]), day=int(date[8:10]))
+    return release_dates
+  else:
+    raise ValueError('Invalid format of the release date file %s.' % path)
+
+
+def _assess_hhsearch_hit(
+    hit: parsers.TemplateHit,
+    hit_pdb_code: str,
+    query_sequence: str,
+    query_pdb_code: Optional[str],
+    release_dates: Mapping[str, datetime.datetime],
+    release_date_cutoff: datetime.datetime,
+    max_subsequence_ratio: float = 0.95,
+    min_align_ratio: float = 0.1) -> bool:
+  """Determines if template is valid (without parsing the template mmcif file).
+
+  Args:
+    hit: HhrHit for the template.
+    hit_pdb_code: The 4 letter pdb code of the template hit. This might be
+      different from the value in the actual hit since the original pdb might
+      have become obsolete.
+    query_sequence: Amino acid sequence of the query.
+    query_pdb_code: 4 letter pdb code of the query.
+    release_dates: Dictionary mapping pdb codes to their structure release
+      dates.
+    release_date_cutoff: Max release date that is valid for this query.
+    max_subsequence_ratio: Exclude any exact matches with this much overlap.
+    min_align_ratio: Minimum overlap between the template and query.
+
+  Returns:
+    True if the hit passed the prefilter. Raises an exception otherwise.
+
+  Raises:
+    DateError: If the hit date was after the max allowed date.
+    PdbIdError: If the hit PDB ID was identical to the query.
+    AlignRatioError: If the hit align ratio to the query was too small.
+    DuplicateError: If the hit was an exact subsequence of the query.
+    LengthError: If the hit was too short.
+  """
+  aligned_cols = hit.aligned_cols
+  align_ratio = aligned_cols / len(query_sequence)
+
+  template_sequence = hit.hit_sequence.replace('-', '')
+  length_ratio = float(len(template_sequence)) / len(query_sequence)
+
+  # Check whether the template is a large subsequence or duplicate of original
+  # query. This can happen due to duplicate entries in the PDB database.
+  duplicate = (template_sequence in query_sequence and
+               length_ratio > max_subsequence_ratio)
+
+  if _is_after_cutoff(hit_pdb_code, release_dates, release_date_cutoff):
+    raise DateError(f'Date ({release_dates[hit_pdb_code]}) > max template date '
+                    f'({release_date_cutoff}).')
+
+  if query_pdb_code is not None:
+    if query_pdb_code.lower() == hit_pdb_code.lower():
+      raise PdbIdError('PDB code identical to Query PDB code.')
+
+  if align_ratio <= min_align_ratio:
+    raise AlignRatioError('Proportion of residues aligned to query too small. '
+                          f'Align ratio: {align_ratio}.')
+
+  if duplicate:
+    raise DuplicateError('Template is an exact subsequence of query with large '
+                         f'coverage. Length ratio: {length_ratio}.')
+
+  if len(template_sequence) < 10:
+    raise LengthError(f'Template too short. Length: {len(template_sequence)}.')
+
+  return True
+
+
+def _find_template_in_pdb(
+    template_chain_id: str,
+    template_sequence: str,
+    mmcif_object: mmcif_parsing.MmcifObject) -> Tuple[str, str, int]:
+  """Tries to find the template chain in the given pdb file.
+
+  This method tries the three following things in order:
+    1. Tries if there is an exact match in both the chain ID and the sequence.
+       If yes, the chain sequence is returned. Otherwise:
+    2. Tries if there is an exact match only in the sequence.
+       If yes, the chain sequence is returned. Otherwise:
+    3. Tries if there is a fuzzy match (X = wildcard) in the sequence.
+       If yes, the chain sequence is returned.
+  If none of these succeed, a SequenceNotInTemplateError is thrown.
+
+  Args:
+    template_chain_id: The template chain ID.
+    template_sequence: The template chain sequence.
+    mmcif_object: The PDB object to search for the template in.
+
+  Returns:
+    A tuple with:
+    * The chain sequence that was found to match the template in the PDB object.
+    * The ID of the chain that is being returned.
+    * The offset where the template sequence starts in the chain sequence.
+
+  Raises:
+    SequenceNotInTemplateError: If no match is found after the steps described
+      above.
+  """
+  # Try if there is an exact match in both the chain ID and the (sub)sequence.
+  pdb_id = mmcif_object.file_id
+  chain_sequence = mmcif_object.chain_to_seqres.get(template_chain_id)
+  if chain_sequence and (template_sequence in chain_sequence):
+    logging.info(
+        'Found an exact template match %s_%s.', pdb_id, template_chain_id)
+    mapping_offset = chain_sequence.find(template_sequence)
+    return chain_sequence, template_chain_id, mapping_offset
+
+  # Try if there is an exact match in the (sub)sequence only.
+  for chain_id, chain_sequence in mmcif_object.chain_to_seqres.items():
+    if chain_sequence and (template_sequence in chain_sequence):
+      logging.info('Found a sequence-only match %s_%s.', pdb_id, chain_id)
+      mapping_offset = chain_sequence.find(template_sequence)
+      return chain_sequence, chain_id, mapping_offset
+
+  # Return a chain sequence that fuzzy matches (X = wildcard) the template.
+  # Make parentheses unnamed groups (?:_) to avoid the 100 named groups limit.
+  regex = ['.' if aa == 'X' else '(?:%s|X)' % aa for aa in template_sequence]
+  regex = re.compile(''.join(regex))
+  for chain_id, chain_sequence in mmcif_object.chain_to_seqres.items():
+    match = re.search(regex, chain_sequence)
+    if match:
+      logging.info('Found a fuzzy sequence-only match %s_%s.', pdb_id, chain_id)
+      mapping_offset = match.start()
+      return chain_sequence, chain_id, mapping_offset
+
+  # No hits, raise an error.
+  raise SequenceNotInTemplateError(
+      'Could not find the template sequence in %s_%s. Template sequence: %s, '
+      'chain_to_seqres: %s' % (pdb_id, template_chain_id, template_sequence,
+                               mmcif_object.chain_to_seqres))
+
+
+def _realign_pdb_template_to_query(
+    old_template_sequence: str,
+    template_chain_id: str,
+    mmcif_object: mmcif_parsing.MmcifObject,
+    old_mapping: Mapping[int, int],
+    kalign_binary_path: str) -> Tuple[str, Mapping[int, int]]:
+  """Aligns template from the mmcif_object to the query.
+
+  In case PDB70 contains a different version of the template sequence, we need
+  to perform a realignment to the actual sequence that is in the mmCIF file.
+  This method performs such realignment, but returns the new sequence and
+  mapping only if the sequence in the mmCIF file is 90% identical to the old
+  sequence.
+
+  Note that the old_template_sequence comes from the hit, and contains only that
+  part of the chain that matches with the query while the new_template_sequence
+  is the full chain.
+
+  Args:
+    old_template_sequence: The template sequence that was returned by the PDB
+      template search (typically done using HHSearch).
+    template_chain_id: The template chain id was returned by the PDB template
+      search (typically done using HHSearch). This is used to find the right
+      chain in the mmcif_object chain_to_seqres mapping.
+    mmcif_object: A mmcif_object which holds the actual template data.
+    old_mapping: A mapping from the query sequence to the template sequence.
+      This mapping will be used to compute the new mapping from the query
+      sequence to the actual mmcif_object template sequence by aligning the
+      old_template_sequence and the actual template sequence.
+    kalign_binary_path: The path to a kalign executable.
+
+  Returns:
+    A tuple (new_template_sequence, new_query_to_template_mapping) where:
+    * new_template_sequence is the actual template sequence that was found in
+      the mmcif_object.
+    * new_query_to_template_mapping is the new mapping from the query to the
+      actual template found in the mmcif_object.
+
+  Raises:
+    QueryToTemplateAlignError:
+    * If there was an error thrown by the alignment tool.
+    * Or if the actual template sequence differs by more than 10% from the
+      old_template_sequence.
+  """
+  aligner = kalign.Kalign(binary_path=kalign_binary_path)
+  new_template_sequence = mmcif_object.chain_to_seqres.get(
+      template_chain_id, '')
+
+  # Sometimes the template chain id is unknown. But if there is only a single
+  # sequence within the mmcif_object, it is safe to assume it is that one.
+  if not new_template_sequence:
+    if len(mmcif_object.chain_to_seqres) == 1:
+      logging.info('Could not find %s in %s, but there is only 1 sequence, so '
+                   'using that one.',
+                   template_chain_id,
+                   mmcif_object.file_id)
+      new_template_sequence = list(mmcif_object.chain_to_seqres.values())[0]
+    else:
+      raise QueryToTemplateAlignError(
+          f'Could not find chain {template_chain_id} in {mmcif_object.file_id}. '
+          'If there are no mmCIF parsing errors, it is possible it was not a '
+          'protein chain.')
+
+  try:
+    (old_aligned_template, new_aligned_template), _ = parsers.parse_a3m(
+        aligner.align([old_template_sequence, new_template_sequence]))
+  except Exception as e:
+    raise QueryToTemplateAlignError(
+        'Could not align old template %s to template %s (%s_%s). Error: %s' %
+        (old_template_sequence, new_template_sequence, mmcif_object.file_id,
+         template_chain_id, str(e)))
+
+  logging.info('Old aligned template: %s\nNew aligned template: %s',
+               old_aligned_template, new_aligned_template)
+
+  old_to_new_template_mapping = {}
+  old_template_index = -1
+  new_template_index = -1
+  num_same = 0
+  for old_template_aa, new_template_aa in zip(
+      old_aligned_template, new_aligned_template):
+    if old_template_aa != '-':
+      old_template_index += 1
+    if new_template_aa != '-':
+      new_template_index += 1
+    if old_template_aa != '-' and new_template_aa != '-':
+      old_to_new_template_mapping[old_template_index] = new_template_index
+      if old_template_aa == new_template_aa:
+        num_same += 1
+
+  # Require at least 90 % sequence identity wrt to the shorter of the sequences.
+  if float(num_same) / min(
+      len(old_template_sequence), len(new_template_sequence)) < 0.9:
+    raise QueryToTemplateAlignError(
+        'Insufficient similarity of the sequence in the database: %s to the '
+        'actual sequence in the mmCIF file %s_%s: %s. We require at least '
+        '90 %% similarity wrt to the shorter of the sequences. This is not a '
+        'problem unless you think this is a template that should be included.' %
+        (old_template_sequence, mmcif_object.file_id, template_chain_id,
+         new_template_sequence))
+
+  new_query_to_template_mapping = {}
+  for query_index, old_template_index in old_mapping.items():
+    new_query_to_template_mapping[query_index] = (
+        old_to_new_template_mapping.get(old_template_index, -1))
+
+  new_template_sequence = new_template_sequence.replace('-', '')
+
+  return new_template_sequence, new_query_to_template_mapping
+
+
+def _check_residue_distances(all_positions: np.ndarray,
+                             all_positions_mask: np.ndarray,
+                             max_ca_ca_distance: float):
+  """Checks if the distance between unmasked neighbor residues is ok."""
+  ca_position = residue_constants.atom_order['CA']
+  prev_is_unmasked = False
+  prev_calpha = None
+  for i, (coords, mask) in enumerate(zip(all_positions, all_positions_mask)):
+    this_is_unmasked = bool(mask[ca_position])
+    if this_is_unmasked:
+      this_calpha = coords[ca_position]
+      if prev_is_unmasked:
+        distance = np.linalg.norm(this_calpha - prev_calpha)
+        if distance > max_ca_ca_distance:
+          raise CaDistanceError(
+              'The distance between residues %d and %d is %f > limit %f.' % (
+                  i, i + 1, distance, max_ca_ca_distance))
+      prev_calpha = this_calpha
+    prev_is_unmasked = this_is_unmasked
+
+
+def _get_atom_positions(
+    mmcif_object: mmcif_parsing.MmcifObject,
+    auth_chain_id: str,
+    max_ca_ca_distance: float) -> Tuple[np.ndarray, np.ndarray]:
+  """Gets atom positions and mask from a list of Biopython Residues."""
+  num_res = len(mmcif_object.chain_to_seqres[auth_chain_id])
+
+  relevant_chains = [c for c in mmcif_object.structure.get_chains()
+                     if c.id == auth_chain_id]
+  if len(relevant_chains) != 1:
+    raise MultipleChainsError(
+        f'Expected exactly one chain in structure with id {auth_chain_id}.')
+  chain = relevant_chains[0]
+
+  all_positions = np.zeros([num_res, residue_constants.atom_type_num, 3])
+  all_positions_mask = np.zeros([num_res, residue_constants.atom_type_num],
+                                dtype=np.int64)
+  for res_index in range(num_res):
+    pos = np.zeros([residue_constants.atom_type_num, 3], dtype=np.float32)
+    mask = np.zeros([residue_constants.atom_type_num], dtype=np.float32)
+    res_at_position = mmcif_object.seqres_to_structure[auth_chain_id][res_index]
+    if not res_at_position.is_missing:
+      res = chain[(res_at_position.hetflag,
+                   res_at_position.position.residue_number,
+                   res_at_position.position.insertion_code)]
+      for atom in res.get_atoms():
+        atom_name = atom.get_name()
+        x, y, z = atom.get_coord()
+        if atom_name in residue_constants.atom_order.keys():
+          pos[residue_constants.atom_order[atom_name]] = [x, y, z]
+          mask[residue_constants.atom_order[atom_name]] = 1.0
+        elif atom_name.upper() == 'SE' and res.get_resname() == 'MSE':
+          # Put the coordinates of the selenium atom in the sulphur column.
+          pos[residue_constants.atom_order['SD']] = [x, y, z]
+          mask[residue_constants.atom_order['SD']] = 1.0
+
+    all_positions[res_index] = pos
+    all_positions_mask[res_index] = mask
+  _check_residue_distances(
+      all_positions, all_positions_mask, max_ca_ca_distance)
+  return all_positions, all_positions_mask
+
+
+def _extract_template_features(
+    mmcif_object: mmcif_parsing.MmcifObject,
+    pdb_id: str,
+    mapping: Mapping[int, int],
+    template_sequence: str,
+    query_sequence: str,
+    template_chain_id: str,
+    kalign_binary_path: str) -> Tuple[Dict[str, Any], Optional[str]]:
+  """Parses atom positions in the target structure and aligns with the query.
+
+  Atoms for each residue in the template structure are indexed to coincide
+  with their corresponding residue in the query sequence, according to the
+  alignment mapping provided.
+
+  Args:
+    mmcif_object: mmcif_parsing.MmcifObject representing the template.
+    pdb_id: PDB code for the template.
+    mapping: Dictionary mapping indices in the query sequence to indices in
+      the template sequence.
+    template_sequence: String describing the amino acid sequence for the
+      template protein.
+    query_sequence: String describing the amino acid sequence for the query
+      protein.
+    template_chain_id: String ID describing which chain in the structure proto
+      should be used.
+    kalign_binary_path: The path to a kalign executable used for template
+        realignment.
+
+  Returns:
+    A tuple with:
+    * A dictionary containing the extra features derived from the template
+      protein structure.
+    * A warning message if the hit was realigned to the actual mmCIF sequence.
+      Otherwise None.
+
+  Raises:
+    NoChainsError: If the mmcif object doesn't contain any chains.
+    SequenceNotInTemplateError: If the given chain id / sequence can't
+      be found in the mmcif object.
+    QueryToTemplateAlignError: If the actual template in the mmCIF file
+      can't be aligned to the query.
+    NoAtomDataInTemplateError: If the mmcif object doesn't contain
+      atom positions.
+    TemplateAtomMaskAllZerosError: If the mmcif object doesn't have any
+      unmasked residues.
+  """
+  if mmcif_object is None or not mmcif_object.chain_to_seqres:
+    raise NoChainsError('No chains in PDB: %s_%s' % (pdb_id, template_chain_id))
+
+  warning = None
+  try:
+    seqres, chain_id, mapping_offset = _find_template_in_pdb(
+        template_chain_id=template_chain_id,
+        template_sequence=template_sequence,
+        mmcif_object=mmcif_object)
+  except SequenceNotInTemplateError:
+    # If PDB70 contains a different version of the template, we use the sequence
+    # from the mmcif_object.
+    chain_id = template_chain_id
+    warning = (
+        f'The exact sequence {template_sequence} was not found in '
+        f'{pdb_id}_{chain_id}. Realigning the template to the actual sequence.')
+    logging.warning(warning)
+    # This throws an exception if it fails to realign the hit.
+    seqres, mapping = _realign_pdb_template_to_query(
+        old_template_sequence=template_sequence,
+        template_chain_id=template_chain_id,
+        mmcif_object=mmcif_object,
+        old_mapping=mapping,
+        kalign_binary_path=kalign_binary_path)
+    logging.info('Sequence in %s_%s: %s successfully realigned to %s',
+                 pdb_id, chain_id, template_sequence, seqres)
+    # The template sequence changed.
+    template_sequence = seqres
+    # No mapping offset, the query is aligned to the actual sequence.
+    mapping_offset = 0
+
+  try:
+    # Essentially set to infinity - we don't want to reject templates unless
+    # they're really really bad.
+    all_atom_positions, all_atom_mask = _get_atom_positions(
+        mmcif_object, chain_id, max_ca_ca_distance=150.0)
+  except (CaDistanceError, KeyError) as ex:
+    raise NoAtomDataInTemplateError(
+        'Could not get atom data (%s_%s): %s' % (pdb_id, chain_id, str(ex))
+        ) from ex
+
+  all_atom_positions = np.split(all_atom_positions, all_atom_positions.shape[0])
+  all_atom_masks = np.split(all_atom_mask, all_atom_mask.shape[0])
+
+  output_templates_sequence = []
+  templates_all_atom_positions = []
+  templates_all_atom_masks = []
+
+  for _ in query_sequence:
+    # Residues in the query_sequence that are not in the template_sequence:
+    templates_all_atom_positions.append(
+        np.zeros((residue_constants.atom_type_num, 3)))
+    templates_all_atom_masks.append(np.zeros(residue_constants.atom_type_num))
+    output_templates_sequence.append('-')
+
+  for k, v in mapping.items():
+    template_index = v + mapping_offset
+    templates_all_atom_positions[k] = all_atom_positions[template_index][0]
+    templates_all_atom_masks[k] = all_atom_masks[template_index][0]
+    output_templates_sequence[k] = template_sequence[v]
+
+  # Alanine (AA with the lowest number of atoms) has 5 atoms (C, CA, CB, N, O).
+  if np.sum(templates_all_atom_masks) < 5:
+    raise TemplateAtomMaskAllZerosError(
+        'Template all atom mask was all zeros: %s_%s. Residue range: %d-%d' %
+        (pdb_id, chain_id, min(mapping.values()) + mapping_offset,
+         max(mapping.values()) + mapping_offset))
+
+  output_templates_sequence = ''.join(output_templates_sequence)
+
+  templates_aatype = residue_constants.sequence_to_onehot(
+      output_templates_sequence, residue_constants.HHBLITS_AA_TO_ID)
+
+  return (
+      {
+          'template_all_atom_positions': np.array(templates_all_atom_positions),
+          'template_all_atom_masks': np.array(templates_all_atom_masks),
+          'template_sequence': output_templates_sequence.encode(),
+          'template_aatype': np.array(templates_aatype),
+          'template_domain_names': f'{pdb_id.lower()}_{chain_id}'.encode(),
+      },
+      warning)
+
+
+def _build_query_to_hit_index_mapping(
+    hit_query_sequence: str,
+    hit_sequence: str,
+    indices_hit: Sequence[int],
+    indices_query: Sequence[int],
+    original_query_sequence: str) -> Mapping[int, int]:
+  """Gets mapping from indices in original query sequence to indices in the hit.
+
+  hit_query_sequence and hit_sequence are two aligned sequences containing gap
+  characters. hit_query_sequence contains only the part of the original query
+  sequence that matched the hit. When interpreting the indices from the .hhr, we
+  need to correct for this to recover a mapping from original query sequence to
+  the hit sequence.
+
+  Args:
+    hit_query_sequence: The portion of the query sequence that is in the .hhr
+      hit
+    hit_sequence: The portion of the hit sequence that is in the .hhr
+    indices_hit: The indices for each aminoacid relative to the hit sequence
+    indices_query: The indices for each aminoacid relative to the original query
+      sequence
+    original_query_sequence: String describing the original query sequence.
+
+  Returns:
+    Dictionary with indices in the original query sequence as keys and indices
+    in the hit sequence as values.
+  """
+  # If the hit is empty (no aligned residues), return empty mapping
+  if not hit_query_sequence:
+    return {}
+
+  # Remove gaps and find the offset of hit.query relative to original query.
+  hhsearch_query_sequence = hit_query_sequence.replace('-', '')
+  hit_sequence = hit_sequence.replace('-', '')
+  hhsearch_query_offset = original_query_sequence.find(hhsearch_query_sequence)
+
+  # Index of -1 used for gap characters. Subtract the min index ignoring gaps.
+  min_idx = min(x for x in indices_hit if x > -1)
+  fixed_indices_hit = [
+      x - min_idx if x > -1 else -1 for x in indices_hit
+  ]
+
+  min_idx = min(x for x in indices_query if x > -1)
+  fixed_indices_query = [x - min_idx if x > -1 else -1 for x in indices_query]
+
+  # Zip the corrected indices, ignore case where both seqs have gap characters.
+  mapping = {}
+  for q_i, q_t in zip(fixed_indices_query, fixed_indices_hit):
+    if q_t != -1 and q_i != -1:
+      if (q_t >= len(hit_sequence) or
+          q_i + hhsearch_query_offset >= len(original_query_sequence)):
+        continue
+      mapping[q_i + hhsearch_query_offset] = q_t
+
+  return mapping
+
+
+@dataclasses.dataclass(frozen=True)
+class SingleHitResult:
+  features: Optional[Mapping[str, Any]]
+  error: Optional[str]
+  warning: Optional[str]
+
+
+def _process_single_hit(
+    query_sequence: str,
+    query_pdb_code: Optional[str],
+    hit: parsers.TemplateHit,
+    mmcif_dir: str,
+    max_template_date: datetime.datetime,
+    release_dates: Mapping[str, datetime.datetime],
+    obsolete_pdbs: Mapping[str, Optional[str]],
+    kalign_binary_path: str,
+    strict_error_check: bool = False) -> SingleHitResult:
+  """Tries to extract template features from a single HHSearch hit."""
+  # Fail hard if we can't get the PDB ID and chain name from the hit.
+  hit_pdb_code, hit_chain_id = _get_pdb_id_and_chain(hit)
+
+  # This hit has been removed (obsoleted) from PDB, skip it.
+  if hit_pdb_code in obsolete_pdbs and obsolete_pdbs[hit_pdb_code] is None:
+    return SingleHitResult(
+        features=None, error=None, warning=f'Hit {hit_pdb_code} is obsolete.')
+
+  if hit_pdb_code not in release_dates:
+    if hit_pdb_code in obsolete_pdbs:
+      hit_pdb_code = obsolete_pdbs[hit_pdb_code]
+
+  # Pass hit_pdb_code since it might have changed due to the pdb being obsolete.
+  try:
+    _assess_hhsearch_hit(
+        hit=hit,
+        hit_pdb_code=hit_pdb_code,
+        query_sequence=query_sequence,
+        query_pdb_code=query_pdb_code,
+        release_dates=release_dates,
+        release_date_cutoff=max_template_date)
+  except PrefilterError as e:
+    msg = f'hit {hit_pdb_code}_{hit_chain_id} did not pass prefilter: {str(e)}'
+    logging.info('%s: %s', query_pdb_code, msg)
+    if strict_error_check and isinstance(
+        e, (DateError, PdbIdError, DuplicateError)):
+      # In strict mode we treat some prefilter cases as errors.
+      return SingleHitResult(features=None, error=msg, warning=None)
+
+    return SingleHitResult(features=None, error=None, warning=None)
+
+  mapping = _build_query_to_hit_index_mapping(
+      hit.query, hit.hit_sequence, hit.indices_hit, hit.indices_query,
+      query_sequence)
+
+  # The mapping is from the query to the actual hit sequence, so we need to
+  # remove gaps (which regardless have a missing confidence score).
+  template_sequence = hit.hit_sequence.replace('-', '')
+
+  cif_path = os.path.join(mmcif_dir, hit_pdb_code + '.cif')
+  logging.info('Reading PDB entry from %s. Query: %s, template: %s',
+               cif_path, query_sequence, template_sequence)
+  # Fail if we can't find the mmCIF file.
+  with open(cif_path, 'r') as cif_file:
+    cif_string = cif_file.read()
+
+  parsing_result = mmcif_parsing.parse(
+      file_id=hit_pdb_code, mmcif_string=cif_string)
+
+  if parsing_result.mmcif_object is not None:
+    hit_release_date = datetime.datetime.strptime(
+        parsing_result.mmcif_object.header['release_date'], '%Y-%m-%d')
+    if hit_release_date > max_template_date:
+      error = ('Template %s date (%s) > max template date (%s).' %
+               (hit_pdb_code, hit_release_date, max_template_date))
+      if strict_error_check:
+        return SingleHitResult(features=None, error=error, warning=None)
+      else:
+        logging.warning(error)
+        return SingleHitResult(features=None, error=None, warning=None)
+
+  try:
+    features, realign_warning = _extract_template_features(
+        mmcif_object=parsing_result.mmcif_object,
+        pdb_id=hit_pdb_code,
+        mapping=mapping,
+        template_sequence=template_sequence,
+        query_sequence=query_sequence,
+        template_chain_id=hit_chain_id,
+        kalign_binary_path=kalign_binary_path)
+    features['template_sum_probs'] = [hit.sum_probs]
+
+    # It is possible there were some errors when parsing the other chains in the
+    # mmCIF file, but the template features for the chain we want were still
+    # computed. In such case the mmCIF parsing errors are not relevant.
+    return SingleHitResult(
+        features=features, error=None, warning=realign_warning)
+  except (NoChainsError, NoAtomDataInTemplateError,
+          TemplateAtomMaskAllZerosError) as e:
+    # These 3 errors indicate missing mmCIF experimental data rather than a
+    # problem with the template search, so turn them into warnings.
+    warning = ('%s_%s (sum_probs: %.2f, rank: %d): feature extracting errors: '
+               '%s, mmCIF parsing errors: %s'
+               % (hit_pdb_code, hit_chain_id, hit.sum_probs, hit.index,
+                  str(e), parsing_result.errors))
+    if strict_error_check:
+      return SingleHitResult(features=None, error=warning, warning=None)
+    else:
+      return SingleHitResult(features=None, error=None, warning=warning)
+  except Error as e:
+    error = ('%s_%s (sum_probs: %.2f, rank: %d): feature extracting errors: '
+             '%s, mmCIF parsing errors: %s'
+             % (hit_pdb_code, hit_chain_id, hit.sum_probs, hit.index,
+                str(e), parsing_result.errors))
+    return SingleHitResult(features=None, error=error, warning=None)
+
+
+@dataclasses.dataclass(frozen=True)
+class TemplateSearchResult:
+  features: Mapping[str, Any]
+  errors: Sequence[str]
+  warnings: Sequence[str]
+
+
+class TemplateHitFeaturizer:
+  """A class for turning hhr hits to template features."""
+
+  def __init__(
+      self,
+      mmcif_dir: str,
+      max_template_date: str,
+      max_hits: int,
+      kalign_binary_path: str,
+      release_dates_path: Optional[str],
+      obsolete_pdbs_path: Optional[str],
+      strict_error_check: bool = False):
+    """Initializes the Template Search.
+
+    Args:
+      mmcif_dir: Path to a directory with mmCIF structures. Once a template ID
+        is found by HHSearch, this directory is used to retrieve the template
+        data.
+      max_template_date: The maximum date permitted for template structures. No
+        template with date higher than this date will be returned. In ISO8601
+        date format, YYYY-MM-DD.
+      max_hits: The maximum number of templates that will be returned.
+      kalign_binary_path: The path to a kalign executable used for template
+        realignment.
+      release_dates_path: An optional path to a file with a mapping from PDB IDs
+        to their release dates. Thanks to this we don't have to redundantly
+        parse mmCIF files to get that information.
+      obsolete_pdbs_path: An optional path to a file containing a mapping from
+        obsolete PDB IDs to the PDB IDs of their replacements.
+      strict_error_check: If True, then the following will be treated as errors:
+        * If any template date is after the max_template_date.
+        * If any template has identical PDB ID to the query.
+        * If any template is a duplicate of the query.
+        * Any feature computation errors.
+    """
+    self._mmcif_dir = mmcif_dir
+    if not glob.glob(os.path.join(self._mmcif_dir, '*.cif')):
+      logging.error('Could not find CIFs in %s', self._mmcif_dir)
+      raise ValueError(f'Could not find CIFs in {self._mmcif_dir}')
+
+    try:
+      self._max_template_date = datetime.datetime.strptime(
+          max_template_date, '%Y-%m-%d')
+    except ValueError:
+      raise ValueError(
+          'max_template_date must be set and have format YYYY-MM-DD.')
+    self._max_hits = max_hits
+    self._kalign_binary_path = kalign_binary_path
+    self._strict_error_check = strict_error_check
+
+    if release_dates_path:
+      logging.info('Using precomputed release dates %s.', release_dates_path)
+      self._release_dates = _parse_release_dates(release_dates_path)
+    else:
+      self._release_dates = {}
+
+    if obsolete_pdbs_path:
+      logging.info('Using precomputed obsolete pdbs %s.', obsolete_pdbs_path)
+      self._obsolete_pdbs = _parse_obsolete(obsolete_pdbs_path)
+    else:
+      self._obsolete_pdbs = {}
+
+  def get_templates(
+      self,
+      query_sequence: str,
+      query_pdb_code: Optional[str],
+      query_release_date: Optional[datetime.datetime],
+      hits: Sequence[parsers.TemplateHit]) -> TemplateSearchResult:
+    """Computes the templates for given query sequence (more details above)."""
+    logging.info('Searching for template for: %s', query_pdb_code)
+
+    template_features = {}
+    for template_feature_name in TEMPLATE_FEATURES:
+      template_features[template_feature_name] = []
+
+    # Always use a max_template_date. Set to query_release_date minus 60 days
+    # if that's earlier.
+    template_cutoff_date = self._max_template_date
+    if query_release_date:
+      delta = datetime.timedelta(days=60)
+      if query_release_date - delta < template_cutoff_date:
+        template_cutoff_date = query_release_date - delta
+      assert template_cutoff_date < query_release_date
+    assert template_cutoff_date <= self._max_template_date
+
+    num_hits = 0
+    errors = []
+    warnings = []
+
+    for hit in sorted(hits, key=lambda x: x.sum_probs, reverse=True):
+      # We got all the templates we wanted, stop processing hits.
+      if num_hits >= self._max_hits:
+        break
+
+      result = _process_single_hit(
+          query_sequence=query_sequence,
+          query_pdb_code=query_pdb_code,
+          hit=hit,
+          mmcif_dir=self._mmcif_dir,
+          max_template_date=template_cutoff_date,
+          release_dates=self._release_dates,
+          obsolete_pdbs=self._obsolete_pdbs,
+          strict_error_check=self._strict_error_check,
+          kalign_binary_path=self._kalign_binary_path)
+
+      if result.error:
+        errors.append(result.error)
+
+      # There could be an error even if there are some results, e.g. thrown by
+      # other unparsable chains in the same mmCIF file.
+      if result.warning:
+        warnings.append(result.warning)
+
+      if result.features is None:
+        logging.info('Skipped invalid hit %s, error: %s, warning: %s',
+                     hit.name, result.error, result.warning)
+      else:
+        # Increment the hit counter, since we got features out of this hit.
+        num_hits += 1
+        for k in template_features:
+          template_features[k].append(result.features[k])
+
+    for name in template_features:
+      if num_hits > 0:
+        template_features[name] = np.stack(
+            template_features[name], axis=0).astype(TEMPLATE_FEATURES[name])
+      else:
+        # Make sure the feature has correct dtype even if empty.
+        template_features[name] = np.array([], dtype=TEMPLATE_FEATURES[name])
+
+    return TemplateSearchResult(
+        features=template_features, errors=errors, warnings=warnings)
diff --git a/alphafold/alphafold/data/tools/__init__.py b/alphafold/alphafold/data/tools/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..903d09793c39d08491dd9a6fecefd463b058a251
--- /dev/null
+++ b/alphafold/alphafold/data/tools/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Python wrappers for third party tools."""
diff --git a/alphafold/alphafold/data/tools/__pycache__/__init__.cpython-36.pyc b/alphafold/alphafold/data/tools/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..67f0d96c121d4a015db61b2f0009d39a350938ea
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/__init__.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/__init__.cpython-38.pyc b/alphafold/alphafold/data/tools/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a1781c5273c0289fda5b58c853b3feb751d4a0ed
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/__init__.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/hhblits.cpython-36.pyc b/alphafold/alphafold/data/tools/__pycache__/hhblits.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..15f7784e6c281ae56f2490fed51dfed307622478
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/hhblits.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/hhblits.cpython-38.pyc b/alphafold/alphafold/data/tools/__pycache__/hhblits.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9e2ce8ddcd071050a1f294f9e786013c2cdac72f
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/hhblits.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/hhsearch.cpython-36.pyc b/alphafold/alphafold/data/tools/__pycache__/hhsearch.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ebdcfe8a2fe17f8786522f8e560a6f4c1ff34414
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/hhsearch.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/hhsearch.cpython-38.pyc b/alphafold/alphafold/data/tools/__pycache__/hhsearch.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a177c317b0ed1f031e4d6bd9b33359e258449fa4
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/hhsearch.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/jackhmmer.cpython-36.pyc b/alphafold/alphafold/data/tools/__pycache__/jackhmmer.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a0946276f27e99ae5d14d64a79d4530b0b837988
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/jackhmmer.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/jackhmmer.cpython-38.pyc b/alphafold/alphafold/data/tools/__pycache__/jackhmmer.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..93dc5e8f0fde142ddb14be7bfc5370dfb332342a
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/jackhmmer.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/kalign.cpython-36.pyc b/alphafold/alphafold/data/tools/__pycache__/kalign.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5d83bef5e93a9de8d6ed9c8239c13cb808f65dbb
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/kalign.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/kalign.cpython-38.pyc b/alphafold/alphafold/data/tools/__pycache__/kalign.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..238376d03229ab487cc06021300b008598dc99b9
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/kalign.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/utils.cpython-36.pyc b/alphafold/alphafold/data/tools/__pycache__/utils.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4294afe43c8ba45d0b001262a16d557886db167d
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/utils.cpython-36.pyc differ
diff --git a/alphafold/alphafold/data/tools/__pycache__/utils.cpython-38.pyc b/alphafold/alphafold/data/tools/__pycache__/utils.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..338df1b0c4ad6bae1ad939942e42fb349d707412
Binary files /dev/null and b/alphafold/alphafold/data/tools/__pycache__/utils.cpython-38.pyc differ
diff --git a/alphafold/alphafold/data/tools/hhblits.py b/alphafold/alphafold/data/tools/hhblits.py
new file mode 100644
index 0000000000000000000000000000000000000000..e0aa098a6f6a2e702340aafbde7a5a045b674543
--- /dev/null
+++ b/alphafold/alphafold/data/tools/hhblits.py
@@ -0,0 +1,155 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Library to run HHblits from Python."""
+
+import glob
+import os
+import subprocess
+from typing import Any, Mapping, Optional, Sequence
+
+from absl import logging
+from alphafold.data.tools import utils
+# Internal import (7716).
+
+
+_HHBLITS_DEFAULT_P = 20
+_HHBLITS_DEFAULT_Z = 500
+
+
+class HHBlits:
+  """Python wrapper of the HHblits binary."""
+
+  def __init__(self,
+               *,
+               binary_path: str,
+               databases: Sequence[str],
+               n_cpu: int = 4,
+               n_iter: int = 3,
+               e_value: float = 0.001,
+               maxseq: int = 1_000_000,
+               realign_max: int = 100_000,
+               maxfilt: int = 100_000,
+               min_prefilter_hits: int = 1000,
+               all_seqs: bool = False,
+               alt: Optional[int] = None,
+               p: int = _HHBLITS_DEFAULT_P,
+               z: int = _HHBLITS_DEFAULT_Z):
+    """Initializes the Python HHblits wrapper.
+
+    Args:
+      binary_path: The path to the HHblits executable.
+      databases: A sequence of HHblits database paths. This should be the
+        common prefix for the database files (i.e. up to but not including
+        _hhm.ffindex etc.)
+      n_cpu: The number of CPUs to give HHblits.
+      n_iter: The number of HHblits iterations.
+      e_value: The E-value, see HHblits docs for more details.
+      maxseq: The maximum number of rows in an input alignment. Note that this
+        parameter is only supported in HHBlits version 3.1 and higher.
+      realign_max: Max number of HMM-HMM hits to realign. HHblits default: 500.
+      maxfilt: Max number of hits allowed to pass the 2nd prefilter.
+        HHblits default: 20000.
+      min_prefilter_hits: Min number of hits to pass prefilter.
+        HHblits default: 100.
+      all_seqs: Return all sequences in the MSA / Do not filter the result MSA.
+        HHblits default: False.
+      alt: Show up to this many alternative alignments.
+      p: Minimum Prob for a hit to be included in the output hhr file.
+        HHblits default: 20.
+      z: Hard cap on number of hits reported in the hhr file.
+        HHblits default: 500. NB: The relevant HHblits flag is -Z not -z.
+
+    Raises:
+      RuntimeError: If HHblits binary not found within the path.
+    """
+    self.binary_path = binary_path
+    self.databases = databases
+
+    for database_path in self.databases:
+      if not glob.glob(database_path + '_*'):
+        logging.error('Could not find HHBlits database %s', database_path)
+        raise ValueError(f'Could not find HHBlits database {database_path}')
+
+    self.n_cpu = n_cpu
+    self.n_iter = n_iter
+    self.e_value = e_value
+    self.maxseq = maxseq
+    self.realign_max = realign_max
+    self.maxfilt = maxfilt
+    self.min_prefilter_hits = min_prefilter_hits
+    self.all_seqs = all_seqs
+    self.alt = alt
+    self.p = p
+    self.z = z
+
+  def query(self, input_fasta_path: str) -> Mapping[str, Any]:
+    """Queries the database using HHblits."""
+    with utils.tmpdir_manager(base_dir='/tmp') as query_tmp_dir:
+      a3m_path = os.path.join(query_tmp_dir, 'output.a3m')
+
+      db_cmd = []
+      for db_path in self.databases:
+        db_cmd.append('-d')
+        db_cmd.append(db_path)
+      cmd = [
+          self.binary_path,
+          '-i', input_fasta_path,
+          '-cpu', str(self.n_cpu),
+          '-oa3m', a3m_path,
+          '-o', '/dev/null',
+          '-n', str(self.n_iter),
+          '-e', str(self.e_value),
+          '-maxseq', str(self.maxseq),
+          '-realign_max', str(self.realign_max),
+          '-maxfilt', str(self.maxfilt),
+          '-min_prefilter_hits', str(self.min_prefilter_hits)]
+      if self.all_seqs:
+        cmd += ['-all']
+      if self.alt:
+        cmd += ['-alt', str(self.alt)]
+      if self.p != _HHBLITS_DEFAULT_P:
+        cmd += ['-p', str(self.p)]
+      if self.z != _HHBLITS_DEFAULT_Z:
+        cmd += ['-Z', str(self.z)]
+      cmd += db_cmd
+
+      logging.info('Launching subprocess "%s"', ' '.join(cmd))
+      process = subprocess.Popen(
+          cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+      with utils.timing('HHblits query'):
+        stdout, stderr = process.communicate()
+        retcode = process.wait()
+
+      if retcode:
+        # Logs have a 15k character limit, so log HHblits error line by line.
+        logging.error('HHblits failed. HHblits stderr begin:')
+        for error_line in stderr.decode('utf-8').splitlines():
+          if error_line.strip():
+            logging.error(error_line.strip())
+        logging.error('HHblits stderr end')
+        raise RuntimeError('HHblits failed\nstdout:\n%s\n\nstderr:\n%s\n' % (
+            stdout.decode('utf-8'), stderr[:500_000].decode('utf-8')))
+
+      with open(a3m_path) as f:
+        a3m = f.read()
+
+    raw_output = dict(
+        a3m=a3m,
+        output=stdout,
+        stderr=stderr,
+        n_iter=self.n_iter,
+        e_value=self.e_value)
+    return raw_output
diff --git a/alphafold/alphafold/data/tools/hhsearch.py b/alphafold/alphafold/data/tools/hhsearch.py
new file mode 100644
index 0000000000000000000000000000000000000000..fac137e0172f53e7c7ef943c5fa73dcb69f72246
--- /dev/null
+++ b/alphafold/alphafold/data/tools/hhsearch.py
@@ -0,0 +1,91 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Library to run HHsearch from Python."""
+
+import glob
+import os
+import subprocess
+from typing import Sequence
+
+from absl import logging
+
+from alphafold.data.tools import utils
+# Internal import (7716).
+
+
+class HHSearch:
+  """Python wrapper of the HHsearch binary."""
+
+  def __init__(self,
+               *,
+               binary_path: str,
+               databases: Sequence[str],
+               maxseq: int = 1_000_000):
+    """Initializes the Python HHsearch wrapper.
+
+    Args:
+      binary_path: The path to the HHsearch executable.
+      databases: A sequence of HHsearch database paths. This should be the
+        common prefix for the database files (i.e. up to but not including
+        _hhm.ffindex etc.)
+      maxseq: The maximum number of rows in an input alignment. Note that this
+        parameter is only supported in HHBlits version 3.1 and higher.
+
+    Raises:
+      RuntimeError: If HHsearch binary not found within the path.
+    """
+    self.binary_path = binary_path
+    self.databases = databases
+    self.maxseq = maxseq
+
+    for database_path in self.databases:
+      if not glob.glob(database_path + '_*'):
+        logging.error('Could not find HHsearch database %s', database_path)
+        raise ValueError(f'Could not find HHsearch database {database_path}')
+
+  def query(self, a3m: str) -> str:
+    """Queries the database using HHsearch using a given a3m."""
+    with utils.tmpdir_manager(base_dir='/tmp') as query_tmp_dir:
+      input_path = os.path.join(query_tmp_dir, 'query.a3m')
+      hhr_path = os.path.join(query_tmp_dir, 'output.hhr')
+      with open(input_path, 'w') as f:
+        f.write(a3m)
+
+      db_cmd = []
+      for db_path in self.databases:
+        db_cmd.append('-d')
+        db_cmd.append(db_path)
+      cmd = [self.binary_path,
+             '-i', input_path,
+             '-o', hhr_path,
+             '-maxseq', str(self.maxseq)
+             ] + db_cmd
+
+      logging.info('Launching subprocess "%s"', ' '.join(cmd))
+      process = subprocess.Popen(
+          cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+      with utils.timing('HHsearch query'):
+        stdout, stderr = process.communicate()
+        retcode = process.wait()
+
+      if retcode:
+        # Stderr is truncated to prevent proto size errors in Beam.
+        raise RuntimeError(
+            'HHSearch failed:\nstdout:\n%s\n\nstderr:\n%s\n' % (
+                stdout.decode('utf-8'), stderr[:100_000].decode('utf-8')))
+
+      with open(hhr_path) as f:
+        hhr = f.read()
+    return hhr
diff --git a/alphafold/alphafold/data/tools/hmmbuild.py b/alphafold/alphafold/data/tools/hmmbuild.py
new file mode 100644
index 0000000000000000000000000000000000000000..f3c573047450f5f17e791ad9a54f1b436e71b095
--- /dev/null
+++ b/alphafold/alphafold/data/tools/hmmbuild.py
@@ -0,0 +1,138 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""A Python wrapper for hmmbuild - construct HMM profiles from MSA."""
+
+import os
+import re
+import subprocess
+
+from absl import logging
+from alphafold.data.tools import utils
+# Internal import (7716).
+
+
+class Hmmbuild(object):
+  """Python wrapper of the hmmbuild binary."""
+
+  def __init__(self,
+               *,
+               binary_path: str,
+               singlemx: bool = False):
+    """Initializes the Python hmmbuild wrapper.
+
+    Args:
+      binary_path: The path to the hmmbuild executable.
+      singlemx: Whether to use --singlemx flag. If True, it forces HMMBuild to
+        just use a common substitution score matrix.
+
+    Raises:
+      RuntimeError: If hmmbuild binary not found within the path.
+    """
+    self.binary_path = binary_path
+    self.singlemx = singlemx
+
+  def build_profile_from_sto(self, sto: str, model_construction='fast') -> str:
+    """Builds a HHM for the aligned sequences given as an A3M string.
+
+    Args:
+      sto: A string with the aligned sequences in the Stockholm format.
+      model_construction: Whether to use reference annotation in the msa to
+        determine consensus columns ('hand') or default ('fast').
+
+    Returns:
+      A string with the profile in the HMM format.
+
+    Raises:
+      RuntimeError: If hmmbuild fails.
+    """
+    return self._build_profile(sto, model_construction=model_construction)
+
+  def build_profile_from_a3m(self, a3m: str) -> str:
+    """Builds a HHM for the aligned sequences given as an A3M string.
+
+    Args:
+      a3m: A string with the aligned sequences in the A3M format.
+
+    Returns:
+      A string with the profile in the HMM format.
+
+    Raises:
+      RuntimeError: If hmmbuild fails.
+    """
+    lines = []
+    for line in a3m.splitlines():
+      if not line.startswith('>'):
+        line = re.sub('[a-z]+', '', line)  # Remove inserted residues.
+      lines.append(line + '\n')
+    msa = ''.join(lines)
+    return self._build_profile(msa, model_construction='fast')
+
+  def _build_profile(self, msa: str, model_construction: str = 'fast') -> str:
+    """Builds a HMM for the aligned sequences given as an MSA string.
+
+    Args:
+      msa: A string with the aligned sequences, in A3M or STO format.
+      model_construction: Whether to use reference annotation in the msa to
+        determine consensus columns ('hand') or default ('fast').
+
+    Returns:
+      A string with the profile in the HMM format.
+
+    Raises:
+      RuntimeError: If hmmbuild fails.
+      ValueError: If unspecified arguments are provided.
+    """
+    if model_construction not in {'hand', 'fast'}:
+      raise ValueError(f'Invalid model_construction {model_construction} - only'
+                       'hand and fast supported.')
+
+    with utils.tmpdir_manager(base_dir='/tmp') as query_tmp_dir:
+      input_query = os.path.join(query_tmp_dir, 'query.msa')
+      output_hmm_path = os.path.join(query_tmp_dir, 'output.hmm')
+
+      with open(input_query, 'w') as f:
+        f.write(msa)
+
+      cmd = [self.binary_path]
+      # If adding flags, we have to do so before the output and input:
+
+      if model_construction == 'hand':
+        cmd.append(f'--{model_construction}')
+      if self.singlemx:
+        cmd.append('--singlemx')
+      cmd.extend([
+          '--amino',
+          output_hmm_path,
+          input_query,
+      ])
+
+      logging.info('Launching subprocess %s', cmd)
+      process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                                 stderr=subprocess.PIPE)
+
+      with utils.timing('hmmbuild query'):
+        stdout, stderr = process.communicate()
+        retcode = process.wait()
+        logging.info('hmmbuild stdout:\n%s\n\nstderr:\n%s\n',
+                     stdout.decode('utf-8'), stderr.decode('utf-8'))
+
+      if retcode:
+        raise RuntimeError('hmmbuild failed\nstdout:\n%s\n\nstderr:\n%s\n'
+                           % (stdout.decode('utf-8'), stderr.decode('utf-8')))
+
+      with open(output_hmm_path, encoding='utf-8') as f:
+        hmm = f.read()
+
+    return hmm
diff --git a/alphafold/alphafold/data/tools/hmmsearch.py b/alphafold/alphafold/data/tools/hmmsearch.py
new file mode 100644
index 0000000000000000000000000000000000000000..a60d3e760e217f175b7daeffb803837e23391b0a
--- /dev/null
+++ b/alphafold/alphafold/data/tools/hmmsearch.py
@@ -0,0 +1,90 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""A Python wrapper for hmmsearch - search profile against a sequence db."""
+
+import os
+import subprocess
+from typing import Optional, Sequence
+
+from absl import logging
+from alphafold.data.tools import utils
+# Internal import (7716).
+
+
+class Hmmsearch(object):
+  """Python wrapper of the hmmsearch binary."""
+
+  def __init__(self,
+               *,
+               binary_path: str,
+               database_path: str,
+               flags: Optional[Sequence[str]] = None):
+    """Initializes the Python hmmsearch wrapper.
+
+    Args:
+      binary_path: The path to the hmmsearch executable.
+      database_path: The path to the hmmsearch database (FASTA format).
+      flags: List of flags to be used by hmmsearch.
+
+    Raises:
+      RuntimeError: If hmmsearch binary not found within the path.
+    """
+    self.binary_path = binary_path
+    self.database_path = database_path
+    self.flags = flags
+
+    if not os.path.exists(self.database_path):
+      logging.error('Could not find hmmsearch database %s', database_path)
+      raise ValueError(f'Could not find hmmsearch database {database_path}')
+
+  def query(self, hmm: str) -> str:
+    """Queries the database using hmmsearch using a given hmm."""
+    with utils.tmpdir_manager(base_dir='/tmp') as query_tmp_dir:
+      hmm_input_path = os.path.join(query_tmp_dir, 'query.hmm')
+      a3m_out_path = os.path.join(query_tmp_dir, 'output.a3m')
+      with open(hmm_input_path, 'w') as f:
+        f.write(hmm)
+
+      cmd = [
+          self.binary_path,
+          '--noali',  # Don't include the alignment in stdout.
+          '--cpu', '8'
+      ]
+      # If adding flags, we have to do so before the output and input:
+      if self.flags:
+        cmd.extend(self.flags)
+      cmd.extend([
+          '-A', a3m_out_path,
+          hmm_input_path,
+          self.database_path,
+      ])
+
+      logging.info('Launching sub-process %s', cmd)
+      process = subprocess.Popen(
+          cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+      with utils.timing(
+          f'hmmsearch ({os.path.basename(self.database_path)}) query'):
+        stdout, stderr = process.communicate()
+        retcode = process.wait()
+
+      if retcode:
+        raise RuntimeError(
+            'hmmsearch failed:\nstdout:\n%s\n\nstderr:\n%s\n' % (
+                stdout.decode('utf-8'), stderr.decode('utf-8')))
+
+      with open(a3m_out_path) as f:
+        a3m_out = f.read()
+
+    return a3m_out
diff --git a/alphafold/alphafold/data/tools/jackhmmer.py b/alphafold/alphafold/data/tools/jackhmmer.py
new file mode 100644
index 0000000000000000000000000000000000000000..194d266c1251de25d2f85ba3a2b338ca0adf95e0
--- /dev/null
+++ b/alphafold/alphafold/data/tools/jackhmmer.py
@@ -0,0 +1,198 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Library to run Jackhmmer from Python."""
+
+from concurrent import futures
+import glob
+import os
+import subprocess
+from typing import Any, Callable, Mapping, Optional, Sequence
+from urllib import request
+
+from absl import logging
+
+from alphafold.data.tools import utils
+# Internal import (7716).
+
+
+class Jackhmmer:
+  """Python wrapper of the Jackhmmer binary."""
+
+  def __init__(self,
+               *,
+               binary_path: str,
+               database_path: str,
+               n_cpu: int = 8,
+               n_iter: int = 1,
+               e_value: float = 0.0001,
+               z_value: Optional[int] = None,
+               get_tblout: bool = False,
+               filter_f1: float = 0.0005,
+               filter_f2: float = 0.00005,
+               filter_f3: float = 0.0000005,
+               incdom_e: Optional[float] = None,
+               dom_e: Optional[float] = None,
+               num_streamed_chunks: Optional[int] = None,
+               streaming_callback: Optional[Callable[[int], None]] = None):
+    """Initializes the Python Jackhmmer wrapper.
+
+    Args:
+      binary_path: The path to the jackhmmer executable.
+      database_path: The path to the jackhmmer database (FASTA format).
+      n_cpu: The number of CPUs to give Jackhmmer.
+      n_iter: The number of Jackhmmer iterations.
+      e_value: The E-value, see Jackhmmer docs for more details.
+      z_value: The Z-value, see Jackhmmer docs for more details.
+      get_tblout: Whether to save tblout string.
+      filter_f1: MSV and biased composition pre-filter, set to >1.0 to turn off.
+      filter_f2: Viterbi pre-filter, set to >1.0 to turn off.
+      filter_f3: Forward pre-filter, set to >1.0 to turn off.
+      incdom_e: Domain e-value criteria for inclusion of domains in MSA/next
+        round.
+      dom_e: Domain e-value criteria for inclusion in tblout.
+      num_streamed_chunks: Number of database chunks to stream over.
+      streaming_callback: Callback function run after each chunk iteration with
+        the iteration number as argument.
+    """
+    self.binary_path = binary_path
+    self.database_path = database_path
+    self.num_streamed_chunks = num_streamed_chunks
+
+    if not os.path.exists(self.database_path) and num_streamed_chunks is None:
+      logging.error('Could not find Jackhmmer database %s', database_path)
+      raise ValueError(f'Could not find Jackhmmer database {database_path}')
+
+    self.n_cpu = n_cpu
+    self.n_iter = n_iter
+    self.e_value = e_value
+    self.z_value = z_value
+    self.filter_f1 = filter_f1
+    self.filter_f2 = filter_f2
+    self.filter_f3 = filter_f3
+    self.incdom_e = incdom_e
+    self.dom_e = dom_e
+    self.get_tblout = get_tblout
+    self.streaming_callback = streaming_callback
+
+  def _query_chunk(self, input_fasta_path: str, database_path: str
+                   ) -> Mapping[str, Any]:
+    """Queries the database chunk using Jackhmmer."""
+    with utils.tmpdir_manager(base_dir='/tmp') as query_tmp_dir:
+      sto_path = os.path.join(query_tmp_dir, 'output.sto')
+
+      # The F1/F2/F3 are the expected proportion to pass each of the filtering
+      # stages (which get progressively more expensive), reducing these
+      # speeds up the pipeline at the expensive of sensitivity.  They are
+      # currently set very low to make querying Mgnify run in a reasonable
+      # amount of time.
+      cmd_flags = [
+          # Don't pollute stdout with Jackhmmer output.
+          '-o', '/dev/null',
+          '-A', sto_path,
+          '--noali',
+          '--F1', str(self.filter_f1),
+          '--F2', str(self.filter_f2),
+          '--F3', str(self.filter_f3),
+          '--incE', str(self.e_value),
+          # Report only sequences with E-values <= x in per-sequence output.
+          '-E', str(self.e_value),
+          '--cpu', str(self.n_cpu),
+          '-N', str(self.n_iter)
+      ]
+      if self.get_tblout:
+        tblout_path = os.path.join(query_tmp_dir, 'tblout.txt')
+        cmd_flags.extend(['--tblout', tblout_path])
+
+      if self.z_value:
+        cmd_flags.extend(['-Z', str(self.z_value)])
+
+      if self.dom_e is not None:
+        cmd_flags.extend(['--domE', str(self.dom_e)])
+
+      if self.incdom_e is not None:
+        cmd_flags.extend(['--incdomE', str(self.incdom_e)])
+
+      cmd = [self.binary_path] + cmd_flags + [input_fasta_path,
+                                              database_path]
+
+      logging.info('Launching subprocess "%s"', ' '.join(cmd))
+      process = subprocess.Popen(
+          cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+      with utils.timing(
+          f'Jackhmmer ({os.path.basename(database_path)}) query'):
+        _, stderr = process.communicate()
+        retcode = process.wait()
+
+      if retcode:
+        raise RuntimeError(
+            'Jackhmmer failed\nstderr:\n%s\n' % stderr.decode('utf-8'))
+
+      # Get e-values for each target name
+      tbl = ''
+      if self.get_tblout:
+        with open(tblout_path) as f:
+          tbl = f.read()
+
+      with open(sto_path) as f:
+        sto = f.read()
+
+    raw_output = dict(
+        sto=sto,
+        tbl=tbl,
+        stderr=stderr,
+        n_iter=self.n_iter,
+        e_value=self.e_value)
+
+    return raw_output
+
+  def query(self, input_fasta_path: str) -> Sequence[Mapping[str, Any]]:
+    """Queries the database using Jackhmmer."""
+    if self.num_streamed_chunks is None:
+      return [self._query_chunk(input_fasta_path, self.database_path)]
+
+    db_basename = os.path.basename(self.database_path)
+    db_remote_chunk = lambda db_idx: f'{self.database_path}.{db_idx}'
+    db_local_chunk = lambda db_idx: f'/tmp/ramdisk/{db_basename}.{db_idx}'
+
+    # Remove existing files to prevent OOM
+    for f in glob.glob(db_local_chunk('[0-9]*')):
+      try:
+        os.remove(f)
+      except OSError:
+        print(f'OSError while deleting {f}')
+
+    # Download the (i+1)-th chunk while Jackhmmer is running on the i-th chunk
+    with futures.ThreadPoolExecutor(max_workers=2) as executor:
+      chunked_output = []
+      for i in range(1, self.num_streamed_chunks + 1):
+        # Copy the chunk locally
+        if i == 1:
+          future = executor.submit(
+              request.urlretrieve, db_remote_chunk(i), db_local_chunk(i))
+        if i < self.num_streamed_chunks:
+          next_future = executor.submit(
+              request.urlretrieve, db_remote_chunk(i+1), db_local_chunk(i+1))
+
+        # Run Jackhmmer with the chunk
+        future.result()
+        chunked_output.append(
+            self._query_chunk(input_fasta_path, db_local_chunk(i)))
+
+        # Remove the local copy of the chunk
+        os.remove(db_local_chunk(i))
+        future = next_future
+        if self.streaming_callback:
+          self.streaming_callback(i)
+    return chunked_output
diff --git a/alphafold/alphafold/data/tools/kalign.py b/alphafold/alphafold/data/tools/kalign.py
new file mode 100644
index 0000000000000000000000000000000000000000..fc4e58a43205c138b7f29c07f39a87ea741d2656
--- /dev/null
+++ b/alphafold/alphafold/data/tools/kalign.py
@@ -0,0 +1,104 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""A Python wrapper for Kalign."""
+import os
+import subprocess
+from typing import Sequence
+
+from absl import logging
+
+from alphafold.data.tools import utils
+# Internal import (7716).
+
+
+def _to_a3m(sequences: Sequence[str]) -> str:
+  """Converts sequences to an a3m file."""
+  names = ['sequence %d' % i for i in range(1, len(sequences) + 1)]
+  a3m = []
+  for sequence, name in zip(sequences, names):
+    a3m.append(u'>' + name + u'\n')
+    a3m.append(sequence + u'\n')
+  return ''.join(a3m)
+
+
+class Kalign:
+  """Python wrapper of the Kalign binary."""
+
+  def __init__(self, *, binary_path: str):
+    """Initializes the Python Kalign wrapper.
+
+    Args:
+      binary_path: The path to the Kalign binary.
+
+    Raises:
+      RuntimeError: If Kalign binary not found within the path.
+    """
+    self.binary_path = binary_path
+
+  def align(self, sequences: Sequence[str]) -> str:
+    """Aligns the sequences and returns the alignment in A3M string.
+
+    Args:
+      sequences: A list of query sequence strings. The sequences have to be at
+        least 6 residues long (Kalign requires this). Note that the order in
+        which you give the sequences might alter the output slightly as
+        different alignment tree might get constructed.
+
+    Returns:
+      A string with the alignment in a3m format.
+
+    Raises:
+      RuntimeError: If Kalign fails.
+      ValueError: If any of the sequences is less than 6 residues long.
+    """
+    logging.info('Aligning %d sequences', len(sequences))
+
+    for s in sequences:
+      if len(s) < 6:
+        raise ValueError('Kalign requires all sequences to be at least 6 '
+                         'residues long. Got %s (%d residues).' % (s, len(s)))
+
+    with utils.tmpdir_manager(base_dir='/tmp') as query_tmp_dir:
+      input_fasta_path = os.path.join(query_tmp_dir, 'input.fasta')
+      output_a3m_path = os.path.join(query_tmp_dir, 'output.a3m')
+
+      with open(input_fasta_path, 'w') as f:
+        f.write(_to_a3m(sequences))
+
+      cmd = [
+          self.binary_path,
+          '-i', input_fasta_path,
+          '-o', output_a3m_path,
+          '-format', 'fasta',
+      ]
+
+      logging.info('Launching subprocess "%s"', ' '.join(cmd))
+      process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                                 stderr=subprocess.PIPE)
+
+      with utils.timing('Kalign query'):
+        stdout, stderr = process.communicate()
+        retcode = process.wait()
+        logging.info('Kalign stdout:\n%s\n\nstderr:\n%s\n',
+                     stdout.decode('utf-8'), stderr.decode('utf-8'))
+
+      if retcode:
+        raise RuntimeError('Kalign failed\nstdout:\n%s\n\nstderr:\n%s\n'
+                           % (stdout.decode('utf-8'), stderr.decode('utf-8')))
+
+      with open(output_a3m_path) as f:
+        a3m = f.read()
+
+      return a3m
diff --git a/alphafold/alphafold/data/tools/utils.py b/alphafold/alphafold/data/tools/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..e65b8824d3f240e869ca073a8264f32cb224813c
--- /dev/null
+++ b/alphafold/alphafold/data/tools/utils.py
@@ -0,0 +1,40 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Common utilities for data pipeline tools."""
+import contextlib
+import shutil
+import tempfile
+import time
+from typing import Optional
+
+from absl import logging
+
+
+@contextlib.contextmanager
+def tmpdir_manager(base_dir: Optional[str] = None):
+  """Context manager that deletes a temporary directory on exit."""
+  tmpdir = tempfile.mkdtemp(dir=base_dir)
+  try:
+    yield tmpdir
+  finally:
+    shutil.rmtree(tmpdir, ignore_errors=True)
+
+
+@contextlib.contextmanager
+def timing(msg: str):
+  logging.info('Started %s', msg)
+  tic = time.time()
+  yield
+  toc = time.time()
+  logging.info('Finished %s in %.3f seconds', msg, toc - tic)
diff --git a/alphafold/alphafold/model/__init__.py b/alphafold/alphafold/model/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..fc2efc8d3e1439f8d264268adcde82231f784636
--- /dev/null
+++ b/alphafold/alphafold/model/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Alphafold model."""
diff --git a/alphafold/alphafold/model/__pycache__/__init__.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a1d54c9dcc6deadba159eb7a2fe7e6da6d196a0d
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/__init__.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/__init__.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2d999bae77cb34b2e5ed927f009cfc43ec970052
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/__init__.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/all_atom.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/all_atom.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a9a43b44b8e8e0ac18691e1027b69daeef0d15e1
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/all_atom.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/all_atom.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/all_atom.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f9e9a9fb90e0301874c36af87a40a648f09ba045
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/all_atom.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/common_modules.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/common_modules.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0dc9f5f77c0bcacd7ce34c642bb0aa62d04e7980
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/common_modules.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/common_modules.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/common_modules.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5ab703a37bc90cbee5e85c11052d52a733da7caf
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/common_modules.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/config.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/config.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2c88c3c800525eac18346e7812d43276d9abd867
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/config.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/config.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/config.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..085c005042c1e3cbc926043bb6ebbe6c9942227a
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/config.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/data.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/data.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e33ba9820d23c4ac54a05584fb7c2f2ad010e865
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/data.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/data.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/data.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..feb4d774c85f937b3a41ddcea3c25a2545c4abfe
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/data.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/features.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/features.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d6b17e778291b85ef80c0cfe5849fc823bba07e3
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/features.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/features.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/features.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..dd461ef08fac7e1b78c45e8056744eba45aebe95
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/features.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/folding.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/folding.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c24d1154c9f480967af9f5ab6d6e712469983cfc
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/folding.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/folding.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/folding.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..98e7e8d970c18372840c088c9c3190ad643fcdeb
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/folding.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/layer_stack.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/layer_stack.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c9b650d9e5210a083d835a6d1aaafb57aa1896b6
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/layer_stack.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/layer_stack.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/layer_stack.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b0aacfd2e49392aa476c13eab995777b7ce978ff
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/layer_stack.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/lddt.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/lddt.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d8f1f93f83996d8fb9b87b8ea3a21219f2ed40e1
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/lddt.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/lddt.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/lddt.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..829208e99f7f8d0f831cd2b594bc5c8627ee9dc7
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/lddt.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/mapping.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/mapping.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..59cd2178b52c4090de9d3f5c5b5068fb46ea4837
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/mapping.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/mapping.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/mapping.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a0f8f87fdcc36feff789e73bdb7f522096358be4
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/mapping.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/model.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/model.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d926bc684be148eefcf95cf0c59879dbf8fae227
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/model.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/model.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/model.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ad9f7e4c4bab2c3ab65a940c00cf3dde4aa1af1d
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/model.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/modules.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/modules.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0d29f84243eb453e02fa064966514589c94a6ef7
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/modules.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/modules.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/modules.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8fed453f7004f278f410c0df341ad8dd5eab549c
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/modules.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/prng.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/prng.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..59a38c6fcd88436233a5e07773df91d9356bbce3
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/prng.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/prng.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/prng.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..32ca6389e4ead4522f0d26b500ee81250b894c0b
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/prng.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/quat_affine.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/quat_affine.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..56afe6ce70b6e0e5e23b205913d0a67425f955f3
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/quat_affine.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/quat_affine.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/quat_affine.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b6c0ce8efd3dbc1aca335932ee8183517f39e5dc
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/quat_affine.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/r3.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/r3.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a19f63f08ba68823f45693cd687f03c86a1f3f3a
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/r3.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/r3.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/r3.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bae779261867f9606f1da39a6199687fa948c51d
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/r3.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/utils.cpython-36.pyc b/alphafold/alphafold/model/__pycache__/utils.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..04a84d393e0669ca5ede18c037c358b1e954f021
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/utils.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/__pycache__/utils.cpython-38.pyc b/alphafold/alphafold/model/__pycache__/utils.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..98673cfed72565f3289c21a7f1eea59b47cd49fc
Binary files /dev/null and b/alphafold/alphafold/model/__pycache__/utils.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/all_atom.py b/alphafold/alphafold/model/all_atom.py
new file mode 100644
index 0000000000000000000000000000000000000000..c8ebe8b08c068876d8903fb5b1cc861e71e9095c
--- /dev/null
+++ b/alphafold/alphafold/model/all_atom.py
@@ -0,0 +1,1141 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Ops for all atom representations.
+
+Generally we employ two different representations for all atom coordinates,
+one is atom37 where each heavy atom corresponds to a given position in a 37
+dimensional array, This mapping is non amino acid specific, but each slot
+corresponds to an atom of a given name, for example slot 12 always corresponds
+to 'C delta 1', positions that are not present for a given amino acid are
+zeroed out and denoted by a mask.
+The other representation we employ is called atom14, this is a more dense way
+of representing atoms with 14 slots. Here a given slot will correspond to a
+different kind of atom depending on amino acid type, for example slot 5
+corresponds to 'N delta 2' for Aspargine, but to 'C delta 1' for Isoleucine.
+14 is chosen because it is the maximum number of heavy atoms for any standard
+amino acid.
+The order of slots can be found in 'residue_constants.residue_atoms'.
+Internally the model uses the atom14 representation because it is
+computationally more efficient.
+The internal atom14 representation is turned into the atom37 at the output of
+the network to facilitate easier conversion to existing protein datastructures.
+"""
+
+from typing import Dict, Optional
+from alphafold.common import residue_constants
+
+from alphafold.model import r3
+from alphafold.model import utils
+import jax
+import jax.numpy as jnp
+import numpy as np
+
+
+def squared_difference(x, y):
+  return jnp.square(x - y)
+
+
+def get_chi_atom_indices():
+  """Returns atom indices needed to compute chi angles for all residue types.
+
+  Returns:
+    A tensor of shape [residue_types=21, chis=4, atoms=4]. The residue types are
+    in the order specified in residue_constants.restypes + unknown residue type
+    at the end. For chi angles which are not defined on the residue, the
+    positions indices are by default set to 0.
+  """
+  chi_atom_indices = []
+  for residue_name in residue_constants.restypes:
+    residue_name = residue_constants.restype_1to3[residue_name]
+    residue_chi_angles = residue_constants.chi_angles_atoms[residue_name]
+    atom_indices = []
+    for chi_angle in residue_chi_angles:
+      atom_indices.append(
+          [residue_constants.atom_order[atom] for atom in chi_angle])
+    for _ in range(4 - len(atom_indices)):
+      atom_indices.append([0, 0, 0, 0])  # For chi angles not defined on the AA.
+    chi_atom_indices.append(atom_indices)
+
+  chi_atom_indices.append([[0, 0, 0, 0]] * 4)  # For UNKNOWN residue.
+
+  return jnp.asarray(chi_atom_indices)
+
+
+def atom14_to_atom37(atom14_data: jnp.ndarray,  # (N, 14, ...)
+                     batch: Dict[str, jnp.ndarray]
+                    ) -> jnp.ndarray:  # (N, 37, ...)
+  """Convert atom14 to atom37 representation."""
+  assert len(atom14_data.shape) in [2, 3]
+  assert 'residx_atom37_to_atom14' in batch
+  assert 'atom37_atom_exists' in batch
+
+  atom37_data = utils.batched_gather(atom14_data,
+                                     batch['residx_atom37_to_atom14'],
+                                     batch_dims=1)
+  if len(atom14_data.shape) == 2:
+    atom37_data *= batch['atom37_atom_exists']
+  elif len(atom14_data.shape) == 3:
+    atom37_data *= batch['atom37_atom_exists'][:, :,
+                                               None].astype(atom37_data.dtype)
+  return atom37_data
+
+
+def atom37_to_atom14(
+    atom37_data: jnp.ndarray,  # (N, 37, ...)
+    batch: Dict[str, jnp.ndarray]) -> jnp.ndarray:  # (N, 14, ...)
+  """Convert atom14 to atom37 representation."""
+  assert len(atom37_data.shape) in [2, 3]
+  assert 'residx_atom14_to_atom37' in batch
+  assert 'atom14_atom_exists' in batch
+
+  atom14_data = utils.batched_gather(atom37_data,
+                                     batch['residx_atom14_to_atom37'],
+                                     batch_dims=1)
+  if len(atom37_data.shape) == 2:
+    atom14_data *= batch['atom14_atom_exists'].astype(atom14_data.dtype)
+  elif len(atom37_data.shape) == 3:
+    atom14_data *= batch['atom14_atom_exists'][:, :,
+                                               None].astype(atom14_data.dtype)
+  return atom14_data
+
+
+def atom37_to_frames(
+    aatype: jnp.ndarray,  # (...)
+    all_atom_positions: jnp.ndarray,  # (..., 37, 3)
+    all_atom_mask: jnp.ndarray,  # (..., 37)
+) -> Dict[str, jnp.ndarray]:
+  """Computes the frames for the up to 8 rigid groups for each residue.
+
+  The rigid groups are defined by the possible torsions in a given amino acid.
+  We group the atoms according to their dependence on the torsion angles into
+  "rigid groups".  E.g., the position of atoms in the chi2-group depend on
+  chi1 and chi2, but do not depend on chi3 or chi4.
+  Jumper et al. (2021) Suppl. Table 2 and corresponding text.
+
+  Args:
+    aatype: Amino acid type, given as array with integers.
+    all_atom_positions: atom37 representation of all atom coordinates.
+    all_atom_mask: atom37 representation of mask on all atom coordinates.
+  Returns:
+    Dictionary containing:
+      * 'rigidgroups_gt_frames': 8 Frames corresponding to 'all_atom_positions'
+           represented as flat 12 dimensional array.
+      * 'rigidgroups_gt_exists': Mask denoting whether the atom positions for
+          the given frame are available in the ground truth, e.g. if they were
+          resolved in the experiment.
+      * 'rigidgroups_group_exists': Mask denoting whether given group is in
+          principle present for given amino acid type.
+      * 'rigidgroups_group_is_ambiguous': Mask denoting whether frame is
+          affected by naming ambiguity.
+      * 'rigidgroups_alt_gt_frames': 8 Frames with alternative atom renaming
+          corresponding to 'all_atom_positions' represented as flat
+          12 dimensional array.
+  """
+  # 0: 'backbone group',
+  # 1: 'pre-omega-group', (empty)
+  # 2: 'phi-group', (currently empty, because it defines only hydrogens)
+  # 3: 'psi-group',
+  # 4,5,6,7: 'chi1,2,3,4-group'
+  aatype_in_shape = aatype.shape
+
+  # If there is a batch axis, just flatten it away, and reshape everything
+  # back at the end of the function.
+  aatype = jnp.reshape(aatype, [-1])
+  all_atom_positions = jnp.reshape(all_atom_positions, [-1, 37, 3])
+  all_atom_mask = jnp.reshape(all_atom_mask, [-1, 37])
+
+  # Create an array with the atom names.
+  # shape (num_restypes, num_rigidgroups, 3_atoms): (21, 8, 3)
+  restype_rigidgroup_base_atom_names = np.full([21, 8, 3], '', dtype=object)
+
+  # 0: backbone frame
+  restype_rigidgroup_base_atom_names[:, 0, :] = ['C', 'CA', 'N']
+
+  # 3: 'psi-group'
+  restype_rigidgroup_base_atom_names[:, 3, :] = ['CA', 'C', 'O']
+
+  # 4,5,6,7: 'chi1,2,3,4-group'
+  for restype, restype_letter in enumerate(residue_constants.restypes):
+    resname = residue_constants.restype_1to3[restype_letter]
+    for chi_idx in range(4):
+      if residue_constants.chi_angles_mask[restype][chi_idx]:
+        atom_names = residue_constants.chi_angles_atoms[resname][chi_idx]
+        restype_rigidgroup_base_atom_names[
+            restype, chi_idx + 4, :] = atom_names[1:]
+
+  # Create mask for existing rigid groups.
+  restype_rigidgroup_mask = np.zeros([21, 8], dtype=np.float32)
+  restype_rigidgroup_mask[:, 0] = 1
+  restype_rigidgroup_mask[:, 3] = 1
+  restype_rigidgroup_mask[:20, 4:] = residue_constants.chi_angles_mask
+
+  # Translate atom names into atom37 indices.
+  lookuptable = residue_constants.atom_order.copy()
+  lookuptable[''] = 0
+  restype_rigidgroup_base_atom37_idx = np.vectorize(lambda x: lookuptable[x])(
+      restype_rigidgroup_base_atom_names)
+
+  # Compute the gather indices for all residues in the chain.
+  # shape (N, 8, 3)
+  residx_rigidgroup_base_atom37_idx = utils.batched_gather(
+      restype_rigidgroup_base_atom37_idx, aatype)
+
+  # Gather the base atom positions for each rigid group.
+  base_atom_pos = utils.batched_gather(
+      all_atom_positions,
+      residx_rigidgroup_base_atom37_idx,
+      batch_dims=1)
+
+  # Compute the Rigids.
+  gt_frames = r3.rigids_from_3_points(
+      point_on_neg_x_axis=r3.vecs_from_tensor(base_atom_pos[:, :, 0, :]),
+      origin=r3.vecs_from_tensor(base_atom_pos[:, :, 1, :]),
+      point_on_xy_plane=r3.vecs_from_tensor(base_atom_pos[:, :, 2, :])
+  )
+
+  # Compute a mask whether the group exists.
+  # (N, 8)
+  group_exists = utils.batched_gather(restype_rigidgroup_mask, aatype)
+
+  # Compute a mask whether ground truth exists for the group
+  gt_atoms_exist = utils.batched_gather(  # shape (N, 8, 3)
+      all_atom_mask.astype(jnp.float32),
+      residx_rigidgroup_base_atom37_idx,
+      batch_dims=1)
+  gt_exists = jnp.min(gt_atoms_exist, axis=-1) * group_exists  # (N, 8)
+
+  # Adapt backbone frame to old convention (mirror x-axis and z-axis).
+  rots = np.tile(np.eye(3, dtype=np.float32), [8, 1, 1])
+  rots[0, 0, 0] = -1
+  rots[0, 2, 2] = -1
+  gt_frames = r3.rigids_mul_rots(gt_frames, r3.rots_from_tensor3x3(rots))
+
+  # The frames for ambiguous rigid groups are just rotated by 180 degree around
+  # the x-axis. The ambiguous group is always the last chi-group.
+  restype_rigidgroup_is_ambiguous = np.zeros([21, 8], dtype=np.float32)
+  restype_rigidgroup_rots = np.tile(np.eye(3, dtype=np.float32), [21, 8, 1, 1])
+
+  for resname, _ in residue_constants.residue_atom_renaming_swaps.items():
+    restype = residue_constants.restype_order[
+        residue_constants.restype_3to1[resname]]
+    chi_idx = int(sum(residue_constants.chi_angles_mask[restype]) - 1)
+    restype_rigidgroup_is_ambiguous[restype, chi_idx + 4] = 1
+    restype_rigidgroup_rots[restype, chi_idx + 4, 1, 1] = -1
+    restype_rigidgroup_rots[restype, chi_idx + 4, 2, 2] = -1
+
+  # Gather the ambiguity information for each residue.
+  residx_rigidgroup_is_ambiguous = utils.batched_gather(
+      restype_rigidgroup_is_ambiguous, aatype)
+  residx_rigidgroup_ambiguity_rot = utils.batched_gather(
+      restype_rigidgroup_rots, aatype)
+
+  # Create the alternative ground truth frames.
+  alt_gt_frames = r3.rigids_mul_rots(
+      gt_frames, r3.rots_from_tensor3x3(residx_rigidgroup_ambiguity_rot))
+
+  gt_frames_flat12 = r3.rigids_to_tensor_flat12(gt_frames)
+  alt_gt_frames_flat12 = r3.rigids_to_tensor_flat12(alt_gt_frames)
+
+  # reshape back to original residue layout
+  gt_frames_flat12 = jnp.reshape(gt_frames_flat12, aatype_in_shape + (8, 12))
+  gt_exists = jnp.reshape(gt_exists, aatype_in_shape + (8,))
+  group_exists = jnp.reshape(group_exists, aatype_in_shape + (8,))
+  gt_frames_flat12 = jnp.reshape(gt_frames_flat12, aatype_in_shape + (8, 12))
+  residx_rigidgroup_is_ambiguous = jnp.reshape(residx_rigidgroup_is_ambiguous,
+                                               aatype_in_shape + (8,))
+  alt_gt_frames_flat12 = jnp.reshape(alt_gt_frames_flat12,
+                                     aatype_in_shape + (8, 12,))
+
+  return {
+      'rigidgroups_gt_frames': gt_frames_flat12,  # (..., 8, 12)
+      'rigidgroups_gt_exists': gt_exists,  # (..., 8)
+      'rigidgroups_group_exists': group_exists,  # (..., 8)
+      'rigidgroups_group_is_ambiguous':
+          residx_rigidgroup_is_ambiguous,  # (..., 8)
+      'rigidgroups_alt_gt_frames': alt_gt_frames_flat12,  # (..., 8, 12)
+  }
+
+
+def atom37_to_torsion_angles(
+    aatype: jnp.ndarray,  # (B, N)
+    all_atom_pos: jnp.ndarray,  # (B, N, 37, 3)
+    all_atom_mask: jnp.ndarray,  # (B, N, 37)
+    placeholder_for_undefined=False,
+) -> Dict[str, jnp.ndarray]:
+  """Computes the 7 torsion angles (in sin, cos encoding) for each residue.
+
+  The 7 torsion angles are in the order
+  '[pre_omega, phi, psi, chi_1, chi_2, chi_3, chi_4]',
+  here pre_omega denotes the omega torsion angle between the given amino acid
+  and the previous amino acid.
+
+  Args:
+    aatype: Amino acid type, given as array with integers.
+    all_atom_pos: atom37 representation of all atom coordinates.
+    all_atom_mask: atom37 representation of mask on all atom coordinates.
+    placeholder_for_undefined: flag denoting whether to set masked torsion
+      angles to zero.
+  Returns:
+    Dict containing:
+      * 'torsion_angles_sin_cos': Array with shape (B, N, 7, 2) where the final
+        2 dimensions denote sin and cos respectively
+      * 'alt_torsion_angles_sin_cos': same as 'torsion_angles_sin_cos', but
+        with the angle shifted by pi for all chi angles affected by the naming
+        ambiguities.
+      * 'torsion_angles_mask': Mask for which chi angles are present.
+  """
+
+  # Map aatype > 20 to 'Unknown' (20).
+  aatype = jnp.minimum(aatype, 20)
+
+  # Compute the backbone angles.
+  num_batch, num_res = aatype.shape
+
+  pad = jnp.zeros([num_batch, 1, 37, 3], jnp.float32)
+  prev_all_atom_pos = jnp.concatenate([pad, all_atom_pos[:, :-1, :, :]], axis=1)
+
+  pad = jnp.zeros([num_batch, 1, 37], jnp.float32)
+  prev_all_atom_mask = jnp.concatenate([pad, all_atom_mask[:, :-1, :]], axis=1)
+
+  # For each torsion angle collect the 4 atom positions that define this angle.
+  # shape (B, N, atoms=4, xyz=3)
+  pre_omega_atom_pos = jnp.concatenate(
+      [prev_all_atom_pos[:, :, 1:3, :],  # prev CA, C
+       all_atom_pos[:, :, 0:2, :]  # this N, CA
+      ], axis=-2)
+  phi_atom_pos = jnp.concatenate(
+      [prev_all_atom_pos[:, :, 2:3, :],  # prev C
+       all_atom_pos[:, :, 0:3, :]  # this N, CA, C
+      ], axis=-2)
+  psi_atom_pos = jnp.concatenate(
+      [all_atom_pos[:, :, 0:3, :],  # this N, CA, C
+       all_atom_pos[:, :, 4:5, :]  # this O
+      ], axis=-2)
+
+  # Collect the masks from these atoms.
+  # Shape [batch, num_res]
+  pre_omega_mask = (
+      jnp.prod(prev_all_atom_mask[:, :, 1:3], axis=-1)  # prev CA, C
+      * jnp.prod(all_atom_mask[:, :, 0:2], axis=-1))  # this N, CA
+  phi_mask = (
+      prev_all_atom_mask[:, :, 2]  # prev C
+      * jnp.prod(all_atom_mask[:, :, 0:3], axis=-1))  # this N, CA, C
+  psi_mask = (
+      jnp.prod(all_atom_mask[:, :, 0:3], axis=-1) *  # this N, CA, C
+      all_atom_mask[:, :, 4])  # this O
+
+  # Collect the atoms for the chi-angles.
+  # Compute the table of chi angle indices. Shape: [restypes, chis=4, atoms=4].
+  chi_atom_indices = get_chi_atom_indices()
+  # Select atoms to compute chis. Shape: [batch, num_res, chis=4, atoms=4].
+  atom_indices = utils.batched_gather(
+      params=chi_atom_indices, indices=aatype, axis=0, batch_dims=0)
+  # Gather atom positions. Shape: [batch, num_res, chis=4, atoms=4, xyz=3].
+  chis_atom_pos = utils.batched_gather(
+      params=all_atom_pos, indices=atom_indices, axis=-2,
+      batch_dims=2)
+
+  # Copy the chi angle mask, add the UNKNOWN residue. Shape: [restypes, 4].
+  chi_angles_mask = list(residue_constants.chi_angles_mask)
+  chi_angles_mask.append([0.0, 0.0, 0.0, 0.0])
+  chi_angles_mask = jnp.asarray(chi_angles_mask)
+
+  # Compute the chi angle mask. I.e. which chis angles exist according to the
+  # aatype. Shape [batch, num_res, chis=4].
+  chis_mask = utils.batched_gather(params=chi_angles_mask, indices=aatype,
+                                   axis=0, batch_dims=0)
+
+  # Constrain the chis_mask to those chis, where the ground truth coordinates of
+  # all defining four atoms are available.
+  # Gather the chi angle atoms mask. Shape: [batch, num_res, chis=4, atoms=4].
+  chi_angle_atoms_mask = utils.batched_gather(
+      params=all_atom_mask, indices=atom_indices, axis=-1,
+      batch_dims=2)
+  # Check if all 4 chi angle atoms were set. Shape: [batch, num_res, chis=4].
+  chi_angle_atoms_mask = jnp.prod(chi_angle_atoms_mask, axis=[-1])
+  chis_mask = chis_mask * (chi_angle_atoms_mask).astype(jnp.float32)
+
+  # Stack all torsion angle atom positions.
+  # Shape (B, N, torsions=7, atoms=4, xyz=3)
+  torsions_atom_pos = jnp.concatenate(
+      [pre_omega_atom_pos[:, :, None, :, :],
+       phi_atom_pos[:, :, None, :, :],
+       psi_atom_pos[:, :, None, :, :],
+       chis_atom_pos
+      ], axis=2)
+
+  # Stack up masks for all torsion angles.
+  # shape (B, N, torsions=7)
+  torsion_angles_mask = jnp.concatenate(
+      [pre_omega_mask[:, :, None],
+       phi_mask[:, :, None],
+       psi_mask[:, :, None],
+       chis_mask
+      ], axis=2)
+
+  # Create a frame from the first three atoms:
+  # First atom: point on x-y-plane
+  # Second atom: point on negative x-axis
+  # Third atom: origin
+  # r3.Rigids (B, N, torsions=7)
+  torsion_frames = r3.rigids_from_3_points(
+      point_on_neg_x_axis=r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 1, :]),
+      origin=r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 2, :]),
+      point_on_xy_plane=r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 0, :]))
+
+  # Compute the position of the forth atom in this frame (y and z coordinate
+  # define the chi angle)
+  # r3.Vecs (B, N, torsions=7)
+  forth_atom_rel_pos = r3.rigids_mul_vecs(
+      r3.invert_rigids(torsion_frames),
+      r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 3, :]))
+
+  # Normalize to have the sin and cos of the torsion angle.
+  # jnp.ndarray (B, N, torsions=7, sincos=2)
+  torsion_angles_sin_cos = jnp.stack(
+      [forth_atom_rel_pos.z, forth_atom_rel_pos.y], axis=-1)
+  torsion_angles_sin_cos /= jnp.sqrt(
+      jnp.sum(jnp.square(torsion_angles_sin_cos), axis=-1, keepdims=True)
+      + 1e-8)
+
+  # Mirror psi, because we computed it from the Oxygen-atom.
+  torsion_angles_sin_cos *= jnp.asarray(
+      [1., 1., -1., 1., 1., 1., 1.])[None, None, :, None]
+
+  # Create alternative angles for ambiguous atom names.
+  chi_is_ambiguous = utils.batched_gather(
+      jnp.asarray(residue_constants.chi_pi_periodic), aatype)
+  mirror_torsion_angles = jnp.concatenate(
+      [jnp.ones([num_batch, num_res, 3]),
+       1.0 - 2.0 * chi_is_ambiguous], axis=-1)
+  alt_torsion_angles_sin_cos = (
+      torsion_angles_sin_cos * mirror_torsion_angles[:, :, :, None])
+
+  if placeholder_for_undefined:
+    # Add placeholder torsions in place of undefined torsion angles
+    # (e.g. N-terminus pre-omega)
+    placeholder_torsions = jnp.stack([
+        jnp.ones(torsion_angles_sin_cos.shape[:-1]),
+        jnp.zeros(torsion_angles_sin_cos.shape[:-1])
+    ], axis=-1)
+    torsion_angles_sin_cos = torsion_angles_sin_cos * torsion_angles_mask[
+        ..., None] + placeholder_torsions * (1 - torsion_angles_mask[..., None])
+    alt_torsion_angles_sin_cos = alt_torsion_angles_sin_cos * torsion_angles_mask[
+        ..., None] + placeholder_torsions * (1 - torsion_angles_mask[..., None])
+
+  return {
+      'torsion_angles_sin_cos': torsion_angles_sin_cos,  # (B, N, 7, 2)
+      'alt_torsion_angles_sin_cos': alt_torsion_angles_sin_cos,  # (B, N, 7, 2)
+      'torsion_angles_mask': torsion_angles_mask  # (B, N, 7)
+  }
+
+
+def torsion_angles_to_frames(
+    aatype: jnp.ndarray,  # (N)
+    backb_to_global: r3.Rigids,  # (N)
+    torsion_angles_sin_cos: jnp.ndarray  # (N, 7, 2)
+) -> r3.Rigids:  # (N, 8)
+  """Compute rigid group frames from torsion angles.
+
+  Jumper et al. (2021) Suppl. Alg. 24 "computeAllAtomCoordinates" lines 2-10
+  Jumper et al. (2021) Suppl. Alg. 25 "makeRotX"
+
+  Args:
+    aatype: aatype for each residue
+    backb_to_global: Rigid transformations describing transformation from
+      backbone frame to global frame.
+    torsion_angles_sin_cos: sin and cosine of the 7 torsion angles
+  Returns:
+    Frames corresponding to all the Sidechain Rigid Transforms
+  """
+  assert len(aatype.shape) == 1
+  assert len(backb_to_global.rot.xx.shape) == 1
+  assert len(torsion_angles_sin_cos.shape) == 3
+  assert torsion_angles_sin_cos.shape[1] == 7
+  assert torsion_angles_sin_cos.shape[2] == 2
+
+  # Gather the default frames for all rigid groups.
+  # r3.Rigids with shape (N, 8)
+  m = utils.batched_gather(residue_constants.restype_rigid_group_default_frame,
+                           aatype)
+  default_frames = r3.rigids_from_tensor4x4(m)
+
+  # Create the rotation matrices according to the given angles (each frame is
+  # defined such that its rotation is around the x-axis).
+  sin_angles = torsion_angles_sin_cos[..., 0]
+  cos_angles = torsion_angles_sin_cos[..., 1]
+
+  # insert zero rotation for backbone group.
+  num_residues, = aatype.shape
+  sin_angles = jnp.concatenate([jnp.zeros([num_residues, 1]), sin_angles],
+                               axis=-1)
+  cos_angles = jnp.concatenate([jnp.ones([num_residues, 1]), cos_angles],
+                               axis=-1)
+  zeros = jnp.zeros_like(sin_angles)
+  ones = jnp.ones_like(sin_angles)
+
+  # all_rots are r3.Rots with shape (N, 8)
+  all_rots = r3.Rots(ones, zeros, zeros,
+                     zeros, cos_angles, -sin_angles,
+                     zeros, sin_angles, cos_angles)
+
+  # Apply rotations to the frames.
+  all_frames = r3.rigids_mul_rots(default_frames, all_rots)
+
+  # chi2, chi3, and chi4 frames do not transform to the backbone frame but to
+  # the previous frame. So chain them up accordingly.
+  chi2_frame_to_frame = jax.tree_map(lambda x: x[:, 5], all_frames)
+  chi3_frame_to_frame = jax.tree_map(lambda x: x[:, 6], all_frames)
+  chi4_frame_to_frame = jax.tree_map(lambda x: x[:, 7], all_frames)
+
+  chi1_frame_to_backb = jax.tree_map(lambda x: x[:, 4], all_frames)
+  chi2_frame_to_backb = r3.rigids_mul_rigids(chi1_frame_to_backb,
+                                             chi2_frame_to_frame)
+  chi3_frame_to_backb = r3.rigids_mul_rigids(chi2_frame_to_backb,
+                                             chi3_frame_to_frame)
+  chi4_frame_to_backb = r3.rigids_mul_rigids(chi3_frame_to_backb,
+                                             chi4_frame_to_frame)
+
+  # Recombine them to a r3.Rigids with shape (N, 8).
+  def _concat_frames(xall, x5, x6, x7):
+    return jnp.concatenate(
+        [xall[:, 0:5], x5[:, None], x6[:, None], x7[:, None]], axis=-1)
+
+  all_frames_to_backb = jax.tree_map(
+      _concat_frames,
+      all_frames,
+      chi2_frame_to_backb,
+      chi3_frame_to_backb,
+      chi4_frame_to_backb)
+
+  # Create the global frames.
+  # shape (N, 8)
+  all_frames_to_global = r3.rigids_mul_rigids(
+      jax.tree_map(lambda x: x[:, None], backb_to_global),
+      all_frames_to_backb)
+
+  return all_frames_to_global
+
+
+def frames_and_literature_positions_to_atom14_pos(
+    aatype: jnp.ndarray,  # (N)
+    all_frames_to_global: r3.Rigids  # (N, 8)
+) -> r3.Vecs:  # (N, 14)
+  """Put atom literature positions (atom14 encoding) in each rigid group.
+
+  Jumper et al. (2021) Suppl. Alg. 24 "computeAllAtomCoordinates" line 11
+
+  Args:
+    aatype: aatype for each residue.
+    all_frames_to_global: All per residue coordinate frames.
+  Returns:
+    Positions of all atom coordinates in global frame.
+  """
+
+  # Pick the appropriate transform for every atom.
+  residx_to_group_idx = utils.batched_gather(
+      residue_constants.restype_atom14_to_rigid_group, aatype)
+  group_mask = jax.nn.one_hot(
+      residx_to_group_idx, num_classes=8)  # shape (N, 14, 8)
+
+  # r3.Rigids with shape (N, 14)
+  map_atoms_to_global = jax.tree_map(
+      lambda x: jnp.sum(x[:, None, :] * group_mask, axis=-1),
+      all_frames_to_global)
+
+  # Gather the literature atom positions for each residue.
+  # r3.Vecs with shape (N, 14)
+  lit_positions = r3.vecs_from_tensor(
+      utils.batched_gather(
+          residue_constants.restype_atom14_rigid_group_positions, aatype))
+
+  # Transform each atom from its local frame to the global frame.
+  # r3.Vecs with shape (N, 14)
+  pred_positions = r3.rigids_mul_vecs(map_atoms_to_global, lit_positions)
+
+  # Mask out non-existing atoms.
+  mask = utils.batched_gather(residue_constants.restype_atom14_mask, aatype)
+  pred_positions = jax.tree_map(lambda x: x * mask, pred_positions)
+
+  return pred_positions
+
+
+def extreme_ca_ca_distance_violations(
+    pred_atom_positions: jnp.ndarray,  # (N, 37(14), 3)
+    pred_atom_mask: jnp.ndarray,  # (N, 37(14))
+    residue_index: jnp.ndarray,  # (N)
+    max_angstrom_tolerance=1.5
+    ) -> jnp.ndarray:
+  """Counts residues whose Ca is a large distance from its neighbour.
+
+  Measures the fraction of CA-CA pairs between consecutive amino acids that are
+  more than 'max_angstrom_tolerance' apart.
+
+  Args:
+    pred_atom_positions: Atom positions in atom37/14 representation
+    pred_atom_mask: Atom mask in atom37/14 representation
+    residue_index: Residue index for given amino acid, this is assumed to be
+      monotonically increasing.
+    max_angstrom_tolerance: Maximum distance allowed to not count as violation.
+  Returns:
+    Fraction of consecutive CA-CA pairs with violation.
+  """
+  this_ca_pos = pred_atom_positions[:-1, 1, :]  # (N - 1, 3)
+  this_ca_mask = pred_atom_mask[:-1, 1]         # (N - 1)
+  next_ca_pos = pred_atom_positions[1:, 1, :]  # (N - 1, 3)
+  next_ca_mask = pred_atom_mask[1:, 1]  # (N - 1)
+  has_no_gap_mask = ((residue_index[1:] - residue_index[:-1]) == 1.0).astype(
+      jnp.float32)
+  ca_ca_distance = jnp.sqrt(
+      1e-6 + jnp.sum(squared_difference(this_ca_pos, next_ca_pos), axis=-1))
+  violations = (ca_ca_distance -
+                residue_constants.ca_ca) > max_angstrom_tolerance
+  mask = this_ca_mask * next_ca_mask * has_no_gap_mask
+  return utils.mask_mean(mask=mask, value=violations)
+
+
+def between_residue_bond_loss(
+    pred_atom_positions: jnp.ndarray,  # (N, 37(14), 3)
+    pred_atom_mask: jnp.ndarray,  # (N, 37(14))
+    residue_index: jnp.ndarray,  # (N)
+    aatype: jnp.ndarray,  # (N)
+    tolerance_factor_soft=12.0,
+    tolerance_factor_hard=12.0
+) -> Dict[str, jnp.ndarray]:
+  """Flat-bottom loss to penalize structural violations between residues.
+
+  This is a loss penalizing any violation of the geometry around the peptide
+  bond between consecutive amino acids. This loss corresponds to
+  Jumper et al. (2021) Suppl. Sec. 1.9.11, eq 44, 45.
+
+  Args:
+    pred_atom_positions: Atom positions in atom37/14 representation
+    pred_atom_mask: Atom mask in atom37/14 representation
+    residue_index: Residue index for given amino acid, this is assumed to be
+      monotonically increasing.
+    aatype: Amino acid type of given residue
+    tolerance_factor_soft: soft tolerance factor measured in standard deviations
+      of pdb distributions
+    tolerance_factor_hard: hard tolerance factor measured in standard deviations
+      of pdb distributions
+
+  Returns:
+    Dict containing:
+      * 'c_n_loss_mean': Loss for peptide bond length violations
+      * 'ca_c_n_loss_mean': Loss for violations of bond angle around C spanned
+          by CA, C, N
+      * 'c_n_ca_loss_mean': Loss for violations of bond angle around N spanned
+          by C, N, CA
+      * 'per_residue_loss_sum': sum of all losses for each residue
+      * 'per_residue_violation_mask': mask denoting all residues with violation
+          present.
+  """
+  assert len(pred_atom_positions.shape) == 3
+  assert len(pred_atom_mask.shape) == 2
+  assert len(residue_index.shape) == 1
+  assert len(aatype.shape) == 1
+
+  # Get the positions of the relevant backbone atoms.
+  this_ca_pos = pred_atom_positions[:-1, 1, :]  # (N - 1, 3)
+  this_ca_mask = pred_atom_mask[:-1, 1]         # (N - 1)
+  this_c_pos = pred_atom_positions[:-1, 2, :]   # (N - 1, 3)
+  this_c_mask = pred_atom_mask[:-1, 2]          # (N - 1)
+  next_n_pos = pred_atom_positions[1:, 0, :]    # (N - 1, 3)
+  next_n_mask = pred_atom_mask[1:, 0]           # (N - 1)
+  next_ca_pos = pred_atom_positions[1:, 1, :]   # (N - 1, 3)
+  next_ca_mask = pred_atom_mask[1:, 1]          # (N - 1)
+  has_no_gap_mask = ((residue_index[1:] - residue_index[:-1]) == 1.0).astype(
+      jnp.float32)
+
+  # Compute loss for the C--N bond.
+  c_n_bond_length = jnp.sqrt(
+      1e-6 + jnp.sum(squared_difference(this_c_pos, next_n_pos), axis=-1))
+
+  # The C-N bond to proline has slightly different length because of the ring.
+  next_is_proline = (
+      aatype[1:] == residue_constants.resname_to_idx['PRO']).astype(jnp.float32)
+  gt_length = (
+      (1. - next_is_proline) * residue_constants.between_res_bond_length_c_n[0]
+      + next_is_proline * residue_constants.between_res_bond_length_c_n[1])
+  gt_stddev = (
+      (1. - next_is_proline) *
+      residue_constants.between_res_bond_length_stddev_c_n[0] +
+      next_is_proline * residue_constants.between_res_bond_length_stddev_c_n[1])
+  c_n_bond_length_error = jnp.sqrt(1e-6 +
+                                   jnp.square(c_n_bond_length - gt_length))
+  c_n_loss_per_residue = jax.nn.relu(
+      c_n_bond_length_error - tolerance_factor_soft * gt_stddev)
+  mask = this_c_mask * next_n_mask * has_no_gap_mask
+  c_n_loss = jnp.sum(mask * c_n_loss_per_residue) / (jnp.sum(mask) + 1e-6)
+  c_n_violation_mask = mask * (
+      c_n_bond_length_error > (tolerance_factor_hard * gt_stddev))
+
+  # Compute loss for the angles.
+  ca_c_bond_length = jnp.sqrt(1e-6 + jnp.sum(
+      squared_difference(this_ca_pos, this_c_pos), axis=-1))
+  n_ca_bond_length = jnp.sqrt(1e-6 + jnp.sum(
+      squared_difference(next_n_pos, next_ca_pos), axis=-1))
+
+  c_ca_unit_vec = (this_ca_pos - this_c_pos) / ca_c_bond_length[:, None]
+  c_n_unit_vec = (next_n_pos - this_c_pos) / c_n_bond_length[:, None]
+  n_ca_unit_vec = (next_ca_pos - next_n_pos) / n_ca_bond_length[:, None]
+
+  ca_c_n_cos_angle = jnp.sum(c_ca_unit_vec * c_n_unit_vec, axis=-1)
+  gt_angle = residue_constants.between_res_cos_angles_ca_c_n[0]
+  gt_stddev = residue_constants.between_res_bond_length_stddev_c_n[0]
+  ca_c_n_cos_angle_error = jnp.sqrt(
+      1e-6 + jnp.square(ca_c_n_cos_angle - gt_angle))
+  ca_c_n_loss_per_residue = jax.nn.relu(
+      ca_c_n_cos_angle_error - tolerance_factor_soft * gt_stddev)
+  mask = this_ca_mask * this_c_mask * next_n_mask * has_no_gap_mask
+  ca_c_n_loss = jnp.sum(mask * ca_c_n_loss_per_residue) / (jnp.sum(mask) + 1e-6)
+  ca_c_n_violation_mask = mask * (ca_c_n_cos_angle_error >
+                                  (tolerance_factor_hard * gt_stddev))
+
+  c_n_ca_cos_angle = jnp.sum((-c_n_unit_vec) * n_ca_unit_vec, axis=-1)
+  gt_angle = residue_constants.between_res_cos_angles_c_n_ca[0]
+  gt_stddev = residue_constants.between_res_cos_angles_c_n_ca[1]
+  c_n_ca_cos_angle_error = jnp.sqrt(
+      1e-6 + jnp.square(c_n_ca_cos_angle - gt_angle))
+  c_n_ca_loss_per_residue = jax.nn.relu(
+      c_n_ca_cos_angle_error - tolerance_factor_soft * gt_stddev)
+  mask = this_c_mask * next_n_mask * next_ca_mask * has_no_gap_mask
+  c_n_ca_loss = jnp.sum(mask * c_n_ca_loss_per_residue) / (jnp.sum(mask) + 1e-6)
+  c_n_ca_violation_mask = mask * (
+      c_n_ca_cos_angle_error > (tolerance_factor_hard * gt_stddev))
+
+  # Compute a per residue loss (equally distribute the loss to both
+  # neighbouring residues).
+  per_residue_loss_sum = (c_n_loss_per_residue +
+                          ca_c_n_loss_per_residue +
+                          c_n_ca_loss_per_residue)
+  per_residue_loss_sum = 0.5 * (jnp.pad(per_residue_loss_sum, [[0, 1]]) +
+                                jnp.pad(per_residue_loss_sum, [[1, 0]]))
+
+  # Compute hard violations.
+  violation_mask = jnp.max(
+      jnp.stack([c_n_violation_mask,
+                 ca_c_n_violation_mask,
+                 c_n_ca_violation_mask]), axis=0)
+  violation_mask = jnp.maximum(
+      jnp.pad(violation_mask, [[0, 1]]),
+      jnp.pad(violation_mask, [[1, 0]]))
+
+  return {'c_n_loss_mean': c_n_loss,  # shape ()
+          'ca_c_n_loss_mean': ca_c_n_loss,  # shape ()
+          'c_n_ca_loss_mean': c_n_ca_loss,  # shape ()
+          'per_residue_loss_sum': per_residue_loss_sum,  # shape (N)
+          'per_residue_violation_mask': violation_mask  # shape (N)
+         }
+
+
+def between_residue_clash_loss(
+    atom14_pred_positions: jnp.ndarray,  # (N, 14, 3)
+    atom14_atom_exists: jnp.ndarray,  # (N, 14)
+    atom14_atom_radius: jnp.ndarray,  # (N, 14)
+    residue_index: jnp.ndarray,  # (N)
+    overlap_tolerance_soft=1.5,
+    overlap_tolerance_hard=1.5
+) -> Dict[str, jnp.ndarray]:
+  """Loss to penalize steric clashes between residues.
+
+  This is a loss penalizing any steric clashes due to non bonded atoms in
+  different peptides coming too close. This loss corresponds to the part with
+  different residues of
+  Jumper et al. (2021) Suppl. Sec. 1.9.11, eq 46.
+
+  Args:
+    atom14_pred_positions: Predicted positions of atoms in
+      global prediction frame
+    atom14_atom_exists: Mask denoting whether atom at positions exists for given
+      amino acid type
+    atom14_atom_radius: Van der Waals radius for each atom.
+    residue_index: Residue index for given amino acid.
+    overlap_tolerance_soft: Soft tolerance factor.
+    overlap_tolerance_hard: Hard tolerance factor.
+
+  Returns:
+    Dict containing:
+      * 'mean_loss': average clash loss
+      * 'per_atom_loss_sum': sum of all clash losses per atom, shape (N, 14)
+      * 'per_atom_clash_mask': mask whether atom clashes with any other atom
+          shape (N, 14)
+  """
+  assert len(atom14_pred_positions.shape) == 3
+  assert len(atom14_atom_exists.shape) == 2
+  assert len(atom14_atom_radius.shape) == 2
+  assert len(residue_index.shape) == 1
+
+  # Create the distance matrix.
+  # (N, N, 14, 14)
+  dists = jnp.sqrt(1e-10 + jnp.sum(
+      squared_difference(
+          atom14_pred_positions[:, None, :, None, :],
+          atom14_pred_positions[None, :, None, :, :]),
+      axis=-1))
+
+  # Create the mask for valid distances.
+  # shape (N, N, 14, 14)
+  dists_mask = (atom14_atom_exists[:, None, :, None] *
+                atom14_atom_exists[None, :, None, :])
+
+  # Mask out all the duplicate entries in the lower triangular matrix.
+  # Also mask out the diagonal (atom-pairs from the same residue) -- these atoms
+  # are handled separately.
+  dists_mask *= (
+      residue_index[:, None, None, None] < residue_index[None, :, None, None])
+
+  # Backbone C--N bond between subsequent residues is no clash.
+  c_one_hot = jax.nn.one_hot(2, num_classes=14)
+  n_one_hot = jax.nn.one_hot(0, num_classes=14)
+  neighbour_mask = ((residue_index[:, None, None, None] +
+                     1) == residue_index[None, :, None, None])
+  c_n_bonds = neighbour_mask * c_one_hot[None, None, :,
+                                         None] * n_one_hot[None, None, None, :]
+  dists_mask *= (1. - c_n_bonds)
+
+  # Disulfide bridge between two cysteines is no clash.
+  cys_sg_idx = residue_constants.restype_name_to_atom14_names['CYS'].index('SG')
+  cys_sg_one_hot = jax.nn.one_hot(cys_sg_idx, num_classes=14)
+  disulfide_bonds = (cys_sg_one_hot[None, None, :, None] *
+                     cys_sg_one_hot[None, None, None, :])
+  dists_mask *= (1. - disulfide_bonds)
+
+  # Compute the lower bound for the allowed distances.
+  # shape (N, N, 14, 14)
+  dists_lower_bound = dists_mask * (atom14_atom_radius[:, None, :, None] +
+                                    atom14_atom_radius[None, :, None, :])
+
+  # Compute the error.
+  # shape (N, N, 14, 14)
+  dists_to_low_error = dists_mask * jax.nn.relu(
+      dists_lower_bound - overlap_tolerance_soft - dists)
+
+  # Compute the mean loss.
+  # shape ()
+  mean_loss = (jnp.sum(dists_to_low_error)
+               / (1e-6 + jnp.sum(dists_mask)))
+
+  # Compute the per atom loss sum.
+  # shape (N, 14)
+  per_atom_loss_sum = (jnp.sum(dists_to_low_error, axis=[0, 2]) +
+                       jnp.sum(dists_to_low_error, axis=[1, 3]))
+
+  # Compute the hard clash mask.
+  # shape (N, N, 14, 14)
+  clash_mask = dists_mask * (
+      dists < (dists_lower_bound - overlap_tolerance_hard))
+
+  # Compute the per atom clash.
+  # shape (N, 14)
+  per_atom_clash_mask = jnp.maximum(
+      jnp.max(clash_mask, axis=[0, 2]),
+      jnp.max(clash_mask, axis=[1, 3]))
+
+  return {'mean_loss': mean_loss,  # shape ()
+          'per_atom_loss_sum': per_atom_loss_sum,  # shape (N, 14)
+          'per_atom_clash_mask': per_atom_clash_mask  # shape (N, 14)
+         }
+
+
+def within_residue_violations(
+    atom14_pred_positions: jnp.ndarray,  # (N, 14, 3)
+    atom14_atom_exists: jnp.ndarray,  # (N, 14)
+    atom14_dists_lower_bound: jnp.ndarray,  # (N, 14, 14)
+    atom14_dists_upper_bound: jnp.ndarray,  # (N, 14, 14)
+    tighten_bounds_for_loss=0.0,
+) -> Dict[str, jnp.ndarray]:
+  """Loss to penalize steric clashes within residues.
+
+  This is a loss penalizing any steric violations or clashes of non-bonded atoms
+  in a given peptide. This loss corresponds to the part with
+  the same residues of
+  Jumper et al. (2021) Suppl. Sec. 1.9.11, eq 46.
+
+  Args:
+    atom14_pred_positions: Predicted positions of atoms in
+      global prediction frame
+    atom14_atom_exists: Mask denoting whether atom at positions exists for given
+      amino acid type
+    atom14_dists_lower_bound: Lower bound on allowed distances.
+    atom14_dists_upper_bound: Upper bound on allowed distances
+    tighten_bounds_for_loss: Extra factor to tighten loss
+
+  Returns:
+    Dict containing:
+      * 'per_atom_loss_sum': sum of all clash losses per atom, shape (N, 14)
+      * 'per_atom_clash_mask': mask whether atom clashes with any other atom
+          shape (N, 14)
+  """
+  assert len(atom14_pred_positions.shape) == 3
+  assert len(atom14_atom_exists.shape) == 2
+  assert len(atom14_dists_lower_bound.shape) == 3
+  assert len(atom14_dists_upper_bound.shape) == 3
+
+  # Compute the mask for each residue.
+  # shape (N, 14, 14)
+  dists_masks = (1. - jnp.eye(14, 14)[None])
+  dists_masks *= (atom14_atom_exists[:, :, None] *
+                  atom14_atom_exists[:, None, :])
+
+  # Distance matrix
+  # shape (N, 14, 14)
+  dists = jnp.sqrt(1e-10 + jnp.sum(
+      squared_difference(
+          atom14_pred_positions[:, :, None, :],
+          atom14_pred_positions[:, None, :, :]),
+      axis=-1))
+
+  # Compute the loss.
+  # shape (N, 14, 14)
+  dists_to_low_error = jax.nn.relu(
+      atom14_dists_lower_bound + tighten_bounds_for_loss - dists)
+  dists_to_high_error = jax.nn.relu(
+      dists - (atom14_dists_upper_bound - tighten_bounds_for_loss))
+  loss = dists_masks * (dists_to_low_error + dists_to_high_error)
+
+  # Compute the per atom loss sum.
+  # shape (N, 14)
+  per_atom_loss_sum = (jnp.sum(loss, axis=1) +
+                       jnp.sum(loss, axis=2))
+
+  # Compute the violations mask.
+  # shape (N, 14, 14)
+  violations = dists_masks * ((dists < atom14_dists_lower_bound) |
+                              (dists > atom14_dists_upper_bound))
+
+  # Compute the per atom violations.
+  # shape (N, 14)
+  per_atom_violations = jnp.maximum(
+      jnp.max(violations, axis=1), jnp.max(violations, axis=2))
+
+  return {'per_atom_loss_sum': per_atom_loss_sum,  # shape (N, 14)
+          'per_atom_violations': per_atom_violations  # shape (N, 14)
+         }
+
+
+def find_optimal_renaming(
+    atom14_gt_positions: jnp.ndarray,  # (N, 14, 3)
+    atom14_alt_gt_positions: jnp.ndarray,  # (N, 14, 3)
+    atom14_atom_is_ambiguous: jnp.ndarray,  # (N, 14)
+    atom14_gt_exists: jnp.ndarray,  # (N, 14)
+    atom14_pred_positions: jnp.ndarray,  # (N, 14, 3)
+    atom14_atom_exists: jnp.ndarray,  # (N, 14)
+) -> jnp.ndarray:  # (N):
+  """Find optimal renaming for ground truth that maximizes LDDT.
+
+  Jumper et al. (2021) Suppl. Alg. 26
+  "renameSymmetricGroundTruthAtoms" lines 1-5
+
+  Args:
+    atom14_gt_positions: Ground truth positions in global frame of ground truth.
+    atom14_alt_gt_positions: Alternate ground truth positions in global frame of
+      ground truth with coordinates of ambiguous atoms swapped relative to
+      'atom14_gt_positions'.
+    atom14_atom_is_ambiguous: Mask denoting whether atom is among ambiguous
+      atoms, see Jumper et al. (2021) Suppl. Table 3
+    atom14_gt_exists: Mask denoting whether atom at positions exists in ground
+      truth.
+    atom14_pred_positions: Predicted positions of atoms in
+      global prediction frame
+    atom14_atom_exists: Mask denoting whether atom at positions exists for given
+      amino acid type
+
+  Returns:
+    Float array of shape [N] with 1. where atom14_alt_gt_positions is closer to
+    prediction and 0. otherwise
+  """
+  assert len(atom14_gt_positions.shape) == 3
+  assert len(atom14_alt_gt_positions.shape) == 3
+  assert len(atom14_atom_is_ambiguous.shape) == 2
+  assert len(atom14_gt_exists.shape) == 2
+  assert len(atom14_pred_positions.shape) == 3
+  assert len(atom14_atom_exists.shape) == 2
+
+  # Create the pred distance matrix.
+  # shape (N, N, 14, 14)
+  pred_dists = jnp.sqrt(1e-10 + jnp.sum(
+      squared_difference(
+          atom14_pred_positions[:, None, :, None, :],
+          atom14_pred_positions[None, :, None, :, :]),
+      axis=-1))
+
+  # Compute distances for ground truth with original and alternative names.
+  # shape (N, N, 14, 14)
+  gt_dists = jnp.sqrt(1e-10 + jnp.sum(
+      squared_difference(
+          atom14_gt_positions[:, None, :, None, :],
+          atom14_gt_positions[None, :, None, :, :]),
+      axis=-1))
+  alt_gt_dists = jnp.sqrt(1e-10 + jnp.sum(
+      squared_difference(
+          atom14_alt_gt_positions[:, None, :, None, :],
+          atom14_alt_gt_positions[None, :, None, :, :]),
+      axis=-1))
+
+  # Compute LDDT's.
+  # shape (N, N, 14, 14)
+  lddt = jnp.sqrt(1e-10 + squared_difference(pred_dists, gt_dists))
+  alt_lddt = jnp.sqrt(1e-10 + squared_difference(pred_dists, alt_gt_dists))
+
+  # Create a mask for ambiguous atoms in rows vs. non-ambiguous atoms
+  # in cols.
+  # shape (N ,N, 14, 14)
+  mask = (atom14_gt_exists[:, None, :, None] *  # rows
+          atom14_atom_is_ambiguous[:, None, :, None] *  # rows
+          atom14_gt_exists[None, :, None, :] *  # cols
+          (1. - atom14_atom_is_ambiguous[None, :, None, :]))  # cols
+
+  # Aggregate distances for each residue to the non-amibuguous atoms.
+  # shape (N)
+  per_res_lddt = jnp.sum(mask * lddt, axis=[1, 2, 3])
+  alt_per_res_lddt = jnp.sum(mask * alt_lddt, axis=[1, 2, 3])
+
+  # Decide for each residue, whether alternative naming is better.
+  # shape (N)
+  alt_naming_is_better = (alt_per_res_lddt < per_res_lddt).astype(jnp.float32)
+
+  return alt_naming_is_better  # shape (N)
+
+
+def frame_aligned_point_error(
+    pred_frames: r3.Rigids,  # shape (num_frames)
+    target_frames: r3.Rigids,  # shape (num_frames)
+    frames_mask: jnp.ndarray,  # shape (num_frames)
+    pred_positions: r3.Vecs,  # shape (num_positions)
+    target_positions: r3.Vecs,  # shape (num_positions)
+    positions_mask: jnp.ndarray,  # shape (num_positions)
+    length_scale: float,
+    l1_clamp_distance: Optional[float] = None,
+    epsilon=1e-4) -> jnp.ndarray:  # shape ()
+  """Measure point error under different alignments.
+
+  Jumper et al. (2021) Suppl. Alg. 28 "computeFAPE"
+
+  Computes error between two structures with B points under A alignments derived
+  from the given pairs of frames.
+  Args:
+    pred_frames: num_frames reference frames for 'pred_positions'.
+    target_frames: num_frames reference frames for 'target_positions'.
+    frames_mask: Mask for frame pairs to use.
+    pred_positions: num_positions predicted positions of the structure.
+    target_positions: num_positions target positions of the structure.
+    positions_mask: Mask on which positions to score.
+    length_scale: length scale to divide loss by.
+    l1_clamp_distance: Distance cutoff on error beyond which gradients will
+      be zero.
+    epsilon: small value used to regularize denominator for masked average.
+  Returns:
+    Masked Frame Aligned Point Error.
+  """
+  assert pred_frames.rot.xx.ndim == 1
+  assert target_frames.rot.xx.ndim == 1
+  assert frames_mask.ndim == 1, frames_mask.ndim
+  assert pred_positions.x.ndim == 1
+  assert target_positions.x.ndim == 1
+  assert positions_mask.ndim == 1
+
+  # Compute array of predicted positions in the predicted frames.
+  # r3.Vecs (num_frames, num_positions)
+  local_pred_pos = r3.rigids_mul_vecs(
+      jax.tree_map(lambda r: r[:, None], r3.invert_rigids(pred_frames)),
+      jax.tree_map(lambda x: x[None, :], pred_positions))
+
+  # Compute array of target positions in the target frames.
+  # r3.Vecs (num_frames, num_positions)
+  local_target_pos = r3.rigids_mul_vecs(
+      jax.tree_map(lambda r: r[:, None], r3.invert_rigids(target_frames)),
+      jax.tree_map(lambda x: x[None, :], target_positions))
+
+  # Compute errors between the structures.
+  # jnp.ndarray (num_frames, num_positions)
+  error_dist = jnp.sqrt(
+      r3.vecs_squared_distance(local_pred_pos, local_target_pos)
+      + epsilon)
+
+  if l1_clamp_distance:
+    error_dist = jnp.clip(error_dist, 0, l1_clamp_distance)
+
+  normed_error = error_dist / length_scale
+  normed_error *= jnp.expand_dims(frames_mask, axis=-1)
+  normed_error *= jnp.expand_dims(positions_mask, axis=-2)
+
+  normalization_factor = (
+      jnp.sum(frames_mask, axis=-1) *
+      jnp.sum(positions_mask, axis=-1))
+  return (jnp.sum(normed_error, axis=(-2, -1)) /
+          (epsilon + normalization_factor))
+
+
+def _make_renaming_matrices():
+  """Matrices to map atoms to symmetry partners in ambiguous case."""
+  # As the atom naming is ambiguous for 7 of the 20 amino acids, provide
+  # alternative groundtruth coordinates where the naming is swapped
+  restype_3 = [
+      residue_constants.restype_1to3[res] for res in residue_constants.restypes
+  ]
+  restype_3 += ['UNK']
+  # Matrices for renaming ambiguous atoms.
+  all_matrices = {res: np.eye(14, dtype=np.float32) for res in restype_3}
+  for resname, swap in residue_constants.residue_atom_renaming_swaps.items():
+    correspondences = np.arange(14)
+    for source_atom_swap, target_atom_swap in swap.items():
+      source_index = residue_constants.restype_name_to_atom14_names[
+          resname].index(source_atom_swap)
+      target_index = residue_constants.restype_name_to_atom14_names[
+          resname].index(target_atom_swap)
+      correspondences[source_index] = target_index
+      correspondences[target_index] = source_index
+      renaming_matrix = np.zeros((14, 14), dtype=np.float32)
+      for index, correspondence in enumerate(correspondences):
+        renaming_matrix[index, correspondence] = 1.
+    all_matrices[resname] = renaming_matrix.astype(np.float32)
+  renaming_matrices = np.stack([all_matrices[restype] for restype in restype_3])
+  return renaming_matrices
+
+
+RENAMING_MATRICES = _make_renaming_matrices()
+
+
+def get_alt_atom14(aatype, positions, mask):
+  """Get alternative atom14 positions.
+
+  Constructs renamed atom positions for ambiguous residues.
+
+  Jumper et al. (2021) Suppl. Table 3 "Ambiguous atom names due to 180 degree-
+  rotation-symmetry"
+
+  Args:
+    aatype: Amino acid at given position
+    positions: Atom positions as r3.Vecs in atom14 representation, (N, 14)
+    mask: Atom masks in atom14 representation, (N, 14)
+  Returns:
+    renamed atom positions, renamed atom mask
+  """
+  # pick the transformation matrices for the given residue sequence
+  # shape (num_res, 14, 14)
+  renaming_transform = utils.batched_gather(
+      jnp.asarray(RENAMING_MATRICES), aatype)
+
+  positions = jax.tree_map(lambda x: x[:, :, None], positions)
+  alternative_positions = jax.tree_map(
+      lambda x: jnp.sum(x, axis=1), positions * renaming_transform)
+
+  # Create the mask for the alternative ground truth (differs from the
+  # ground truth mask, if only one of the atoms in an ambiguous pair has a
+  # ground truth position)
+  alternative_mask = jnp.sum(mask[..., None] * renaming_transform, axis=1)
+
+  return alternative_positions, alternative_mask
diff --git a/alphafold/alphafold/model/all_atom_test.py b/alphafold/alphafold/model/all_atom_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..36ba45fe3d828d22614b021ad0deefe3e99bdcca
--- /dev/null
+++ b/alphafold/alphafold/model/all_atom_test.py
@@ -0,0 +1,135 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for all_atom."""
+
+from absl.testing import absltest
+from absl.testing import parameterized
+from alphafold.model import all_atom
+from alphafold.model import r3
+import numpy as np
+
+L1_CLAMP_DISTANCE = 10
+
+
+def get_identity_rigid(shape):
+  """Returns identity rigid transform."""
+
+  ones = np.ones(shape)
+  zeros = np.zeros(shape)
+  rot = r3.Rots(ones, zeros, zeros,
+                zeros, ones, zeros,
+                zeros, zeros, ones)
+  trans = r3.Vecs(zeros, zeros, zeros)
+  return r3.Rigids(rot, trans)
+
+
+def get_global_rigid_transform(rot_angle, translation, bcast_dims):
+  """Returns rigid transform that globally rotates/translates by same amount."""
+
+  rot_angle = np.asarray(rot_angle)
+  translation = np.asarray(translation)
+  if bcast_dims:
+    for _ in range(bcast_dims):
+      rot_angle = np.expand_dims(rot_angle, 0)
+      translation = np.expand_dims(translation, 0)
+  sin_angle = np.sin(np.deg2rad(rot_angle))
+  cos_angle = np.cos(np.deg2rad(rot_angle))
+  ones = np.ones_like(sin_angle)
+  zeros = np.zeros_like(sin_angle)
+  rot = r3.Rots(ones, zeros, zeros,
+                zeros, cos_angle, -sin_angle,
+                zeros, sin_angle, cos_angle)
+  trans = r3.Vecs(translation[..., 0], translation[..., 1], translation[..., 2])
+  return r3.Rigids(rot, trans)
+
+
+class AllAtomTest(parameterized.TestCase, absltest.TestCase):
+
+  @parameterized.named_parameters(
+      ('identity', 0, [0, 0, 0]),
+      ('rot_90', 90, [0, 0, 0]),
+      ('trans_10', 0, [0, 0, 10]),
+      ('rot_174_trans_1', 174, [1, 1, 1]))
+  def test_frame_aligned_point_error_perfect_on_global_transform(
+      self, rot_angle, translation):
+    """Tests global transform between target and preds gives perfect score."""
+
+    # pylint: disable=bad-whitespace
+    target_positions = np.array(
+        [[ 21.182,  23.095,  19.731],
+         [ 22.055,  20.919,  17.294],
+         [ 24.599,  20.005,  15.041],
+         [ 25.567,  18.214,  12.166],
+         [ 28.063,  17.082,  10.043],
+         [ 28.779,  15.569,   6.985],
+         [ 30.581,  13.815,   4.612],
+         [ 29.258,  12.193,   2.296]])
+    # pylint: enable=bad-whitespace
+    global_rigid_transform = get_global_rigid_transform(
+        rot_angle, translation, 1)
+
+    target_positions = r3.vecs_from_tensor(target_positions)
+    pred_positions = r3.rigids_mul_vecs(
+        global_rigid_transform, target_positions)
+    positions_mask = np.ones(target_positions.x.shape[0])
+
+    target_frames = get_identity_rigid(10)
+    pred_frames = r3.rigids_mul_rigids(global_rigid_transform, target_frames)
+    frames_mask = np.ones(10)
+
+    fape = all_atom.frame_aligned_point_error(
+        pred_frames, target_frames, frames_mask, pred_positions,
+        target_positions, positions_mask, L1_CLAMP_DISTANCE,
+        L1_CLAMP_DISTANCE, epsilon=0)
+    self.assertAlmostEqual(fape, 0.)
+
+  @parameterized.named_parameters(
+      ('identity',
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       0.),
+      ('shift_2.5',
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [[2.5, 0, 0], [7.5, 0, 0], [7.5, 0, 0]],
+       0.25),
+      ('shift_5',
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [[5, 0, 0], [10, 0, 0], [15, 0, 0]],
+       0.5),
+      ('shift_10',
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [[10, 0, 0], [15, 0, 0], [0, 0, 0]],
+       1.))
+  def test_frame_aligned_point_error_matches_expected(
+      self, target_positions, pred_positions, expected_alddt):
+    """Tests score matches expected."""
+
+    target_frames = get_identity_rigid(2)
+    pred_frames = target_frames
+    frames_mask = np.ones(2)
+
+    target_positions = r3.vecs_from_tensor(np.array(target_positions))
+    pred_positions = r3.vecs_from_tensor(np.array(pred_positions))
+    positions_mask = np.ones(target_positions.x.shape[0])
+
+    alddt = all_atom.frame_aligned_point_error(
+        pred_frames, target_frames, frames_mask, pred_positions,
+        target_positions, positions_mask, L1_CLAMP_DISTANCE,
+        L1_CLAMP_DISTANCE, epsilon=0)
+    self.assertAlmostEqual(alddt, expected_alddt)
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/model/common_modules.py b/alphafold/alphafold/model/common_modules.py
new file mode 100644
index 0000000000000000000000000000000000000000..f239c870bde49e1e5b1a7e6622c5ef4f44a37b3f
--- /dev/null
+++ b/alphafold/alphafold/model/common_modules.py
@@ -0,0 +1,84 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""A collection of common Haiku modules for use in protein folding."""
+import haiku as hk
+import jax.numpy as jnp
+
+
+class Linear(hk.Module):
+  """Protein folding specific Linear Module.
+
+  This differs from the standard Haiku Linear in a few ways:
+    * It supports inputs of arbitrary rank
+    * Initializers are specified by strings
+  """
+
+  def __init__(self,
+               num_output: int,
+               initializer: str = 'linear',
+               use_bias: bool = True,
+               bias_init: float = 0.,
+               name: str = 'linear'):
+    """Constructs Linear Module.
+
+    Args:
+      num_output: number of output channels.
+      initializer: What initializer to use, should be one of {'linear', 'relu',
+        'zeros'}
+      use_bias: Whether to include trainable bias
+      bias_init: Value used to initialize bias.
+      name: name of module, used for name scopes.
+    """
+
+    super().__init__(name=name)
+    self.num_output = num_output
+    self.initializer = initializer
+    self.use_bias = use_bias
+    self.bias_init = bias_init
+
+  def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray:
+    """Connects Module.
+
+    Args:
+      inputs: Tensor of shape [..., num_channel]
+
+    Returns:
+      output of shape [..., num_output]
+    """
+    n_channels = int(inputs.shape[-1])
+
+    weight_shape = [n_channels, self.num_output]
+    if self.initializer == 'linear':
+      weight_init = hk.initializers.VarianceScaling(mode='fan_in', scale=1.)
+    elif self.initializer == 'relu':
+      weight_init = hk.initializers.VarianceScaling(mode='fan_in', scale=2.)
+    elif self.initializer == 'zeros':
+      weight_init = hk.initializers.Constant(0.0)
+
+    weights = hk.get_parameter('weights', weight_shape, inputs.dtype,
+                               weight_init)
+
+    # this is equivalent to einsum('...c,cd->...d', inputs, weights)
+    # but turns out to be slightly faster
+    inputs = jnp.swapaxes(inputs, -1, -2)
+    output = jnp.einsum('...cb,cd->...db', inputs, weights)
+    output = jnp.swapaxes(output, -1, -2)
+
+    if self.use_bias:
+      bias = hk.get_parameter('bias', [self.num_output], inputs.dtype,
+                              hk.initializers.Constant(self.bias_init))
+      output += bias
+
+    return output
diff --git a/alphafold/alphafold/model/config.py b/alphafold/alphafold/model/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..03d494f719237339854467c527c2a2e8f188b1e2
--- /dev/null
+++ b/alphafold/alphafold/model/config.py
@@ -0,0 +1,402 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Model config."""
+
+import copy
+from alphafold.model.tf import shape_placeholders
+import ml_collections
+
+
+NUM_RES = shape_placeholders.NUM_RES
+NUM_MSA_SEQ = shape_placeholders.NUM_MSA_SEQ
+NUM_EXTRA_SEQ = shape_placeholders.NUM_EXTRA_SEQ
+NUM_TEMPLATES = shape_placeholders.NUM_TEMPLATES
+
+
+def model_config(name: str) -> ml_collections.ConfigDict:
+  """Get the ConfigDict of a CASP14 model."""
+
+  if name not in CONFIG_DIFFS:
+    raise ValueError(f'Invalid model name {name}.')
+  cfg = copy.deepcopy(CONFIG)
+  cfg.update_from_flattened_dict(CONFIG_DIFFS[name])
+  return cfg
+
+
+CONFIG_DIFFS = {
+    'model_1': {
+        # Jumper et al. (2021) Suppl. Table 5, Model 1.1.1
+        'data.common.max_extra_msa': 5120,
+        'data.common.reduce_msa_clusters_by_max_templates': True,
+        'data.common.use_templates': True,
+        'model.embeddings_and_evoformer.template.embed_torsion_angles': True,
+        'model.embeddings_and_evoformer.template.enabled': True
+    },
+    'model_2': {
+        # Jumper et al. (2021) Suppl. Table 5, Model 1.1.2
+        'data.common.reduce_msa_clusters_by_max_templates': True,
+        'data.common.use_templates': True,
+        'model.embeddings_and_evoformer.template.embed_torsion_angles': True,
+        'model.embeddings_and_evoformer.template.enabled': True
+    },
+    'model_3': {
+        # Jumper et al. (2021) Suppl. Table 5, Model 1.2.1
+        'data.common.max_extra_msa': 5120,
+    },
+    'model_4': {
+        # Jumper et al. (2021) Suppl. Table 5, Model 1.2.2
+        'data.common.max_extra_msa': 5120,
+    },
+    'model_5': {
+        # Jumper et al. (2021) Suppl. Table 5, Model 1.2.3
+    },
+
+    # The following models are fine-tuned from the corresponding models above
+    # with an additional predicted_aligned_error head that can produce
+    # predicted TM-score (pTM) and predicted aligned errors.
+    'model_1_ptm': {
+        'data.common.max_extra_msa': 5120,
+        'data.common.reduce_msa_clusters_by_max_templates': True,
+        'data.common.use_templates': True,
+        'model.embeddings_and_evoformer.template.embed_torsion_angles': True,
+        'model.embeddings_and_evoformer.template.enabled': True,
+        'model.heads.predicted_aligned_error.weight': 0.1
+    },
+    'model_2_ptm': {
+        'data.common.reduce_msa_clusters_by_max_templates': True,
+        'data.common.use_templates': True,
+        'model.embeddings_and_evoformer.template.embed_torsion_angles': True,
+        'model.embeddings_and_evoformer.template.enabled': True,
+        'model.heads.predicted_aligned_error.weight': 0.1
+    },
+    'model_3_ptm': {
+        'data.common.max_extra_msa': 5120,
+        'model.heads.predicted_aligned_error.weight': 0.1
+    },
+    'model_4_ptm': {
+        'data.common.max_extra_msa': 5120,
+        'model.heads.predicted_aligned_error.weight': 0.1
+    },
+    'model_5_ptm': {
+        'model.heads.predicted_aligned_error.weight': 0.1
+    }
+}
+
+CONFIG = ml_collections.ConfigDict({
+    'data': {
+        'common': {
+            'masked_msa': {
+                'profile_prob': 0.1,
+                'same_prob': 0.1,
+                'uniform_prob': 0.1
+            },
+            'max_extra_msa': 1024,
+            'msa_cluster_features': True,
+            'num_recycle': 3,
+            'reduce_msa_clusters_by_max_templates': False,
+            'resample_msa_in_recycling': True,
+            'template_features': [
+                'template_all_atom_positions', 'template_sum_probs',
+                'template_aatype', 'template_all_atom_masks',
+                'template_domain_names'
+            ],
+            'unsupervised_features': [
+                'aatype', 'residue_index', 'sequence', 'msa', 'domain_name',
+                'num_alignments', 'seq_length', 'between_segment_residues',
+                'deletion_matrix'
+            ],
+            'use_templates': False,
+        },
+        'eval': {
+            'feat': {
+                'aatype': [NUM_RES],
+                'all_atom_mask': [NUM_RES, None],
+                'all_atom_positions': [NUM_RES, None, None],
+                'alt_chi_angles': [NUM_RES, None],
+                'atom14_alt_gt_exists': [NUM_RES, None],
+                'atom14_alt_gt_positions': [NUM_RES, None, None],
+                'atom14_atom_exists': [NUM_RES, None],
+                'atom14_atom_is_ambiguous': [NUM_RES, None],
+                'atom14_gt_exists': [NUM_RES, None],
+                'atom14_gt_positions': [NUM_RES, None, None],
+                'atom37_atom_exists': [NUM_RES, None],
+                'backbone_affine_mask': [NUM_RES],
+                'backbone_affine_tensor': [NUM_RES, None],
+                'bert_mask': [NUM_MSA_SEQ, NUM_RES],
+                'chi_angles': [NUM_RES, None],
+                'chi_mask': [NUM_RES, None],
+                'extra_deletion_value': [NUM_EXTRA_SEQ, NUM_RES],
+                'extra_has_deletion': [NUM_EXTRA_SEQ, NUM_RES],
+                'extra_msa': [NUM_EXTRA_SEQ, NUM_RES],
+                'extra_msa_mask': [NUM_EXTRA_SEQ, NUM_RES],
+                'extra_msa_row_mask': [NUM_EXTRA_SEQ],
+                'is_distillation': [],
+                'msa_feat': [NUM_MSA_SEQ, NUM_RES, None],
+                'msa_mask': [NUM_MSA_SEQ, NUM_RES],
+                'msa_row_mask': [NUM_MSA_SEQ],
+                'pseudo_beta': [NUM_RES, None],
+                'pseudo_beta_mask': [NUM_RES],
+                'random_crop_to_size_seed': [None],
+                'residue_index': [NUM_RES],
+                'residx_atom14_to_atom37': [NUM_RES, None],
+                'residx_atom37_to_atom14': [NUM_RES, None],
+                'resolution': [],
+                'rigidgroups_alt_gt_frames': [NUM_RES, None, None],
+                'rigidgroups_group_exists': [NUM_RES, None],
+                'rigidgroups_group_is_ambiguous': [NUM_RES, None],
+                'rigidgroups_gt_exists': [NUM_RES, None],
+                'rigidgroups_gt_frames': [NUM_RES, None, None],
+                'seq_length': [],
+                'seq_mask': [NUM_RES],
+                'target_feat': [NUM_RES, None],
+                'template_aatype': [NUM_TEMPLATES, NUM_RES],
+                'template_all_atom_masks': [NUM_TEMPLATES, NUM_RES, None],
+                'template_all_atom_positions': [
+                    NUM_TEMPLATES, NUM_RES, None, None],
+                'template_backbone_affine_mask': [NUM_TEMPLATES, NUM_RES],
+                'template_backbone_affine_tensor': [
+                    NUM_TEMPLATES, NUM_RES, None],
+                'template_mask': [NUM_TEMPLATES],
+                'template_pseudo_beta': [NUM_TEMPLATES, NUM_RES, None],
+                'template_pseudo_beta_mask': [NUM_TEMPLATES, NUM_RES],
+                'template_sum_probs': [NUM_TEMPLATES, None],
+                'true_msa': [NUM_MSA_SEQ, NUM_RES]
+            },
+            'fixed_size': True,
+            'subsample_templates': False,  # We want top templates.
+            'masked_msa_replace_fraction': 0.15,
+            'max_msa_clusters': 512,
+            'max_templates': 4,
+            'num_ensemble': 1,
+        },
+    },
+    'model': {
+        'embeddings_and_evoformer': {
+            'evoformer_num_block': 48,
+            'evoformer': {
+                'msa_row_attention_with_pair_bias': {
+                    'dropout_rate': 0.15,
+                    'gating': True,
+                    'num_head': 8,
+                    'orientation': 'per_row',
+                    'shared_dropout': True
+                },
+                'msa_column_attention': {
+                    'dropout_rate': 0.0,
+                    'gating': True,
+                    'num_head': 8,
+                    'orientation': 'per_column',
+                    'shared_dropout': True
+                },
+                'msa_transition': {
+                    'dropout_rate': 0.0,
+                    'num_intermediate_factor': 4,
+                    'orientation': 'per_row',
+                    'shared_dropout': True
+                },
+                'outer_product_mean': {
+                    'chunk_size': 128,
+                    'dropout_rate': 0.0,
+                    'num_outer_channel': 32,
+                    'orientation': 'per_row',
+                    'shared_dropout': True
+                },
+                'triangle_attention_starting_node': {
+                    'dropout_rate': 0.25,
+                    'gating': True,
+                    'num_head': 4,
+                    'orientation': 'per_row',
+                    'shared_dropout': True
+                },
+                'triangle_attention_ending_node': {
+                    'dropout_rate': 0.25,
+                    'gating': True,
+                    'num_head': 4,
+                    'orientation': 'per_column',
+                    'shared_dropout': True
+                },
+                'triangle_multiplication_outgoing': {
+                    'dropout_rate': 0.25,
+                    'equation': 'ikc,jkc->ijc',
+                    'num_intermediate_channel': 128,
+                    'orientation': 'per_row',
+                    'shared_dropout': True
+                },
+                'triangle_multiplication_incoming': {
+                    'dropout_rate': 0.25,
+                    'equation': 'kjc,kic->ijc',
+                    'num_intermediate_channel': 128,
+                    'orientation': 'per_row',
+                    'shared_dropout': True
+                },
+                'pair_transition': {
+                    'dropout_rate': 0.0,
+                    'num_intermediate_factor': 4,
+                    'orientation': 'per_row',
+                    'shared_dropout': True
+                }
+            },
+            'extra_msa_channel': 64,
+            'extra_msa_stack_num_block': 4,
+            'max_relative_feature': 32,
+            'msa_channel': 256,
+            'pair_channel': 128,
+            'prev_pos': {
+                'min_bin': 3.25,
+                'max_bin': 20.75,
+                'num_bins': 15
+            },
+            'recycle_features': True,
+            'recycle_pos': True,
+            'seq_channel': 384,
+            'template': {
+                'attention': {
+                    'gating': False,
+                    'key_dim': 64,
+                    'num_head': 4,
+                    'value_dim': 64
+                },
+                'dgram_features': {
+                    'min_bin': 3.25,
+                    'max_bin': 50.75,
+                    'num_bins': 39
+                },
+                'embed_torsion_angles': False,
+                'enabled': False,
+                'template_pair_stack': {
+                    'num_block': 2,
+                    'triangle_attention_starting_node': {
+                        'dropout_rate': 0.25,
+                        'gating': True,
+                        'key_dim': 64,
+                        'num_head': 4,
+                        'orientation': 'per_row',
+                        'shared_dropout': True,
+                        'value_dim': 64
+                    },
+                    'triangle_attention_ending_node': {
+                        'dropout_rate': 0.25,
+                        'gating': True,
+                        'key_dim': 64,
+                        'num_head': 4,
+                        'orientation': 'per_column',
+                        'shared_dropout': True,
+                        'value_dim': 64
+                    },
+                    'triangle_multiplication_outgoing': {
+                        'dropout_rate': 0.25,
+                        'equation': 'ikc,jkc->ijc',
+                        'num_intermediate_channel': 64,
+                        'orientation': 'per_row',
+                        'shared_dropout': True
+                    },
+                    'triangle_multiplication_incoming': {
+                        'dropout_rate': 0.25,
+                        'equation': 'kjc,kic->ijc',
+                        'num_intermediate_channel': 64,
+                        'orientation': 'per_row',
+                        'shared_dropout': True
+                    },
+                    'pair_transition': {
+                        'dropout_rate': 0.0,
+                        'num_intermediate_factor': 2,
+                        'orientation': 'per_row',
+                        'shared_dropout': True
+                    }
+                },
+                'max_templates': 4,
+                'subbatch_size': 128,
+                'use_template_unit_vector': False,
+            }
+        },
+        'global_config': {
+            'deterministic': False,
+            'subbatch_size': 4,
+            'use_remat': False,
+            'zero_init': True
+        },
+        'heads': {
+            'distogram': {
+                'first_break': 2.3125,
+                'last_break': 21.6875,
+                'num_bins': 64,
+                'weight': 0.3
+            },
+            'predicted_aligned_error': {
+                # `num_bins - 1` bins uniformly space the
+                # [0, max_error_bin A] range.
+                # The final bin covers [max_error_bin A, +infty]
+                # 31A gives bins with 0.5A width.
+                'max_error_bin': 31.,
+                'num_bins': 64,
+                'num_channels': 128,
+                'filter_by_resolution': True,
+                'min_resolution': 0.1,
+                'max_resolution': 3.0,
+                'weight': 0.0,
+            },
+            'experimentally_resolved': {
+                'filter_by_resolution': True,
+                'max_resolution': 3.0,
+                'min_resolution': 0.1,
+                'weight': 0.01
+            },
+            'structure_module': {
+                'num_layer': 8,
+                'fape': {
+                    'clamp_distance': 10.0,
+                    'clamp_type': 'relu',
+                    'loss_unit_distance': 10.0
+                },
+                'angle_norm_weight': 0.01,
+                'chi_weight': 0.5,
+                'clash_overlap_tolerance': 1.5,
+                'compute_in_graph_metrics': True,
+                'dropout': 0.1,
+                'num_channel': 384,
+                'num_head': 12,
+                'num_layer_in_transition': 3,
+                'num_point_qk': 4,
+                'num_point_v': 8,
+                'num_scalar_qk': 16,
+                'num_scalar_v': 16,
+                'position_scale': 10.0,
+                'sidechain': {
+                    'atom_clamp_distance': 10.0,
+                    'num_channel': 128,
+                    'num_residual_block': 2,
+                    'weight_frac': 0.5,
+                    'length_scale': 10.,
+                },
+                'structural_violation_loss_weight': 1.0,
+                'violation_tolerance_factor': 12.0,
+                'weight': 1.0
+            },
+            'predicted_lddt': {
+                'filter_by_resolution': True,
+                'max_resolution': 3.0,
+                'min_resolution': 0.1,
+                'num_bins': 50,
+                'num_channels': 128,
+                'weight': 0.01
+            },
+            'masked_msa': {
+                'num_output': 23,
+                'weight': 2.0
+            },
+        },
+        'num_recycle': 3,
+        'resample_msa_in_recycling': True
+    },
+})
diff --git a/alphafold/alphafold/model/data.py b/alphafold/alphafold/model/data.py
new file mode 100644
index 0000000000000000000000000000000000000000..249cdb3158f94d3f3ff4ae04c971b903284fdc09
--- /dev/null
+++ b/alphafold/alphafold/model/data.py
@@ -0,0 +1,39 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Convenience functions for reading data."""
+
+import io
+import os
+from typing import List
+from alphafold.model import utils
+import haiku as hk
+import numpy as np
+# Internal import (7716).
+
+
+def casp_model_names(data_dir: str) -> List[str]:
+  params = os.listdir(os.path.join(data_dir, 'params'))
+  return [os.path.splitext(filename)[0] for filename in params]
+
+
+def get_model_haiku_params(model_name: str, data_dir: str) -> hk.Params:
+  """Get the Haiku parameters from a model name."""
+
+  path = os.path.join(data_dir, 'params', f'params_{model_name}.npz')
+
+  with open(path, 'rb') as f:
+    params = np.load(io.BytesIO(f.read()), allow_pickle=False)
+
+  return utils.flat_params_to_haiku(params)
diff --git a/alphafold/alphafold/model/features.py b/alphafold/alphafold/model/features.py
new file mode 100644
index 0000000000000000000000000000000000000000..b31b277e02d66aa94013cef914ed035e7f041edc
--- /dev/null
+++ b/alphafold/alphafold/model/features.py
@@ -0,0 +1,102 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Code to generate processed features."""
+import copy
+from typing import List, Mapping, Tuple
+from alphafold.model.tf import input_pipeline
+from alphafold.model.tf import proteins_dataset
+import ml_collections
+import numpy as np
+import tensorflow.compat.v1 as tf
+
+FeatureDict = Mapping[str, np.ndarray]
+
+
+def make_data_config(
+    config: ml_collections.ConfigDict,
+    num_res: int,
+    ) -> Tuple[ml_collections.ConfigDict, List[str]]:
+  """Makes a data config for the input pipeline."""
+  cfg = copy.deepcopy(config.data)
+
+  feature_names = cfg.common.unsupervised_features
+  if cfg.common.use_templates:
+    feature_names += cfg.common.template_features
+
+  with cfg.unlocked():
+    cfg.eval.crop_size = num_res
+
+  return cfg, feature_names
+
+
+def tf_example_to_features(tf_example: tf.train.Example,
+                           config: ml_collections.ConfigDict,
+                           random_seed: int = 0) -> FeatureDict:
+  """Converts tf_example to numpy feature dictionary."""
+  num_res = int(tf_example.features.feature['seq_length'].int64_list.value[0])
+  cfg, feature_names = make_data_config(config, num_res=num_res)
+
+  if 'deletion_matrix_int' in set(tf_example.features.feature):
+    deletion_matrix_int = (
+        tf_example.features.feature['deletion_matrix_int'].int64_list.value)
+    feat = tf.train.Feature(float_list=tf.train.FloatList(
+        value=map(float, deletion_matrix_int)))
+    tf_example.features.feature['deletion_matrix'].CopyFrom(feat)
+    del tf_example.features.feature['deletion_matrix_int']
+
+  tf_graph = tf.Graph()
+  with tf_graph.as_default(), tf.device('/device:CPU:0'):
+    tf.compat.v1.set_random_seed(random_seed)
+    tensor_dict = proteins_dataset.create_tensor_dict(
+        raw_data=tf_example.SerializeToString(),
+        features=feature_names)
+    processed_batch = input_pipeline.process_tensors_from_config(
+        tensor_dict, cfg)
+
+  tf_graph.finalize()
+
+  with tf.Session(graph=tf_graph) as sess:
+    features = sess.run(processed_batch)
+
+  return {k: v for k, v in features.items() if v.dtype != 'O'}
+
+
+def np_example_to_features(np_example: FeatureDict,
+                           config: ml_collections.ConfigDict,
+                           random_seed: int = 0) -> FeatureDict:
+  """Preprocesses NumPy feature dict using TF pipeline."""
+  np_example = dict(np_example)
+  num_res = int(np_example['seq_length'][0])
+  cfg, feature_names = make_data_config(config, num_res=num_res)
+
+  if 'deletion_matrix_int' in np_example:
+    np_example['deletion_matrix'] = (
+        np_example.pop('deletion_matrix_int').astype(np.float32))
+
+  tf_graph = tf.Graph()
+  with tf_graph.as_default(), tf.device('/device:CPU:0'):
+    tf.compat.v1.set_random_seed(random_seed)
+    tensor_dict = proteins_dataset.np_to_tensor_dict(
+        np_example=np_example, features=feature_names)
+
+    processed_batch = input_pipeline.process_tensors_from_config(
+        tensor_dict, cfg)
+
+  tf_graph.finalize()
+
+  with tf.Session(graph=tf_graph) as sess:
+    features = sess.run(processed_batch)
+
+  return {k: v for k, v in features.items() if v.dtype != 'O'}
diff --git a/alphafold/alphafold/model/folding.py b/alphafold/alphafold/model/folding.py
new file mode 100644
index 0000000000000000000000000000000000000000..1faf5bd58377880107da119b4b65c96a2f1e728d
--- /dev/null
+++ b/alphafold/alphafold/model/folding.py
@@ -0,0 +1,1009 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Modules and utilities for the structure module."""
+
+import functools
+from typing import Dict
+from alphafold.common import residue_constants
+from alphafold.model import all_atom
+from alphafold.model import common_modules
+from alphafold.model import prng
+from alphafold.model import quat_affine
+from alphafold.model import r3
+from alphafold.model import utils
+import haiku as hk
+import jax
+import jax.numpy as jnp
+import ml_collections
+import numpy as np
+
+
+def squared_difference(x, y):
+  return jnp.square(x - y)
+
+
+class InvariantPointAttention(hk.Module):
+  """Invariant Point attention module.
+
+  The high-level idea is that this attention module works over a set of points
+  and associated orientations in 3D space (e.g. protein residues).
+
+  Each residue outputs a set of queries and keys as points in their local
+  reference frame.  The attention is then defined as the euclidean distance
+  between the queries and keys in the global frame.
+
+  Jumper et al. (2021) Suppl. Alg. 22 "InvariantPointAttention"
+  """
+
+  def __init__(self,
+               config,
+               global_config,
+               dist_epsilon=1e-8,
+               name='invariant_point_attention'):
+    """Initialize.
+
+    Args:
+      config: Structure Module Config
+      global_config: Global Config of Model.
+      dist_epsilon: Small value to avoid NaN in distance calculation.
+      name: Haiku Module name.
+    """
+    super().__init__(name=name)
+
+    self._dist_epsilon = dist_epsilon
+    self._zero_initialize_last = global_config.zero_init
+
+    self.config = config
+
+    self.global_config = global_config
+
+  def __call__(self, inputs_1d, inputs_2d, mask, affine):
+    """Compute geometry-aware attention.
+
+    Given a set of query residues (defined by affines and associated scalar
+    features), this function computes geometry-aware attention between the
+    query residues and target residues.
+
+    The residues produce points in their local reference frame, which
+    are converted into the global frame in order to compute attention via
+    euclidean distance.
+
+    Equivalently, the target residues produce points in their local frame to be
+    used as attention values, which are converted into the query residues'
+    local frames.
+
+    Args:
+      inputs_1d: (N, C) 1D input embedding that is the basis for the
+        scalar queries.
+      inputs_2d: (N, M, C') 2D input embedding, used for biases and values.
+      mask: (N, 1) mask to indicate which elements of inputs_1d participate
+        in the attention.
+      affine: QuatAffine object describing the position and orientation of
+        every element in inputs_1d.
+
+    Returns:
+      Transformation of the input embedding.
+    """
+    num_residues, _ = inputs_1d.shape
+
+    # Improve readability by removing a large number of 'self's.
+    num_head = self.config.num_head
+    num_scalar_qk = self.config.num_scalar_qk
+    num_point_qk = self.config.num_point_qk
+    num_scalar_v = self.config.num_scalar_v
+    num_point_v = self.config.num_point_v
+    num_output = self.config.num_channel
+
+    assert num_scalar_qk > 0
+    assert num_point_qk > 0
+    assert num_point_v > 0
+
+    # Construct scalar queries of shape:
+    # [num_query_residues, num_head, num_points]
+    q_scalar = common_modules.Linear(
+        num_head * num_scalar_qk, name='q_scalar')(
+            inputs_1d)
+    q_scalar = jnp.reshape(
+        q_scalar, [num_residues, num_head, num_scalar_qk])
+
+    # Construct scalar keys/values of shape:
+    # [num_target_residues, num_head, num_points]
+    kv_scalar = common_modules.Linear(
+        num_head * (num_scalar_v + num_scalar_qk), name='kv_scalar')(
+            inputs_1d)
+    kv_scalar = jnp.reshape(kv_scalar,
+                            [num_residues, num_head,
+                             num_scalar_v + num_scalar_qk])
+    k_scalar, v_scalar = jnp.split(kv_scalar, [num_scalar_qk], axis=-1)
+
+    # Construct query points of shape:
+    # [num_residues, num_head, num_point_qk]
+
+    # First construct query points in local frame.
+    q_point_local = common_modules.Linear(
+        num_head * 3 * num_point_qk, name='q_point_local')(
+            inputs_1d)
+    q_point_local = jnp.split(q_point_local, 3, axis=-1)
+    # Project query points into global frame.
+    q_point_global = affine.apply_to_point(q_point_local, extra_dims=1)
+    # Reshape query point for later use.
+    q_point = [
+        jnp.reshape(x, [num_residues, num_head, num_point_qk])
+        for x in q_point_global]
+
+    # Construct key and value points.
+    # Key points have shape [num_residues, num_head, num_point_qk]
+    # Value points have shape [num_residues, num_head, num_point_v]
+
+    # Construct key and value points in local frame.
+    kv_point_local = common_modules.Linear(
+        num_head * 3 * (num_point_qk + num_point_v), name='kv_point_local')(
+            inputs_1d)
+    kv_point_local = jnp.split(kv_point_local, 3, axis=-1)
+    # Project key and value points into global frame.
+    kv_point_global = affine.apply_to_point(kv_point_local, extra_dims=1)
+    kv_point_global = [
+        jnp.reshape(x, [num_residues,
+                        num_head, (num_point_qk + num_point_v)])
+        for x in kv_point_global]
+    # Split key and value points.
+    k_point, v_point = list(
+        zip(*[
+            jnp.split(x, [num_point_qk,], axis=-1)
+            for x in kv_point_global
+        ]))
+
+    # We assume that all queries and keys come iid from N(0, 1) distribution
+    # and compute the variances of the attention logits.
+    # Each scalar pair (q, k) contributes Var q*k = 1
+    scalar_variance = max(num_scalar_qk, 1) * 1.
+    # Each point pair (q, k) contributes Var [0.5 ||q||^2 - <q, k>] = 9 / 2
+    point_variance = max(num_point_qk, 1) * 9. / 2
+
+    # Allocate equal variance to scalar, point and attention 2d parts so that
+    # the sum is 1.
+
+    num_logit_terms = 3
+
+    scalar_weights = np.sqrt(1.0 / (num_logit_terms * scalar_variance))
+    point_weights = np.sqrt(1.0 / (num_logit_terms * point_variance))
+    attention_2d_weights = np.sqrt(1.0 / (num_logit_terms))
+
+    # Trainable per-head weights for points.
+    trainable_point_weights = jax.nn.softplus(hk.get_parameter(
+        'trainable_point_weights', shape=[num_head],
+        # softplus^{-1} (1)
+        init=hk.initializers.Constant(np.log(np.exp(1.) - 1.))))
+    point_weights *= jnp.expand_dims(trainable_point_weights, axis=1)
+
+    v_point = [jnp.swapaxes(x, -2, -3) for x in v_point]
+
+    q_point = [jnp.swapaxes(x, -2, -3) for x in q_point]
+    k_point = [jnp.swapaxes(x, -2, -3) for x in k_point]
+    dist2 = [
+        squared_difference(qx[:, :, None, :], kx[:, None, :, :])
+        for qx, kx in zip(q_point, k_point)
+    ]
+    dist2 = sum(dist2)
+    attn_qk_point = -0.5 * jnp.sum(
+        point_weights[:, None, None, :] * dist2, axis=-1)
+
+    v = jnp.swapaxes(v_scalar, -2, -3)
+    q = jnp.swapaxes(scalar_weights * q_scalar, -2, -3)
+    k = jnp.swapaxes(k_scalar, -2, -3)
+    attn_qk_scalar = jnp.matmul(q, jnp.swapaxes(k, -2, -1))
+    attn_logits = attn_qk_scalar + attn_qk_point
+
+    attention_2d = common_modules.Linear(
+        num_head, name='attention_2d')(
+            inputs_2d)
+
+    attention_2d = jnp.transpose(attention_2d, [2, 0, 1])
+    attention_2d = attention_2d_weights * attention_2d
+    attn_logits += attention_2d
+
+    mask_2d = mask * jnp.swapaxes(mask, -1, -2)
+    attn_logits -= 1e5 * (1. - mask_2d)
+
+    # [num_head, num_query_residues, num_target_residues]
+    attn = jax.nn.softmax(attn_logits)
+
+    # [num_head, num_query_residues, num_head * num_scalar_v]
+    result_scalar = jnp.matmul(attn, v)
+
+    # For point result, implement matmul manually so that it will be a float32
+    # on TPU.  This is equivalent to
+    # result_point_global = [jnp.einsum('bhqk,bhkc->bhqc', attn, vx)
+    #                        for vx in v_point]
+    # but on the TPU, doing the multiply and reduce_sum ensures the
+    # computation happens in float32 instead of bfloat16.
+    result_point_global = [jnp.sum(
+        attn[:, :, :, None] * vx[:, None, :, :],
+        axis=-2) for vx in v_point]
+
+    # [num_query_residues, num_head, num_head * num_(scalar|point)_v]
+    result_scalar = jnp.swapaxes(result_scalar, -2, -3)
+    result_point_global = [
+        jnp.swapaxes(x, -2, -3)
+        for x in result_point_global]
+
+    # Features used in the linear output projection. Should have the size
+    # [num_query_residues, ?]
+    output_features = []
+
+    result_scalar = jnp.reshape(
+        result_scalar, [num_residues, num_head * num_scalar_v])
+    output_features.append(result_scalar)
+
+    result_point_global = [
+        jnp.reshape(r, [num_residues, num_head * num_point_v])
+        for r in result_point_global]
+    result_point_local = affine.invert_point(result_point_global, extra_dims=1)
+    output_features.extend(result_point_local)
+
+    output_features.append(jnp.sqrt(self._dist_epsilon +
+                                    jnp.square(result_point_local[0]) +
+                                    jnp.square(result_point_local[1]) +
+                                    jnp.square(result_point_local[2])))
+
+    # Dimensions: h = heads, i and j = residues,
+    # c = inputs_2d channels
+    # Contraction happens over the second residue dimension, similarly to how
+    # the usual attention is performed.
+    result_attention_over_2d = jnp.einsum('hij, ijc->ihc', attn, inputs_2d)
+    num_out = num_head * result_attention_over_2d.shape[-1]
+    output_features.append(
+        jnp.reshape(result_attention_over_2d,
+                    [num_residues, num_out]))
+
+    final_init = 'zeros' if self._zero_initialize_last else 'linear'
+
+    final_act = jnp.concatenate(output_features, axis=-1)
+
+    return common_modules.Linear(
+        num_output,
+        initializer=final_init,
+        name='output_projection')(final_act)
+
+
+class FoldIteration(hk.Module):
+  """A single iteration of the main structure module loop.
+
+  Jumper et al. (2021) Suppl. Alg. 20 "StructureModule" lines 6-21
+
+  First, each residue attends to all residues using InvariantPointAttention.
+  Then, we apply transition layers to update the hidden representations.
+  Finally, we use the hidden representations to produce an update to the
+  affine of each residue.
+  """
+
+  def __init__(self, config, global_config,
+               name='fold_iteration'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self,
+               activations,
+               sequence_mask,
+               update_affine,
+               is_training,
+               initial_act,
+               safe_key=None,
+               static_feat_2d=None,
+               aatype=None):
+    c = self.config
+
+    if safe_key is None:
+      safe_key = prng.SafeKey(hk.next_rng_key())
+
+    def safe_dropout_fn(tensor, safe_key):
+      return prng.safe_dropout(
+          tensor=tensor,
+          safe_key=safe_key,
+          rate=c.dropout,
+          is_deterministic=self.global_config.deterministic,
+          is_training=is_training)
+
+    affine = quat_affine.QuatAffine.from_tensor(activations['affine'])
+
+    act = activations['act']
+    attention_module = InvariantPointAttention(self.config, self.global_config)
+    # Attention
+    attn = attention_module(
+        inputs_1d=act,
+        inputs_2d=static_feat_2d,
+        mask=sequence_mask,
+        affine=affine)
+    act += attn
+    safe_key, *sub_keys = safe_key.split(3)
+    sub_keys = iter(sub_keys)
+    act = safe_dropout_fn(act, next(sub_keys))
+    act = hk.LayerNorm(
+        axis=[-1],
+        create_scale=True,
+        create_offset=True,
+        name='attention_layer_norm')(
+            act)
+
+    final_init = 'zeros' if self.global_config.zero_init else 'linear'
+
+    # Transition
+    input_act = act
+    for i in range(c.num_layer_in_transition):
+      init = 'relu' if i < c.num_layer_in_transition - 1 else final_init
+      act = common_modules.Linear(
+          c.num_channel,
+          initializer=init,
+          name='transition')(
+              act)
+      if i < c.num_layer_in_transition - 1:
+        act = jax.nn.relu(act)
+    act += input_act
+    act = safe_dropout_fn(act, next(sub_keys))
+    act = hk.LayerNorm(
+        axis=[-1],
+        create_scale=True,
+        create_offset=True,
+        name='transition_layer_norm')(act)
+
+    if update_affine:
+      # This block corresponds to
+      # Jumper et al. (2021) Alg. 23 "Backbone update"
+      affine_update_size = 6
+
+      # Affine update
+      affine_update = common_modules.Linear(
+          affine_update_size,
+          initializer=final_init,
+          name='affine_update')(
+              act)
+
+      affine = affine.pre_compose(affine_update)
+
+    sc = MultiRigidSidechain(c.sidechain, self.global_config)(
+        affine.scale_translation(c.position_scale), [act, initial_act], aatype)
+
+    outputs = {'affine': affine.to_tensor(), 'sc': sc}
+
+    affine = affine.apply_rotation_tensor_fn(jax.lax.stop_gradient)
+
+    new_activations = {
+        'act': act,
+        'affine': affine.to_tensor()
+    }
+    return new_activations, outputs
+
+
+def generate_affines(representations, batch, config, global_config,
+                     is_training, safe_key):
+  """Generate predicted affines for a single chain.
+
+  Jumper et al. (2021) Suppl. Alg. 20 "StructureModule"
+
+  This is the main part of the structure module - it iteratively applies
+  folding to produce a set of predicted residue positions.
+
+  Args:
+    representations: Representations dictionary.
+    batch: Batch dictionary.
+    config: Config for the structure module.
+    global_config: Global config.
+    is_training: Whether the model is being trained.
+    safe_key: A prng.SafeKey object that wraps a PRNG key.
+
+  Returns:
+    A dictionary containing residue affines and sidechain positions.
+  """
+  c = config
+  sequence_mask = batch['seq_mask'][:, None]
+
+  act = hk.LayerNorm(
+      axis=[-1],
+      create_scale=True,
+      create_offset=True,
+      name='single_layer_norm')(
+          representations['single'])
+
+  initial_act = act
+  act = common_modules.Linear(
+      c.num_channel, name='initial_projection')(
+          act)
+
+  affine = generate_new_affine(sequence_mask)
+
+  fold_iteration = FoldIteration(
+      c, global_config, name='fold_iteration')
+
+  assert len(batch['seq_mask'].shape) == 1
+
+  activations = {'act': act,
+                 'affine': affine.to_tensor(),
+                 }
+
+  act_2d = hk.LayerNorm(
+      axis=[-1],
+      create_scale=True,
+      create_offset=True,
+      name='pair_layer_norm')(
+          representations['pair'])
+
+  outputs = []
+  safe_keys = safe_key.split(c.num_layer)
+  for sub_key in safe_keys:
+    activations, output = fold_iteration(
+        activations,
+        initial_act=initial_act,
+        static_feat_2d=act_2d,
+        safe_key=sub_key,
+        sequence_mask=sequence_mask,
+        update_affine=True,
+        is_training=is_training,
+        aatype=batch['aatype'])
+    outputs.append(output)
+
+  output = jax.tree_map(lambda *x: jnp.stack(x), *outputs)
+  # Include the activations in the output dict for use by the LDDT-Head.
+  output['act'] = activations['act']
+
+  return output
+
+
+class StructureModule(hk.Module):
+  """StructureModule as a network head.
+
+  Jumper et al. (2021) Suppl. Alg. 20 "StructureModule"
+  """
+
+  def __init__(self, config, global_config, compute_loss=True,
+               name='structure_module'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+    self.compute_loss = compute_loss
+
+  def __call__(self, representations, batch, is_training,
+               safe_key=None):
+    c = self.config
+    ret = {}
+
+    if safe_key is None:
+      safe_key = prng.SafeKey(hk.next_rng_key())
+
+    output = generate_affines(
+        representations=representations,
+        batch=batch,
+        config=self.config,
+        global_config=self.global_config,
+        is_training=is_training,
+        safe_key=safe_key)
+
+    ret['representations'] = {'structure_module': output['act']}
+
+    ret['traj'] = output['affine'] * jnp.array([1.] * 4 +
+                                               [c.position_scale] * 3)
+
+    ret['sidechains'] = output['sc']
+
+    atom14_pred_positions = r3.vecs_to_tensor(output['sc']['atom_pos'])[-1]
+    ret['final_atom14_positions'] = atom14_pred_positions  # (N, 14, 3)
+    ret['final_atom14_mask'] = batch['atom14_atom_exists']  # (N, 14)
+
+    atom37_pred_positions = all_atom.atom14_to_atom37(atom14_pred_positions,
+                                                      batch)
+    atom37_pred_positions *= batch['atom37_atom_exists'][:, :, None]
+    ret['final_atom_positions'] = atom37_pred_positions  # (N, 37, 3)
+
+    ret['final_atom_mask'] = batch['atom37_atom_exists']  # (N, 37)
+    ret['final_affines'] = ret['traj'][-1]
+
+    if self.compute_loss:
+      return ret
+    else:
+      no_loss_features = ['final_atom_positions', 'final_atom_mask',
+                          'representations']
+      no_loss_ret = {k: ret[k] for k in no_loss_features}
+      return no_loss_ret
+
+  def loss(self, value, batch):
+    ret = {'loss': 0.}
+
+    ret['metrics'] = {}
+    # If requested, compute in-graph metrics.
+    if self.config.compute_in_graph_metrics:
+      atom14_pred_positions = value['final_atom14_positions']
+      # Compute renaming and violations.
+      value.update(compute_renamed_ground_truth(batch, atom14_pred_positions))
+      value['violations'] = find_structural_violations(
+          batch, atom14_pred_positions, self.config)
+
+      # Several violation metrics:
+      violation_metrics = compute_violation_metrics(
+          batch=batch,
+          atom14_pred_positions=atom14_pred_positions,
+          violations=value['violations'])
+      ret['metrics'].update(violation_metrics)
+
+    backbone_loss(ret, batch, value, self.config)
+
+    if 'renamed_atom14_gt_positions' not in value:
+      value.update(compute_renamed_ground_truth(
+          batch, value['final_atom14_positions']))
+    sc_loss = sidechain_loss(batch, value, self.config)
+
+    ret['loss'] = ((1 - self.config.sidechain.weight_frac) * ret['loss'] +
+                   self.config.sidechain.weight_frac * sc_loss['loss'])
+    ret['sidechain_fape'] = sc_loss['fape']
+
+    supervised_chi_loss(ret, batch, value, self.config)
+
+    if self.config.structural_violation_loss_weight:
+      if 'violations' not in value:
+        value['violations'] = find_structural_violations(
+            batch, value['final_atom14_positions'], self.config)
+      structural_violation_loss(ret, batch, value, self.config)
+
+    return ret
+
+
+def compute_renamed_ground_truth(
+    batch: Dict[str, jnp.ndarray],
+    atom14_pred_positions: jnp.ndarray,
+    ) -> Dict[str, jnp.ndarray]:
+  """Find optimal renaming of ground truth based on the predicted positions.
+
+  Jumper et al. (2021) Suppl. Alg. 26 "renameSymmetricGroundTruthAtoms"
+
+  This renamed ground truth is then used for all losses,
+  such that each loss moves the atoms in the same direction.
+  Shape (N).
+
+  Args:
+    batch: Dictionary containing:
+      * atom14_gt_positions: Ground truth positions.
+      * atom14_alt_gt_positions: Ground truth positions with renaming swaps.
+      * atom14_atom_is_ambiguous: 1.0 for atoms that are affected by
+          renaming swaps.
+      * atom14_gt_exists: Mask for which atoms exist in ground truth.
+      * atom14_alt_gt_exists: Mask for which atoms exist in ground truth
+          after renaming.
+      * atom14_atom_exists: Mask for whether each atom is part of the given
+          amino acid type.
+    atom14_pred_positions: Array of atom positions in global frame with shape
+      (N, 14, 3).
+  Returns:
+    Dictionary containing:
+      alt_naming_is_better: Array with 1.0 where alternative swap is better.
+      renamed_atom14_gt_positions: Array of optimal ground truth positions
+        after renaming swaps are performed.
+      renamed_atom14_gt_exists: Mask after renaming swap is performed.
+  """
+  alt_naming_is_better = all_atom.find_optimal_renaming(
+      atom14_gt_positions=batch['atom14_gt_positions'],
+      atom14_alt_gt_positions=batch['atom14_alt_gt_positions'],
+      atom14_atom_is_ambiguous=batch['atom14_atom_is_ambiguous'],
+      atom14_gt_exists=batch['atom14_gt_exists'],
+      atom14_pred_positions=atom14_pred_positions,
+      atom14_atom_exists=batch['atom14_atom_exists'])
+
+  renamed_atom14_gt_positions = (
+      (1. - alt_naming_is_better[:, None, None])
+      * batch['atom14_gt_positions']
+      + alt_naming_is_better[:, None, None]
+      * batch['atom14_alt_gt_positions'])
+
+  renamed_atom14_gt_mask = (
+      (1. - alt_naming_is_better[:, None]) * batch['atom14_gt_exists']
+      + alt_naming_is_better[:, None] * batch['atom14_alt_gt_exists'])
+
+  return {
+      'alt_naming_is_better': alt_naming_is_better,  # (N)
+      'renamed_atom14_gt_positions': renamed_atom14_gt_positions,  # (N, 14, 3)
+      'renamed_atom14_gt_exists': renamed_atom14_gt_mask,  # (N, 14)
+  }
+
+
+def backbone_loss(ret, batch, value, config):
+  """Backbone FAPE Loss.
+
+  Jumper et al. (2021) Suppl. Alg. 20 "StructureModule" line 17
+
+  Args:
+    ret: Dictionary to write outputs into, needs to contain 'loss'.
+    batch: Batch, needs to contain 'backbone_affine_tensor',
+      'backbone_affine_mask'.
+    value: Dictionary containing structure module output, needs to contain
+      'traj', a trajectory of rigids.
+    config: Configuration of loss, should contain 'fape.clamp_distance' and
+      'fape.loss_unit_distance'.
+  """
+  affine_trajectory = quat_affine.QuatAffine.from_tensor(value['traj'])
+  rigid_trajectory = r3.rigids_from_quataffine(affine_trajectory)
+
+  gt_affine = quat_affine.QuatAffine.from_tensor(
+      batch['backbone_affine_tensor'])
+  gt_rigid = r3.rigids_from_quataffine(gt_affine)
+  backbone_mask = batch['backbone_affine_mask']
+
+  fape_loss_fn = functools.partial(
+      all_atom.frame_aligned_point_error,
+      l1_clamp_distance=config.fape.clamp_distance,
+      length_scale=config.fape.loss_unit_distance)
+
+  fape_loss_fn = jax.vmap(fape_loss_fn, (0, None, None, 0, None, None))
+  fape_loss = fape_loss_fn(rigid_trajectory, gt_rigid, backbone_mask,
+                           rigid_trajectory.trans, gt_rigid.trans,
+                           backbone_mask)
+
+  if 'use_clamped_fape' in batch:
+    # Jumper et al. (2021) Suppl. Sec. 1.11.5 "Loss clamping details"
+    use_clamped_fape = jnp.asarray(batch['use_clamped_fape'], jnp.float32)
+    unclamped_fape_loss_fn = functools.partial(
+        all_atom.frame_aligned_point_error,
+        l1_clamp_distance=None,
+        length_scale=config.fape.loss_unit_distance)
+    unclamped_fape_loss_fn = jax.vmap(unclamped_fape_loss_fn,
+                                      (0, None, None, 0, None, None))
+    fape_loss_unclamped = unclamped_fape_loss_fn(rigid_trajectory, gt_rigid,
+                                                 backbone_mask,
+                                                 rigid_trajectory.trans,
+                                                 gt_rigid.trans,
+                                                 backbone_mask)
+
+    fape_loss = (fape_loss * use_clamped_fape +
+                 fape_loss_unclamped * (1 - use_clamped_fape))
+
+  ret['fape'] = fape_loss[-1]
+  ret['loss'] += jnp.mean(fape_loss)
+
+
+def sidechain_loss(batch, value, config):
+  """All Atom FAPE Loss using renamed rigids."""
+  # Rename Frames
+  # Jumper et al. (2021) Suppl. Alg. 26 "renameSymmetricGroundTruthAtoms" line 7
+  alt_naming_is_better = value['alt_naming_is_better']
+  renamed_gt_frames = (
+      (1. - alt_naming_is_better[:, None, None])
+      * batch['rigidgroups_gt_frames']
+      + alt_naming_is_better[:, None, None]
+      * batch['rigidgroups_alt_gt_frames'])
+
+  flat_gt_frames = r3.rigids_from_tensor_flat12(
+      jnp.reshape(renamed_gt_frames, [-1, 12]))
+  flat_frames_mask = jnp.reshape(batch['rigidgroups_gt_exists'], [-1])
+
+  flat_gt_positions = r3.vecs_from_tensor(
+      jnp.reshape(value['renamed_atom14_gt_positions'], [-1, 3]))
+  flat_positions_mask = jnp.reshape(value['renamed_atom14_gt_exists'], [-1])
+
+  # Compute frame_aligned_point_error score for the final layer.
+  pred_frames = value['sidechains']['frames']
+  pred_positions = value['sidechains']['atom_pos']
+
+  def _slice_last_layer_and_flatten(x):
+    return jnp.reshape(x[-1], [-1])
+  flat_pred_frames = jax.tree_map(
+      _slice_last_layer_and_flatten, pred_frames)
+  flat_pred_positions = jax.tree_map(
+      _slice_last_layer_and_flatten, pred_positions)
+  # FAPE Loss on sidechains
+  fape = all_atom.frame_aligned_point_error(
+      pred_frames=flat_pred_frames,
+      target_frames=flat_gt_frames,
+      frames_mask=flat_frames_mask,
+      pred_positions=flat_pred_positions,
+      target_positions=flat_gt_positions,
+      positions_mask=flat_positions_mask,
+      l1_clamp_distance=config.sidechain.atom_clamp_distance,
+      length_scale=config.sidechain.length_scale)
+
+  return {
+      'fape': fape,
+      'loss': fape}
+
+
+def structural_violation_loss(ret, batch, value, config):
+  """Computes loss for structural violations."""
+  assert config.sidechain.weight_frac
+
+  # Put all violation losses together to one large loss.
+  violations = value['violations']
+  num_atoms = jnp.sum(batch['atom14_atom_exists']).astype(jnp.float32)
+  ret['loss'] += (config.structural_violation_loss_weight * (
+      violations['between_residues']['bonds_c_n_loss_mean'] +
+      violations['between_residues']['angles_ca_c_n_loss_mean'] +
+      violations['between_residues']['angles_c_n_ca_loss_mean'] +
+      jnp.sum(
+          violations['between_residues']['clashes_per_atom_loss_sum'] +
+          violations['within_residues']['per_atom_loss_sum']) /
+      (1e-6 + num_atoms)))
+
+
+def find_structural_violations(
+    batch: Dict[str, jnp.ndarray],
+    atom14_pred_positions: jnp.ndarray,  # (N, 14, 3)
+    config: ml_collections.ConfigDict
+    ):
+  """Computes several checks for structural violations."""
+
+  # Compute between residue backbone violations of bonds and angles.
+  connection_violations = all_atom.between_residue_bond_loss(
+      pred_atom_positions=atom14_pred_positions,
+      pred_atom_mask=batch['atom14_atom_exists'].astype(jnp.float32),
+      residue_index=batch['residue_index'].astype(jnp.float32),
+      aatype=batch['aatype'],
+      tolerance_factor_soft=config.violation_tolerance_factor,
+      tolerance_factor_hard=config.violation_tolerance_factor)
+
+  # Compute the Van der Waals radius for every atom
+  # (the first letter of the atom name is the element type).
+  # Shape: (N, 14).
+  atomtype_radius = jnp.array([
+      residue_constants.van_der_waals_radius[name[0]]
+      for name in residue_constants.atom_types
+  ])
+  atom14_atom_radius = batch['atom14_atom_exists'] * utils.batched_gather(
+      atomtype_radius, batch['residx_atom14_to_atom37'])
+
+  # Compute the between residue clash loss.
+  between_residue_clashes = all_atom.between_residue_clash_loss(
+      atom14_pred_positions=atom14_pred_positions,
+      atom14_atom_exists=batch['atom14_atom_exists'],
+      atom14_atom_radius=atom14_atom_radius,
+      residue_index=batch['residue_index'],
+      overlap_tolerance_soft=config.clash_overlap_tolerance,
+      overlap_tolerance_hard=config.clash_overlap_tolerance)
+
+  # Compute all within-residue violations (clashes,
+  # bond length and angle violations).
+  restype_atom14_bounds = residue_constants.make_atom14_dists_bounds(
+      overlap_tolerance=config.clash_overlap_tolerance,
+      bond_length_tolerance_factor=config.violation_tolerance_factor)
+  atom14_dists_lower_bound = utils.batched_gather(
+      restype_atom14_bounds['lower_bound'], batch['aatype'])
+  atom14_dists_upper_bound = utils.batched_gather(
+      restype_atom14_bounds['upper_bound'], batch['aatype'])
+  within_residue_violations = all_atom.within_residue_violations(
+      atom14_pred_positions=atom14_pred_positions,
+      atom14_atom_exists=batch['atom14_atom_exists'],
+      atom14_dists_lower_bound=atom14_dists_lower_bound,
+      atom14_dists_upper_bound=atom14_dists_upper_bound,
+      tighten_bounds_for_loss=0.0)
+
+  # Combine them to a single per-residue violation mask (used later for LDDT).
+  per_residue_violations_mask = jnp.max(jnp.stack([
+      connection_violations['per_residue_violation_mask'],
+      jnp.max(between_residue_clashes['per_atom_clash_mask'], axis=-1),
+      jnp.max(within_residue_violations['per_atom_violations'],
+              axis=-1)]), axis=0)
+
+  return {
+      'between_residues': {
+          'bonds_c_n_loss_mean':
+              connection_violations['c_n_loss_mean'],  # ()
+          'angles_ca_c_n_loss_mean':
+              connection_violations['ca_c_n_loss_mean'],  # ()
+          'angles_c_n_ca_loss_mean':
+              connection_violations['c_n_ca_loss_mean'],  # ()
+          'connections_per_residue_loss_sum':
+              connection_violations['per_residue_loss_sum'],  # (N)
+          'connections_per_residue_violation_mask':
+              connection_violations['per_residue_violation_mask'],  # (N)
+          'clashes_mean_loss':
+              between_residue_clashes['mean_loss'],  # ()
+          'clashes_per_atom_loss_sum':
+              between_residue_clashes['per_atom_loss_sum'],  # (N, 14)
+          'clashes_per_atom_clash_mask':
+              between_residue_clashes['per_atom_clash_mask'],  # (N, 14)
+      },
+      'within_residues': {
+          'per_atom_loss_sum':
+              within_residue_violations['per_atom_loss_sum'],  # (N, 14)
+          'per_atom_violations':
+              within_residue_violations['per_atom_violations'],  # (N, 14),
+      },
+      'total_per_residue_violations_mask':
+          per_residue_violations_mask,  # (N)
+  }
+
+
+def compute_violation_metrics(
+    batch: Dict[str, jnp.ndarray],
+    atom14_pred_positions: jnp.ndarray,  # (N, 14, 3)
+    violations: Dict[str, jnp.ndarray],
+    ) -> Dict[str, jnp.ndarray]:
+  """Compute several metrics to assess the structural violations."""
+
+  ret = {}
+  extreme_ca_ca_violations = all_atom.extreme_ca_ca_distance_violations(
+      pred_atom_positions=atom14_pred_positions,
+      pred_atom_mask=batch['atom14_atom_exists'].astype(jnp.float32),
+      residue_index=batch['residue_index'].astype(jnp.float32))
+  ret['violations_extreme_ca_ca_distance'] = extreme_ca_ca_violations
+  ret['violations_between_residue_bond'] = utils.mask_mean(
+      mask=batch['seq_mask'],
+      value=violations['between_residues'][
+          'connections_per_residue_violation_mask'])
+  ret['violations_between_residue_clash'] = utils.mask_mean(
+      mask=batch['seq_mask'],
+      value=jnp.max(
+          violations['between_residues']['clashes_per_atom_clash_mask'],
+          axis=-1))
+  ret['violations_within_residue'] = utils.mask_mean(
+      mask=batch['seq_mask'],
+      value=jnp.max(
+          violations['within_residues']['per_atom_violations'], axis=-1))
+  ret['violations_per_residue'] = utils.mask_mean(
+      mask=batch['seq_mask'],
+      value=violations['total_per_residue_violations_mask'])
+  return ret
+
+
+def supervised_chi_loss(ret, batch, value, config):
+  """Computes loss for direct chi angle supervision.
+
+  Jumper et al. (2021) Suppl. Alg. 27 "torsionAngleLoss"
+
+  Args:
+    ret: Dictionary to write outputs into, needs to contain 'loss'.
+    batch: Batch, needs to contain 'seq_mask', 'chi_mask', 'chi_angles'.
+    value: Dictionary containing structure module output, needs to contain
+      value['sidechains']['angles_sin_cos'] for angles and
+      value['sidechains']['unnormalized_angles_sin_cos'] for unnormalized
+      angles.
+    config: Configuration of loss, should contain 'chi_weight' and
+      'angle_norm_weight', 'angle_norm_weight' scales angle norm term,
+      'chi_weight' scales torsion term.
+  """
+  eps = 1e-6
+
+  sequence_mask = batch['seq_mask']
+  num_res = sequence_mask.shape[0]
+  chi_mask = batch['chi_mask'].astype(jnp.float32)
+  pred_angles = jnp.reshape(
+      value['sidechains']['angles_sin_cos'], [-1, num_res, 7, 2])
+  pred_angles = pred_angles[:, :, 3:]
+
+  residue_type_one_hot = jax.nn.one_hot(
+      batch['aatype'], residue_constants.restype_num + 1,
+      dtype=jnp.float32)[None]
+  chi_pi_periodic = jnp.einsum('ijk, kl->ijl', residue_type_one_hot,
+                               jnp.asarray(residue_constants.chi_pi_periodic))
+
+  true_chi = batch['chi_angles'][None]
+  sin_true_chi = jnp.sin(true_chi)
+  cos_true_chi = jnp.cos(true_chi)
+  sin_cos_true_chi = jnp.stack([sin_true_chi, cos_true_chi], axis=-1)
+
+  # This is -1 if chi is pi-periodic and +1 if it's 2pi-periodic
+  shifted_mask = (1 - 2 * chi_pi_periodic)[..., None]
+  sin_cos_true_chi_shifted = shifted_mask * sin_cos_true_chi
+
+  sq_chi_error = jnp.sum(
+      squared_difference(sin_cos_true_chi, pred_angles), -1)
+  sq_chi_error_shifted = jnp.sum(
+      squared_difference(sin_cos_true_chi_shifted, pred_angles), -1)
+  sq_chi_error = jnp.minimum(sq_chi_error, sq_chi_error_shifted)
+
+  sq_chi_loss = utils.mask_mean(mask=chi_mask[None], value=sq_chi_error)
+  ret['chi_loss'] = sq_chi_loss
+  ret['loss'] += config.chi_weight * sq_chi_loss
+  unnormed_angles = jnp.reshape(
+      value['sidechains']['unnormalized_angles_sin_cos'], [-1, num_res, 7, 2])
+  angle_norm = jnp.sqrt(jnp.sum(jnp.square(unnormed_angles), axis=-1) + eps)
+  norm_error = jnp.abs(angle_norm - 1.)
+  angle_norm_loss = utils.mask_mean(mask=sequence_mask[None, :, None],
+                                    value=norm_error)
+
+  ret['angle_norm_loss'] = angle_norm_loss
+  ret['loss'] += config.angle_norm_weight * angle_norm_loss
+
+
+def generate_new_affine(sequence_mask):
+  num_residues, _ = sequence_mask.shape
+  quaternion = jnp.tile(
+      jnp.reshape(jnp.asarray([1., 0., 0., 0.]), [1, 4]),
+      [num_residues, 1])
+
+  translation = jnp.zeros([num_residues, 3])
+  return quat_affine.QuatAffine(quaternion, translation, unstack_inputs=True)
+
+
+def l2_normalize(x, axis=-1, epsilon=1e-12):
+  return x / jnp.sqrt(
+      jnp.maximum(jnp.sum(x**2, axis=axis, keepdims=True), epsilon))
+
+
+class MultiRigidSidechain(hk.Module):
+  """Class to make side chain atoms."""
+
+  def __init__(self, config, global_config, name='rigid_sidechain'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, affine, representations_list, aatype):
+    """Predict side chains using multi-rigid representations.
+
+    Args:
+      affine: The affines for each residue (translations in angstroms).
+      representations_list: A list of activations to predict side chains from.
+      aatype: Amino acid types.
+
+    Returns:
+      Dict containing atom positions and frames (in angstroms).
+    """
+    act = [
+        common_modules.Linear(  # pylint: disable=g-complex-comprehension
+            self.config.num_channel,
+            name='input_projection')(jax.nn.relu(x))
+        for x in representations_list
+    ]
+    # Sum the activation list (equivalent to concat then Linear).
+    act = sum(act)
+
+    final_init = 'zeros' if self.global_config.zero_init else 'linear'
+
+    # Mapping with some residual blocks.
+    for _ in range(self.config.num_residual_block):
+      old_act = act
+      act = common_modules.Linear(
+          self.config.num_channel,
+          initializer='relu',
+          name='resblock1')(
+              jax.nn.relu(act))
+      act = common_modules.Linear(
+          self.config.num_channel,
+          initializer=final_init,
+          name='resblock2')(
+              jax.nn.relu(act))
+      act += old_act
+
+    # Map activations to torsion angles. Shape: (num_res, 14).
+    num_res = act.shape[0]
+    unnormalized_angles = common_modules.Linear(
+        14, name='unnormalized_angles')(
+            jax.nn.relu(act))
+    unnormalized_angles = jnp.reshape(
+        unnormalized_angles, [num_res, 7, 2])
+    angles = l2_normalize(unnormalized_angles, axis=-1)
+
+    outputs = {
+        'angles_sin_cos': angles,  # jnp.ndarray (N, 7, 2)
+        'unnormalized_angles_sin_cos':
+            unnormalized_angles,  # jnp.ndarray (N, 7, 2)
+    }
+
+    # Map torsion angles to frames.
+    backb_to_global = r3.rigids_from_quataffine(affine)
+
+    # Jumper et al. (2021) Suppl. Alg. 24 "computeAllAtomCoordinates"
+
+    # r3.Rigids with shape (N, 8).
+    all_frames_to_global = all_atom.torsion_angles_to_frames(
+        aatype,
+        backb_to_global,
+        angles)
+
+    # Use frames and literature positions to create the final atom coordinates.
+    # r3.Vecs with shape (N, 14).
+    pred_positions = all_atom.frames_and_literature_positions_to_atom14_pos(
+        aatype, all_frames_to_global)
+
+    outputs.update({
+        'atom_pos': pred_positions,  # r3.Vecs (N, 14)
+        'frames': all_frames_to_global,  # r3.Rigids (N, 8)
+    })
+    return outputs
diff --git a/alphafold/alphafold/model/layer_stack.py b/alphafold/alphafold/model/layer_stack.py
new file mode 100644
index 0000000000000000000000000000000000000000..cbbb0dcb26445ec8ce57149f31aba9fc4de2863c
--- /dev/null
+++ b/alphafold/alphafold/model/layer_stack.py
@@ -0,0 +1,274 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Function to stack repeats of a layer function without shared parameters."""
+
+import collections
+import contextlib
+import functools
+import inspect
+from typing import Any, Callable, Optional, Tuple, Union
+
+import haiku as hk
+import jax
+import jax.numpy as jnp
+
+LayerStackCarry = collections.namedtuple('LayerStackCarry', ['x', 'rng'])
+LayerStackScanned = collections.namedtuple('LayerStackScanned',
+                                           ['i', 'args_ys'])
+
+# WrappedFn should take in arbitrarily nested `jnp.ndarray`, and return the
+# exact same type. We cannot express this with `typing`. So we just use it
+# to inform the user. In reality, the typing below will accept anything.
+NestedArray = Any
+WrappedFn = Callable[..., Union[NestedArray, Tuple[NestedArray]]]
+
+
+def _check_no_varargs(f):
+  if list(inspect.signature(
+      f).parameters.values())[0].kind == inspect.Parameter.VAR_POSITIONAL:
+    raise ValueError(
+        'The function `f` should not have any `varargs` (that is *args) '
+        'argument. Instead, it should only use explicit positional'
+        'arguments.')
+
+
+@contextlib.contextmanager
+def nullcontext():
+  yield
+
+
+def maybe_with_rng(key):
+  if key is not None:
+    return hk.with_rng(key)
+  else:
+    return nullcontext()
+
+
+def maybe_fold_in(key, data):
+  if key is not None:
+    return jax.random.fold_in(key, data)
+  else:
+    return None
+
+
+class _LayerStack(hk.Module):
+  """Module to compose parameterized functions, implemented as a scan."""
+
+  def __init__(self,
+               count: int,
+               unroll: int,
+               name: Optional[str] = None):
+    """Iterate a function `f` `count` times, with non-shared parameters."""
+    super().__init__(name=name)
+    self._count = count
+    self._unroll = unroll
+
+  def __call__(self, x, *args_ys):
+    count = self._count
+    if hk.running_init():
+      # At initialization time, we run just one layer but add an extra first
+      # dimension to every initialized tensor, making sure to use different
+      # random keys for different slices.
+      def creator(next_creator, shape, dtype, init, context):
+        del context
+
+        def multi_init(shape, dtype):
+          assert shape[0] == count
+          key = hk.maybe_next_rng_key()
+
+          def rng_context_init(slice_idx):
+            slice_key = maybe_fold_in(key, slice_idx)
+            with maybe_with_rng(slice_key):
+              return init(shape[1:], dtype)
+
+          return jax.vmap(rng_context_init)(jnp.arange(count))
+
+        return next_creator((count,) + tuple(shape), dtype, multi_init)
+
+      def getter(next_getter, value, context):
+        trailing_dims = len(context.original_shape) + 1
+        sliced_value = jax.lax.index_in_dim(
+            value, index=0, axis=value.ndim - trailing_dims, keepdims=False)
+        return next_getter(sliced_value)
+
+      with hk.experimental.custom_creator(
+          creator), hk.experimental.custom_getter(getter):
+        if len(args_ys) == 1 and args_ys[0] is None:
+          args0 = (None,)
+        else:
+          args0 = [
+              jax.lax.dynamic_index_in_dim(ys, 0, keepdims=False)
+              for ys in args_ys
+          ]
+        x, z = self._call_wrapped(x, *args0)
+        if z is None:
+          return x, z
+
+        # Broadcast state to hold each layer state.
+        def broadcast_state(layer_state):
+          return jnp.broadcast_to(
+              layer_state, [count,] + list(layer_state.shape))
+        zs = jax.tree_util.tree_map(broadcast_state, z)
+        return x, zs
+    else:
+      # Use scan during apply, threading through random seed so that it's
+      # unique for each layer.
+      def layer(carry: LayerStackCarry, scanned: LayerStackScanned):
+        rng = carry.rng
+
+        def getter(next_getter, value, context):
+          # Getter slices the full param at the current loop index.
+          trailing_dims = len(context.original_shape) + 1
+          assert value.shape[value.ndim - trailing_dims] == count, (
+              f'Attempting to use a parameter stack of size '
+              f'{value.shape[value.ndim - trailing_dims]} for a LayerStack of '
+              f'size {count}.')
+
+          sliced_value = jax.lax.dynamic_index_in_dim(
+              value, scanned.i, axis=value.ndim - trailing_dims, keepdims=False)
+          return next_getter(sliced_value)
+
+        with hk.experimental.custom_getter(getter):
+          if rng is None:
+            out_x, z = self._call_wrapped(carry.x, *scanned.args_ys)
+          else:
+            rng, rng_ = jax.random.split(rng)
+            with hk.with_rng(rng_):
+              out_x, z = self._call_wrapped(carry.x, *scanned.args_ys)
+        return LayerStackCarry(x=out_x, rng=rng), z
+
+      carry = LayerStackCarry(x=x, rng=hk.maybe_next_rng_key())
+      scanned = LayerStackScanned(i=jnp.arange(count, dtype=jnp.int32),
+                                  args_ys=args_ys)
+
+      carry, zs = hk.scan(
+          layer, carry, scanned, length=count, unroll=self._unroll)
+      return carry.x, zs
+
+  def _call_wrapped(self,
+                    x: jnp.ndarray,
+                    *args,
+                    ) -> Tuple[jnp.ndarray, Optional[jnp.ndarray]]:
+    raise NotImplementedError()
+
+
+class _LayerStackNoState(_LayerStack):
+  """_LayerStack impl with no per-layer state provided to the function."""
+
+  def __init__(self,
+               f: WrappedFn,
+               count: int,
+               unroll: int,
+               name: Optional[str] = None):
+    super().__init__(count=count, unroll=unroll, name=name)
+    _check_no_varargs(f)
+    self._f = f
+
+  @hk.transparent
+  def _call_wrapped(self, args, y):
+    del y
+    ret = self._f(*args)
+    if len(args) == 1:
+      # If the function takes a single argument, the wrapped function receives
+      # a tuple of length 1, and therefore it must return a tuple of length 1.
+      ret = (ret,)
+    return ret, None
+
+
+class _LayerStackWithState(_LayerStack):
+  """_LayerStack impl with per-layer state provided to the function."""
+
+  def __init__(self,
+               f: WrappedFn,
+               count: int,
+               unroll: int,
+               name: Optional[str] = None):
+    super().__init__(count=count, unroll=unroll, name=name)
+    self._f = f
+
+  @hk.transparent
+  def _call_wrapped(self, x, *args):
+    return self._f(x, *args)
+
+
+def layer_stack(num_layers: int,
+                with_state=False,
+                unroll: int = 1,
+                name: Optional[str] = None):
+  """Utility to wrap a Haiku function and recursively apply it to an input.
+
+  A function is valid if it uses only explicit position parameters, and
+  its return type matches its input type. The position parameters can be
+  arbitrarily nested structures with `jnp.ndarray` at the leaf nodes. Note
+  that kwargs are not supported, neither are functions with variable number
+  of parameters (specified by `*args`).
+
+  If `with_state=False` then the new, wrapped function can be understood as
+  performing the following:
+  ```
+  for i in range(num_layers):
+    x = f(x)
+  return x
+  ```
+
+  And if `with_state=True`, assuming `f` takes two arguments on top of `x`:
+  ```
+  for i in range(num_layers):
+    x, zs[i] = f(x, ys_0[i], ys_1[i])
+  return x, zs
+  ```
+  The code using `layer_stack` for the above function would be:
+  ```
+  def f(x, y_0, y_1):
+    ...
+    return new_x, z
+  x, zs = layer_stack.layer_stack(num_layers,
+                                  with_state=True)(f)(x, ys_0, ys_1)
+  ```
+
+  Crucially, any parameters created inside `f` will not be shared across
+  iterations.
+
+  Args:
+    num_layers: The number of times to iterate the wrapped function.
+    with_state: Whether or not to pass per-layer state to the wrapped function.
+    unroll: the unroll used by `scan`.
+    name: Name of the Haiku context.
+
+  Returns:
+    Callable that will produce a layer stack when called with a valid function.
+  """
+  def iterate(f):
+    if with_state:
+      @functools.wraps(f)
+      def wrapped(x, *args):
+        for ys in args:
+          assert ys.shape[0] == num_layers
+        return _LayerStackWithState(
+            f, num_layers, unroll=unroll, name=name)(x, *args)
+    else:
+      _check_no_varargs(f)
+      @functools.wraps(f)
+      def wrapped(*args):
+        ret = _LayerStackNoState(
+            f, num_layers, unroll=unroll, name=name)(args, None)[0]
+        if len(args) == 1:
+          # If the function takes a single argument, we must also return a
+          # single value, and not a tuple of length 1.
+          ret = ret[0]
+        return ret
+
+    return wrapped
+  return iterate
diff --git a/alphafold/alphafold/model/layer_stack_test.py b/alphafold/alphafold/model/layer_stack_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..062221f6b753f188475de40f3d50f53324735ffc
--- /dev/null
+++ b/alphafold/alphafold/model/layer_stack_test.py
@@ -0,0 +1,335 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for layer_stack."""
+
+import functools
+from absl.testing import absltest
+from absl.testing import parameterized
+from alphafold.model import layer_stack
+import haiku as hk
+import jax
+import jax.numpy as jnp
+import numpy as np
+import scipy
+
+
+# Suffixes applied by Haiku for repeated module names.
+suffixes = [''] + [f'_{i}' for i in range(1, 100)]
+
+
+def _slice_layers_params(layers_params):
+  sliced_layers_params = {}
+  for k, v in layers_params.items():
+    for inner_k in v:
+      for var_slice, suffix in zip(v[inner_k], suffixes):
+        k_new = k.split('/')[-1] + suffix
+        if k_new not in sliced_layers_params:
+          sliced_layers_params[k_new] = {}
+        sliced_layers_params[k_new][inner_k] = var_slice
+  return sliced_layers_params
+
+
+class LayerStackTest(parameterized.TestCase):
+
+  @parameterized.parameters([1, 2, 4])
+  def test_layer_stack(self, unroll):
+    """Compare layer_stack to the equivalent unrolled stack.
+
+    Tests that the layer_stack application of a Haiku layer function is
+    equivalent to repeatedly applying the layer function in an unrolled loop.
+
+    Args:
+      unroll: Number of unrolled layers.
+    """
+    num_layers = 20
+
+    def inner_fn(x):
+      x += hk.Linear(100, name='linear1')(x)
+      x += hk.Linear(100, name='linear2')(x)
+      return x
+
+    def outer_fn_unrolled(x):
+      for _ in range(num_layers):
+        x = inner_fn(x)
+      return x
+
+    def outer_fn_layer_stack(x):
+      stack = layer_stack.layer_stack(num_layers, unroll=unroll)(inner_fn)
+      return stack(x)
+
+    unrolled_fn = hk.transform(outer_fn_unrolled)
+    layer_stack_fn = hk.transform(outer_fn_layer_stack)
+
+    x = jax.random.uniform(jax.random.PRNGKey(0), [10, 256, 100])
+
+    rng_init = jax.random.PRNGKey(42)
+
+    params = layer_stack_fn.init(rng_init, x)
+
+    sliced_params = _slice_layers_params(params)
+
+    unrolled_pred = unrolled_fn.apply(sliced_params, None, x)
+    layer_stack_pred = layer_stack_fn.apply(params, None, x)
+
+    np.testing.assert_allclose(unrolled_pred, layer_stack_pred)
+
+  def test_layer_stack_multi_args(self):
+    """Compare layer_stack to the equivalent unrolled stack.
+
+    Similar to `test_layer_stack`, but use a function that takes more than one
+    argument.
+    """
+    num_layers = 20
+
+    def inner_fn(x, y):
+      x_out = x + hk.Linear(100, name='linear1')(y)
+      y_out = y + hk.Linear(100, name='linear2')(x)
+      return x_out, y_out
+
+    def outer_fn_unrolled(x, y):
+      for _ in range(num_layers):
+        x, y = inner_fn(x, y)
+      return x, y
+
+    def outer_fn_layer_stack(x, y):
+      stack = layer_stack.layer_stack(num_layers)(inner_fn)
+      return stack(x, y)
+
+    unrolled_fn = hk.transform(outer_fn_unrolled)
+    layer_stack_fn = hk.transform(outer_fn_layer_stack)
+
+    x = jax.random.uniform(jax.random.PRNGKey(0), [10, 256, 100])
+    y = jax.random.uniform(jax.random.PRNGKey(1), [10, 256, 100])
+
+    rng_init = jax.random.PRNGKey(42)
+
+    params = layer_stack_fn.init(rng_init, x, y)
+
+    sliced_params = _slice_layers_params(params)
+
+    unrolled_x, unrolled_y = unrolled_fn.apply(sliced_params, None, x, y)
+    layer_stack_x, layer_stack_y = layer_stack_fn.apply(params, None, x, y)
+
+    np.testing.assert_allclose(unrolled_x, layer_stack_x)
+    np.testing.assert_allclose(unrolled_y, layer_stack_y)
+
+  def test_layer_stack_no_varargs(self):
+    """Test an error is raised when using a function with varargs."""
+
+    class VarArgsModule(hk.Module):
+      """When used, this module should cause layer_stack to raise an Error."""
+
+      def __call__(self, *args):
+        return args
+
+    class NoVarArgsModule(hk.Module):
+      """This module should be fine to use with layer_stack."""
+
+      def __call__(self, x):
+        return x
+
+    def build_and_init_stack(module_class):
+      def stack_fn(x):
+        module = module_class()
+        return layer_stack.layer_stack(1)(module)(x)
+
+      stack = hk.without_apply_rng(hk.transform(stack_fn))
+      stack.init(jax.random.PRNGKey(1729), jnp.ones([5]))
+
+    build_and_init_stack(NoVarArgsModule)
+    with self.assertRaisesRegex(
+        ValueError, 'The function `f` should not have any `varargs`'):
+      build_and_init_stack(VarArgsModule)
+
+  @parameterized.parameters([1, 2, 4])
+  def test_layer_stack_grads(self, unroll):
+    """Compare layer_stack gradients to the equivalent unrolled stack.
+
+    Tests that the layer_stack application of a Haiku layer function is
+    equivalent to repeatedly applying the layer function in an unrolled loop.
+
+    Args:
+      unroll: Number of unrolled layers.
+    """
+    num_layers = 20
+
+    def inner_fn(x):
+      x += hk.Linear(100, name='linear1')(x)
+      x += hk.Linear(100, name='linear2')(x)
+      return x
+
+    def outer_fn_unrolled(x):
+      for _ in range(num_layers):
+        x = inner_fn(x)
+      return x
+
+    def outer_fn_layer_stack(x):
+      stack = layer_stack.layer_stack(num_layers, unroll=unroll)(inner_fn)
+      return stack(x)
+
+    unrolled_fn = hk.transform(outer_fn_unrolled)
+    layer_stack_fn = hk.transform(outer_fn_layer_stack)
+
+    x = jax.random.uniform(jax.random.PRNGKey(0), [10, 256, 100])
+
+    rng_init = jax.random.PRNGKey(42)
+
+    params = layer_stack_fn.init(rng_init, x)
+
+    sliced_params = _slice_layers_params(params)
+
+    unrolled_grad = jax.grad(
+        lambda p, x: jnp.mean(unrolled_fn.apply(p, None, x)))(sliced_params, x)
+    layer_stack_grad = jax.grad(
+        lambda p, x: jnp.mean(layer_stack_fn.apply(p, None, x)))(params, x)
+
+    assert_fn = functools.partial(
+        np.testing.assert_allclose, atol=1e-4, rtol=1e-4)
+
+    jax.tree_multimap(assert_fn, unrolled_grad,
+                      _slice_layers_params(layer_stack_grad))
+
+  def test_random(self):
+    """Random numbers should be handled correctly."""
+    n = 100
+
+    @hk.transform
+    @layer_stack.layer_stack(n)
+    def add_random(x):
+      x = x + jax.random.normal(hk.next_rng_key())
+      return x
+
+    # Evaluate a bunch of times
+    key, *keys = jax.random.split(jax.random.PRNGKey(7), 1024 + 1)
+    params = add_random.init(key, 0.)
+    apply_fn = jax.jit(add_random.apply)
+    values = [apply_fn(params, key, 0.) for key in keys]
+
+    # Should be roughly N(0, sqrt(n))
+    cdf = scipy.stats.norm(scale=np.sqrt(n)).cdf
+    _, p = scipy.stats.kstest(values, cdf)
+    self.assertLess(0.3, p)
+
+  def test_threading(self):
+    """Test @layer_stack when the function gets per-layer state."""
+    n = 5
+
+    @layer_stack.layer_stack(n, with_state=True)
+    def f(x, y):
+      x = x + y * jax.nn.one_hot(y, len(x)) / 10
+      return x, 2 * y
+
+    @hk.without_apply_rng
+    @hk.transform
+    def g(x, ys):
+      x, zs = f(x, ys)
+      # Check here to catch issues at init time
+      self.assertEqual(zs.shape, (n,))
+      return x, zs
+
+    rng = jax.random.PRNGKey(7)
+    x = np.zeros(n)
+    ys = np.arange(n).astype(np.float32)
+    params = g.init(rng, x, ys)
+    x, zs = g.apply(params, x, ys)
+    self.assertTrue(np.allclose(x, [0, .1, .2, .3, .4]))
+    self.assertTrue(np.all(zs == 2 * ys))
+
+  def test_nested_stacks(self):
+    def stack_fn(x):
+      def layer_fn(x):
+        return hk.Linear(100)(x)
+
+      outer_fn = layer_stack.layer_stack(10)(layer_fn)
+
+      layer_outer = layer_stack.layer_stack(20)(outer_fn)
+      return layer_outer(x)
+
+    hk_mod = hk.transform(stack_fn)
+    apply_rng, init_rng = jax.random.split(jax.random.PRNGKey(0))
+
+    params = hk_mod.init(init_rng, jnp.zeros([10, 100]))
+
+    hk_mod.apply(params, apply_rng, jnp.zeros([10, 100]))
+
+    p, = params.values()
+
+    assert p['w'].shape == (10, 20, 100, 100)
+    assert p['b'].shape == (10, 20, 100)
+
+  def test_with_state_multi_args(self):
+    """Test layer_stack with state with multiple arguments."""
+    width = 4
+    batch_size = 5
+    stack_height = 3
+
+    def f_with_multi_args(x, a, b):
+      return hk.Linear(
+          width, w_init=hk.initializers.Constant(
+              jnp.eye(width)))(x) * a + b, None
+
+    @hk.without_apply_rng
+    @hk.transform
+    def hk_fn(x):
+      return layer_stack.layer_stack(
+          stack_height,
+          with_state=True)(f_with_multi_args)(x, jnp.full([stack_height], 2.),
+                                              jnp.ones([stack_height]))
+
+    x = jnp.zeros([batch_size, width])
+    key_seq = hk.PRNGSequence(19)
+    params = hk_fn.init(next(key_seq), x)
+    output, z = hk_fn.apply(params, x)
+    self.assertIsNone(z)
+    self.assertEqual(output.shape, (batch_size, width))
+    np.testing.assert_equal(output, np.full([batch_size, width], 7.))
+
+  def test_with_container_state(self):
+    width = 2
+    batch_size = 2
+    stack_height = 3
+
+    def f_with_container_state(x):
+      hk_layer = hk.Linear(
+          width, w_init=hk.initializers.Constant(jnp.eye(width)))
+      layer_output = hk_layer(x)
+      layer_state = {
+          'raw_output': layer_output,
+          'output_projection': jnp.sum(layer_output)
+      }
+      return layer_output + jnp.ones_like(layer_output), layer_state
+
+    @hk.without_apply_rng
+    @hk.transform
+    def hk_fn(x):
+      return layer_stack.layer_stack(
+          stack_height,
+          with_state=True)(f_with_container_state)(x)
+
+    x = jnp.zeros([batch_size, width])
+    key_seq = hk.PRNGSequence(19)
+    params = hk_fn.init(next(key_seq), x)
+    output, z = hk_fn.apply(params, x)
+    self.assertEqual(z['raw_output'].shape, (stack_height, batch_size, width))
+    self.assertEqual(output.shape, (batch_size, width))
+    self.assertEqual(z['output_projection'].shape, (stack_height,))
+    np.testing.assert_equal(np.sum(z['output_projection']), np.array(12.))
+    np.testing.assert_equal(
+        np.all(z['raw_output'] == np.array([0., 1., 2.])[..., None, None]),
+        np.array(True))
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/model/lddt.py b/alphafold/alphafold/model/lddt.py
new file mode 100644
index 0000000000000000000000000000000000000000..6b2a3f9c9c427b8da547cabf75ff48a7b9fc1844
--- /dev/null
+++ b/alphafold/alphafold/model/lddt.py
@@ -0,0 +1,88 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""lDDT protein distance score."""
+import jax.numpy as jnp
+
+
+def lddt(predicted_points,
+         true_points,
+         true_points_mask,
+         cutoff=15.,
+         per_residue=False):
+  """Measure (approximate) lDDT for a batch of coordinates.
+
+  lDDT reference:
+  Mariani, V., Biasini, M., Barbato, A. & Schwede, T. lDDT: A local
+  superposition-free score for comparing protein structures and models using
+  distance difference tests. Bioinformatics 29, 2722–2728 (2013).
+
+  lDDT is a measure of the difference between the true distance matrix and the
+  distance matrix of the predicted points.  The difference is computed only on
+  points closer than cutoff *in the true structure*.
+
+  This function does not compute the exact lDDT value that the original paper
+  describes because it does not include terms for physical feasibility
+  (e.g. bond length violations). Therefore this is only an approximate
+  lDDT score.
+
+  Args:
+    predicted_points: (batch, length, 3) array of predicted 3D points
+    true_points: (batch, length, 3) array of true 3D points
+    true_points_mask: (batch, length, 1) binary-valued float array.  This mask
+      should be 1 for points that exist in the true points.
+    cutoff: Maximum distance for a pair of points to be included
+    per_residue: If true, return score for each residue.  Note that the overall
+      lDDT is not exactly the mean of the per_residue lDDT's because some
+      residues have more contacts than others.
+
+  Returns:
+    An (approximate, see above) lDDT score in the range 0-1.
+  """
+
+  assert len(predicted_points.shape) == 3
+  assert predicted_points.shape[-1] == 3
+  assert true_points_mask.shape[-1] == 1
+  assert len(true_points_mask.shape) == 3
+
+  # Compute true and predicted distance matrices.
+  dmat_true = jnp.sqrt(1e-10 + jnp.sum(
+      (true_points[:, :, None] - true_points[:, None, :])**2, axis=-1))
+
+  dmat_predicted = jnp.sqrt(1e-10 + jnp.sum(
+      (predicted_points[:, :, None] -
+       predicted_points[:, None, :])**2, axis=-1))
+
+  dists_to_score = (
+      (dmat_true < cutoff).astype(jnp.float32) * true_points_mask *
+      jnp.transpose(true_points_mask, [0, 2, 1]) *
+      (1. - jnp.eye(dmat_true.shape[1]))  # Exclude self-interaction.
+  )
+
+  # Shift unscored distances to be far away.
+  dist_l1 = jnp.abs(dmat_true - dmat_predicted)
+
+  # True lDDT uses a number of fixed bins.
+  # We ignore the physical plausibility correction to lDDT, though.
+  score = 0.25 * ((dist_l1 < 0.5).astype(jnp.float32) +
+                  (dist_l1 < 1.0).astype(jnp.float32) +
+                  (dist_l1 < 2.0).astype(jnp.float32) +
+                  (dist_l1 < 4.0).astype(jnp.float32))
+
+  # Normalize over the appropriate axes.
+  reduce_axes = (-1,) if per_residue else (-2, -1)
+  norm = 1. / (1e-10 + jnp.sum(dists_to_score, axis=reduce_axes))
+  score = norm * (1e-10 + jnp.sum(dists_to_score * score, axis=reduce_axes))
+
+  return score
diff --git a/alphafold/alphafold/model/lddt_test.py b/alphafold/alphafold/model/lddt_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b4f050f05e3c786987d0151de0acb0ec2c54fee
--- /dev/null
+++ b/alphafold/alphafold/model/lddt_test.py
@@ -0,0 +1,79 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for lddt."""
+
+from absl.testing import absltest
+from absl.testing import parameterized
+from alphafold.model import lddt
+import numpy as np
+
+
+class LddtTest(parameterized.TestCase, absltest.TestCase):
+
+  @parameterized.named_parameters(
+      ('same',
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [1, 1, 1]),
+      ('all_shifted',
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [[-1, 0, 0], [4, 0, 0], [9, 0, 0]],
+       [1, 1, 1]),
+      ('all_rotated',
+       [[0, 0, 0], [5, 0, 0], [10, 0, 0]],
+       [[0, 0, 0], [0, 5, 0], [0, 10, 0]],
+       [1, 1, 1]),
+      ('half_a_dist',
+       [[0, 0, 0], [5, 0, 0]],
+       [[0, 0, 0], [5.5-1e-5, 0, 0]],
+       [1, 1]),
+      ('one_a_dist',
+       [[0, 0, 0], [5, 0, 0]],
+       [[0, 0, 0], [6-1e-5, 0, 0]],
+       [0.75, 0.75]),
+      ('two_a_dist',
+       [[0, 0, 0], [5, 0, 0]],
+       [[0, 0, 0], [7-1e-5, 0, 0]],
+       [0.5, 0.5]),
+      ('four_a_dist',
+       [[0, 0, 0], [5, 0, 0]],
+       [[0, 0, 0], [9-1e-5, 0, 0]],
+       [0.25, 0.25],),
+      ('five_a_dist',
+       [[0, 0, 0], [16-1e-5, 0, 0]],
+       [[0, 0, 0], [11, 0, 0]],
+       [0, 0]),
+      ('no_pairs',
+       [[0, 0, 0], [20, 0, 0]],
+       [[0, 0, 0], [25-1e-5, 0, 0]],
+       [1, 1]),
+  )
+  def test_lddt(
+      self, predicted_pos, true_pos, exp_lddt):
+    predicted_pos = np.array([predicted_pos], dtype=np.float32)
+    true_points_mask = np.array([[[1]] * len(true_pos)], dtype=np.float32)
+    true_pos = np.array([true_pos], dtype=np.float32)
+    cutoff = 15.0
+    per_residue = True
+
+    result = lddt.lddt(
+        predicted_pos, true_pos, true_points_mask, cutoff,
+        per_residue)
+
+    np.testing.assert_almost_equal(result, [exp_lddt], decimal=4)
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/model/mapping.py b/alphafold/alphafold/model/mapping.py
new file mode 100644
index 0000000000000000000000000000000000000000..e6c0fd85e3f6c71b48592d9a65507b71843dc1ed
--- /dev/null
+++ b/alphafold/alphafold/model/mapping.py
@@ -0,0 +1,218 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Specialized mapping functions."""
+
+import functools
+
+from typing import Any, Callable, Optional, Sequence, Union
+
+import haiku as hk
+import jax
+import jax.numpy as jnp
+
+
+PYTREE = Any
+PYTREE_JAX_ARRAY = Any
+
+partial = functools.partial
+PROXY = object()
+
+
+def _maybe_slice(array, i, slice_size, axis):
+  if axis is PROXY:
+    return array
+  else:
+    return jax.lax.dynamic_slice_in_dim(
+        array, i, slice_size=slice_size, axis=axis)
+
+
+def _maybe_get_size(array, axis):
+  if axis == PROXY:
+    return -1
+  else:
+    return array.shape[axis]
+
+
+def _expand_axes(axes, values, name='sharded_apply'):
+  values_tree_def = jax.tree_flatten(values)[1]
+  flat_axes = jax.api_util.flatten_axes(name, values_tree_def, axes)
+  # Replace None's with PROXY
+  flat_axes = [PROXY if x is None else x for x in flat_axes]
+  return jax.tree_unflatten(values_tree_def, flat_axes)
+
+
+def sharded_map(
+    fun: Callable[..., PYTREE_JAX_ARRAY],
+    shard_size: Union[int, None] = 1,
+    in_axes: Union[int, PYTREE] = 0,
+    out_axes: Union[int, PYTREE] = 0) -> Callable[..., PYTREE_JAX_ARRAY]:
+  """Sharded vmap.
+
+  Maps `fun` over axes, in a way similar to vmap, but does so in shards of
+  `shard_size`. This allows a smooth trade-off between memory usage
+  (as in a plain map) vs higher throughput (as in a vmap).
+
+  Args:
+    fun: Function to apply smap transform to.
+    shard_size: Integer denoting shard size.
+    in_axes: Either integer or pytree describing which axis to map over for each
+      input to `fun`, None denotes broadcasting.
+    out_axes: integer or pytree denoting to what axis in the output the mapped
+      over axis maps.
+
+  Returns:
+    function with smap applied.
+  """
+  vmapped_fun = hk.vmap(fun, in_axes, out_axes)
+  return sharded_apply(vmapped_fun, shard_size, in_axes, out_axes)
+
+
+def sharded_apply(
+    fun: Callable[..., PYTREE_JAX_ARRAY],  # pylint: disable=g-bare-generic
+    shard_size: Union[int, None] = 1,
+    in_axes: Union[int, PYTREE] = 0,
+    out_axes: Union[int, PYTREE] = 0,
+    new_out_axes: bool = False) -> Callable[..., PYTREE_JAX_ARRAY]:
+  """Sharded apply.
+
+  Applies `fun` over shards to axes, in a way similar to vmap,
+  but does so in shards of `shard_size`. Shards are stacked after.
+  This allows a smooth trade-off between
+  memory usage (as in a plain map) vs higher throughput (as in a vmap).
+
+  Args:
+    fun: Function to apply smap transform to.
+    shard_size: Integer denoting shard size.
+    in_axes: Either integer or pytree describing which axis to map over for each
+      input to `fun`, None denotes broadcasting.
+    out_axes: integer or pytree denoting to what axis in the output the mapped
+      over axis maps.
+    new_out_axes: whether to stack outputs on new axes. This assumes that the
+      output sizes for each shard (including the possible remainder shard) are
+      the same.
+
+  Returns:
+    function with smap applied.
+  """
+  docstr = ('Mapped version of {fun}. Takes similar arguments to {fun} '
+            'but with additional array axes over which {fun} is mapped.')
+  if new_out_axes:
+    raise NotImplementedError('New output axes not yet implemented.')
+
+  # shard size None denotes no sharding
+  if shard_size is None:
+    return fun
+
+  @jax.util.wraps(fun, docstr=docstr)
+  def mapped_fn(*args):
+    # Expand in axes and Determine Loop range
+    in_axes_ = _expand_axes(in_axes, args)
+
+    in_sizes = jax.tree_multimap(_maybe_get_size, args, in_axes_)
+    flat_sizes = jax.tree_flatten(in_sizes)[0]
+    in_size = max(flat_sizes)
+    assert all(i in {in_size, -1} for i in flat_sizes)
+
+    num_extra_shards = (in_size - 1) // shard_size
+
+    # Fix Up if necessary
+    last_shard_size = in_size % shard_size
+    last_shard_size = shard_size if last_shard_size == 0 else last_shard_size
+
+    def apply_fun_to_slice(slice_start, slice_size):
+      input_slice = jax.tree_multimap(
+          lambda array, axis: _maybe_slice(array, slice_start, slice_size, axis
+                                          ), args, in_axes_)
+      return fun(*input_slice)
+
+    remainder_shape_dtype = hk.eval_shape(
+        partial(apply_fun_to_slice, 0, last_shard_size))
+    out_dtypes = jax.tree_map(lambda x: x.dtype, remainder_shape_dtype)
+    out_shapes = jax.tree_map(lambda x: x.shape, remainder_shape_dtype)
+    out_axes_ = _expand_axes(out_axes, remainder_shape_dtype)
+
+    if num_extra_shards > 0:
+      regular_shard_shape_dtype = hk.eval_shape(
+          partial(apply_fun_to_slice, 0, shard_size))
+      shard_shapes = jax.tree_map(lambda x: x.shape, regular_shard_shape_dtype)
+
+      def make_output_shape(axis, shard_shape, remainder_shape):
+        return shard_shape[:axis] + (
+            shard_shape[axis] * num_extra_shards +
+            remainder_shape[axis],) + shard_shape[axis + 1:]
+
+      out_shapes = jax.tree_multimap(make_output_shape, out_axes_, shard_shapes,
+                                     out_shapes)
+
+    # Calls dynamic Update slice with different argument order
+    # This is here since tree_multimap only works with positional arguments
+    def dynamic_update_slice_in_dim(full_array, update, axis, i):
+      return jax.lax.dynamic_update_slice_in_dim(full_array, update, i, axis)
+
+    def compute_shard(outputs, slice_start, slice_size):
+      slice_out = apply_fun_to_slice(slice_start, slice_size)
+      update_slice = partial(
+          dynamic_update_slice_in_dim, i=slice_start)
+      return jax.tree_multimap(update_slice, outputs, slice_out, out_axes_)
+
+    def scan_iteration(outputs, i):
+      new_outputs = compute_shard(outputs, i, shard_size)
+      return new_outputs, ()
+
+    slice_starts = jnp.arange(0, in_size - shard_size + 1, shard_size)
+
+    def allocate_buffer(dtype, shape):
+      return jnp.zeros(shape, dtype=dtype)
+
+    outputs = jax.tree_multimap(allocate_buffer, out_dtypes, out_shapes)
+
+    if slice_starts.shape[0] > 0:
+      outputs, _ = hk.scan(scan_iteration, outputs, slice_starts)
+
+    if last_shard_size != shard_size:
+      remainder_start = in_size - last_shard_size
+      outputs = compute_shard(outputs, remainder_start, last_shard_size)
+
+    return outputs
+
+  return mapped_fn
+
+
+def inference_subbatch(
+    module: Callable[..., PYTREE_JAX_ARRAY],
+    subbatch_size: int,
+    batched_args: Sequence[PYTREE_JAX_ARRAY],
+    nonbatched_args: Sequence[PYTREE_JAX_ARRAY],
+    low_memory: bool = True,
+    input_subbatch_dim: int = 0,
+    output_subbatch_dim: Optional[int] = None) -> PYTREE_JAX_ARRAY:
+  """Run through subbatches (like batch apply but with split and concat)."""
+  assert len(batched_args) > 0  # pylint: disable=g-explicit-length-test
+
+  if not low_memory:
+    args = list(batched_args) + list(nonbatched_args)
+    return module(*args)
+
+  if output_subbatch_dim is None:
+    output_subbatch_dim = input_subbatch_dim
+
+  def run_module(*batched_args):
+    args = list(batched_args) + list(nonbatched_args)
+    return module(*args)
+  sharded_module = sharded_apply(run_module,
+                                 shard_size=subbatch_size,
+                                 in_axes=input_subbatch_dim,
+                                 out_axes=output_subbatch_dim)
+  return sharded_module(*batched_args)
diff --git a/alphafold/alphafold/model/model.py b/alphafold/alphafold/model/model.py
new file mode 100644
index 0000000000000000000000000000000000000000..66addeb6e7ac27a109775e2cac43d1724b5a6fb2
--- /dev/null
+++ b/alphafold/alphafold/model/model.py
@@ -0,0 +1,141 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Code for constructing the model."""
+from typing import Any, Mapping, Optional, Union
+
+from absl import logging
+from alphafold.common import confidence
+from alphafold.model import features
+from alphafold.model import modules
+import haiku as hk
+import jax
+import ml_collections
+import numpy as np
+import tensorflow.compat.v1 as tf
+import tree
+
+
+def get_confidence_metrics(
+    prediction_result: Mapping[str, Any]) -> Mapping[str, Any]:
+  """Post processes prediction_result to get confidence metrics."""
+
+  confidence_metrics = {}
+  confidence_metrics['plddt'] = confidence.compute_plddt(
+      prediction_result['predicted_lddt']['logits'])
+  if 'predicted_aligned_error' in prediction_result:
+    confidence_metrics.update(confidence.compute_predicted_aligned_error(
+        prediction_result['predicted_aligned_error']['logits'],
+        prediction_result['predicted_aligned_error']['breaks']))
+    confidence_metrics['ptm'] = confidence.predicted_tm_score(
+        prediction_result['predicted_aligned_error']['logits'],
+        prediction_result['predicted_aligned_error']['breaks'])
+
+  return confidence_metrics
+
+
+class RunModel:
+  """Container for JAX model."""
+
+  def __init__(self,
+               config: ml_collections.ConfigDict,
+               params: Optional[Mapping[str, Mapping[str, np.ndarray]]] = None):
+    self.config = config
+    self.params = params
+
+    def _forward_fn(batch):
+      model = modules.AlphaFold(self.config.model)
+      return model(
+          batch,
+          is_training=False,
+          compute_loss=False,
+          ensemble_representations=True)
+
+    self.apply = jax.jit(hk.transform(_forward_fn).apply)
+    self.init = jax.jit(hk.transform(_forward_fn).init)
+
+  def init_params(self, feat: features.FeatureDict, random_seed: int = 0):
+    """Initializes the model parameters.
+
+    If none were provided when this class was instantiated then the parameters
+    are randomly initialized.
+
+    Args:
+      feat: A dictionary of NumPy feature arrays as output by
+        RunModel.process_features.
+      random_seed: A random seed to use to initialize the parameters if none
+        were set when this class was initialized.
+    """
+    if not self.params:
+      # Init params randomly.
+      rng = jax.random.PRNGKey(random_seed)
+      self.params = hk.data_structures.to_mutable_dict(
+          self.init(rng, feat))
+      logging.warning('Initialized parameters randomly')
+
+  def process_features(
+      self,
+      raw_features: Union[tf.train.Example, features.FeatureDict],
+      random_seed: int) -> features.FeatureDict:
+    """Processes features to prepare for feeding them into the model.
+
+    Args:
+      raw_features: The output of the data pipeline either as a dict of NumPy
+        arrays or as a tf.train.Example.
+      random_seed: The random seed to use when processing the features.
+
+    Returns:
+      A dict of NumPy feature arrays suitable for feeding into the model.
+    """
+    if isinstance(raw_features, dict):
+      return features.np_example_to_features(
+          np_example=raw_features,
+          config=self.config,
+          random_seed=random_seed)
+    else:
+      return features.tf_example_to_features(
+          tf_example=raw_features,
+          config=self.config,
+          random_seed=random_seed)
+
+  def eval_shape(self, feat: features.FeatureDict) -> jax.ShapeDtypeStruct:
+    self.init_params(feat)
+    logging.info('Running eval_shape with shape(feat) = %s',
+                 tree.map_structure(lambda x: x.shape, feat))
+    shape = jax.eval_shape(self.apply, self.params, jax.random.PRNGKey(0), feat)
+    logging.info('Output shape was %s', shape)
+    return shape
+
+  def predict(self, feat: features.FeatureDict) -> Mapping[str, Any]:
+    """Makes a prediction by inferencing the model on the provided features.
+
+    Args:
+      feat: A dictionary of NumPy feature arrays as output by
+        RunModel.process_features.
+
+    Returns:
+      A dictionary of model outputs.
+    """
+    self.init_params(feat)
+    logging.info('Running predict with shape(feat) = %s',
+                 tree.map_structure(lambda x: x.shape, feat))
+    result = self.apply(self.params, jax.random.PRNGKey(0), feat)
+    # This block is to ensure benchmark timings are accurate. Some blocking is
+    # already happening when computing get_confidence_metrics, and this ensures
+    # all outputs are blocked on.
+    jax.tree_map(lambda x: x.block_until_ready(), result)
+    result.update(get_confidence_metrics(result))
+    logging.info('Output shape was %s',
+                 tree.map_structure(lambda x: x.shape, result))
+    return result
diff --git a/alphafold/alphafold/model/modules.py b/alphafold/alphafold/model/modules.py
new file mode 100644
index 0000000000000000000000000000000000000000..794597ff17d416bb232d1a378c064d0ae9860836
--- /dev/null
+++ b/alphafold/alphafold/model/modules.py
@@ -0,0 +1,2091 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Modules and code used in the core part of AlphaFold.
+
+The structure generation code is in 'folding.py'.
+"""
+import functools
+from alphafold.common import residue_constants
+from alphafold.model import all_atom
+from alphafold.model import common_modules
+from alphafold.model import folding
+from alphafold.model import layer_stack
+from alphafold.model import lddt
+from alphafold.model import mapping
+from alphafold.model import prng
+from alphafold.model import quat_affine
+from alphafold.model import utils
+import haiku as hk
+import jax
+import jax.numpy as jnp
+
+
+def softmax_cross_entropy(logits, labels):
+  """Computes softmax cross entropy given logits and one-hot class labels."""
+  loss = -jnp.sum(labels * jax.nn.log_softmax(logits), axis=-1)
+  return jnp.asarray(loss)
+
+
+def sigmoid_cross_entropy(logits, labels):
+  """Computes sigmoid cross entropy given logits and multiple class labels."""
+  log_p = jax.nn.log_sigmoid(logits)
+  # log(1 - sigmoid(x)) = log_sigmoid(-x), the latter is more numerically stable
+  log_not_p = jax.nn.log_sigmoid(-logits)
+  loss = -labels * log_p - (1. - labels) * log_not_p
+  return jnp.asarray(loss)
+
+
+def apply_dropout(*, tensor, safe_key, rate, is_training, broadcast_dim=None):
+  """Applies dropout to a tensor."""
+  if is_training and rate != 0.0:
+    shape = list(tensor.shape)
+    if broadcast_dim is not None:
+      shape[broadcast_dim] = 1
+    keep_rate = 1.0 - rate
+    keep = jax.random.bernoulli(safe_key.get(), keep_rate, shape=shape)
+    return keep * tensor / keep_rate
+  else:
+    return tensor
+
+
+def dropout_wrapper(module,
+                    input_act,
+                    mask,
+                    safe_key,
+                    global_config,
+                    output_act=None,
+                    is_training=True,
+                    **kwargs):
+  """Applies module + dropout + residual update."""
+  if output_act is None:
+    output_act = input_act
+
+  gc = global_config
+  residual = module(input_act, mask, is_training=is_training, **kwargs)
+  dropout_rate = 0.0 if gc.deterministic else module.config.dropout_rate
+
+  if module.config.shared_dropout:
+    if module.config.orientation == 'per_row':
+      broadcast_dim = 0
+    else:
+      broadcast_dim = 1
+  else:
+    broadcast_dim = None
+
+  residual = apply_dropout(tensor=residual,
+                           safe_key=safe_key,
+                           rate=dropout_rate,
+                           is_training=is_training,
+                           broadcast_dim=broadcast_dim)
+
+  new_act = output_act + residual
+
+  return new_act
+
+
+def create_extra_msa_feature(batch):
+  """Expand extra_msa into 1hot and concat with other extra msa features.
+
+  We do this as late as possible as the one_hot extra msa can be very large.
+
+  Arguments:
+    batch: a dictionary with the following keys:
+     * 'extra_msa': [N_extra_seq, N_res] MSA that wasn't selected as a cluster
+       centre. Note, that this is not one-hot encoded.
+     * 'extra_has_deletion': [N_extra_seq, N_res] Whether there is a deletion to
+       the left of each position in the extra MSA.
+     * 'extra_deletion_value': [N_extra_seq, N_res] The number of deletions to
+       the left of each position in the extra MSA.
+
+  Returns:
+    Concatenated tensor of extra MSA features.
+  """
+  # 23 = 20 amino acids + 'X' for unknown + gap + bert mask
+  msa_1hot = jax.nn.one_hot(batch['extra_msa'], 23)
+  msa_feat = [msa_1hot,
+              jnp.expand_dims(batch['extra_has_deletion'], axis=-1),
+              jnp.expand_dims(batch['extra_deletion_value'], axis=-1)]
+  return jnp.concatenate(msa_feat, axis=-1)
+
+
+class AlphaFoldIteration(hk.Module):
+  """A single recycling iteration of AlphaFold architecture.
+
+  Computes ensembled (averaged) representations from the provided features.
+  These representations are then passed to the various heads
+  that have been requested by the configuration file. Each head also returns a
+  loss which is combined as a weighted sum to produce the total loss.
+
+  Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 3-22
+  """
+
+  def __init__(self, config, global_config, name='alphafold_iteration'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self,
+               ensembled_batch,
+               non_ensembled_batch,
+               is_training,
+               compute_loss=False,
+               ensemble_representations=False,
+               return_representations=False):
+
+    num_ensemble = jnp.asarray(ensembled_batch['seq_length'].shape[0])
+
+    if not ensemble_representations:
+      assert ensembled_batch['seq_length'].shape[0] == 1
+
+    def slice_batch(i):
+      b = {k: v[i] for k, v in ensembled_batch.items()}
+      b.update(non_ensembled_batch)
+      return b
+
+    # Compute representations for each batch element and average.
+    evoformer_module = EmbeddingsAndEvoformer(
+        self.config.embeddings_and_evoformer, self.global_config)
+    batch0 = slice_batch(0)
+    representations = evoformer_module(batch0, is_training)
+
+    # MSA representations are not ensembled so
+    # we don't pass tensor into the loop.
+    msa_representation = representations['msa']
+    del representations['msa']
+
+    # Average the representations (except MSA) over the batch dimension.
+    if ensemble_representations:
+      def body(x):
+        """Add one element to the representations ensemble."""
+        i, current_representations = x
+        feats = slice_batch(i)
+        representations_update = evoformer_module(
+            feats, is_training)
+
+        new_representations = {}
+        for k in current_representations:
+          new_representations[k] = (
+              current_representations[k] + representations_update[k])
+        return i+1, new_representations
+
+      if hk.running_init():
+        # When initializing the Haiku module, run one iteration of the
+        # while_loop to initialize the Haiku modules used in `body`.
+        _, representations = body((1, representations))
+      else:
+        _, representations = hk.while_loop(
+            lambda x: x[0] < num_ensemble,
+            body,
+            (1, representations))
+
+      for k in representations:
+        if k != 'msa':
+          representations[k] /= num_ensemble.astype(representations[k].dtype)
+
+    representations['msa'] = msa_representation
+    batch = batch0  # We are not ensembled from here on.
+
+    heads = {}
+    for head_name, head_config in sorted(self.config.heads.items()):
+      if not head_config.weight:
+        continue  # Do not instantiate zero-weight heads.
+
+      head_factory = {
+          'masked_msa': MaskedMsaHead,
+          'distogram': DistogramHead,
+          'structure_module': functools.partial(
+              folding.StructureModule, compute_loss=compute_loss),
+          'predicted_lddt': PredictedLDDTHead,
+          'predicted_aligned_error': PredictedAlignedErrorHead,
+          'experimentally_resolved': ExperimentallyResolvedHead,
+      }[head_name]
+      heads[head_name] = (head_config,
+                          head_factory(head_config, self.global_config))
+
+    total_loss = 0.
+    ret = {}
+    ret['representations'] = representations
+
+    def loss(module, head_config, ret, name, filter_ret=True):
+      if filter_ret:
+        value = ret[name]
+      else:
+        value = ret
+      loss_output = module.loss(value, batch)
+      ret[name].update(loss_output)
+      loss = head_config.weight * ret[name]['loss']
+      return loss
+
+    for name, (head_config, module) in heads.items():
+      # Skip PredictedLDDTHead and PredictedAlignedErrorHead until
+      # StructureModule is executed.
+      if name in ('predicted_lddt', 'predicted_aligned_error'):
+        continue
+      else:
+        ret[name] = module(representations, batch, is_training)
+        if 'representations' in ret[name]:
+          # Extra representations from the head. Used by the structure module
+          # to provide activations for the PredictedLDDTHead.
+          representations.update(ret[name].pop('representations'))
+      if compute_loss:
+        total_loss += loss(module, head_config, ret, name)
+
+    if self.config.heads.get('predicted_lddt.weight', 0.0):
+      # Add PredictedLDDTHead after StructureModule executes.
+      name = 'predicted_lddt'
+      # Feed all previous results to give access to structure_module result.
+      head_config, module = heads[name]
+      ret[name] = module(representations, batch, is_training)
+      if compute_loss:
+        total_loss += loss(module, head_config, ret, name, filter_ret=False)
+
+    if ('predicted_aligned_error' in self.config.heads
+        and self.config.heads.get('predicted_aligned_error.weight', 0.0)):
+      # Add PredictedAlignedErrorHead after StructureModule executes.
+      name = 'predicted_aligned_error'
+      # Feed all previous results to give access to structure_module result.
+      head_config, module = heads[name]
+      ret[name] = module(representations, batch, is_training)
+      if compute_loss:
+        total_loss += loss(module, head_config, ret, name, filter_ret=False)
+
+    if compute_loss:
+      return ret, total_loss
+    else:
+      return ret
+
+
+class AlphaFold(hk.Module):
+  """AlphaFold model with recycling.
+
+  Jumper et al. (2021) Suppl. Alg. 2 "Inference"
+  """
+
+  def __init__(self, config, name='alphafold'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = config.global_config
+
+  def __call__(
+      self,
+      batch,
+      is_training,
+      compute_loss=False,
+      ensemble_representations=False,
+      return_representations=False):
+    """Run the AlphaFold model.
+
+    Arguments:
+      batch: Dictionary with inputs to the AlphaFold model.
+      is_training: Whether the system is in training or inference mode.
+      compute_loss: Whether to compute losses (requires extra features
+        to be present in the batch and knowing the true structure).
+      ensemble_representations: Whether to use ensembling of representations.
+      return_representations: Whether to also return the intermediate
+        representations.
+
+    Returns:
+      When compute_loss is True:
+        a tuple of loss and output of AlphaFoldIteration.
+      When compute_loss is False:
+        just output of AlphaFoldIteration.
+
+      The output of AlphaFoldIteration is a nested dictionary containing
+      predictions from the various heads.
+    """
+
+    impl = AlphaFoldIteration(self.config, self.global_config)
+    batch_size, num_residues = batch['aatype'].shape
+
+    def get_prev(ret):
+      new_prev = {
+          'prev_pos':
+              ret['structure_module']['final_atom_positions'],
+          'prev_msa_first_row': ret['representations']['msa_first_row'],
+          'prev_pair': ret['representations']['pair'],
+      }
+      return jax.tree_map(jax.lax.stop_gradient, new_prev)
+
+    def do_call(prev,
+                recycle_idx,
+                compute_loss=compute_loss):
+      if self.config.resample_msa_in_recycling:
+        num_ensemble = batch_size // (self.config.num_recycle + 1)
+        def slice_recycle_idx(x):
+          start = recycle_idx * num_ensemble
+          size = num_ensemble
+          return jax.lax.dynamic_slice_in_dim(x, start, size, axis=0)
+        ensembled_batch = jax.tree_map(slice_recycle_idx, batch)
+      else:
+        num_ensemble = batch_size
+        ensembled_batch = batch
+
+      non_ensembled_batch = jax.tree_map(lambda x: x, prev)
+
+      return impl(
+          ensembled_batch=ensembled_batch,
+          non_ensembled_batch=non_ensembled_batch,
+          is_training=is_training,
+          compute_loss=compute_loss,
+          ensemble_representations=ensemble_representations)
+
+    if self.config.num_recycle:
+      emb_config = self.config.embeddings_and_evoformer
+      prev = {
+          'prev_pos': jnp.zeros(
+              [num_residues, residue_constants.atom_type_num, 3]),
+          'prev_msa_first_row': jnp.zeros(
+              [num_residues, emb_config.msa_channel]),
+          'prev_pair': jnp.zeros(
+              [num_residues, num_residues, emb_config.pair_channel]),
+      }
+
+      if 'num_iter_recycling' in batch:
+        # Training time: num_iter_recycling is in batch.
+        # The value for each ensemble batch is the same, so arbitrarily taking
+        # 0-th.
+        num_iter = batch['num_iter_recycling'][0]
+
+        # Add insurance that we will not run more
+        # recyclings than the model is configured to run.
+        num_iter = jnp.minimum(num_iter, self.config.num_recycle)
+      else:
+        # Eval mode or tests: use the maximum number of iterations.
+        num_iter = self.config.num_recycle
+
+      body = lambda x: (x[0] + 1,  # pylint: disable=g-long-lambda
+                        get_prev(do_call(x[1], recycle_idx=x[0],
+                                         compute_loss=False)))
+      if hk.running_init():
+        # When initializing the Haiku module, run one iteration of the
+        # while_loop to initialize the Haiku modules used in `body`.
+        _, prev = body((0, prev))
+      else:
+        _, prev = hk.while_loop(
+            lambda x: x[0] < num_iter,
+            body,
+            (0, prev))
+    else:
+      prev = {}
+      num_iter = 0
+
+    ret = do_call(prev=prev, recycle_idx=num_iter)
+    if compute_loss:
+      ret = ret[0], [ret[1]]
+
+    if not return_representations:
+      del (ret[0] if compute_loss else ret)['representations']  # pytype: disable=unsupported-operands
+    return ret
+
+
+class TemplatePairStack(hk.Module):
+  """Pair stack for the templates.
+
+  Jumper et al. (2021) Suppl. Alg. 16 "TemplatePairStack"
+  """
+
+  def __init__(self, config, global_config, name='template_pair_stack'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, pair_act, pair_mask, is_training, safe_key=None):
+    """Builds TemplatePairStack module.
+
+    Arguments:
+      pair_act: Pair activations for single template, shape [N_res, N_res, c_t].
+      pair_mask: Pair mask, shape [N_res, N_res].
+      is_training: Whether the module is in training mode.
+      safe_key: Safe key object encapsulating the random number generation key.
+
+    Returns:
+      Updated pair_act, shape [N_res, N_res, c_t].
+    """
+
+    if safe_key is None:
+      safe_key = prng.SafeKey(hk.next_rng_key())
+
+    gc = self.global_config
+    c = self.config
+
+    if not c.num_block:
+      return pair_act
+
+    def block(x):
+      """One block of the template pair stack."""
+      pair_act, safe_key = x
+
+      dropout_wrapper_fn = functools.partial(
+          dropout_wrapper, is_training=is_training, global_config=gc)
+
+      safe_key, *sub_keys = safe_key.split(6)
+      sub_keys = iter(sub_keys)
+
+      pair_act = dropout_wrapper_fn(
+          TriangleAttention(c.triangle_attention_starting_node, gc,
+                            name='triangle_attention_starting_node'),
+          pair_act,
+          pair_mask,
+          next(sub_keys))
+      pair_act = dropout_wrapper_fn(
+          TriangleAttention(c.triangle_attention_ending_node, gc,
+                            name='triangle_attention_ending_node'),
+          pair_act,
+          pair_mask,
+          next(sub_keys))
+      pair_act = dropout_wrapper_fn(
+          TriangleMultiplication(c.triangle_multiplication_outgoing, gc,
+                                 name='triangle_multiplication_outgoing'),
+          pair_act,
+          pair_mask,
+          next(sub_keys))
+      pair_act = dropout_wrapper_fn(
+          TriangleMultiplication(c.triangle_multiplication_incoming, gc,
+                                 name='triangle_multiplication_incoming'),
+          pair_act,
+          pair_mask,
+          next(sub_keys))
+      pair_act = dropout_wrapper_fn(
+          Transition(c.pair_transition, gc, name='pair_transition'),
+          pair_act,
+          pair_mask,
+          next(sub_keys))
+
+      return pair_act, safe_key
+
+    if gc.use_remat:
+      block = hk.remat(block)
+
+    res_stack = layer_stack.layer_stack(c.num_block)(block)
+    pair_act, safe_key = res_stack((pair_act, safe_key))
+    return pair_act
+
+
+class Transition(hk.Module):
+  """Transition layer.
+
+  Jumper et al. (2021) Suppl. Alg. 9 "MSATransition"
+  Jumper et al. (2021) Suppl. Alg. 15 "PairTransition"
+  """
+
+  def __init__(self, config, global_config, name='transition_block'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, act, mask, is_training=True):
+    """Builds Transition module.
+
+    Arguments:
+      act: A tensor of queries of size [batch_size, N_res, N_channel].
+      mask: A tensor denoting the mask of size [batch_size, N_res].
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      A float32 tensor of size [batch_size, N_res, N_channel].
+    """
+    _, _, nc = act.shape
+
+    num_intermediate = int(nc * self.config.num_intermediate_factor)
+    mask = jnp.expand_dims(mask, axis=-1)
+
+    act = hk.LayerNorm(
+        axis=[-1],
+        create_scale=True,
+        create_offset=True,
+        name='input_layer_norm')(
+            act)
+
+    transition_module = hk.Sequential([
+        common_modules.Linear(
+            num_intermediate,
+            initializer='relu',
+            name='transition1'), jax.nn.relu,
+        common_modules.Linear(
+            nc,
+            initializer=utils.final_init(self.global_config),
+            name='transition2')
+    ])
+
+    act = mapping.inference_subbatch(
+        transition_module,
+        self.global_config.subbatch_size,
+        batched_args=[act],
+        nonbatched_args=[],
+        low_memory=not is_training)
+
+    return act
+
+
+def glorot_uniform():
+  return hk.initializers.VarianceScaling(scale=1.0,
+                                         mode='fan_avg',
+                                         distribution='uniform')
+
+
+class Attention(hk.Module):
+  """Multihead attention."""
+
+  def __init__(self, config, global_config, output_dim, name='attention'):
+    super().__init__(name=name)
+
+    self.config = config
+    self.global_config = global_config
+    self.output_dim = output_dim
+
+  def __call__(self, q_data, m_data, bias, nonbatched_bias=None):
+    """Builds Attention module.
+
+    Arguments:
+      q_data: A tensor of queries, shape [batch_size, N_queries, q_channels].
+      m_data: A tensor of memories from which the keys and values are
+        projected, shape [batch_size, N_keys, m_channels].
+      bias: A bias for the attention, shape [batch_size, N_queries, N_keys].
+      nonbatched_bias: Shared bias, shape [N_queries, N_keys].
+
+    Returns:
+      A float32 tensor of shape [batch_size, N_queries, output_dim].
+    """
+    # Sensible default for when the config keys are missing
+    key_dim = self.config.get('key_dim', int(q_data.shape[-1]))
+    value_dim = self.config.get('value_dim', int(m_data.shape[-1]))
+    num_head = self.config.num_head
+    assert key_dim % num_head == 0
+    assert value_dim % num_head == 0
+    key_dim = key_dim // num_head
+    value_dim = value_dim // num_head
+
+    q_weights = hk.get_parameter(
+        'query_w', shape=(q_data.shape[-1], num_head, key_dim),
+        init=glorot_uniform())
+    k_weights = hk.get_parameter(
+        'key_w', shape=(m_data.shape[-1], num_head, key_dim),
+        init=glorot_uniform())
+    v_weights = hk.get_parameter(
+        'value_w', shape=(m_data.shape[-1], num_head, value_dim),
+        init=glorot_uniform())
+
+    q = jnp.einsum('bqa,ahc->bqhc', q_data, q_weights) * key_dim**(-0.5)
+    k = jnp.einsum('bka,ahc->bkhc', m_data, k_weights)
+    v = jnp.einsum('bka,ahc->bkhc', m_data, v_weights)
+    logits = jnp.einsum('bqhc,bkhc->bhqk', q, k) + bias
+    if nonbatched_bias is not None:
+      logits += jnp.expand_dims(nonbatched_bias, axis=0)
+    weights = jax.nn.softmax(logits)
+    weighted_avg = jnp.einsum('bhqk,bkhc->bqhc', weights, v)
+
+    if self.global_config.zero_init:
+      init = hk.initializers.Constant(0.0)
+    else:
+      init = glorot_uniform()
+
+    if self.config.gating:
+      gating_weights = hk.get_parameter(
+          'gating_w',
+          shape=(q_data.shape[-1], num_head, value_dim),
+          init=hk.initializers.Constant(0.0))
+      gating_bias = hk.get_parameter(
+          'gating_b',
+          shape=(num_head, value_dim),
+          init=hk.initializers.Constant(1.0))
+
+      gate_values = jnp.einsum('bqc, chv->bqhv', q_data,
+                               gating_weights) + gating_bias
+
+      gate_values = jax.nn.sigmoid(gate_values)
+
+      weighted_avg *= gate_values
+
+    o_weights = hk.get_parameter(
+        'output_w', shape=(num_head, value_dim, self.output_dim),
+        init=init)
+    o_bias = hk.get_parameter('output_b', shape=(self.output_dim,),
+                              init=hk.initializers.Constant(0.0))
+
+    output = jnp.einsum('bqhc,hco->bqo', weighted_avg, o_weights) + o_bias
+
+    return output
+
+
+class GlobalAttention(hk.Module):
+  """Global attention.
+
+  Jumper et al. (2021) Suppl. Alg. 19 "MSAColumnGlobalAttention" lines 2-7
+  """
+
+  def __init__(self, config, global_config, output_dim, name='attention'):
+    super().__init__(name=name)
+
+    self.config = config
+    self.global_config = global_config
+    self.output_dim = output_dim
+
+  def __call__(self, q_data, m_data, q_mask, bias):
+    """Builds GlobalAttention module.
+
+    Arguments:
+      q_data: A tensor of queries with size [batch_size, N_queries,
+        q_channels]
+      m_data: A tensor of memories from which the keys and values
+        projected. Size [batch_size, N_keys, m_channels]
+      q_mask: A binary mask for q_data with zeros in the padded sequence
+        elements and ones otherwise. Size [batch_size, N_queries, q_channels]
+        (or broadcastable to this shape).
+      bias: A bias for the attention.
+
+    Returns:
+      A float32 tensor of size [batch_size, N_queries, output_dim].
+    """
+    # Sensible default for when the config keys are missing
+    key_dim = self.config.get('key_dim', int(q_data.shape[-1]))
+    value_dim = self.config.get('value_dim', int(m_data.shape[-1]))
+    num_head = self.config.num_head
+    assert key_dim % num_head == 0
+    assert value_dim % num_head == 0
+    key_dim = key_dim // num_head
+    value_dim = value_dim // num_head
+
+    q_weights = hk.get_parameter(
+        'query_w', shape=(q_data.shape[-1], num_head, key_dim),
+        init=glorot_uniform())
+    k_weights = hk.get_parameter(
+        'key_w', shape=(m_data.shape[-1], key_dim),
+        init=glorot_uniform())
+    v_weights = hk.get_parameter(
+        'value_w', shape=(m_data.shape[-1], value_dim),
+        init=glorot_uniform())
+
+    v = jnp.einsum('bka,ac->bkc', m_data, v_weights)
+
+    q_avg = utils.mask_mean(q_mask, q_data, axis=1)
+
+    q = jnp.einsum('ba,ahc->bhc', q_avg, q_weights) * key_dim**(-0.5)
+    k = jnp.einsum('bka,ac->bkc', m_data, k_weights)
+    bias = (1e9 * (q_mask[:, None, :, 0] - 1.))
+    logits = jnp.einsum('bhc,bkc->bhk', q, k) + bias
+    weights = jax.nn.softmax(logits)
+    weighted_avg = jnp.einsum('bhk,bkc->bhc', weights, v)
+
+    if self.global_config.zero_init:
+      init = hk.initializers.Constant(0.0)
+    else:
+      init = glorot_uniform()
+
+    o_weights = hk.get_parameter(
+        'output_w', shape=(num_head, value_dim, self.output_dim),
+        init=init)
+    o_bias = hk.get_parameter('output_b', shape=(self.output_dim,),
+                              init=hk.initializers.Constant(0.0))
+
+    if self.config.gating:
+      gating_weights = hk.get_parameter(
+          'gating_w',
+          shape=(q_data.shape[-1], num_head, value_dim),
+          init=hk.initializers.Constant(0.0))
+      gating_bias = hk.get_parameter(
+          'gating_b',
+          shape=(num_head, value_dim),
+          init=hk.initializers.Constant(1.0))
+
+      gate_values = jnp.einsum('bqc, chv->bqhv', q_data, gating_weights)
+      gate_values = jax.nn.sigmoid(gate_values + gating_bias)
+      weighted_avg = weighted_avg[:, None] * gate_values
+      output = jnp.einsum('bqhc,hco->bqo', weighted_avg, o_weights) + o_bias
+    else:
+      output = jnp.einsum('bhc,hco->bo', weighted_avg, o_weights) + o_bias
+      output = output[:, None]
+    return output
+
+
+class MSARowAttentionWithPairBias(hk.Module):
+  """MSA per-row attention biased by the pair representation.
+
+  Jumper et al. (2021) Suppl. Alg. 7 "MSARowAttentionWithPairBias"
+  """
+
+  def __init__(self, config, global_config,
+               name='msa_row_attention_with_pair_bias'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self,
+               msa_act,
+               msa_mask,
+               pair_act,
+               is_training=False):
+    """Builds MSARowAttentionWithPairBias module.
+
+    Arguments:
+      msa_act: [N_seq, N_res, c_m] MSA representation.
+      msa_mask: [N_seq, N_res] mask of non-padded regions.
+      pair_act: [N_res, N_res, c_z] pair representation.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Update to msa_act, shape [N_seq, N_res, c_m].
+    """
+    c = self.config
+
+    assert len(msa_act.shape) == 3
+    assert len(msa_mask.shape) == 2
+    assert c.orientation == 'per_row'
+
+    bias = (1e9 * (msa_mask - 1.))[:, None, None, :]
+    assert len(bias.shape) == 4
+
+    msa_act = hk.LayerNorm(
+        axis=[-1], create_scale=True, create_offset=True, name='query_norm')(
+            msa_act)
+
+    pair_act = hk.LayerNorm(
+        axis=[-1],
+        create_scale=True,
+        create_offset=True,
+        name='feat_2d_norm')(
+            pair_act)
+
+    init_factor = 1. / jnp.sqrt(int(pair_act.shape[-1]))
+    weights = hk.get_parameter(
+        'feat_2d_weights',
+        shape=(pair_act.shape[-1], c.num_head),
+        init=hk.initializers.RandomNormal(stddev=init_factor))
+    nonbatched_bias = jnp.einsum('qkc,ch->hqk', pair_act, weights)
+
+    attn_mod = Attention(
+        c, self.global_config, msa_act.shape[-1])
+    msa_act = mapping.inference_subbatch(
+        attn_mod,
+        self.global_config.subbatch_size,
+        batched_args=[msa_act, msa_act, bias],
+        nonbatched_args=[nonbatched_bias],
+        low_memory=not is_training)
+
+    return msa_act
+
+
+class MSAColumnAttention(hk.Module):
+  """MSA per-column attention.
+
+  Jumper et al. (2021) Suppl. Alg. 8 "MSAColumnAttention"
+  """
+
+  def __init__(self, config, global_config, name='msa_column_attention'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self,
+               msa_act,
+               msa_mask,
+               is_training=False):
+    """Builds MSAColumnAttention module.
+
+    Arguments:
+      msa_act: [N_seq, N_res, c_m] MSA representation.
+      msa_mask: [N_seq, N_res] mask of non-padded regions.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Update to msa_act, shape [N_seq, N_res, c_m]
+    """
+    c = self.config
+
+    assert len(msa_act.shape) == 3
+    assert len(msa_mask.shape) == 2
+    assert c.orientation == 'per_column'
+
+    msa_act = jnp.swapaxes(msa_act, -2, -3)
+    msa_mask = jnp.swapaxes(msa_mask, -1, -2)
+
+    bias = (1e9 * (msa_mask - 1.))[:, None, None, :]
+    assert len(bias.shape) == 4
+
+    msa_act = hk.LayerNorm(
+        axis=[-1], create_scale=True, create_offset=True, name='query_norm')(
+            msa_act)
+
+    attn_mod = Attention(
+        c, self.global_config, msa_act.shape[-1])
+    msa_act = mapping.inference_subbatch(
+        attn_mod,
+        self.global_config.subbatch_size,
+        batched_args=[msa_act, msa_act, bias],
+        nonbatched_args=[],
+        low_memory=not is_training)
+
+    msa_act = jnp.swapaxes(msa_act, -2, -3)
+
+    return msa_act
+
+
+class MSAColumnGlobalAttention(hk.Module):
+  """MSA per-column global attention.
+
+  Jumper et al. (2021) Suppl. Alg. 19 "MSAColumnGlobalAttention"
+  """
+
+  def __init__(self, config, global_config, name='msa_column_global_attention'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self,
+               msa_act,
+               msa_mask,
+               is_training=False):
+    """Builds MSAColumnGlobalAttention module.
+
+    Arguments:
+      msa_act: [N_seq, N_res, c_m] MSA representation.
+      msa_mask: [N_seq, N_res] mask of non-padded regions.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Update to msa_act, shape [N_seq, N_res, c_m].
+    """
+    c = self.config
+
+    assert len(msa_act.shape) == 3
+    assert len(msa_mask.shape) == 2
+    assert c.orientation == 'per_column'
+
+    msa_act = jnp.swapaxes(msa_act, -2, -3)
+    msa_mask = jnp.swapaxes(msa_mask, -1, -2)
+
+    bias = (1e9 * (msa_mask - 1.))[:, None, None, :]
+    assert len(bias.shape) == 4
+
+    msa_act = hk.LayerNorm(
+        axis=[-1], create_scale=True, create_offset=True, name='query_norm')(
+            msa_act)
+
+    attn_mod = GlobalAttention(
+        c, self.global_config, msa_act.shape[-1],
+        name='attention')
+    # [N_seq, N_res, 1]
+    msa_mask = jnp.expand_dims(msa_mask, axis=-1)
+    msa_act = mapping.inference_subbatch(
+        attn_mod,
+        self.global_config.subbatch_size,
+        batched_args=[msa_act, msa_act, msa_mask, bias],
+        nonbatched_args=[],
+        low_memory=not is_training)
+
+    msa_act = jnp.swapaxes(msa_act, -2, -3)
+
+    return msa_act
+
+
+class TriangleAttention(hk.Module):
+  """Triangle Attention.
+
+  Jumper et al. (2021) Suppl. Alg. 13 "TriangleAttentionStartingNode"
+  Jumper et al. (2021) Suppl. Alg. 14 "TriangleAttentionEndingNode"
+  """
+
+  def __init__(self, config, global_config, name='triangle_attention'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, pair_act, pair_mask, is_training=False):
+    """Builds TriangleAttention module.
+
+    Arguments:
+      pair_act: [N_res, N_res, c_z] pair activations tensor
+      pair_mask: [N_res, N_res] mask of non-padded regions in the tensor.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Update to pair_act, shape [N_res, N_res, c_z].
+    """
+    c = self.config
+
+    assert len(pair_act.shape) == 3
+    assert len(pair_mask.shape) == 2
+    assert c.orientation in ['per_row', 'per_column']
+
+    if c.orientation == 'per_column':
+      pair_act = jnp.swapaxes(pair_act, -2, -3)
+      pair_mask = jnp.swapaxes(pair_mask, -1, -2)
+
+    bias = (1e9 * (pair_mask - 1.))[:, None, None, :]
+    assert len(bias.shape) == 4
+
+    pair_act = hk.LayerNorm(
+        axis=[-1], create_scale=True, create_offset=True, name='query_norm')(
+            pair_act)
+
+    init_factor = 1. / jnp.sqrt(int(pair_act.shape[-1]))
+    weights = hk.get_parameter(
+        'feat_2d_weights',
+        shape=(pair_act.shape[-1], c.num_head),
+        init=hk.initializers.RandomNormal(stddev=init_factor))
+    nonbatched_bias = jnp.einsum('qkc,ch->hqk', pair_act, weights)
+
+    attn_mod = Attention(
+        c, self.global_config, pair_act.shape[-1])
+    pair_act = mapping.inference_subbatch(
+        attn_mod,
+        self.global_config.subbatch_size,
+        batched_args=[pair_act, pair_act, bias],
+        nonbatched_args=[nonbatched_bias],
+        low_memory=not is_training)
+
+    if c.orientation == 'per_column':
+      pair_act = jnp.swapaxes(pair_act, -2, -3)
+
+    return pair_act
+
+
+class MaskedMsaHead(hk.Module):
+  """Head to predict MSA at the masked locations.
+
+  The MaskedMsaHead employs a BERT-style objective to reconstruct a masked
+  version of the full MSA, based on a linear projection of
+  the MSA representation.
+  Jumper et al. (2021) Suppl. Sec. 1.9.9 "Masked MSA prediction"
+  """
+
+  def __init__(self, config, global_config, name='masked_msa_head'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, representations, batch, is_training):
+    """Builds MaskedMsaHead module.
+
+    Arguments:
+      representations: Dictionary of representations, must contain:
+        * 'msa': MSA representation, shape [N_seq, N_res, c_m].
+      batch: Batch, unused.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Dictionary containing:
+        * 'logits': logits of shape [N_seq, N_res, N_aatype] with
+            (unnormalized) log probabilies of predicted aatype at position.
+    """
+    del batch
+    logits = common_modules.Linear(
+        self.config.num_output,
+        initializer=utils.final_init(self.global_config),
+        name='logits')(
+            representations['msa'])
+    return dict(logits=logits)
+
+  def loss(self, value, batch):
+    errors = softmax_cross_entropy(
+        labels=jax.nn.one_hot(batch['true_msa'], num_classes=23),
+        logits=value['logits'])
+    loss = (jnp.sum(errors * batch['bert_mask'], axis=(-2, -1)) /
+            (1e-8 + jnp.sum(batch['bert_mask'], axis=(-2, -1))))
+    return {'loss': loss}
+
+
+class PredictedLDDTHead(hk.Module):
+  """Head to predict the per-residue LDDT to be used as a confidence measure.
+
+  Jumper et al. (2021) Suppl. Sec. 1.9.6 "Model confidence prediction (pLDDT)"
+  Jumper et al. (2021) Suppl. Alg. 29 "predictPerResidueLDDT_Ca"
+  """
+
+  def __init__(self, config, global_config, name='predicted_lddt_head'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, representations, batch, is_training):
+    """Builds ExperimentallyResolvedHead module.
+
+    Arguments:
+      representations: Dictionary of representations, must contain:
+        * 'structure_module': Single representation from the structure module,
+             shape [N_res, c_s].
+      batch: Batch, unused.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Dictionary containing :
+        * 'logits': logits of shape [N_res, N_bins] with
+            (unnormalized) log probabilies of binned predicted lDDT.
+    """
+    act = representations['structure_module']
+
+    act = hk.LayerNorm(
+        axis=[-1],
+        create_scale=True,
+        create_offset=True,
+        name='input_layer_norm')(
+            act)
+
+    act = common_modules.Linear(
+        self.config.num_channels,
+        initializer='relu',
+        name='act_0')(
+            act)
+    act = jax.nn.relu(act)
+
+    act = common_modules.Linear(
+        self.config.num_channels,
+        initializer='relu',
+        name='act_1')(
+            act)
+    act = jax.nn.relu(act)
+
+    logits = common_modules.Linear(
+        self.config.num_bins,
+        initializer=utils.final_init(self.global_config),
+        name='logits')(
+            act)
+    # Shape (batch_size, num_res, num_bins)
+    return dict(logits=logits)
+
+  def loss(self, value, batch):
+    # Shape (num_res, 37, 3)
+    pred_all_atom_pos = value['structure_module']['final_atom_positions']
+    # Shape (num_res, 37, 3)
+    true_all_atom_pos = batch['all_atom_positions']
+    # Shape (num_res, 37)
+    all_atom_mask = batch['all_atom_mask']
+
+    # Shape (num_res,)
+    lddt_ca = lddt.lddt(
+        # Shape (batch_size, num_res, 3)
+        predicted_points=pred_all_atom_pos[None, :, 1, :],
+        # Shape (batch_size, num_res, 3)
+        true_points=true_all_atom_pos[None, :, 1, :],
+        # Shape (batch_size, num_res, 1)
+        true_points_mask=all_atom_mask[None, :, 1:2].astype(jnp.float32),
+        cutoff=15.,
+        per_residue=True)[0]
+    lddt_ca = jax.lax.stop_gradient(lddt_ca)
+
+    num_bins = self.config.num_bins
+    bin_index = jnp.floor(lddt_ca * num_bins).astype(jnp.int32)
+
+    # protect against out of range for lddt_ca == 1
+    bin_index = jnp.minimum(bin_index, num_bins - 1)
+    lddt_ca_one_hot = jax.nn.one_hot(bin_index, num_classes=num_bins)
+
+    # Shape (num_res, num_channel)
+    logits = value['predicted_lddt']['logits']
+    errors = softmax_cross_entropy(labels=lddt_ca_one_hot, logits=logits)
+
+    # Shape (num_res,)
+    mask_ca = all_atom_mask[:, residue_constants.atom_order['CA']]
+    mask_ca = mask_ca.astype(jnp.float32)
+    loss = jnp.sum(errors * mask_ca) / (jnp.sum(mask_ca) + 1e-8)
+
+    if self.config.filter_by_resolution:
+      # NMR & distillation have resolution = 0
+      loss *= ((batch['resolution'] >= self.config.min_resolution)
+               & (batch['resolution'] <= self.config.max_resolution)).astype(
+                   jnp.float32)
+
+    output = {'loss': loss}
+    return output
+
+
+class PredictedAlignedErrorHead(hk.Module):
+  """Head to predict the distance errors in the backbone alignment frames.
+
+  Can be used to compute predicted TM-Score.
+  Jumper et al. (2021) Suppl. Sec. 1.9.7 "TM-score prediction"
+  """
+
+  def __init__(self, config, global_config,
+               name='predicted_aligned_error_head'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, representations, batch, is_training):
+    """Builds PredictedAlignedErrorHead module.
+
+    Arguments:
+      representations: Dictionary of representations, must contain:
+        * 'pair': pair representation, shape [N_res, N_res, c_z].
+      batch: Batch, unused.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Dictionary containing:
+        * logits: logits for aligned error, shape [N_res, N_res, N_bins].
+        * bin_breaks: array containing bin breaks, shape [N_bins - 1].
+    """
+
+    act = representations['pair']
+
+    # Shape (num_res, num_res, num_bins)
+    logits = common_modules.Linear(
+        self.config.num_bins,
+        initializer=utils.final_init(self.global_config),
+        name='logits')(act)
+    # Shape (num_bins,)
+    breaks = jnp.linspace(
+        0., self.config.max_error_bin, self.config.num_bins - 1)
+    return dict(logits=logits, breaks=breaks)
+
+  def loss(self, value, batch):
+    # Shape (num_res, 7)
+    predicted_affine = quat_affine.QuatAffine.from_tensor(
+        value['structure_module']['final_affines'])
+    # Shape (num_res, 7)
+    true_affine = quat_affine.QuatAffine.from_tensor(
+        batch['backbone_affine_tensor'])
+    # Shape (num_res)
+    mask = batch['backbone_affine_mask']
+    # Shape (num_res, num_res)
+    square_mask = mask[:, None] * mask[None, :]
+    num_bins = self.config.num_bins
+    # (1, num_bins - 1)
+    breaks = value['predicted_aligned_error']['breaks']
+    # (1, num_bins)
+    logits = value['predicted_aligned_error']['logits']
+
+    # Compute the squared error for each alignment.
+    def _local_frame_points(affine):
+      points = [jnp.expand_dims(x, axis=-2) for x in affine.translation]
+      return affine.invert_point(points, extra_dims=1)
+    error_dist2_xyz = [
+        jnp.square(a - b)
+        for a, b in zip(_local_frame_points(predicted_affine),
+                        _local_frame_points(true_affine))]
+    error_dist2 = sum(error_dist2_xyz)
+    # Shape (num_res, num_res)
+    # First num_res are alignment frames, second num_res are the residues.
+    error_dist2 = jax.lax.stop_gradient(error_dist2)
+
+    sq_breaks = jnp.square(breaks)
+    true_bins = jnp.sum((
+        error_dist2[..., None] > sq_breaks).astype(jnp.int32), axis=-1)
+
+    errors = softmax_cross_entropy(
+        labels=jax.nn.one_hot(true_bins, num_bins, axis=-1), logits=logits)
+
+    loss = (jnp.sum(errors * square_mask, axis=(-2, -1)) /
+            (1e-8 + jnp.sum(square_mask, axis=(-2, -1))))
+
+    if self.config.filter_by_resolution:
+      # NMR & distillation have resolution = 0
+      loss *= ((batch['resolution'] >= self.config.min_resolution)
+               & (batch['resolution'] <= self.config.max_resolution)).astype(
+                   jnp.float32)
+
+    output = {'loss': loss}
+    return output
+
+
+class ExperimentallyResolvedHead(hk.Module):
+  """Predicts if an atom is experimentally resolved in a high-res structure.
+
+  Only trained on high-resolution X-ray crystals & cryo-EM.
+  Jumper et al. (2021) Suppl. Sec. 1.9.10 '"Experimentally resolved" prediction'
+  """
+
+  def __init__(self, config, global_config,
+               name='experimentally_resolved_head'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, representations, batch, is_training):
+    """Builds ExperimentallyResolvedHead module.
+
+    Arguments:
+      representations: Dictionary of representations, must contain:
+        * 'single': Single representation, shape [N_res, c_s].
+      batch: Batch, unused.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Dictionary containing:
+        * 'logits': logits of shape [N_res, 37],
+            log probability that an atom is resolved in atom37 representation,
+            can be converted to probability by applying sigmoid.
+    """
+    logits = common_modules.Linear(
+        37,  # atom_exists.shape[-1]
+        initializer=utils.final_init(self.global_config),
+        name='logits')(representations['single'])
+    return dict(logits=logits)
+
+  def loss(self, value, batch):
+    logits = value['logits']
+    assert len(logits.shape) == 2
+
+    # Does the atom appear in the amino acid?
+    atom_exists = batch['atom37_atom_exists']
+    # Is the atom resolved in the experiment? Subset of atom_exists,
+    # *except for OXT*
+    all_atom_mask = batch['all_atom_mask'].astype(jnp.float32)
+
+    xent = sigmoid_cross_entropy(labels=all_atom_mask, logits=logits)
+    loss = jnp.sum(xent * atom_exists) / (1e-8 + jnp.sum(atom_exists))
+
+    if self.config.filter_by_resolution:
+      # NMR & distillation examples have resolution = 0.
+      loss *= ((batch['resolution'] >= self.config.min_resolution)
+               & (batch['resolution'] <= self.config.max_resolution)).astype(
+                   jnp.float32)
+
+    output = {'loss': loss}
+    return output
+
+
+class TriangleMultiplication(hk.Module):
+  """Triangle multiplication layer ("outgoing" or "incoming").
+
+  Jumper et al. (2021) Suppl. Alg. 11 "TriangleMultiplicationOutgoing"
+  Jumper et al. (2021) Suppl. Alg. 12 "TriangleMultiplicationIncoming"
+  """
+
+  def __init__(self, config, global_config, name='triangle_multiplication'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, act, mask, is_training=True):
+    """Builds TriangleMultiplication module.
+
+    Arguments:
+      act: Pair activations, shape [N_res, N_res, c_z]
+      mask: Pair mask, shape [N_res, N_res].
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Outputs, same shape/type as act.
+    """
+    del is_training
+    c = self.config
+    gc = self.global_config
+
+    mask = mask[..., None]
+
+    act = hk.LayerNorm(axis=[-1], create_scale=True, create_offset=True,
+                       name='layer_norm_input')(act)
+    input_act = act
+
+    left_projection = common_modules.Linear(
+        c.num_intermediate_channel,
+        name='left_projection')
+    left_proj_act = mask * left_projection(act)
+
+    right_projection = common_modules.Linear(
+        c.num_intermediate_channel,
+        name='right_projection')
+    right_proj_act = mask * right_projection(act)
+
+    left_gate_values = jax.nn.sigmoid(common_modules.Linear(
+        c.num_intermediate_channel,
+        bias_init=1.,
+        initializer=utils.final_init(gc),
+        name='left_gate')(act))
+
+    right_gate_values = jax.nn.sigmoid(common_modules.Linear(
+        c.num_intermediate_channel,
+        bias_init=1.,
+        initializer=utils.final_init(gc),
+        name='right_gate')(act))
+
+    left_proj_act *= left_gate_values
+    right_proj_act *= right_gate_values
+
+    # "Outgoing" edges equation: 'ikc,jkc->ijc'
+    # "Incoming" edges equation: 'kjc,kic->ijc'
+    # Note on the Suppl. Alg. 11 & 12 notation:
+    # For the "outgoing" edges, a = left_proj_act and b = right_proj_act
+    # For the "incoming" edges, it's swapped:
+    #   b = left_proj_act and a = right_proj_act
+    act = jnp.einsum(c.equation, left_proj_act, right_proj_act)
+
+    act = hk.LayerNorm(
+        axis=[-1],
+        create_scale=True,
+        create_offset=True,
+        name='center_layer_norm')(
+            act)
+
+    output_channel = int(input_act.shape[-1])
+
+    act = common_modules.Linear(
+        output_channel,
+        initializer=utils.final_init(gc),
+        name='output_projection')(act)
+
+    gate_values = jax.nn.sigmoid(common_modules.Linear(
+        output_channel,
+        bias_init=1.,
+        initializer=utils.final_init(gc),
+        name='gating_linear')(input_act))
+    act *= gate_values
+
+    return act
+
+
+class DistogramHead(hk.Module):
+  """Head to predict a distogram.
+
+  Jumper et al. (2021) Suppl. Sec. 1.9.8 "Distogram prediction"
+  """
+
+  def __init__(self, config, global_config, name='distogram_head'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, representations, batch, is_training):
+    """Builds DistogramHead module.
+
+    Arguments:
+      representations: Dictionary of representations, must contain:
+        * 'pair': pair representation, shape [N_res, N_res, c_z].
+      batch: Batch, unused.
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Dictionary containing:
+        * logits: logits for distogram, shape [N_res, N_res, N_bins].
+        * bin_breaks: array containing bin breaks, shape [N_bins - 1,].
+    """
+    half_logits = common_modules.Linear(
+        self.config.num_bins,
+        initializer=utils.final_init(self.global_config),
+        name='half_logits')(
+            representations['pair'])
+
+    logits = half_logits + jnp.swapaxes(half_logits, -2, -3)
+    breaks = jnp.linspace(self.config.first_break, self.config.last_break,
+                          self.config.num_bins - 1)
+
+    return dict(logits=logits, bin_edges=breaks)
+
+  def loss(self, value, batch):
+    return _distogram_log_loss(value['logits'], value['bin_edges'],
+                               batch, self.config.num_bins)
+
+
+def _distogram_log_loss(logits, bin_edges, batch, num_bins):
+  """Log loss of a distogram."""
+
+  assert len(logits.shape) == 3
+  positions = batch['pseudo_beta']
+  mask = batch['pseudo_beta_mask']
+
+  assert positions.shape[-1] == 3
+
+  sq_breaks = jnp.square(bin_edges)
+
+  dist2 = jnp.sum(
+      jnp.square(
+          jnp.expand_dims(positions, axis=-2) -
+          jnp.expand_dims(positions, axis=-3)),
+      axis=-1,
+      keepdims=True)
+
+  true_bins = jnp.sum(dist2 > sq_breaks, axis=-1)
+
+  errors = softmax_cross_entropy(
+      labels=jax.nn.one_hot(true_bins, num_bins), logits=logits)
+
+  square_mask = jnp.expand_dims(mask, axis=-2) * jnp.expand_dims(mask, axis=-1)
+
+  avg_error = (
+      jnp.sum(errors * square_mask, axis=(-2, -1)) /
+      (1e-6 + jnp.sum(square_mask, axis=(-2, -1))))
+  dist2 = dist2[..., 0]
+  return dict(loss=avg_error, true_dist=jnp.sqrt(1e-6 + dist2))
+
+
+class OuterProductMean(hk.Module):
+  """Computes mean outer product.
+
+  Jumper et al. (2021) Suppl. Alg. 10 "OuterProductMean"
+  """
+
+  def __init__(self,
+               config,
+               global_config,
+               num_output_channel,
+               name='outer_product_mean'):
+    super().__init__(name=name)
+    self.global_config = global_config
+    self.config = config
+    self.num_output_channel = num_output_channel
+
+  def __call__(self, act, mask, is_training=True):
+    """Builds OuterProductMean module.
+
+    Arguments:
+      act: MSA representation, shape [N_seq, N_res, c_m].
+      mask: MSA mask, shape [N_seq, N_res].
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      Update to pair representation, shape [N_res, N_res, c_z].
+    """
+    gc = self.global_config
+    c = self.config
+
+    mask = mask[..., None]
+    act = hk.LayerNorm([-1], True, True, name='layer_norm_input')(act)
+
+    left_act = mask * common_modules.Linear(
+        c.num_outer_channel,
+        initializer='linear',
+        name='left_projection')(
+            act)
+
+    right_act = mask * common_modules.Linear(
+        c.num_outer_channel,
+        initializer='linear',
+        name='right_projection')(
+            act)
+
+    if gc.zero_init:
+      init_w = hk.initializers.Constant(0.0)
+    else:
+      init_w = hk.initializers.VarianceScaling(scale=2., mode='fan_in')
+
+    output_w = hk.get_parameter(
+        'output_w',
+        shape=(c.num_outer_channel, c.num_outer_channel,
+               self.num_output_channel),
+        init=init_w)
+    output_b = hk.get_parameter(
+        'output_b', shape=(self.num_output_channel,),
+        init=hk.initializers.Constant(0.0))
+
+    def compute_chunk(left_act):
+      # This is equivalent to
+      #
+      # act = jnp.einsum('abc,ade->dceb', left_act, right_act)
+      # act = jnp.einsum('dceb,cef->bdf', act, output_w) + output_b
+      #
+      # but faster.
+      left_act = jnp.transpose(left_act, [0, 2, 1])
+      act = jnp.einsum('acb,ade->dceb', left_act, right_act)
+      act = jnp.einsum('dceb,cef->dbf', act, output_w) + output_b
+      return jnp.transpose(act, [1, 0, 2])
+
+    act = mapping.inference_subbatch(
+        compute_chunk,
+        c.chunk_size,
+        batched_args=[left_act],
+        nonbatched_args=[],
+        low_memory=True,
+        input_subbatch_dim=1,
+        output_subbatch_dim=0)
+
+    epsilon = 1e-3
+    norm = jnp.einsum('abc,adc->bdc', mask, mask)
+    act /= epsilon + norm
+
+    return act
+
+
+def dgram_from_positions(positions, num_bins, min_bin, max_bin):
+  """Compute distogram from amino acid positions.
+
+  Arguments:
+    positions: [N_res, 3] Position coordinates.
+    num_bins: The number of bins in the distogram.
+    min_bin: The left edge of the first bin.
+    max_bin: The left edge of the final bin. The final bin catches
+        everything larger than `max_bin`.
+
+  Returns:
+    Distogram with the specified number of bins.
+  """
+
+  def squared_difference(x, y):
+    return jnp.square(x - y)
+
+  lower_breaks = jnp.linspace(min_bin, max_bin, num_bins)
+  lower_breaks = jnp.square(lower_breaks)
+  upper_breaks = jnp.concatenate([lower_breaks[1:],
+                                  jnp.array([1e8], dtype=jnp.float32)], axis=-1)
+  dist2 = jnp.sum(
+      squared_difference(
+          jnp.expand_dims(positions, axis=-2),
+          jnp.expand_dims(positions, axis=-3)),
+      axis=-1, keepdims=True)
+
+  dgram = ((dist2 > lower_breaks).astype(jnp.float32) *
+           (dist2 < upper_breaks).astype(jnp.float32))
+  return dgram
+
+
+def pseudo_beta_fn(aatype, all_atom_positions, all_atom_masks):
+  """Create pseudo beta features."""
+
+  is_gly = jnp.equal(aatype, residue_constants.restype_order['G'])
+  ca_idx = residue_constants.atom_order['CA']
+  cb_idx = residue_constants.atom_order['CB']
+  pseudo_beta = jnp.where(
+      jnp.tile(is_gly[..., None], [1] * len(is_gly.shape) + [3]),
+      all_atom_positions[..., ca_idx, :],
+      all_atom_positions[..., cb_idx, :])
+
+  if all_atom_masks is not None:
+    pseudo_beta_mask = jnp.where(
+        is_gly, all_atom_masks[..., ca_idx], all_atom_masks[..., cb_idx])
+    pseudo_beta_mask = pseudo_beta_mask.astype(jnp.float32)
+    return pseudo_beta, pseudo_beta_mask
+  else:
+    return pseudo_beta
+
+
+class EvoformerIteration(hk.Module):
+  """Single iteration (block) of Evoformer stack.
+
+  Jumper et al. (2021) Suppl. Alg. 6 "EvoformerStack" lines 2-10
+  """
+
+  def __init__(self, config, global_config, is_extra_msa,
+               name='evoformer_iteration'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+    self.is_extra_msa = is_extra_msa
+
+  def __call__(self, activations, masks, is_training=True, safe_key=None):
+    """Builds EvoformerIteration module.
+
+    Arguments:
+      activations: Dictionary containing activations:
+        * 'msa': MSA activations, shape [N_seq, N_res, c_m].
+        * 'pair': pair activations, shape [N_res, N_res, c_z].
+      masks: Dictionary of masks:
+        * 'msa': MSA mask, shape [N_seq, N_res].
+        * 'pair': pair mask, shape [N_res, N_res].
+      is_training: Whether the module is in training mode.
+      safe_key: prng.SafeKey encapsulating rng key.
+
+    Returns:
+      Outputs, same shape/type as act.
+    """
+    c = self.config
+    gc = self.global_config
+
+    msa_act, pair_act = activations['msa'], activations['pair']
+
+    if safe_key is None:
+      safe_key = prng.SafeKey(hk.next_rng_key())
+
+    msa_mask, pair_mask = masks['msa'], masks['pair']
+
+    dropout_wrapper_fn = functools.partial(
+        dropout_wrapper,
+        is_training=is_training,
+        global_config=gc)
+
+    safe_key, *sub_keys = safe_key.split(10)
+    sub_keys = iter(sub_keys)
+
+    msa_act = dropout_wrapper_fn(
+        MSARowAttentionWithPairBias(
+            c.msa_row_attention_with_pair_bias, gc,
+            name='msa_row_attention_with_pair_bias'),
+        msa_act,
+        msa_mask,
+        safe_key=next(sub_keys),
+        pair_act=pair_act)
+
+    if not self.is_extra_msa:
+      attn_mod = MSAColumnAttention(
+          c.msa_column_attention, gc, name='msa_column_attention')
+    else:
+      attn_mod = MSAColumnGlobalAttention(
+          c.msa_column_attention, gc, name='msa_column_global_attention')
+    msa_act = dropout_wrapper_fn(
+        attn_mod,
+        msa_act,
+        msa_mask,
+        safe_key=next(sub_keys))
+
+    msa_act = dropout_wrapper_fn(
+        Transition(c.msa_transition, gc, name='msa_transition'),
+        msa_act,
+        msa_mask,
+        safe_key=next(sub_keys))
+
+    pair_act = dropout_wrapper_fn(
+        OuterProductMean(
+            config=c.outer_product_mean,
+            global_config=self.global_config,
+            num_output_channel=int(pair_act.shape[-1]),
+            name='outer_product_mean'),
+        msa_act,
+        msa_mask,
+        safe_key=next(sub_keys),
+        output_act=pair_act)
+
+    pair_act = dropout_wrapper_fn(
+        TriangleMultiplication(c.triangle_multiplication_outgoing, gc,
+                               name='triangle_multiplication_outgoing'),
+        pair_act,
+        pair_mask,
+        safe_key=next(sub_keys))
+    pair_act = dropout_wrapper_fn(
+        TriangleMultiplication(c.triangle_multiplication_incoming, gc,
+                               name='triangle_multiplication_incoming'),
+        pair_act,
+        pair_mask,
+        safe_key=next(sub_keys))
+
+    pair_act = dropout_wrapper_fn(
+        TriangleAttention(c.triangle_attention_starting_node, gc,
+                          name='triangle_attention_starting_node'),
+        pair_act,
+        pair_mask,
+        safe_key=next(sub_keys))
+    pair_act = dropout_wrapper_fn(
+        TriangleAttention(c.triangle_attention_ending_node, gc,
+                          name='triangle_attention_ending_node'),
+        pair_act,
+        pair_mask,
+        safe_key=next(sub_keys))
+
+    pair_act = dropout_wrapper_fn(
+        Transition(c.pair_transition, gc, name='pair_transition'),
+        pair_act,
+        pair_mask,
+        safe_key=next(sub_keys))
+
+    return {'msa': msa_act, 'pair': pair_act}
+
+
+class EmbeddingsAndEvoformer(hk.Module):
+  """Embeds the input data and runs Evoformer.
+
+  Produces the MSA, single and pair representations.
+  Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 5-18
+  """
+
+  def __init__(self, config, global_config, name='evoformer'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, batch, is_training, safe_key=None):
+
+    c = self.config
+    gc = self.global_config
+
+    if safe_key is None:
+      safe_key = prng.SafeKey(hk.next_rng_key())
+
+    # Embed clustered MSA.
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 5
+    # Jumper et al. (2021) Suppl. Alg. 3 "InputEmbedder"
+    preprocess_1d = common_modules.Linear(
+        c.msa_channel, name='preprocess_1d')(
+            batch['target_feat'])
+
+    preprocess_msa = common_modules.Linear(
+        c.msa_channel, name='preprocess_msa')(
+            batch['msa_feat'])
+
+    msa_activations = jnp.expand_dims(preprocess_1d, axis=0) + preprocess_msa
+
+    left_single = common_modules.Linear(
+        c.pair_channel, name='left_single')(
+            batch['target_feat'])
+    right_single = common_modules.Linear(
+        c.pair_channel, name='right_single')(
+            batch['target_feat'])
+    pair_activations = left_single[:, None] + right_single[None]
+    mask_2d = batch['seq_mask'][:, None] * batch['seq_mask'][None, :]
+
+    # Inject previous outputs for recycling.
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 6
+    # Jumper et al. (2021) Suppl. Alg. 32 "RecyclingEmbedder"
+    if c.recycle_pos and 'prev_pos' in batch:
+      prev_pseudo_beta = pseudo_beta_fn(
+          batch['aatype'], batch['prev_pos'], None)
+      dgram = dgram_from_positions(prev_pseudo_beta, **self.config.prev_pos)
+      pair_activations += common_modules.Linear(
+          c.pair_channel, name='prev_pos_linear')(
+              dgram)
+
+    if c.recycle_features:
+      if 'prev_msa_first_row' in batch:
+        prev_msa_first_row = hk.LayerNorm([-1],
+                                          True,
+                                          True,
+                                          name='prev_msa_first_row_norm')(
+                                              batch['prev_msa_first_row'])
+        msa_activations = jax.ops.index_add(msa_activations, 0,
+                                            prev_msa_first_row)
+
+      if 'prev_pair' in batch:
+        pair_activations += hk.LayerNorm([-1],
+                                         True,
+                                         True,
+                                         name='prev_pair_norm')(
+                                             batch['prev_pair'])
+
+    # Relative position encoding.
+    # Jumper et al. (2021) Suppl. Alg. 4 "relpos"
+    # Jumper et al. (2021) Suppl. Alg. 5 "one_hot"
+    if c.max_relative_feature:
+      # Add one-hot-encoded clipped residue distances to the pair activations.
+      pos = batch['residue_index']
+      offset = pos[:, None] - pos[None, :]
+      rel_pos = jax.nn.one_hot(
+          jnp.clip(
+              offset + c.max_relative_feature,
+              a_min=0,
+              a_max=2 * c.max_relative_feature),
+          2 * c.max_relative_feature + 1)
+      pair_activations += common_modules.Linear(
+          c.pair_channel, name='pair_activiations')(
+              rel_pos)
+
+    # Embed templates into the pair activations.
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9-13
+    if c.template.enabled:
+      template_batch = {k: batch[k] for k in batch if k.startswith('template_')}
+      template_pair_representation = TemplateEmbedding(c.template, gc)(
+          pair_activations,
+          template_batch,
+          mask_2d,
+          is_training=is_training)
+
+      pair_activations += template_pair_representation
+
+    # Embed extra MSA features.
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 14-16
+    extra_msa_feat = create_extra_msa_feature(batch)
+    extra_msa_activations = common_modules.Linear(
+        c.extra_msa_channel,
+        name='extra_msa_activations')(
+            extra_msa_feat)
+
+    # Extra MSA Stack.
+    # Jumper et al. (2021) Suppl. Alg. 18 "ExtraMsaStack"
+    extra_msa_stack_input = {
+        'msa': extra_msa_activations,
+        'pair': pair_activations,
+    }
+
+    extra_msa_stack_iteration = EvoformerIteration(
+        c.evoformer, gc, is_extra_msa=True, name='extra_msa_stack')
+
+    def extra_msa_stack_fn(x):
+      act, safe_key = x
+      safe_key, safe_subkey = safe_key.split()
+      extra_evoformer_output = extra_msa_stack_iteration(
+          activations=act,
+          masks={
+              'msa': batch['extra_msa_mask'],
+              'pair': mask_2d
+          },
+          is_training=is_training,
+          safe_key=safe_subkey)
+      return (extra_evoformer_output, safe_key)
+
+    if gc.use_remat:
+      extra_msa_stack_fn = hk.remat(extra_msa_stack_fn)
+
+    extra_msa_stack = layer_stack.layer_stack(
+        c.extra_msa_stack_num_block)(
+            extra_msa_stack_fn)
+    extra_msa_output, safe_key = extra_msa_stack(
+        (extra_msa_stack_input, safe_key))
+
+    pair_activations = extra_msa_output['pair']
+
+    evoformer_input = {
+        'msa': msa_activations,
+        'pair': pair_activations,
+    }
+
+    evoformer_masks = {'msa': batch['msa_mask'], 'pair': mask_2d}
+
+    # Append num_templ rows to msa_activations with template embeddings.
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 7-8
+    if c.template.enabled and c.template.embed_torsion_angles:
+      num_templ, num_res = batch['template_aatype'].shape
+
+      # Embed the templates aatypes.
+      aatype_one_hot = jax.nn.one_hot(batch['template_aatype'], 22, axis=-1)
+
+      # Embed the templates aatype, torsion angles and masks.
+      # Shape (templates, residues, msa_channels)
+      ret = all_atom.atom37_to_torsion_angles(
+          aatype=batch['template_aatype'],
+          all_atom_pos=batch['template_all_atom_positions'],
+          all_atom_mask=batch['template_all_atom_masks'],
+          # Ensure consistent behaviour during testing:
+          placeholder_for_undefined=not gc.zero_init)
+
+      template_features = jnp.concatenate([
+          aatype_one_hot,
+          jnp.reshape(
+              ret['torsion_angles_sin_cos'], [num_templ, num_res, 14]),
+          jnp.reshape(
+              ret['alt_torsion_angles_sin_cos'], [num_templ, num_res, 14]),
+          ret['torsion_angles_mask']], axis=-1)
+
+      template_activations = common_modules.Linear(
+          c.msa_channel,
+          initializer='relu',
+          name='template_single_embedding')(
+              template_features)
+      template_activations = jax.nn.relu(template_activations)
+      template_activations = common_modules.Linear(
+          c.msa_channel,
+          initializer='relu',
+          name='template_projection')(
+              template_activations)
+
+      # Concatenate the templates to the msa.
+      evoformer_input['msa'] = jnp.concatenate(
+          [evoformer_input['msa'], template_activations], axis=0)
+      # Concatenate templates masks to the msa masks.
+      # Use mask from the psi angle, as it only depends on the backbone atoms
+      # from a single residue.
+      torsion_angle_mask = ret['torsion_angles_mask'][:, :, 2]
+      torsion_angle_mask = torsion_angle_mask.astype(
+          evoformer_masks['msa'].dtype)
+      evoformer_masks['msa'] = jnp.concatenate(
+          [evoformer_masks['msa'], torsion_angle_mask], axis=0)
+
+    # Main trunk of the network
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 17-18
+    evoformer_iteration = EvoformerIteration(
+        c.evoformer, gc, is_extra_msa=False, name='evoformer_iteration')
+
+    def evoformer_fn(x):
+      act, safe_key = x
+      safe_key, safe_subkey = safe_key.split()
+      evoformer_output = evoformer_iteration(
+          activations=act,
+          masks=evoformer_masks,
+          is_training=is_training,
+          safe_key=safe_subkey)
+      return (evoformer_output, safe_key)
+
+    if gc.use_remat:
+      evoformer_fn = hk.remat(evoformer_fn)
+
+    evoformer_stack = layer_stack.layer_stack(c.evoformer_num_block)(
+        evoformer_fn)
+    evoformer_output, safe_key = evoformer_stack(
+        (evoformer_input, safe_key))
+
+    msa_activations = evoformer_output['msa']
+    pair_activations = evoformer_output['pair']
+
+    single_activations = common_modules.Linear(
+        c.seq_channel, name='single_activations')(
+            msa_activations[0])
+
+    num_sequences = batch['msa_feat'].shape[0]
+    output = {
+        'single': single_activations,
+        'pair': pair_activations,
+        # Crop away template rows such that they are not used in MaskedMsaHead.
+        'msa': msa_activations[:num_sequences, :, :],
+        'msa_first_row': msa_activations[0],
+    }
+
+    return output
+
+
+class SingleTemplateEmbedding(hk.Module):
+  """Embeds a single template.
+
+  Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9+11
+  """
+
+  def __init__(self, config, global_config, name='single_template_embedding'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, query_embedding, batch, mask_2d, is_training):
+    """Build the single template embedding.
+
+    Arguments:
+      query_embedding: Query pair representation, shape [N_res, N_res, c_z].
+      batch: A batch of template features (note the template dimension has been
+        stripped out as this module only runs over a single template).
+      mask_2d: Padding mask (Note: this doesn't care if a template exists,
+        unlike the template_pseudo_beta_mask).
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      A template embedding [N_res, N_res, c_z].
+    """
+    assert mask_2d.dtype == query_embedding.dtype
+    dtype = query_embedding.dtype
+    num_res = batch['template_aatype'].shape[0]
+    num_channels = (self.config.template_pair_stack
+                    .triangle_attention_ending_node.value_dim)
+    template_mask = batch['template_pseudo_beta_mask']
+    template_mask_2d = template_mask[:, None] * template_mask[None, :]
+    template_mask_2d = template_mask_2d.astype(dtype)
+
+    template_dgram = dgram_from_positions(batch['template_pseudo_beta'],
+                                          **self.config.dgram_features)
+    template_dgram = template_dgram.astype(dtype)
+
+    to_concat = [template_dgram, template_mask_2d[:, :, None]]
+
+    aatype = jax.nn.one_hot(batch['template_aatype'], 22, axis=-1, dtype=dtype)
+
+    to_concat.append(jnp.tile(aatype[None, :, :], [num_res, 1, 1]))
+    to_concat.append(jnp.tile(aatype[:, None, :], [1, num_res, 1]))
+
+    n, ca, c = [residue_constants.atom_order[a] for a in ('N', 'CA', 'C')]
+    rot, trans = quat_affine.make_transform_from_reference(
+        n_xyz=batch['template_all_atom_positions'][:, n],
+        ca_xyz=batch['template_all_atom_positions'][:, ca],
+        c_xyz=batch['template_all_atom_positions'][:, c])
+    affines = quat_affine.QuatAffine(
+        quaternion=quat_affine.rot_to_quat(rot, unstack_inputs=True),
+        translation=trans,
+        rotation=rot,
+        unstack_inputs=True)
+    points = [jnp.expand_dims(x, axis=-2) for x in affines.translation]
+    affine_vec = affines.invert_point(points, extra_dims=1)
+    inv_distance_scalar = jax.lax.rsqrt(
+        1e-6 + sum([jnp.square(x) for x in affine_vec]))
+
+    # Backbone affine mask: whether the residue has C, CA, N
+    # (the template mask defined above only considers pseudo CB).
+    template_mask = (
+        batch['template_all_atom_masks'][..., n] *
+        batch['template_all_atom_masks'][..., ca] *
+        batch['template_all_atom_masks'][..., c])
+    template_mask_2d = template_mask[:, None] * template_mask[None, :]
+
+    inv_distance_scalar *= template_mask_2d.astype(inv_distance_scalar.dtype)
+
+    unit_vector = [(x * inv_distance_scalar)[..., None] for x in affine_vec]
+
+    unit_vector = [x.astype(dtype) for x in unit_vector]
+    template_mask_2d = template_mask_2d.astype(dtype)
+    if not self.config.use_template_unit_vector:
+      unit_vector = [jnp.zeros_like(x) for x in unit_vector]
+    to_concat.extend(unit_vector)
+
+    to_concat.append(template_mask_2d[..., None])
+
+    act = jnp.concatenate(to_concat, axis=-1)
+
+    # Mask out non-template regions so we don't get arbitrary values in the
+    # distogram for these regions.
+    act *= template_mask_2d[..., None]
+
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 9
+    act = common_modules.Linear(
+        num_channels,
+        initializer='relu',
+        name='embedding2d')(
+            act)
+
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 11
+    act = TemplatePairStack(
+        self.config.template_pair_stack, self.global_config)(
+            act, mask_2d, is_training)
+
+    act = hk.LayerNorm([-1], True, True, name='output_layer_norm')(act)
+    return act
+
+
+class TemplateEmbedding(hk.Module):
+  """Embeds a set of templates.
+
+  Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9-12
+  Jumper et al. (2021) Suppl. Alg. 17 "TemplatePointwiseAttention"
+  """
+
+  def __init__(self, config, global_config, name='template_embedding'):
+    super().__init__(name=name)
+    self.config = config
+    self.global_config = global_config
+
+  def __call__(self, query_embedding, template_batch, mask_2d, is_training):
+    """Build TemplateEmbedding module.
+
+    Arguments:
+      query_embedding: Query pair representation, shape [N_res, N_res, c_z].
+      template_batch: A batch of template features.
+      mask_2d: Padding mask (Note: this doesn't care if a template exists,
+        unlike the template_pseudo_beta_mask).
+      is_training: Whether the module is in training mode.
+
+    Returns:
+      A template embedding [N_res, N_res, c_z].
+    """
+
+    num_templates = template_batch['template_mask'].shape[0]
+    num_channels = (self.config.template_pair_stack
+                    .triangle_attention_ending_node.value_dim)
+    num_res = query_embedding.shape[0]
+
+    dtype = query_embedding.dtype
+    template_mask = template_batch['template_mask']
+    template_mask = template_mask.astype(dtype)
+
+    query_num_channels = query_embedding.shape[-1]
+
+    # Make sure the weights are shared across templates by constructing the
+    # embedder here.
+    # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9-12
+    template_embedder = SingleTemplateEmbedding(self.config, self.global_config)
+
+    def map_fn(batch):
+      return template_embedder(query_embedding, batch, mask_2d, is_training)
+
+    template_pair_representation = mapping.sharded_map(map_fn, in_axes=0)(
+        template_batch)
+
+    # Cross attend from the query to the templates along the residue
+    # dimension by flattening everything else into the batch dimension.
+    # Jumper et al. (2021) Suppl. Alg. 17 "TemplatePointwiseAttention"
+    flat_query = jnp.reshape(query_embedding,
+                             [num_res * num_res, 1, query_num_channels])
+
+    flat_templates = jnp.reshape(
+        jnp.transpose(template_pair_representation, [1, 2, 0, 3]),
+        [num_res * num_res, num_templates, num_channels])
+
+    bias = (1e9 * (template_mask[None, None, None, :] - 1.))
+
+    template_pointwise_attention_module = Attention(
+        self.config.attention, self.global_config, query_num_channels)
+    nonbatched_args = [bias]
+    batched_args = [flat_query, flat_templates]
+
+    embedding = mapping.inference_subbatch(
+        template_pointwise_attention_module,
+        self.config.subbatch_size,
+        batched_args=batched_args,
+        nonbatched_args=nonbatched_args,
+        low_memory=not is_training)
+    embedding = jnp.reshape(embedding,
+                            [num_res, num_res, query_num_channels])
+
+    # No gradients if no templates.
+    embedding *= (jnp.sum(template_mask) > 0.).astype(embedding.dtype)
+
+    return embedding
diff --git a/alphafold/alphafold/model/prng.py b/alphafold/alphafold/model/prng.py
new file mode 100644
index 0000000000000000000000000000000000000000..2dde12965c4b10203801a198a4d73fe610d1059d
--- /dev/null
+++ b/alphafold/alphafold/model/prng.py
@@ -0,0 +1,69 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""A collection of utilities surrounding PRNG usage in protein folding."""
+
+import haiku as hk
+import jax
+
+
+def safe_dropout(*, tensor, safe_key, rate, is_deterministic, is_training):
+  if is_training and rate != 0.0 and not is_deterministic:
+    return hk.dropout(safe_key.get(), rate, tensor)
+  else:
+    return tensor
+
+
+class SafeKey:
+  """Safety wrapper for PRNG keys."""
+
+  def __init__(self, key):
+    self._key = key
+    self._used = False
+
+  def _assert_not_used(self):
+    if self._used:
+      raise RuntimeError('Random key has been used previously.')
+
+  def get(self):
+    self._assert_not_used()
+    self._used = True
+    return self._key
+
+  def split(self, num_keys=2):
+    self._assert_not_used()
+    self._used = True
+    new_keys = jax.random.split(self._key, num_keys)
+    return jax.tree_map(SafeKey, tuple(new_keys))
+
+  def duplicate(self, num_keys=2):
+    self._assert_not_used()
+    self._used = True
+    return tuple(SafeKey(self._key) for _ in range(num_keys))
+
+
+def _safe_key_flatten(safe_key):
+  # Flatten transfers "ownership" to the tree
+  return (safe_key._key,), safe_key._used  # pylint: disable=protected-access
+
+
+def _safe_key_unflatten(aux_data, children):
+  ret = SafeKey(children[0])
+  ret._used = aux_data  # pylint: disable=protected-access
+  return ret
+
+
+jax.tree_util.register_pytree_node(
+    SafeKey, _safe_key_flatten, _safe_key_unflatten)
+
diff --git a/alphafold/alphafold/model/prng_test.py b/alphafold/alphafold/model/prng_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..f77276ffe31709b11ff3c0a347c6ee0414b29b5c
--- /dev/null
+++ b/alphafold/alphafold/model/prng_test.py
@@ -0,0 +1,46 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for prng."""
+
+from absl.testing import absltest
+from alphafold.model import prng
+import jax
+
+
+class PrngTest(absltest.TestCase):
+
+  def test_key_reuse(self):
+
+    init_key = jax.random.PRNGKey(42)
+    safe_key = prng.SafeKey(init_key)
+    _, safe_key = safe_key.split()
+
+    raw_key = safe_key.get()
+
+    self.assertNotEqual(raw_key[0], init_key[0])
+    self.assertNotEqual(raw_key[1], init_key[1])
+
+    with self.assertRaises(RuntimeError):
+      safe_key.get()
+
+    with self.assertRaises(RuntimeError):
+      safe_key.split()
+
+    with self.assertRaises(RuntimeError):
+      safe_key.duplicate()
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/model/quat_affine.py b/alphafold/alphafold/model/quat_affine.py
new file mode 100644
index 0000000000000000000000000000000000000000..9ebcd20f3e2948c905242dc3e09df6684b99ace7
--- /dev/null
+++ b/alphafold/alphafold/model/quat_affine.py
@@ -0,0 +1,459 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Quaternion geometry modules.
+
+This introduces a representation of coordinate frames that is based around a
+‘QuatAffine’ object. This object describes an array of coordinate frames.
+It consists of vectors corresponding to the
+origin of the frames as well as orientations which are stored in two
+ways, as unit quaternions as well as a rotation matrices.
+The rotation matrices are derived from the unit quaternions and the two are kept
+in sync.
+For an explanation of the relation between unit quaternions and rotations see
+https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
+
+This representation is used in the model for the backbone frames.
+
+One important thing to note here, is that while we update both representations
+the jit compiler is going to ensure that only the parts that are
+actually used are executed.
+"""
+
+
+import functools
+from typing import Tuple
+
+import jax
+import jax.numpy as jnp
+import numpy as np
+
+# pylint: disable=bad-whitespace
+QUAT_TO_ROT = np.zeros((4, 4, 3, 3), dtype=np.float32)
+
+QUAT_TO_ROT[0, 0] = [[ 1, 0, 0], [ 0, 1, 0], [ 0, 0, 1]]  # rr
+QUAT_TO_ROT[1, 1] = [[ 1, 0, 0], [ 0,-1, 0], [ 0, 0,-1]]  # ii
+QUAT_TO_ROT[2, 2] = [[-1, 0, 0], [ 0, 1, 0], [ 0, 0,-1]]  # jj
+QUAT_TO_ROT[3, 3] = [[-1, 0, 0], [ 0,-1, 0], [ 0, 0, 1]]  # kk
+
+QUAT_TO_ROT[1, 2] = [[ 0, 2, 0], [ 2, 0, 0], [ 0, 0, 0]]  # ij
+QUAT_TO_ROT[1, 3] = [[ 0, 0, 2], [ 0, 0, 0], [ 2, 0, 0]]  # ik
+QUAT_TO_ROT[2, 3] = [[ 0, 0, 0], [ 0, 0, 2], [ 0, 2, 0]]  # jk
+
+QUAT_TO_ROT[0, 1] = [[ 0, 0, 0], [ 0, 0,-2], [ 0, 2, 0]]  # ir
+QUAT_TO_ROT[0, 2] = [[ 0, 0, 2], [ 0, 0, 0], [-2, 0, 0]]  # jr
+QUAT_TO_ROT[0, 3] = [[ 0,-2, 0], [ 2, 0, 0], [ 0, 0, 0]]  # kr
+
+QUAT_MULTIPLY = np.zeros((4, 4, 4), dtype=np.float32)
+QUAT_MULTIPLY[:, :, 0] = [[ 1, 0, 0, 0],
+                          [ 0,-1, 0, 0],
+                          [ 0, 0,-1, 0],
+                          [ 0, 0, 0,-1]]
+
+QUAT_MULTIPLY[:, :, 1] = [[ 0, 1, 0, 0],
+                          [ 1, 0, 0, 0],
+                          [ 0, 0, 0, 1],
+                          [ 0, 0,-1, 0]]
+
+QUAT_MULTIPLY[:, :, 2] = [[ 0, 0, 1, 0],
+                          [ 0, 0, 0,-1],
+                          [ 1, 0, 0, 0],
+                          [ 0, 1, 0, 0]]
+
+QUAT_MULTIPLY[:, :, 3] = [[ 0, 0, 0, 1],
+                          [ 0, 0, 1, 0],
+                          [ 0,-1, 0, 0],
+                          [ 1, 0, 0, 0]]
+
+QUAT_MULTIPLY_BY_VEC = QUAT_MULTIPLY[:, 1:, :]
+# pylint: enable=bad-whitespace
+
+
+def rot_to_quat(rot, unstack_inputs=False):
+  """Convert rotation matrix to quaternion.
+
+  Note that this function calls self_adjoint_eig which is extremely expensive on
+  the GPU. If at all possible, this function should run on the CPU.
+
+  Args:
+     rot: rotation matrix (see below for format).
+     unstack_inputs:  If true, rotation matrix should be shape (..., 3, 3)
+       otherwise the rotation matrix should be a list of lists of tensors.
+
+  Returns:
+    Quaternion as (..., 4) tensor.
+  """
+  if unstack_inputs:
+    rot = [jnp.moveaxis(x, -1, 0) for x in jnp.moveaxis(rot, -2, 0)]
+
+  [[xx, xy, xz], [yx, yy, yz], [zx, zy, zz]] = rot
+
+  # pylint: disable=bad-whitespace
+  k = [[ xx + yy + zz,      zy - yz,      xz - zx,      yx - xy,],
+       [      zy - yz, xx - yy - zz,      xy + yx,      xz + zx,],
+       [      xz - zx,      xy + yx, yy - xx - zz,      yz + zy,],
+       [      yx - xy,      xz + zx,      yz + zy, zz - xx - yy,]]
+  # pylint: enable=bad-whitespace
+
+  k = (1./3.) * jnp.stack([jnp.stack(x, axis=-1) for x in k],
+                          axis=-2)
+
+  # Get eigenvalues in non-decreasing order and associated.
+  _, qs = jnp.linalg.eigh(k)
+  return qs[..., -1]
+
+
+def rot_list_to_tensor(rot_list):
+  """Convert list of lists to rotation tensor."""
+  return jnp.stack(
+      [jnp.stack(rot_list[0], axis=-1),
+       jnp.stack(rot_list[1], axis=-1),
+       jnp.stack(rot_list[2], axis=-1)],
+      axis=-2)
+
+
+def vec_list_to_tensor(vec_list):
+  """Convert list to vector tensor."""
+  return jnp.stack(vec_list, axis=-1)
+
+
+def quat_to_rot(normalized_quat):
+  """Convert a normalized quaternion to a rotation matrix."""
+  rot_tensor = jnp.sum(
+      np.reshape(QUAT_TO_ROT, (4, 4, 9)) *
+      normalized_quat[..., :, None, None] *
+      normalized_quat[..., None, :, None],
+      axis=(-3, -2))
+  rot = jnp.moveaxis(rot_tensor, -1, 0)  # Unstack.
+  return [[rot[0], rot[1], rot[2]],
+          [rot[3], rot[4], rot[5]],
+          [rot[6], rot[7], rot[8]]]
+
+
+def quat_multiply_by_vec(quat, vec):
+  """Multiply a quaternion by a pure-vector quaternion."""
+  return jnp.sum(
+      QUAT_MULTIPLY_BY_VEC *
+      quat[..., :, None, None] *
+      vec[..., None, :, None],
+      axis=(-3, -2))
+
+
+def quat_multiply(quat1, quat2):
+  """Multiply a quaternion by another quaternion."""
+  return jnp.sum(
+      QUAT_MULTIPLY *
+      quat1[..., :, None, None] *
+      quat2[..., None, :, None],
+      axis=(-3, -2))
+
+
+def apply_rot_to_vec(rot, vec, unstack=False):
+  """Multiply rotation matrix by a vector."""
+  if unstack:
+    x, y, z = [vec[:, i] for i in range(3)]
+  else:
+    x, y, z = vec
+  return [rot[0][0] * x + rot[0][1] * y + rot[0][2] * z,
+          rot[1][0] * x + rot[1][1] * y + rot[1][2] * z,
+          rot[2][0] * x + rot[2][1] * y + rot[2][2] * z]
+
+
+def apply_inverse_rot_to_vec(rot, vec):
+  """Multiply the inverse of a rotation matrix by a vector."""
+  # Inverse rotation is just transpose
+  return [rot[0][0] * vec[0] + rot[1][0] * vec[1] + rot[2][0] * vec[2],
+          rot[0][1] * vec[0] + rot[1][1] * vec[1] + rot[2][1] * vec[2],
+          rot[0][2] * vec[0] + rot[1][2] * vec[1] + rot[2][2] * vec[2]]
+
+
+class QuatAffine(object):
+  """Affine transformation represented by quaternion and vector."""
+
+  def __init__(self, quaternion, translation, rotation=None, normalize=True,
+               unstack_inputs=False):
+    """Initialize from quaternion and translation.
+
+    Args:
+      quaternion: Rotation represented by a quaternion, to be applied
+        before translation.  Must be a unit quaternion unless normalize==True.
+      translation: Translation represented as a vector.
+      rotation: Same rotation as the quaternion, represented as a (..., 3, 3)
+        tensor.  If None, rotation will be calculated from the quaternion.
+      normalize: If True, l2 normalize the quaternion on input.
+      unstack_inputs: If True, translation is a vector with last component 3
+    """
+
+    if quaternion is not None:
+      assert quaternion.shape[-1] == 4
+
+    if unstack_inputs:
+      if rotation is not None:
+        rotation = [jnp.moveaxis(x, -1, 0)   # Unstack.
+                    for x in jnp.moveaxis(rotation, -2, 0)]  # Unstack.
+      translation = jnp.moveaxis(translation, -1, 0)  # Unstack.
+
+    if normalize and quaternion is not None:
+      quaternion = quaternion / jnp.linalg.norm(quaternion, axis=-1,
+                                                keepdims=True)
+
+    if rotation is None:
+      rotation = quat_to_rot(quaternion)
+
+    self.quaternion = quaternion
+    self.rotation = [list(row) for row in rotation]
+    self.translation = list(translation)
+
+    assert all(len(row) == 3 for row in self.rotation)
+    assert len(self.translation) == 3
+
+  def to_tensor(self):
+    return jnp.concatenate(
+        [self.quaternion] +
+        [jnp.expand_dims(x, axis=-1) for x in self.translation],
+        axis=-1)
+
+  def apply_tensor_fn(self, tensor_fn):
+    """Return a new QuatAffine with tensor_fn applied (e.g. stop_gradient)."""
+    return QuatAffine(
+        tensor_fn(self.quaternion),
+        [tensor_fn(x) for x in self.translation],
+        rotation=[[tensor_fn(x) for x in row] for row in self.rotation],
+        normalize=False)
+
+  def apply_rotation_tensor_fn(self, tensor_fn):
+    """Return a new QuatAffine with tensor_fn applied to the rotation part."""
+    return QuatAffine(
+        tensor_fn(self.quaternion),
+        [x for x in self.translation],
+        rotation=[[tensor_fn(x) for x in row] for row in self.rotation],
+        normalize=False)
+
+  def scale_translation(self, position_scale):
+    """Return a new quat affine with a different scale for translation."""
+
+    return QuatAffine(
+        self.quaternion,
+        [x * position_scale for x in self.translation],
+        rotation=[[x for x in row] for row in self.rotation],
+        normalize=False)
+
+  @classmethod
+  def from_tensor(cls, tensor, normalize=False):
+    quaternion, tx, ty, tz = jnp.split(tensor, [4, 5, 6], axis=-1)
+    return cls(quaternion,
+               [tx[..., 0], ty[..., 0], tz[..., 0]],
+               normalize=normalize)
+
+  def pre_compose(self, update):
+    """Return a new QuatAffine which applies the transformation update first.
+
+    Args:
+      update: Length-6 vector. 3-vector of x, y, and z such that the quaternion
+        update is (1, x, y, z) and zero for the 3-vector is the identity
+        quaternion. 3-vector for translation concatenated.
+
+    Returns:
+      New QuatAffine object.
+    """
+    vector_quaternion_update, x, y, z = jnp.split(update, [3, 4, 5], axis=-1)
+    trans_update = [jnp.squeeze(x, axis=-1),
+                    jnp.squeeze(y, axis=-1),
+                    jnp.squeeze(z, axis=-1)]
+
+    new_quaternion = (self.quaternion +
+                      quat_multiply_by_vec(self.quaternion,
+                                           vector_quaternion_update))
+
+    trans_update = apply_rot_to_vec(self.rotation, trans_update)
+    new_translation = [
+        self.translation[0] + trans_update[0],
+        self.translation[1] + trans_update[1],
+        self.translation[2] + trans_update[2]]
+
+    return QuatAffine(new_quaternion, new_translation)
+
+  def apply_to_point(self, point, extra_dims=0):
+    """Apply affine to a point.
+
+    Args:
+      point: List of 3 tensors to apply affine.
+      extra_dims:  Number of dimensions at the end of the transformed_point
+        shape that are not present in the rotation and translation.  The most
+        common use is rotation N points at once with extra_dims=1 for use in a
+        network.
+
+    Returns:
+      Transformed point after applying affine.
+    """
+    rotation = self.rotation
+    translation = self.translation
+    for _ in range(extra_dims):
+      expand_fn = functools.partial(jnp.expand_dims, axis=-1)
+      rotation = jax.tree_map(expand_fn, rotation)
+      translation = jax.tree_map(expand_fn, translation)
+
+    rot_point = apply_rot_to_vec(rotation, point)
+    return [
+        rot_point[0] + translation[0],
+        rot_point[1] + translation[1],
+        rot_point[2] + translation[2]]
+
+  def invert_point(self, transformed_point, extra_dims=0):
+    """Apply inverse of transformation to a point.
+
+    Args:
+      transformed_point: List of 3 tensors to apply affine
+      extra_dims:  Number of dimensions at the end of the transformed_point
+        shape that are not present in the rotation and translation.  The most
+        common use is rotation N points at once with extra_dims=1 for use in a
+        network.
+
+    Returns:
+      Transformed point after applying affine.
+    """
+    rotation = self.rotation
+    translation = self.translation
+    for _ in range(extra_dims):
+      expand_fn = functools.partial(jnp.expand_dims, axis=-1)
+      rotation = jax.tree_map(expand_fn, rotation)
+      translation = jax.tree_map(expand_fn, translation)
+
+    rot_point = [
+        transformed_point[0] - translation[0],
+        transformed_point[1] - translation[1],
+        transformed_point[2] - translation[2]]
+
+    return apply_inverse_rot_to_vec(rotation, rot_point)
+
+  def __repr__(self):
+    return 'QuatAffine(%r, %r)' % (self.quaternion, self.translation)
+
+
+def _multiply(a, b):
+  return jnp.stack([
+      jnp.array([a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0],
+                 a[0][0]*b[0][1] + a[0][1]*b[1][1] + a[0][2]*b[2][1],
+                 a[0][0]*b[0][2] + a[0][1]*b[1][2] + a[0][2]*b[2][2]]),
+
+      jnp.array([a[1][0]*b[0][0] + a[1][1]*b[1][0] + a[1][2]*b[2][0],
+                 a[1][0]*b[0][1] + a[1][1]*b[1][1] + a[1][2]*b[2][1],
+                 a[1][0]*b[0][2] + a[1][1]*b[1][2] + a[1][2]*b[2][2]]),
+
+      jnp.array([a[2][0]*b[0][0] + a[2][1]*b[1][0] + a[2][2]*b[2][0],
+                 a[2][0]*b[0][1] + a[2][1]*b[1][1] + a[2][2]*b[2][1],
+                 a[2][0]*b[0][2] + a[2][1]*b[1][2] + a[2][2]*b[2][2]])])
+
+
+def make_canonical_transform(
+    n_xyz: jnp.ndarray,
+    ca_xyz: jnp.ndarray,
+    c_xyz: jnp.ndarray) -> Tuple[jnp.ndarray, jnp.ndarray]:
+  """Returns translation and rotation matrices to canonicalize residue atoms.
+
+  Note that this method does not take care of symmetries. If you provide the
+  atom positions in the non-standard way, the N atom will end up not at
+  [-0.527250, 1.359329, 0.0] but instead at [-0.527250, -1.359329, 0.0]. You
+  need to take care of such cases in your code.
+
+  Args:
+    n_xyz: An array of shape [batch, 3] of nitrogen xyz coordinates.
+    ca_xyz: An array of shape [batch, 3] of carbon alpha xyz coordinates.
+    c_xyz: An array of shape [batch, 3] of carbon xyz coordinates.
+
+  Returns:
+    A tuple (translation, rotation) where:
+      translation is an array of shape [batch, 3] defining the translation.
+      rotation is an array of shape [batch, 3, 3] defining the rotation.
+    After applying the translation and rotation to all atoms in a residue:
+      * All atoms will be shifted so that CA is at the origin,
+      * All atoms will be rotated so that C is at the x-axis,
+      * All atoms will be shifted so that N is in the xy plane.
+  """
+  assert len(n_xyz.shape) == 2, n_xyz.shape
+  assert n_xyz.shape[-1] == 3, n_xyz.shape
+  assert n_xyz.shape == ca_xyz.shape == c_xyz.shape, (
+      n_xyz.shape, ca_xyz.shape, c_xyz.shape)
+
+  # Place CA at the origin.
+  translation = -ca_xyz
+  n_xyz = n_xyz + translation
+  c_xyz = c_xyz + translation
+
+  # Place C on the x-axis.
+  c_x, c_y, c_z = [c_xyz[:, i] for i in range(3)]
+  # Rotate by angle c1 in the x-y plane (around the z-axis).
+  sin_c1 = -c_y / jnp.sqrt(1e-20 + c_x**2 + c_y**2)
+  cos_c1 = c_x / jnp.sqrt(1e-20 + c_x**2 + c_y**2)
+  zeros = jnp.zeros_like(sin_c1)
+  ones = jnp.ones_like(sin_c1)
+  # pylint: disable=bad-whitespace
+  c1_rot_matrix = jnp.stack([jnp.array([cos_c1, -sin_c1, zeros]),
+                             jnp.array([sin_c1,  cos_c1, zeros]),
+                             jnp.array([zeros,    zeros,  ones])])
+
+  # Rotate by angle c2 in the x-z plane (around the y-axis).
+  sin_c2 = c_z / jnp.sqrt(1e-20 + c_x**2 + c_y**2 + c_z**2)
+  cos_c2 = jnp.sqrt(c_x**2 + c_y**2) / jnp.sqrt(
+      1e-20 + c_x**2 + c_y**2 + c_z**2)
+  c2_rot_matrix = jnp.stack([jnp.array([cos_c2,  zeros, sin_c2]),
+                             jnp.array([zeros,    ones,  zeros]),
+                             jnp.array([-sin_c2, zeros, cos_c2])])
+
+  c_rot_matrix = _multiply(c2_rot_matrix, c1_rot_matrix)
+  n_xyz = jnp.stack(apply_rot_to_vec(c_rot_matrix, n_xyz, unstack=True)).T
+
+  # Place N in the x-y plane.
+  _, n_y, n_z = [n_xyz[:, i] for i in range(3)]
+  # Rotate by angle alpha in the y-z plane (around the x-axis).
+  sin_n = -n_z / jnp.sqrt(1e-20 + n_y**2 + n_z**2)
+  cos_n = n_y / jnp.sqrt(1e-20 + n_y**2 + n_z**2)
+  n_rot_matrix = jnp.stack([jnp.array([ones,  zeros,  zeros]),
+                            jnp.array([zeros, cos_n, -sin_n]),
+                            jnp.array([zeros, sin_n,  cos_n])])
+  # pylint: enable=bad-whitespace
+
+  return (translation,
+          jnp.transpose(_multiply(n_rot_matrix, c_rot_matrix), [2, 0, 1]))
+
+
+def make_transform_from_reference(
+    n_xyz: jnp.ndarray,
+    ca_xyz: jnp.ndarray,
+    c_xyz: jnp.ndarray) -> Tuple[jnp.ndarray, jnp.ndarray]:
+  """Returns rotation and translation matrices to convert from reference.
+
+  Note that this method does not take care of symmetries. If you provide the
+  atom positions in the non-standard way, the N atom will end up not at
+  [-0.527250, 1.359329, 0.0] but instead at [-0.527250, -1.359329, 0.0]. You
+  need to take care of such cases in your code.
+
+  Args:
+    n_xyz: An array of shape [batch, 3] of nitrogen xyz coordinates.
+    ca_xyz: An array of shape [batch, 3] of carbon alpha xyz coordinates.
+    c_xyz: An array of shape [batch, 3] of carbon xyz coordinates.
+
+  Returns:
+    A tuple (rotation, translation) where:
+      rotation is an array of shape [batch, 3, 3] defining the rotation.
+      translation is an array of shape [batch, 3] defining the translation.
+    After applying the translation and rotation to the reference backbone,
+    the coordinates will approximately equal to the input coordinates.
+
+    The order of translation and rotation differs from make_canonical_transform
+    because the rotation from this function should be applied before the
+    translation, unlike make_canonical_transform.
+  """
+  translation, rotation = make_canonical_transform(n_xyz, ca_xyz, c_xyz)
+  return np.transpose(rotation, (0, 2, 1)), -translation
diff --git a/alphafold/alphafold/model/quat_affine_test.py b/alphafold/alphafold/model/quat_affine_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..6a477b2d0634af1d1ab47a4c0d41bc5991d6c89a
--- /dev/null
+++ b/alphafold/alphafold/model/quat_affine_test.py
@@ -0,0 +1,150 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for quat_affine."""
+
+from absl import logging
+from absl.testing import absltest
+from alphafold.model import quat_affine
+import jax
+import jax.numpy as jnp
+import numpy as np
+
+VERBOSE = False
+np.set_printoptions(precision=3, suppress=True)
+
+r2t = quat_affine.rot_list_to_tensor
+v2t = quat_affine.vec_list_to_tensor
+
+q2r = lambda q: r2t(quat_affine.quat_to_rot(q))
+
+
+class QuatAffineTest(absltest.TestCase):
+
+  def _assert_check(self, to_check, tol=1e-5):
+    for k, (correct, generated) in to_check.items():
+      if VERBOSE:
+        logging.info(k)
+        logging.info('Correct %s', correct)
+        logging.info('Predicted %s', generated)
+      self.assertLess(np.max(np.abs(correct - generated)), tol)
+
+  def test_conversion(self):
+    quat = jnp.array([-2., 5., -1., 4.])
+
+    rotation = jnp.array([
+        [0.26087, 0.130435, 0.956522],
+        [-0.565217, -0.782609, 0.26087],
+        [0.782609, -0.608696, -0.130435]])
+
+    translation = jnp.array([1., -3., 4.])
+    point = jnp.array([0.7, 3.2, -2.9])
+
+    a = quat_affine.QuatAffine(quat, translation, unstack_inputs=True)
+    true_new_point = jnp.matmul(rotation, point[:, None])[:, 0] + translation
+
+    self._assert_check({
+        'rot': (rotation, r2t(a.rotation)),
+        'trans': (translation, v2t(a.translation)),
+        'point': (true_new_point,
+                  v2t(a.apply_to_point(jnp.moveaxis(point, -1, 0)))),
+        # Because of the double cover, we must be careful and compare rotations
+        'quat': (q2r(a.quaternion),
+                 q2r(quat_affine.rot_to_quat(a.rotation))),
+
+    })
+
+  def test_double_cover(self):
+    """Test that -q is the same rotation as q."""
+    rng = jax.random.PRNGKey(42)
+    keys = jax.random.split(rng)
+    q = jax.random.normal(keys[0], (2, 4))
+    trans = jax.random.normal(keys[1], (2, 3))
+    a1 = quat_affine.QuatAffine(q, trans, unstack_inputs=True)
+    a2 = quat_affine.QuatAffine(-q, trans, unstack_inputs=True)
+
+    self._assert_check({
+        'rot': (r2t(a1.rotation),
+                r2t(a2.rotation)),
+        'trans': (v2t(a1.translation),
+                  v2t(a2.translation)),
+    })
+
+  def test_homomorphism(self):
+    rng = jax.random.PRNGKey(42)
+    keys = jax.random.split(rng, 4)
+    vec_q1 = jax.random.normal(keys[0], (2, 3))
+
+    q1 = jnp.concatenate([
+        jnp.ones_like(vec_q1)[:, :1],
+        vec_q1], axis=-1)
+
+    q2 = jax.random.normal(keys[1], (2, 4))
+    t1 = jax.random.normal(keys[2], (2, 3))
+    t2 = jax.random.normal(keys[3], (2, 3))
+
+    a1 = quat_affine.QuatAffine(q1, t1, unstack_inputs=True)
+    a2 = quat_affine.QuatAffine(q2, t2, unstack_inputs=True)
+    a21 = a2.pre_compose(jnp.concatenate([vec_q1, t1], axis=-1))
+
+    rng, key = jax.random.split(rng)
+    x = jax.random.normal(key, (2, 3))
+    new_x = a21.apply_to_point(jnp.moveaxis(x, -1, 0))
+    new_x_apply2 = a2.apply_to_point(a1.apply_to_point(jnp.moveaxis(x, -1, 0)))
+
+    self._assert_check({
+        'quat': (q2r(quat_affine.quat_multiply(a2.quaternion, a1.quaternion)),
+                 q2r(a21.quaternion)),
+        'rot': (jnp.matmul(r2t(a2.rotation), r2t(a1.rotation)),
+                r2t(a21.rotation)),
+        'point': (v2t(new_x_apply2),
+                  v2t(new_x)),
+        'inverse': (x, v2t(a21.invert_point(new_x))),
+    })
+
+  def test_batching(self):
+    """Test that affine applies batchwise."""
+    rng = jax.random.PRNGKey(42)
+    keys = jax.random.split(rng, 3)
+    q = jax.random.uniform(keys[0], (5, 2, 4))
+    t = jax.random.uniform(keys[1], (2, 3))
+    x = jax.random.uniform(keys[2], (5, 1, 3))
+
+    a = quat_affine.QuatAffine(q, t, unstack_inputs=True)
+    y = v2t(a.apply_to_point(jnp.moveaxis(x, -1, 0)))
+
+    y_list = []
+    for i in range(5):
+      for j in range(2):
+        a_local = quat_affine.QuatAffine(q[i, j], t[j],
+                                         unstack_inputs=True)
+        y_local = v2t(a_local.apply_to_point(jnp.moveaxis(x[i, 0], -1, 0)))
+        y_list.append(y_local)
+    y_combine = jnp.reshape(jnp.stack(y_list, axis=0), (5, 2, 3))
+
+    self._assert_check({
+        'batch': (y_combine, y),
+        'quat': (q2r(a.quaternion),
+                 q2r(quat_affine.rot_to_quat(a.rotation))),
+    })
+
+  def assertAllClose(self, a, b, rtol=1e-06, atol=1e-06):
+    self.assertTrue(np.allclose(a, b, rtol=rtol, atol=atol))
+
+  def assertAllEqual(self, a, b):
+    self.assertTrue(np.all(np.array(a) == np.array(b)))
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/model/r3.py b/alphafold/alphafold/model/r3.py
new file mode 100644
index 0000000000000000000000000000000000000000..1e775ab39e529c6086938adbb1d6c2cd3fb6cc8e
--- /dev/null
+++ b/alphafold/alphafold/model/r3.py
@@ -0,0 +1,320 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Transformations for 3D coordinates.
+
+This Module contains objects for representing Vectors (Vecs), Rotation Matrices
+(Rots) and proper Rigid transformation (Rigids). These are represented as
+named tuples with arrays for each entry, for example a set of
+[N, M] points would be represented as a Vecs object with arrays of shape [N, M]
+for x, y and z.
+
+This is being done to improve readability by making it very clear what objects
+are geometric objects rather than relying on comments and array shapes.
+Another reason for this is to avoid using matrix
+multiplication primitives like matmul or einsum, on modern accelerator hardware
+these can end up on specialized cores such as tensor cores on GPU or the MXU on
+cloud TPUs, this often involves lower computational precision which can be
+problematic for coordinate geometry. Also these cores are typically optimized
+for larger matrices than 3 dimensional, this code is written to avoid any
+unintended use of these cores on both GPUs and TPUs.
+"""
+
+import collections
+from typing import List
+from alphafold.model import quat_affine
+import jax.numpy as jnp
+import tree
+
+# Array of 3-component vectors, stored as individual array for
+# each component.
+Vecs = collections.namedtuple('Vecs', ['x', 'y', 'z'])
+
+# Array of 3x3 rotation matrices, stored as individual array for
+# each component.
+Rots = collections.namedtuple('Rots', ['xx', 'xy', 'xz',
+                                       'yx', 'yy', 'yz',
+                                       'zx', 'zy', 'zz'])
+# Array of rigid 3D transformations, stored as array of rotations and
+# array of translations.
+Rigids = collections.namedtuple('Rigids', ['rot', 'trans'])
+
+
+def squared_difference(x, y):
+  return jnp.square(x - y)
+
+
+def invert_rigids(r: Rigids) -> Rigids:
+  """Computes group inverse of rigid transformations 'r'."""
+  inv_rots = invert_rots(r.rot)
+  t = rots_mul_vecs(inv_rots, r.trans)
+  inv_trans = Vecs(-t.x, -t.y, -t.z)
+  return Rigids(inv_rots, inv_trans)
+
+
+def invert_rots(m: Rots) -> Rots:
+  """Computes inverse of rotations 'm'."""
+  return Rots(m.xx, m.yx, m.zx,
+              m.xy, m.yy, m.zy,
+              m.xz, m.yz, m.zz)
+
+
+def rigids_from_3_points(
+    point_on_neg_x_axis: Vecs,  # shape (...)
+    origin: Vecs,  # shape (...)
+    point_on_xy_plane: Vecs,  # shape (...)
+) -> Rigids:  # shape (...)
+  """Create Rigids from 3 points.
+
+  Jumper et al. (2021) Suppl. Alg. 21 "rigidFrom3Points"
+  This creates a set of rigid transformations from 3 points by Gram Schmidt
+  orthogonalization.
+
+  Args:
+    point_on_neg_x_axis: Vecs corresponding to points on the negative x axis
+    origin: Origin of resulting rigid transformations
+    point_on_xy_plane: Vecs corresponding to points in the xy plane
+  Returns:
+    Rigid transformations from global frame to local frames derived from
+    the input points.
+  """
+  m = rots_from_two_vecs(
+      e0_unnormalized=vecs_sub(origin, point_on_neg_x_axis),
+      e1_unnormalized=vecs_sub(point_on_xy_plane, origin))
+
+  return Rigids(rot=m, trans=origin)
+
+
+def rigids_from_list(l: List[jnp.ndarray]) -> Rigids:
+  """Converts flat list of arrays to rigid transformations."""
+  assert len(l) == 12
+  return Rigids(Rots(*(l[:9])), Vecs(*(l[9:])))
+
+
+def rigids_from_quataffine(a: quat_affine.QuatAffine) -> Rigids:
+  """Converts QuatAffine object to the corresponding Rigids object."""
+  return Rigids(Rots(*tree.flatten(a.rotation)),
+                Vecs(*a.translation))
+
+
+def rigids_from_tensor4x4(
+    m: jnp.ndarray  # shape (..., 4, 4)
+) -> Rigids:  # shape (...)
+  """Construct Rigids object from an 4x4 array.
+
+  Here the 4x4 is representing the transformation in homogeneous coordinates.
+
+  Args:
+    m: Array representing transformations in homogeneous coordinates.
+  Returns:
+    Rigids object corresponding to transformations m
+  """
+  assert m.shape[-1] == 4
+  assert m.shape[-2] == 4
+  return Rigids(
+      Rots(m[..., 0, 0], m[..., 0, 1], m[..., 0, 2],
+           m[..., 1, 0], m[..., 1, 1], m[..., 1, 2],
+           m[..., 2, 0], m[..., 2, 1], m[..., 2, 2]),
+      Vecs(m[..., 0, 3], m[..., 1, 3], m[..., 2, 3]))
+
+
+def rigids_from_tensor_flat9(
+    m: jnp.ndarray  # shape (..., 9)
+) -> Rigids:  # shape (...)
+  """Flat9 encoding: first two columns of rotation matrix + translation."""
+  assert m.shape[-1] == 9
+  e0 = Vecs(m[..., 0], m[..., 1], m[..., 2])
+  e1 = Vecs(m[..., 3], m[..., 4], m[..., 5])
+  trans = Vecs(m[..., 6], m[..., 7], m[..., 8])
+  return Rigids(rot=rots_from_two_vecs(e0, e1),
+                trans=trans)
+
+
+def rigids_from_tensor_flat12(
+    m: jnp.ndarray  # shape (..., 12)
+) -> Rigids:  # shape (...)
+  """Flat12 encoding: rotation matrix (9 floats) + translation (3 floats)."""
+  assert m.shape[-1] == 12
+  x = jnp.moveaxis(m, -1, 0)  # Unstack
+  return Rigids(Rots(*x[:9]), Vecs(*x[9:]))
+
+
+def rigids_mul_rigids(a: Rigids, b: Rigids) -> Rigids:
+  """Group composition of Rigids 'a' and 'b'."""
+  return Rigids(
+      rots_mul_rots(a.rot, b.rot),
+      vecs_add(a.trans, rots_mul_vecs(a.rot, b.trans)))
+
+
+def rigids_mul_rots(r: Rigids, m: Rots) -> Rigids:
+  """Compose rigid transformations 'r' with rotations 'm'."""
+  return Rigids(rots_mul_rots(r.rot, m), r.trans)
+
+
+def rigids_mul_vecs(r: Rigids, v: Vecs) -> Vecs:
+  """Apply rigid transforms 'r' to points 'v'."""
+  return vecs_add(rots_mul_vecs(r.rot, v), r.trans)
+
+
+def rigids_to_list(r: Rigids) -> List[jnp.ndarray]:
+  """Turn Rigids into flat list, inverse of 'rigids_from_list'."""
+  return list(r.rot) + list(r.trans)
+
+
+def rigids_to_quataffine(r: Rigids) -> quat_affine.QuatAffine:
+  """Convert Rigids r into QuatAffine, inverse of 'rigids_from_quataffine'."""
+  return quat_affine.QuatAffine(
+      quaternion=None,
+      rotation=[[r.rot.xx, r.rot.xy, r.rot.xz],
+                [r.rot.yx, r.rot.yy, r.rot.yz],
+                [r.rot.zx, r.rot.zy, r.rot.zz]],
+      translation=[r.trans.x, r.trans.y, r.trans.z])
+
+
+def rigids_to_tensor_flat9(
+    r: Rigids  # shape (...)
+) -> jnp.ndarray:  # shape (..., 9)
+  """Flat9 encoding: first two columns of rotation matrix + translation."""
+  return jnp.stack(
+      [r.rot.xx, r.rot.yx, r.rot.zx, r.rot.xy, r.rot.yy, r.rot.zy]
+      + list(r.trans), axis=-1)
+
+
+def rigids_to_tensor_flat12(
+    r: Rigids  # shape (...)
+) -> jnp.ndarray:  # shape (..., 12)
+  """Flat12 encoding: rotation matrix (9 floats) + translation (3 floats)."""
+  return jnp.stack(list(r.rot) + list(r.trans), axis=-1)
+
+
+def rots_from_tensor3x3(
+    m: jnp.ndarray,  # shape (..., 3, 3)
+) -> Rots:  # shape (...)
+  """Convert rotations represented as (3, 3) array to Rots."""
+  assert m.shape[-1] == 3
+  assert m.shape[-2] == 3
+  return Rots(m[..., 0, 0], m[..., 0, 1], m[..., 0, 2],
+              m[..., 1, 0], m[..., 1, 1], m[..., 1, 2],
+              m[..., 2, 0], m[..., 2, 1], m[..., 2, 2])
+
+
+def rots_from_two_vecs(e0_unnormalized: Vecs, e1_unnormalized: Vecs) -> Rots:
+  """Create rotation matrices from unnormalized vectors for the x and y-axes.
+
+  This creates a rotation matrix from two vectors using Gram-Schmidt
+  orthogonalization.
+
+  Args:
+    e0_unnormalized: vectors lying along x-axis of resulting rotation
+    e1_unnormalized: vectors lying in xy-plane of resulting rotation
+  Returns:
+    Rotations resulting from Gram-Schmidt procedure.
+  """
+  # Normalize the unit vector for the x-axis, e0.
+  e0 = vecs_robust_normalize(e0_unnormalized)
+
+  # make e1 perpendicular to e0.
+  c = vecs_dot_vecs(e1_unnormalized, e0)
+  e1 = Vecs(e1_unnormalized.x - c * e0.x,
+            e1_unnormalized.y - c * e0.y,
+            e1_unnormalized.z - c * e0.z)
+  e1 = vecs_robust_normalize(e1)
+
+  # Compute e2 as cross product of e0 and e1.
+  e2 = vecs_cross_vecs(e0, e1)
+
+  return Rots(e0.x, e1.x, e2.x, e0.y, e1.y, e2.y, e0.z, e1.z, e2.z)
+
+
+def rots_mul_rots(a: Rots, b: Rots) -> Rots:
+  """Composition of rotations 'a' and 'b'."""
+  c0 = rots_mul_vecs(a, Vecs(b.xx, b.yx, b.zx))
+  c1 = rots_mul_vecs(a, Vecs(b.xy, b.yy, b.zy))
+  c2 = rots_mul_vecs(a, Vecs(b.xz, b.yz, b.zz))
+  return Rots(c0.x, c1.x, c2.x, c0.y, c1.y, c2.y, c0.z, c1.z, c2.z)
+
+
+def rots_mul_vecs(m: Rots, v: Vecs) -> Vecs:
+  """Apply rotations 'm' to vectors 'v'."""
+  return Vecs(m.xx * v.x + m.xy * v.y + m.xz * v.z,
+              m.yx * v.x + m.yy * v.y + m.yz * v.z,
+              m.zx * v.x + m.zy * v.y + m.zz * v.z)
+
+
+def vecs_add(v1: Vecs, v2: Vecs) -> Vecs:
+  """Add two vectors 'v1' and 'v2'."""
+  return Vecs(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z)
+
+
+def vecs_dot_vecs(v1: Vecs, v2: Vecs) -> jnp.ndarray:
+  """Dot product of vectors 'v1' and 'v2'."""
+  return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
+
+
+def vecs_cross_vecs(v1: Vecs, v2: Vecs) -> Vecs:
+  """Cross product of vectors 'v1' and 'v2'."""
+  return Vecs(v1.y * v2.z - v1.z * v2.y,
+              v1.z * v2.x - v1.x * v2.z,
+              v1.x * v2.y - v1.y * v2.x)
+
+
+def vecs_from_tensor(x: jnp.ndarray  # shape (..., 3)
+                    ) -> Vecs:  # shape (...)
+  """Converts from tensor of shape (3,) to Vecs."""
+  num_components = x.shape[-1]
+  assert num_components == 3
+  return Vecs(x[..., 0], x[..., 1], x[..., 2])
+
+
+def vecs_robust_normalize(v: Vecs, epsilon: float = 1e-8) -> Vecs:
+  """Normalizes vectors 'v'.
+
+  Args:
+    v: vectors to be normalized.
+    epsilon: small regularizer added to squared norm before taking square root.
+  Returns:
+    normalized vectors
+  """
+  norms = vecs_robust_norm(v, epsilon)
+  return Vecs(v.x / norms, v.y / norms, v.z / norms)
+
+
+def vecs_robust_norm(v: Vecs, epsilon: float = 1e-8) -> jnp.ndarray:
+  """Computes norm of vectors 'v'.
+
+  Args:
+    v: vectors to be normalized.
+    epsilon: small regularizer added to squared norm before taking square root.
+  Returns:
+    norm of 'v'
+  """
+  return jnp.sqrt(jnp.square(v.x) + jnp.square(v.y) + jnp.square(v.z) + epsilon)
+
+
+def vecs_sub(v1: Vecs, v2: Vecs) -> Vecs:
+  """Computes v1 - v2."""
+  return Vecs(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z)
+
+
+def vecs_squared_distance(v1: Vecs, v2: Vecs) -> jnp.ndarray:
+  """Computes squared euclidean difference between 'v1' and 'v2'."""
+  return (squared_difference(v1.x, v2.x) +
+          squared_difference(v1.y, v2.y) +
+          squared_difference(v1.z, v2.z))
+
+
+def vecs_to_tensor(v: Vecs  # shape (...)
+                  ) -> jnp.ndarray:  # shape(..., 3)
+  """Converts 'v' to tensor with shape 3, inverse of 'vecs_from_tensor'."""
+  return jnp.stack([v.x, v.y, v.z], axis=-1)
diff --git a/alphafold/alphafold/model/tf/__init__.py b/alphafold/alphafold/model/tf/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c520687f67754b0488690287f941854c8cf6133
--- /dev/null
+++ b/alphafold/alphafold/model/tf/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Alphafold model TensorFlow code."""
diff --git a/alphafold/alphafold/model/tf/__pycache__/__init__.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7318732e4fea0e9f3e58fdbfb6b21c95138123c1
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/__init__.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/__init__.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ec4053676e0fb8f11090ca5ded00cb43697a71a6
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/__init__.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/data_transforms.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/data_transforms.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..67fd182c6ee28334d24d6d2b616cb71d986dc851
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/data_transforms.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/data_transforms.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/data_transforms.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c2588daf3f82109e2692629753bfaf4ac8702182
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/data_transforms.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/input_pipeline.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/input_pipeline.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2fd144b8cb9ea2f91648125f741287b1e1c0fdab
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/input_pipeline.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/input_pipeline.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/input_pipeline.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7fd2f36551ce514be34d0a6017fe70ad556a0260
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/input_pipeline.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/protein_features.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/protein_features.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7f67ef67eb6369a7116e50f198ec84695dbc9098
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/protein_features.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/protein_features.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/protein_features.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4328cfeba294db24b5b631f0a49586ebe2dd7868
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/protein_features.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/proteins_dataset.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/proteins_dataset.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1e965888399250555aeed1fd24e1cdec2b8f43eb
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/proteins_dataset.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/proteins_dataset.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/proteins_dataset.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..936ff70ce499f0af849f1e071b1a1ed69c495a88
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/proteins_dataset.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/shape_helpers.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/shape_helpers.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..70ac8806b0ff4ba38d6d07bf01ee03257a22ede6
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/shape_helpers.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/shape_helpers.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/shape_helpers.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d5cdf976e874a6c5743c3b32c3620e56d57cb7a3
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/shape_helpers.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/shape_placeholders.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/shape_placeholders.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..cd0934fa4ac491f9039187176207ecefc3c4988b
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/shape_placeholders.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/shape_placeholders.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/shape_placeholders.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a4fe67955de4d0abf9b1bfdef690878e2ee93f92
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/shape_placeholders.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/utils.cpython-36.pyc b/alphafold/alphafold/model/tf/__pycache__/utils.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bbcdabc992bad6aad1439fcd5b71d576f046e019
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/utils.cpython-36.pyc differ
diff --git a/alphafold/alphafold/model/tf/__pycache__/utils.cpython-38.pyc b/alphafold/alphafold/model/tf/__pycache__/utils.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1454e5b057a69fc1b2ceac6d1ed7797d039a1473
Binary files /dev/null and b/alphafold/alphafold/model/tf/__pycache__/utils.cpython-38.pyc differ
diff --git a/alphafold/alphafold/model/tf/data_transforms.py b/alphafold/alphafold/model/tf/data_transforms.py
new file mode 100644
index 0000000000000000000000000000000000000000..7af966ef4b7cb469f2b817a16ad42eea50f31e18
--- /dev/null
+++ b/alphafold/alphafold/model/tf/data_transforms.py
@@ -0,0 +1,625 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Data for AlphaFold."""
+
+from alphafold.common import residue_constants
+from alphafold.model.tf import shape_helpers
+from alphafold.model.tf import shape_placeholders
+from alphafold.model.tf import utils
+import numpy as np
+import tensorflow.compat.v1 as tf
+
+# Pylint gets confused by the curry1 decorator because it changes the number
+#   of arguments to the function.
+# pylint:disable=no-value-for-parameter
+
+
+NUM_RES = shape_placeholders.NUM_RES
+NUM_MSA_SEQ = shape_placeholders.NUM_MSA_SEQ
+NUM_EXTRA_SEQ = shape_placeholders.NUM_EXTRA_SEQ
+NUM_TEMPLATES = shape_placeholders.NUM_TEMPLATES
+
+
+def cast_64bit_ints(protein):
+
+  for k, v in protein.items():
+    if v.dtype == tf.int64:
+      protein[k] = tf.cast(v, tf.int32)
+  return protein
+
+
+_MSA_FEATURE_NAMES = [
+    'msa', 'deletion_matrix', 'msa_mask', 'msa_row_mask', 'bert_mask',
+    'true_msa'
+]
+
+
+def make_seq_mask(protein):
+  protein['seq_mask'] = tf.ones(
+      shape_helpers.shape_list(protein['aatype']), dtype=tf.float32)
+  return protein
+
+
+def make_template_mask(protein):
+  protein['template_mask'] = tf.ones(
+      shape_helpers.shape_list(protein['template_domain_names']),
+      dtype=tf.float32)
+  return protein
+
+
+def curry1(f):
+  """Supply all arguments but the first."""
+
+  def fc(*args, **kwargs):
+    return lambda x: f(x, *args, **kwargs)
+
+  return fc
+
+
+@curry1
+def add_distillation_flag(protein, distillation):
+  protein['is_distillation'] = tf.constant(float(distillation),
+                                           shape=[],
+                                           dtype=tf.float32)
+  return protein
+
+
+def make_all_atom_aatype(protein):
+  protein['all_atom_aatype'] = protein['aatype']
+  return protein
+
+
+def fix_templates_aatype(protein):
+  """Fixes aatype encoding of templates."""
+  # Map one-hot to indices.
+  protein['template_aatype'] = tf.argmax(
+      protein['template_aatype'], output_type=tf.int32, axis=-1)
+  # Map hhsearch-aatype to our aatype.
+  new_order_list = residue_constants.MAP_HHBLITS_AATYPE_TO_OUR_AATYPE
+  new_order = tf.constant(new_order_list, dtype=tf.int32)
+  protein['template_aatype'] = tf.gather(params=new_order,
+                                         indices=protein['template_aatype'])
+  return protein
+
+
+def correct_msa_restypes(protein):
+  """Correct MSA restype to have the same order as residue_constants."""
+  new_order_list = residue_constants.MAP_HHBLITS_AATYPE_TO_OUR_AATYPE
+  new_order = tf.constant(new_order_list, dtype=protein['msa'].dtype)
+  protein['msa'] = tf.gather(new_order, protein['msa'], axis=0)
+
+  perm_matrix = np.zeros((22, 22), dtype=np.float32)
+  perm_matrix[range(len(new_order_list)), new_order_list] = 1.
+
+  for k in protein:
+    if 'profile' in k:  # Include both hhblits and psiblast profiles
+      num_dim = protein[k].shape.as_list()[-1]
+      assert num_dim in [20, 21, 22], (
+          'num_dim for %s out of expected range: %s' % (k, num_dim))
+      protein[k] = tf.tensordot(protein[k], perm_matrix[:num_dim, :num_dim], 1)
+  return protein
+
+
+def squeeze_features(protein):
+  """Remove singleton and repeated dimensions in protein features."""
+  protein['aatype'] = tf.argmax(
+      protein['aatype'], axis=-1, output_type=tf.int32)
+  for k in [
+      'domain_name', 'msa', 'num_alignments', 'seq_length', 'sequence',
+      'superfamily', 'deletion_matrix', 'resolution',
+      'between_segment_residues', 'residue_index', 'template_all_atom_masks']:
+    if k in protein:
+      final_dim = shape_helpers.shape_list(protein[k])[-1]
+      if isinstance(final_dim, int) and final_dim == 1:
+        protein[k] = tf.squeeze(protein[k], axis=-1)
+
+  for k in ['seq_length', 'num_alignments']:
+    if k in protein:
+      protein[k] = protein[k][0]  # Remove fake sequence dimension
+  return protein
+
+
+def make_random_crop_to_size_seed(protein):
+  """Random seed for cropping residues and templates."""
+  protein['random_crop_to_size_seed'] = utils.make_random_seed()
+  return protein
+
+
+@curry1
+def randomly_replace_msa_with_unknown(protein, replace_proportion):
+  """Replace a proportion of the MSA with 'X'."""
+  msa_mask = (tf.random.uniform(shape_helpers.shape_list(protein['msa'])) <
+              replace_proportion)
+  x_idx = 20
+  gap_idx = 21
+  msa_mask = tf.logical_and(msa_mask, protein['msa'] != gap_idx)
+  protein['msa'] = tf.where(msa_mask,
+                            tf.ones_like(protein['msa']) * x_idx,
+                            protein['msa'])
+  aatype_mask = (
+      tf.random.uniform(shape_helpers.shape_list(protein['aatype'])) <
+      replace_proportion)
+
+  protein['aatype'] = tf.where(aatype_mask,
+                               tf.ones_like(protein['aatype']) * x_idx,
+                               protein['aatype'])
+  return protein
+
+
+@curry1
+def sample_msa(protein, max_seq, keep_extra):
+  """Sample MSA randomly, remaining sequences are stored as `extra_*`.
+
+  Args:
+    protein: batch to sample msa from.
+    max_seq: number of sequences to sample.
+    keep_extra: When True sequences not sampled are put into fields starting
+      with 'extra_*'.
+
+  Returns:
+    Protein with sampled msa.
+  """
+  num_seq = tf.shape(protein['msa'])[0]
+  shuffled = tf.random_shuffle(tf.range(1, num_seq))
+  index_order = tf.concat([[0], shuffled], axis=0)
+  num_sel = tf.minimum(max_seq, num_seq)
+
+  sel_seq, not_sel_seq = tf.split(index_order, [num_sel, num_seq - num_sel])
+
+  for k in _MSA_FEATURE_NAMES:
+    if k in protein:
+      if keep_extra:
+        protein['extra_' + k] = tf.gather(protein[k], not_sel_seq)
+      protein[k] = tf.gather(protein[k], sel_seq)
+
+  return protein
+
+
+@curry1
+def crop_extra_msa(protein, max_extra_msa):
+  """MSA features are cropped so only `max_extra_msa` sequences are kept."""
+  num_seq = tf.shape(protein['extra_msa'])[0]
+  num_sel = tf.minimum(max_extra_msa, num_seq)
+  select_indices = tf.random_shuffle(tf.range(0, num_seq))[:num_sel]
+  for k in _MSA_FEATURE_NAMES:
+    if 'extra_' + k in protein:
+      protein['extra_' + k] = tf.gather(protein['extra_' + k], select_indices)
+
+  return protein
+
+
+def delete_extra_msa(protein):
+  for k in _MSA_FEATURE_NAMES:
+    if 'extra_' + k in protein:
+      del protein['extra_' + k]
+  return protein
+
+
+@curry1
+def block_delete_msa(protein, config):
+  """Sample MSA by deleting contiguous blocks.
+
+  Jumper et al. (2021) Suppl. Alg. 1 "MSABlockDeletion"
+
+  Arguments:
+    protein: batch dict containing the msa
+    config: ConfigDict with parameters
+
+  Returns:
+    updated protein
+  """
+  num_seq = shape_helpers.shape_list(protein['msa'])[0]
+  block_num_seq = tf.cast(
+      tf.floor(tf.cast(num_seq, tf.float32) * config.msa_fraction_per_block),
+      tf.int32)
+
+  if config.randomize_num_blocks:
+    nb = tf.random.uniform([], 0, config.num_blocks + 1, dtype=tf.int32)
+  else:
+    nb = config.num_blocks
+
+  del_block_starts = tf.random.uniform([nb], 0, num_seq, dtype=tf.int32)
+  del_blocks = del_block_starts[:, None] + tf.range(block_num_seq)
+  del_blocks = tf.clip_by_value(del_blocks, 0, num_seq - 1)
+  del_indices = tf.unique(tf.sort(tf.reshape(del_blocks, [-1])))[0]
+
+  # Make sure we keep the original sequence
+  sparse_diff = tf.sets.difference(tf.range(1, num_seq)[None],
+                                   del_indices[None])
+  keep_indices = tf.squeeze(tf.sparse.to_dense(sparse_diff), 0)
+  keep_indices = tf.concat([[0], keep_indices], axis=0)
+
+  for k in _MSA_FEATURE_NAMES:
+    if k in protein:
+      protein[k] = tf.gather(protein[k], keep_indices)
+
+  return protein
+
+
+@curry1
+def nearest_neighbor_clusters(protein, gap_agreement_weight=0.):
+  """Assign each extra MSA sequence to its nearest neighbor in sampled MSA."""
+
+  # Determine how much weight we assign to each agreement.  In theory, we could
+  # use a full blosum matrix here, but right now let's just down-weight gap
+  # agreement because it could be spurious.
+  # Never put weight on agreeing on BERT mask
+  weights = tf.concat([
+      tf.ones(21),
+      gap_agreement_weight * tf.ones(1),
+      np.zeros(1)], 0)
+
+  # Make agreement score as weighted Hamming distance
+  sample_one_hot = (protein['msa_mask'][:, :, None] *
+                    tf.one_hot(protein['msa'], 23))
+  extra_one_hot = (protein['extra_msa_mask'][:, :, None] *
+                   tf.one_hot(protein['extra_msa'], 23))
+
+  num_seq, num_res, _ = shape_helpers.shape_list(sample_one_hot)
+  extra_num_seq, _, _ = shape_helpers.shape_list(extra_one_hot)
+
+  # Compute tf.einsum('mrc,nrc,c->mn', sample_one_hot, extra_one_hot, weights)
+  # in an optimized fashion to avoid possible memory or computation blowup.
+  agreement = tf.matmul(
+      tf.reshape(extra_one_hot, [extra_num_seq, num_res * 23]),
+      tf.reshape(sample_one_hot * weights, [num_seq, num_res * 23]),
+      transpose_b=True)
+
+  # Assign each sequence in the extra sequences to the closest MSA sample
+  protein['extra_cluster_assignment'] = tf.argmax(
+      agreement, axis=1, output_type=tf.int32)
+
+  return protein
+
+
+@curry1
+def summarize_clusters(protein):
+  """Produce profile and deletion_matrix_mean within each cluster."""
+  num_seq = shape_helpers.shape_list(protein['msa'])[0]
+  def csum(x):
+    return tf.math.unsorted_segment_sum(
+        x, protein['extra_cluster_assignment'], num_seq)
+
+  mask = protein['extra_msa_mask']
+  mask_counts = 1e-6 + protein['msa_mask'] + csum(mask)  # Include center
+
+  msa_sum = csum(mask[:, :, None] * tf.one_hot(protein['extra_msa'], 23))
+  msa_sum += tf.one_hot(protein['msa'], 23)  # Original sequence
+  protein['cluster_profile'] = msa_sum / mask_counts[:, :, None]
+
+  del msa_sum
+
+  del_sum = csum(mask * protein['extra_deletion_matrix'])
+  del_sum += protein['deletion_matrix']  # Original sequence
+  protein['cluster_deletion_mean'] = del_sum / mask_counts
+  del del_sum
+
+  return protein
+
+
+def make_msa_mask(protein):
+  """Mask features are all ones, but will later be zero-padded."""
+  protein['msa_mask'] = tf.ones(
+      shape_helpers.shape_list(protein['msa']), dtype=tf.float32)
+  protein['msa_row_mask'] = tf.ones(
+      shape_helpers.shape_list(protein['msa'])[0], dtype=tf.float32)
+  return protein
+
+
+def pseudo_beta_fn(aatype, all_atom_positions, all_atom_masks):
+  """Create pseudo beta features."""
+  is_gly = tf.equal(aatype, residue_constants.restype_order['G'])
+  ca_idx = residue_constants.atom_order['CA']
+  cb_idx = residue_constants.atom_order['CB']
+  pseudo_beta = tf.where(
+      tf.tile(is_gly[..., None], [1] * len(is_gly.shape) + [3]),
+      all_atom_positions[..., ca_idx, :],
+      all_atom_positions[..., cb_idx, :])
+
+  if all_atom_masks is not None:
+    pseudo_beta_mask = tf.where(
+        is_gly, all_atom_masks[..., ca_idx], all_atom_masks[..., cb_idx])
+    pseudo_beta_mask = tf.cast(pseudo_beta_mask, tf.float32)
+    return pseudo_beta, pseudo_beta_mask
+  else:
+    return pseudo_beta
+
+
+@curry1
+def make_pseudo_beta(protein, prefix=''):
+  """Create pseudo-beta (alpha for glycine) position and mask."""
+  assert prefix in ['', 'template_']
+  protein[prefix + 'pseudo_beta'], protein[prefix + 'pseudo_beta_mask'] = (
+      pseudo_beta_fn(
+          protein['template_aatype' if prefix else 'all_atom_aatype'],
+          protein[prefix + 'all_atom_positions'],
+          protein['template_all_atom_masks' if prefix else 'all_atom_mask']))
+  return protein
+
+
+@curry1
+def add_constant_field(protein, key, value):
+  protein[key] = tf.convert_to_tensor(value)
+  return protein
+
+
+def shaped_categorical(probs, epsilon=1e-10):
+  ds = shape_helpers.shape_list(probs)
+  num_classes = ds[-1]
+  counts = tf.random.categorical(
+      tf.reshape(tf.log(probs + epsilon), [-1, num_classes]),
+      1,
+      dtype=tf.int32)
+  return tf.reshape(counts, ds[:-1])
+
+
+def make_hhblits_profile(protein):
+  """Compute the HHblits MSA profile if not already present."""
+  if 'hhblits_profile' in protein:
+    return protein
+
+  # Compute the profile for every residue (over all MSA sequences).
+  protein['hhblits_profile'] = tf.reduce_mean(
+      tf.one_hot(protein['msa'], 22), axis=0)
+  return protein
+
+
+@curry1
+def make_masked_msa(protein, config, replace_fraction):
+  """Create data for BERT on raw MSA."""
+  # Add a random amino acid uniformly
+  random_aa = tf.constant([0.05] * 20 + [0., 0.], dtype=tf.float32)
+
+  categorical_probs = (
+      config.uniform_prob * random_aa +
+      config.profile_prob * protein['hhblits_profile'] +
+      config.same_prob * tf.one_hot(protein['msa'], 22))
+
+  # Put all remaining probability on [MASK] which is a new column
+  pad_shapes = [[0, 0] for _ in range(len(categorical_probs.shape))]
+  pad_shapes[-1][1] = 1
+  mask_prob = 1. - config.profile_prob - config.same_prob - config.uniform_prob
+  assert mask_prob >= 0.
+  categorical_probs = tf.pad(
+      categorical_probs, pad_shapes, constant_values=mask_prob)
+
+  sh = shape_helpers.shape_list(protein['msa'])
+  mask_position = tf.random.uniform(sh) < replace_fraction
+
+  bert_msa = shaped_categorical(categorical_probs)
+  bert_msa = tf.where(mask_position, bert_msa, protein['msa'])
+
+  # Mix real and masked MSA
+  protein['bert_mask'] = tf.cast(mask_position, tf.float32)
+  protein['true_msa'] = protein['msa']
+  protein['msa'] = bert_msa
+
+  return protein
+
+
+@curry1
+def make_fixed_size(protein, shape_schema, msa_cluster_size, extra_msa_size,
+                    num_res, num_templates=0):
+  """Guess at the MSA and sequence dimensions to make fixed size."""
+
+  pad_size_map = {
+      NUM_RES: num_res,
+      NUM_MSA_SEQ: msa_cluster_size,
+      NUM_EXTRA_SEQ: extra_msa_size,
+      NUM_TEMPLATES: num_templates,
+  }
+
+  for k, v in protein.items():
+    # Don't transfer this to the accelerator.
+    if k == 'extra_cluster_assignment':
+      continue
+    shape = v.shape.as_list()
+    schema = shape_schema[k]
+    assert len(shape) == len(schema), (
+        f'Rank mismatch between shape and shape schema for {k}: '
+        f'{shape} vs {schema}')
+    pad_size = [
+        pad_size_map.get(s2, None) or s1 for (s1, s2) in zip(shape, schema)
+    ]
+    padding = [(0, p - tf.shape(v)[i]) for i, p in enumerate(pad_size)]
+    if padding:
+      protein[k] = tf.pad(
+          v, padding, name=f'pad_to_fixed_{k}')
+      protein[k].set_shape(pad_size)
+
+  return protein
+
+
+@curry1
+def make_msa_feat(protein):
+  """Create and concatenate MSA features."""
+  # Whether there is a domain break. Always zero for chains, but keeping
+  # for compatibility with domain datasets.
+  has_break = tf.clip_by_value(
+      tf.cast(protein['between_segment_residues'], tf.float32),
+      0, 1)
+  aatype_1hot = tf.one_hot(protein['aatype'], 21, axis=-1)
+
+  target_feat = [
+      tf.expand_dims(has_break, axis=-1),
+      aatype_1hot,  # Everyone gets the original sequence.
+  ]
+
+  msa_1hot = tf.one_hot(protein['msa'], 23, axis=-1)
+  has_deletion = tf.clip_by_value(protein['deletion_matrix'], 0., 1.)
+  deletion_value = tf.atan(protein['deletion_matrix'] / 3.) * (2. / np.pi)
+
+  msa_feat = [
+      msa_1hot,
+      tf.expand_dims(has_deletion, axis=-1),
+      tf.expand_dims(deletion_value, axis=-1),
+  ]
+
+  if 'cluster_profile' in protein:
+    deletion_mean_value = (
+        tf.atan(protein['cluster_deletion_mean'] / 3.) * (2. / np.pi))
+    msa_feat.extend([
+        protein['cluster_profile'],
+        tf.expand_dims(deletion_mean_value, axis=-1),
+    ])
+
+  if 'extra_deletion_matrix' in protein:
+    protein['extra_has_deletion'] = tf.clip_by_value(
+        protein['extra_deletion_matrix'], 0., 1.)
+    protein['extra_deletion_value'] = tf.atan(
+        protein['extra_deletion_matrix'] / 3.) * (2. / np.pi)
+
+  protein['msa_feat'] = tf.concat(msa_feat, axis=-1)
+  protein['target_feat'] = tf.concat(target_feat, axis=-1)
+  return protein
+
+
+@curry1
+def select_feat(protein, feature_list):
+  return {k: v for k, v in protein.items() if k in feature_list}
+
+
+@curry1
+def crop_templates(protein, max_templates):
+  for k, v in protein.items():
+    if k.startswith('template_'):
+      protein[k] = v[:max_templates]
+  return protein
+
+
+@curry1
+def random_crop_to_size(protein, crop_size, max_templates, shape_schema,
+                        subsample_templates=False):
+  """Crop randomly to `crop_size`, or keep as is if shorter than that."""
+  seq_length = protein['seq_length']
+  if 'template_mask' in protein:
+    num_templates = tf.cast(
+        shape_helpers.shape_list(protein['template_mask'])[0], tf.int32)
+  else:
+    num_templates = tf.constant(0, dtype=tf.int32)
+  num_res_crop_size = tf.math.minimum(seq_length, crop_size)
+
+  # Ensures that the cropping of residues and templates happens in the same way
+  # across ensembling iterations.
+  # Do not use for randomness that should vary in ensembling.
+  seed_maker = utils.SeedMaker(initial_seed=protein['random_crop_to_size_seed'])
+
+  if subsample_templates:
+    templates_crop_start = tf.random.stateless_uniform(
+        shape=(), minval=0, maxval=num_templates + 1, dtype=tf.int32,
+        seed=seed_maker())
+  else:
+    templates_crop_start = 0
+
+  num_templates_crop_size = tf.math.minimum(
+      num_templates - templates_crop_start, max_templates)
+
+  num_res_crop_start = tf.random.stateless_uniform(
+      shape=(), minval=0, maxval=seq_length - num_res_crop_size + 1,
+      dtype=tf.int32, seed=seed_maker())
+
+  templates_select_indices = tf.argsort(tf.random.stateless_uniform(
+      [num_templates], seed=seed_maker()))
+
+  for k, v in protein.items():
+    if k not in shape_schema or (
+        'template' not in k and NUM_RES not in shape_schema[k]):
+      continue
+
+    # randomly permute the templates before cropping them.
+    if k.startswith('template') and subsample_templates:
+      v = tf.gather(v, templates_select_indices)
+
+    crop_sizes = []
+    crop_starts = []
+    for i, (dim_size, dim) in enumerate(zip(shape_schema[k],
+                                            shape_helpers.shape_list(v))):
+      is_num_res = (dim_size == NUM_RES)
+      if i == 0 and k.startswith('template'):
+        crop_size = num_templates_crop_size
+        crop_start = templates_crop_start
+      else:
+        crop_start = num_res_crop_start if is_num_res else 0
+        crop_size = (num_res_crop_size if is_num_res else
+                     (-1 if dim is None else dim))
+      crop_sizes.append(crop_size)
+      crop_starts.append(crop_start)
+    protein[k] = tf.slice(v, crop_starts, crop_sizes)
+
+  protein['seq_length'] = num_res_crop_size
+  return protein
+
+
+def make_atom14_masks(protein):
+  """Construct denser atom positions (14 dimensions instead of 37)."""
+  restype_atom14_to_atom37 = []  # mapping (restype, atom14) --> atom37
+  restype_atom37_to_atom14 = []  # mapping (restype, atom37) --> atom14
+  restype_atom14_mask = []
+
+  for rt in residue_constants.restypes:
+    atom_names = residue_constants.restype_name_to_atom14_names[
+        residue_constants.restype_1to3[rt]]
+
+    restype_atom14_to_atom37.append([
+        (residue_constants.atom_order[name] if name else 0)
+        for name in atom_names
+    ])
+
+    atom_name_to_idx14 = {name: i for i, name in enumerate(atom_names)}
+    restype_atom37_to_atom14.append([
+        (atom_name_to_idx14[name] if name in atom_name_to_idx14 else 0)
+        for name in residue_constants.atom_types
+    ])
+
+    restype_atom14_mask.append([(1. if name else 0.) for name in atom_names])
+
+  # Add dummy mapping for restype 'UNK'
+  restype_atom14_to_atom37.append([0] * 14)
+  restype_atom37_to_atom14.append([0] * 37)
+  restype_atom14_mask.append([0.] * 14)
+
+  restype_atom14_to_atom37 = np.array(restype_atom14_to_atom37, dtype=np.int32)
+  restype_atom37_to_atom14 = np.array(restype_atom37_to_atom14, dtype=np.int32)
+  restype_atom14_mask = np.array(restype_atom14_mask, dtype=np.float32)
+
+  # create the mapping for (residx, atom14) --> atom37, i.e. an array
+  # with shape (num_res, 14) containing the atom37 indices for this protein
+  residx_atom14_to_atom37 = tf.gather(restype_atom14_to_atom37,
+                                      protein['aatype'])
+  residx_atom14_mask = tf.gather(restype_atom14_mask,
+                                 protein['aatype'])
+
+  protein['atom14_atom_exists'] = residx_atom14_mask
+  protein['residx_atom14_to_atom37'] = residx_atom14_to_atom37
+
+  # create the gather indices for mapping back
+  residx_atom37_to_atom14 = tf.gather(restype_atom37_to_atom14,
+                                      protein['aatype'])
+  protein['residx_atom37_to_atom14'] = residx_atom37_to_atom14
+
+  # create the corresponding mask
+  restype_atom37_mask = np.zeros([21, 37], dtype=np.float32)
+  for restype, restype_letter in enumerate(residue_constants.restypes):
+    restype_name = residue_constants.restype_1to3[restype_letter]
+    atom_names = residue_constants.residue_atoms[restype_name]
+    for atom_name in atom_names:
+      atom_type = residue_constants.atom_order[atom_name]
+      restype_atom37_mask[restype, atom_type] = 1
+
+  residx_atom37_mask = tf.gather(restype_atom37_mask,
+                                 protein['aatype'])
+  protein['atom37_atom_exists'] = residx_atom37_mask
+
+  return protein
diff --git a/alphafold/alphafold/model/tf/input_pipeline.py b/alphafold/alphafold/model/tf/input_pipeline.py
new file mode 100644
index 0000000000000000000000000000000000000000..e9a9bc3a8aa15316aa88c3947120883be869331e
--- /dev/null
+++ b/alphafold/alphafold/model/tf/input_pipeline.py
@@ -0,0 +1,166 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Feature pre-processing input pipeline for AlphaFold."""
+
+from alphafold.model.tf import data_transforms
+from alphafold.model.tf import shape_placeholders
+import tensorflow.compat.v1 as tf
+import tree
+
+# Pylint gets confused by the curry1 decorator because it changes the number
+#   of arguments to the function.
+# pylint:disable=no-value-for-parameter
+
+
+NUM_RES = shape_placeholders.NUM_RES
+NUM_MSA_SEQ = shape_placeholders.NUM_MSA_SEQ
+NUM_EXTRA_SEQ = shape_placeholders.NUM_EXTRA_SEQ
+NUM_TEMPLATES = shape_placeholders.NUM_TEMPLATES
+
+
+def nonensembled_map_fns(data_config):
+  """Input pipeline functions which are not ensembled."""
+  common_cfg = data_config.common
+
+  map_fns = [
+      data_transforms.correct_msa_restypes,
+      data_transforms.add_distillation_flag(False),
+      data_transforms.cast_64bit_ints,
+      data_transforms.squeeze_features,
+      # Keep to not disrupt RNG.
+      data_transforms.randomly_replace_msa_with_unknown(0.0),
+      data_transforms.make_seq_mask,
+      data_transforms.make_msa_mask,
+      # Compute the HHblits profile if it's not set. This has to be run before
+      # sampling the MSA.
+      data_transforms.make_hhblits_profile,
+      data_transforms.make_random_crop_to_size_seed,
+  ]
+  if common_cfg.use_templates:
+    map_fns.extend([
+        data_transforms.fix_templates_aatype,
+        data_transforms.make_template_mask,
+        data_transforms.make_pseudo_beta('template_')
+    ])
+  map_fns.extend([
+      data_transforms.make_atom14_masks,
+  ])
+
+  return map_fns
+
+
+def ensembled_map_fns(data_config):
+  """Input pipeline functions that can be ensembled and averaged."""
+  common_cfg = data_config.common
+  eval_cfg = data_config.eval
+
+  map_fns = []
+
+  if common_cfg.reduce_msa_clusters_by_max_templates:
+    pad_msa_clusters = eval_cfg.max_msa_clusters - eval_cfg.max_templates
+  else:
+    pad_msa_clusters = eval_cfg.max_msa_clusters
+
+  max_msa_clusters = pad_msa_clusters
+  max_extra_msa = common_cfg.max_extra_msa
+
+  map_fns.append(
+      data_transforms.sample_msa(
+          max_msa_clusters,
+          keep_extra=True))
+
+  if 'masked_msa' in common_cfg:
+    # Masked MSA should come *before* MSA clustering so that
+    # the clustering and full MSA profile do not leak information about
+    # the masked locations and secret corrupted locations.
+    map_fns.append(
+        data_transforms.make_masked_msa(common_cfg.masked_msa,
+                                        eval_cfg.masked_msa_replace_fraction))
+
+  if common_cfg.msa_cluster_features:
+    map_fns.append(data_transforms.nearest_neighbor_clusters())
+    map_fns.append(data_transforms.summarize_clusters())
+
+  # Crop after creating the cluster profiles.
+  if max_extra_msa:
+    map_fns.append(data_transforms.crop_extra_msa(max_extra_msa))
+  else:
+    map_fns.append(data_transforms.delete_extra_msa)
+
+  map_fns.append(data_transforms.make_msa_feat())
+
+  crop_feats = dict(eval_cfg.feat)
+
+  if eval_cfg.fixed_size:
+    map_fns.append(data_transforms.select_feat(list(crop_feats)))
+    map_fns.append(data_transforms.random_crop_to_size(
+        eval_cfg.crop_size,
+        eval_cfg.max_templates,
+        crop_feats,
+        eval_cfg.subsample_templates))
+    map_fns.append(data_transforms.make_fixed_size(
+        crop_feats,
+        pad_msa_clusters,
+        common_cfg.max_extra_msa,
+        eval_cfg.crop_size,
+        eval_cfg.max_templates))
+  else:
+    map_fns.append(data_transforms.crop_templates(eval_cfg.max_templates))
+
+  return map_fns
+
+
+def process_tensors_from_config(tensors, data_config):
+  """Apply filters and maps to an existing dataset, based on the config."""
+
+  def wrap_ensemble_fn(data, i):
+    """Function to be mapped over the ensemble dimension."""
+    d = data.copy()
+    fns = ensembled_map_fns(data_config)
+    fn = compose(fns)
+    d['ensemble_index'] = i
+    return fn(d)
+
+  eval_cfg = data_config.eval
+  tensors = compose(
+      nonensembled_map_fns(
+          data_config))(
+              tensors)
+
+  tensors_0 = wrap_ensemble_fn(tensors, tf.constant(0))
+  num_ensemble = eval_cfg.num_ensemble
+  if data_config.common.resample_msa_in_recycling:
+    # Separate batch per ensembling & recycling step.
+    num_ensemble *= data_config.common.num_recycle + 1
+
+  if isinstance(num_ensemble, tf.Tensor) or num_ensemble > 1:
+    fn_output_signature = tree.map_structure(
+        tf.TensorSpec.from_tensor, tensors_0)
+    tensors = tf.map_fn(
+        lambda x: wrap_ensemble_fn(tensors, x),
+        tf.range(num_ensemble),
+        parallel_iterations=1,
+        fn_output_signature=fn_output_signature)
+  else:
+    tensors = tree.map_structure(lambda x: x[None],
+                                 tensors_0)
+  return tensors
+
+
+@data_transforms.curry1
+def compose(x, fs):
+  for f in fs:
+    x = f(x)
+  return x
diff --git a/alphafold/alphafold/model/tf/protein_features.py b/alphafold/alphafold/model/tf/protein_features.py
new file mode 100644
index 0000000000000000000000000000000000000000..c78cfa5ea50baa63f9fabcb3bc7c7b66d10a1fa0
--- /dev/null
+++ b/alphafold/alphafold/model/tf/protein_features.py
@@ -0,0 +1,129 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Contains descriptions of various protein features."""
+import enum
+from typing import Dict, Optional, Sequence, Tuple, Union
+from alphafold.common import residue_constants
+import tensorflow.compat.v1 as tf
+
+# Type aliases.
+FeaturesMetadata = Dict[str, Tuple[tf.dtypes.DType, Sequence[Union[str, int]]]]
+
+
+class FeatureType(enum.Enum):
+  ZERO_DIM = 0  # Shape [x]
+  ONE_DIM = 1  # Shape [num_res, x]
+  TWO_DIM = 2  # Shape [num_res, num_res, x]
+  MSA = 3  # Shape [msa_length, num_res, x]
+
+
+# Placeholder values that will be replaced with their true value at runtime.
+NUM_RES = "num residues placeholder"
+NUM_SEQ = "length msa placeholder"
+NUM_TEMPLATES = "num templates placeholder"
+# Sizes of the protein features, NUM_RES and NUM_SEQ are allowed as placeholders
+# to be replaced with the number of residues and the number of sequences in the
+# multiple sequence alignment, respectively.
+
+
+FEATURES = {
+    #### Static features of a protein sequence ####
+    "aatype": (tf.float32, [NUM_RES, 21]),
+    "between_segment_residues": (tf.int64, [NUM_RES, 1]),
+    "deletion_matrix": (tf.float32, [NUM_SEQ, NUM_RES, 1]),
+    "domain_name": (tf.string, [1]),
+    "msa": (tf.int64, [NUM_SEQ, NUM_RES, 1]),
+    "num_alignments": (tf.int64, [NUM_RES, 1]),
+    "residue_index": (tf.int64, [NUM_RES, 1]),
+    "seq_length": (tf.int64, [NUM_RES, 1]),
+    "sequence": (tf.string, [1]),
+    "all_atom_positions": (tf.float32,
+                           [NUM_RES, residue_constants.atom_type_num, 3]),
+    "all_atom_mask": (tf.int64, [NUM_RES, residue_constants.atom_type_num]),
+    "resolution": (tf.float32, [1]),
+    "template_domain_names": (tf.string, [NUM_TEMPLATES]),
+    "template_sum_probs": (tf.float32, [NUM_TEMPLATES, 1]),
+    "template_aatype": (tf.float32, [NUM_TEMPLATES, NUM_RES, 22]),
+    "template_all_atom_positions": (tf.float32, [
+        NUM_TEMPLATES, NUM_RES, residue_constants.atom_type_num, 3
+    ]),
+    "template_all_atom_masks": (tf.float32, [
+        NUM_TEMPLATES, NUM_RES, residue_constants.atom_type_num, 1
+    ]),
+}
+
+FEATURE_TYPES = {k: v[0] for k, v in FEATURES.items()}
+FEATURE_SIZES = {k: v[1] for k, v in FEATURES.items()}
+
+
+def register_feature(name: str,
+                     type_: tf.dtypes.DType,
+                     shape_: Tuple[Union[str, int]]):
+  """Register extra features used in custom datasets."""
+  FEATURES[name] = (type_, shape_)
+  FEATURE_TYPES[name] = type_
+  FEATURE_SIZES[name] = shape_
+
+
+def shape(feature_name: str,
+          num_residues: int,
+          msa_length: int,
+          num_templates: Optional[int] = None,
+          features: Optional[FeaturesMetadata] = None):
+  """Get the shape for the given feature name.
+
+  This is near identical to _get_tf_shape_no_placeholders() but with 2
+  differences:
+  * This method does not calculate a single placeholder from the total number of
+    elements (eg given <NUM_RES, 3> and size := 12, this won't deduce NUM_RES
+    must be 4)
+  * This method will work with tensors
+
+  Args:
+    feature_name: String identifier for the feature. If the feature name ends
+      with "_unnormalized", this suffix is stripped off.
+    num_residues: The number of residues in the current domain - some elements
+      of the shape can be dynamic and will be replaced by this value.
+    msa_length: The number of sequences in the multiple sequence alignment, some
+      elements of the shape can be dynamic and will be replaced by this value.
+      If the number of alignments is unknown / not read, please pass None for
+      msa_length.
+    num_templates (optional): The number of templates in this tfexample.
+    features: A feature_name to (tf_dtype, shape) lookup; defaults to FEATURES.
+
+  Returns:
+    List of ints representation the tensor size.
+
+  Raises:
+    ValueError: If a feature is requested but no concrete placeholder value is
+        given.
+  """
+  features = features or FEATURES
+  if feature_name.endswith("_unnormalized"):
+    feature_name = feature_name[:-13]
+
+  unused_dtype, raw_sizes = features[feature_name]
+  replacements = {NUM_RES: num_residues,
+                  NUM_SEQ: msa_length}
+
+  if num_templates is not None:
+    replacements[NUM_TEMPLATES] = num_templates
+
+  sizes = [replacements.get(dimension, dimension) for dimension in raw_sizes]
+  for dimension in sizes:
+    if isinstance(dimension, str):
+      raise ValueError("Could not parse %s (shape: %s) with values: %s" % (
+          feature_name, raw_sizes, replacements))
+  return sizes
diff --git a/alphafold/alphafold/model/tf/protein_features_test.py b/alphafold/alphafold/model/tf/protein_features_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..ee88711281f5cfb366ab26b10c75f37b211120ea
--- /dev/null
+++ b/alphafold/alphafold/model/tf/protein_features_test.py
@@ -0,0 +1,51 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for protein_features."""
+import uuid
+
+from absl.testing import absltest
+from absl.testing import parameterized
+from alphafold.model.tf import protein_features
+import tensorflow.compat.v1 as tf
+
+
+def _random_bytes():
+  return str(uuid.uuid4()).encode('utf-8')
+
+
+class FeaturesTest(parameterized.TestCase, tf.test.TestCase):
+
+  def testFeatureNames(self):
+    self.assertEqual(len(protein_features.FEATURE_SIZES),
+                     len(protein_features.FEATURE_TYPES))
+    sorted_size_names = sorted(protein_features.FEATURE_SIZES.keys())
+    sorted_type_names = sorted(protein_features.FEATURE_TYPES.keys())
+    for i, size_name in enumerate(sorted_size_names):
+      self.assertEqual(size_name, sorted_type_names[i])
+
+  def testReplacement(self):
+    for name in protein_features.FEATURE_SIZES.keys():
+      sizes = protein_features.shape(name,
+                                     num_residues=12,
+                                     msa_length=24,
+                                     num_templates=3)
+      for x in sizes:
+        self.assertEqual(type(x), int)
+        self.assertGreater(x, 0)
+
+
+if __name__ == '__main__':
+  tf.disable_v2_behavior()
+  absltest.main()
diff --git a/alphafold/alphafold/model/tf/proteins_dataset.py b/alphafold/alphafold/model/tf/proteins_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..e0b1c038a41c6e276275a7904e748ea9e31e6083
--- /dev/null
+++ b/alphafold/alphafold/model/tf/proteins_dataset.py
@@ -0,0 +1,166 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Datasets consisting of proteins."""
+from typing import Dict, Mapping, Optional, Sequence
+from alphafold.model.tf import protein_features
+import numpy as np
+import tensorflow.compat.v1 as tf
+
+TensorDict = Dict[str, tf.Tensor]
+
+
+def parse_tfexample(
+    raw_data: bytes,
+    features: protein_features.FeaturesMetadata,
+    key: Optional[str] = None) -> Dict[str, tf.train.Feature]:
+  """Read a single TF Example proto and return a subset of its features.
+
+  Args:
+    raw_data: A serialized tf.Example proto.
+    features: A dictionary of features, mapping string feature names to a tuple
+      (dtype, shape). This dictionary should be a subset of
+      protein_features.FEATURES (or the dictionary itself for all features).
+    key: Optional string with the SSTable key of that tf.Example. This will be
+      added into features as a 'key' but only if requested in features.
+
+  Returns:
+    A dictionary of features mapping feature names to features. Only the given
+    features are returned, all other ones are filtered out.
+  """
+  feature_map = {
+      k: tf.io.FixedLenSequenceFeature(shape=(), dtype=v[0], allow_missing=True)
+      for k, v in features.items()
+  }
+  parsed_features = tf.io.parse_single_example(raw_data, feature_map)
+  reshaped_features = parse_reshape_logic(parsed_features, features, key=key)
+
+  return reshaped_features
+
+
+def _first(tensor: tf.Tensor) -> tf.Tensor:
+  """Returns the 1st element - the input can be a tensor or a scalar."""
+  return tf.reshape(tensor, shape=(-1,))[0]
+
+
+def parse_reshape_logic(
+    parsed_features: TensorDict,
+    features: protein_features.FeaturesMetadata,
+    key: Optional[str] = None) -> TensorDict:
+  """Transforms parsed serial features to the correct shape."""
+  # Find out what is the number of sequences and the number of alignments.
+  num_residues = tf.cast(_first(parsed_features["seq_length"]), dtype=tf.int32)
+
+  if "num_alignments" in parsed_features:
+    num_msa = tf.cast(_first(parsed_features["num_alignments"]), dtype=tf.int32)
+  else:
+    num_msa = 0
+
+  if "template_domain_names" in parsed_features:
+    num_templates = tf.cast(
+        tf.shape(parsed_features["template_domain_names"])[0], dtype=tf.int32)
+  else:
+    num_templates = 0
+
+  if key is not None and "key" in features:
+    parsed_features["key"] = [key]  # Expand dims from () to (1,).
+
+  # Reshape the tensors according to the sequence length and num alignments.
+  for k, v in parsed_features.items():
+    new_shape = protein_features.shape(
+        feature_name=k,
+        num_residues=num_residues,
+        msa_length=num_msa,
+        num_templates=num_templates,
+        features=features)
+    new_shape_size = tf.constant(1, dtype=tf.int32)
+    for dim in new_shape:
+      new_shape_size *= tf.cast(dim, tf.int32)
+
+    assert_equal = tf.assert_equal(
+        tf.size(v), new_shape_size,
+        name="assert_%s_shape_correct" % k,
+        message="The size of feature %s (%s) could not be reshaped "
+        "into %s" % (k, tf.size(v), new_shape))
+    if "template" not in k:
+      # Make sure the feature we are reshaping is not empty.
+      assert_non_empty = tf.assert_greater(
+          tf.size(v), 0, name="assert_%s_non_empty" % k,
+          message="The feature %s is not set in the tf.Example. Either do not "
+          "request the feature or use a tf.Example that has the "
+          "feature set." % k)
+      with tf.control_dependencies([assert_non_empty, assert_equal]):
+        parsed_features[k] = tf.reshape(v, new_shape, name="reshape_%s" % k)
+    else:
+      with tf.control_dependencies([assert_equal]):
+        parsed_features[k] = tf.reshape(v, new_shape, name="reshape_%s" % k)
+
+  return parsed_features
+
+
+def _make_features_metadata(
+    feature_names: Sequence[str]) -> protein_features.FeaturesMetadata:
+  """Makes a feature name to type and shape mapping from a list of names."""
+  # Make sure these features are always read.
+  required_features = ["aatype", "sequence", "seq_length"]
+  feature_names = list(set(feature_names) | set(required_features))
+
+  features_metadata = {name: protein_features.FEATURES[name]
+                       for name in feature_names}
+  return features_metadata
+
+
+def create_tensor_dict(
+    raw_data: bytes,
+    features: Sequence[str],
+    key: Optional[str] = None,
+    ) -> TensorDict:
+  """Creates a dictionary of tensor features.
+
+  Args:
+    raw_data: A serialized tf.Example proto.
+    features: A list of strings of feature names to be returned in the dataset.
+    key: Optional string with the SSTable key of that tf.Example. This will be
+      added into features as a 'key' but only if requested in features.
+
+  Returns:
+    A dictionary of features mapping feature names to features. Only the given
+    features are returned, all other ones are filtered out.
+  """
+  features_metadata = _make_features_metadata(features)
+  return parse_tfexample(raw_data, features_metadata, key)
+
+
+def np_to_tensor_dict(
+    np_example: Mapping[str, np.ndarray],
+    features: Sequence[str],
+    ) -> TensorDict:
+  """Creates dict of tensors from a dict of NumPy arrays.
+
+  Args:
+    np_example: A dict of NumPy feature arrays.
+    features: A list of strings of feature names to be returned in the dataset.
+
+  Returns:
+    A dictionary of features mapping feature names to features. Only the given
+    features are returned, all other ones are filtered out.
+  """
+  features_metadata = _make_features_metadata(features)
+  tensor_dict = {k: tf.constant(v) for k, v in np_example.items()
+                 if k in features_metadata}
+
+  # Ensures shapes are as expected. Needed for setting size of empty features
+  # e.g. when no template hits were found.
+  tensor_dict = parse_reshape_logic(tensor_dict, features_metadata)
+  return tensor_dict
diff --git a/alphafold/alphafold/model/tf/shape_helpers.py b/alphafold/alphafold/model/tf/shape_helpers.py
new file mode 100644
index 0000000000000000000000000000000000000000..be2926a63bce7ca5db3effe63d5264620aa1dcf8
--- /dev/null
+++ b/alphafold/alphafold/model/tf/shape_helpers.py
@@ -0,0 +1,47 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Utilities for dealing with shapes of TensorFlow tensors."""
+import tensorflow.compat.v1 as tf
+
+
+def shape_list(x):
+  """Return list of dimensions of a tensor, statically where possible.
+
+  Like `x.shape.as_list()` but with tensors instead of `None`s.
+
+  Args:
+    x: A tensor.
+  Returns:
+    A list with length equal to the rank of the tensor. The n-th element of the
+    list is an integer when that dimension is statically known otherwise it is
+    the n-th element of `tf.shape(x)`.
+  """
+  x = tf.convert_to_tensor(x)
+
+  # If unknown rank, return dynamic shape
+  if x.get_shape().dims is None:
+    return tf.shape(x)
+
+  static = x.get_shape().as_list()
+  shape = tf.shape(x)
+
+  ret = []
+  for i in range(len(static)):
+    dim = static[i]
+    if dim is None:
+      dim = shape[i]
+    ret.append(dim)
+  return ret
+
diff --git a/alphafold/alphafold/model/tf/shape_helpers_test.py b/alphafold/alphafold/model/tf/shape_helpers_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..d7797b340514d9577dd77b9e9660babd0aa52b5e
--- /dev/null
+++ b/alphafold/alphafold/model/tf/shape_helpers_test.py
@@ -0,0 +1,39 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for shape_helpers."""
+
+from alphafold.model.tf import shape_helpers
+import numpy as np
+import tensorflow.compat.v1 as tf
+
+
+class ShapeTest(tf.test.TestCase):
+
+  def test_shape_list(self):
+    """Test that shape_list can allow for reshaping to dynamic shapes."""
+    a = tf.zeros([10, 4, 4, 2])
+    p = tf.placeholder(tf.float32, shape=[None, None, 1, 4, 4])
+    shape_dyn = shape_helpers.shape_list(p)[:2] + [4, 4]
+
+    b = tf.reshape(a, shape_dyn)
+    with self.session() as sess:
+      out = sess.run(b, feed_dict={p: np.ones((20, 1, 1, 4, 4))})
+
+    self.assertAllEqual(out.shape, (20, 1, 4, 4))
+
+
+if __name__ == '__main__':
+  tf.disable_v2_behavior()
+  tf.test.main()
diff --git a/alphafold/alphafold/model/tf/shape_placeholders.py b/alphafold/alphafold/model/tf/shape_placeholders.py
new file mode 100644
index 0000000000000000000000000000000000000000..cffdeb5e1fa9691eb74680b8c9aeb8bab6123fa8
--- /dev/null
+++ b/alphafold/alphafold/model/tf/shape_placeholders.py
@@ -0,0 +1,20 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Placeholder values for run-time varying dimension sizes."""
+
+NUM_RES = 'num residues placeholder'
+NUM_MSA_SEQ = 'msa placeholder'
+NUM_EXTRA_SEQ = 'extra msa placeholder'
+NUM_TEMPLATES = 'num templates placeholder'
diff --git a/alphafold/alphafold/model/tf/utils.py b/alphafold/alphafold/model/tf/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..fc40a2ceb2de1c2d56c17697393713804d7da350
--- /dev/null
+++ b/alphafold/alphafold/model/tf/utils.py
@@ -0,0 +1,47 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Shared utilities for various components."""
+import tensorflow.compat.v1 as tf
+
+
+def tf_combine_mask(*masks):
+  """Take the intersection of float-valued masks."""
+  ret = 1
+  for m in masks:
+    ret *= m
+  return ret
+
+
+class SeedMaker(object):
+  """Return unique seeds."""
+
+  def __init__(self, initial_seed=0):
+    self.next_seed = initial_seed
+
+  def __call__(self):
+    i = self.next_seed
+    self.next_seed += 1
+    return i
+
+seed_maker = SeedMaker()
+
+
+def make_random_seed():
+  return tf.random.uniform([2],
+                           tf.int32.min,
+                           tf.int32.max,
+                           tf.int32,
+                           seed=seed_maker())
+
diff --git a/alphafold/alphafold/model/utils.py b/alphafold/alphafold/model/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..8ed5361e867a3f566afaa5aafeaac10863c4af8d
--- /dev/null
+++ b/alphafold/alphafold/model/utils.py
@@ -0,0 +1,81 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""A collection of JAX utility functions for use in protein folding."""
+
+import collections
+import numbers
+from typing import Mapping
+
+import haiku as hk
+import jax
+import jax.numpy as jnp
+import numpy as np
+
+
+def final_init(config):
+  if config.zero_init:
+    return 'zeros'
+  else:
+    return 'linear'
+
+
+def batched_gather(params, indices, axis=0, batch_dims=0):
+  """Implements a JAX equivalent of `tf.gather` with `axis` and `batch_dims`."""
+  take_fn = lambda p, i: jnp.take(p, i, axis=axis)
+  for _ in range(batch_dims):
+    take_fn = jax.vmap(take_fn)
+  return take_fn(params, indices)
+
+
+def mask_mean(mask, value, axis=None, drop_mask_channel=False, eps=1e-10):
+  """Masked mean."""
+  if drop_mask_channel:
+    mask = mask[..., 0]
+
+  mask_shape = mask.shape
+  value_shape = value.shape
+
+  assert len(mask_shape) == len(value_shape)
+
+  if isinstance(axis, numbers.Integral):
+    axis = [axis]
+  elif axis is None:
+    axis = list(range(len(mask_shape)))
+  assert isinstance(axis, collections.Iterable), (
+      'axis needs to be either an iterable, integer or "None"')
+
+  broadcast_factor = 1.
+  for axis_ in axis:
+    value_size = value_shape[axis_]
+    mask_size = mask_shape[axis_]
+    if mask_size == 1:
+      broadcast_factor *= value_size
+    else:
+      assert mask_size == value_size
+
+  return (jnp.sum(mask * value, axis=axis) /
+          (jnp.sum(mask, axis=axis) * broadcast_factor + eps))
+
+
+def flat_params_to_haiku(params: Mapping[str, np.ndarray]) -> hk.Params:
+  """Convert a dictionary of NumPy arrays to Haiku parameters."""
+  hk_params = {}
+  for path, array in params.items():
+    scope, name = path.split('//')
+    if scope not in hk_params:
+      hk_params[scope] = {}
+    hk_params[scope][name] = jnp.array(array)
+
+  return hk_params
diff --git a/alphafold/alphafold/relax/__init__.py b/alphafold/alphafold/relax/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..98feaf80700f21bf7c1c5e7f755d3c38d0008dba
--- /dev/null
+++ b/alphafold/alphafold/relax/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Amber relaxation."""
diff --git a/alphafold/alphafold/relax/amber_minimize.py b/alphafold/alphafold/relax/amber_minimize.py
new file mode 100644
index 0000000000000000000000000000000000000000..d3ff9f74218bdcabe0b57d8e0e749814b583edcd
--- /dev/null
+++ b/alphafold/alphafold/relax/amber_minimize.py
@@ -0,0 +1,543 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Restrained Amber Minimization of a structure."""
+
+import io
+import time
+from typing import Collection, Optional, Sequence
+
+from absl import logging
+from alphafold.common import protein
+from alphafold.common import residue_constants
+from alphafold.model import folding
+from alphafold.relax import cleanup
+from alphafold.relax import utils
+import ml_collections
+import numpy as np
+from simtk import openmm
+from simtk import unit
+from simtk.openmm import app as openmm_app
+from simtk.openmm.app.internal.pdbstructure import PdbStructure
+
+
+ENERGY = unit.kilocalories_per_mole
+LENGTH = unit.angstroms
+
+
+def will_restrain(atom: openmm_app.Atom, rset: str) -> bool:
+  """Returns True if the atom will be restrained by the given restraint set."""
+
+  if rset == "non_hydrogen":
+    return atom.element.name != "hydrogen"
+  elif rset == "c_alpha":
+    return atom.name == "CA"
+
+
+def _add_restraints(
+    system: openmm.System,
+    reference_pdb: openmm_app.PDBFile,
+    stiffness: unit.Unit,
+    rset: str,
+    exclude_residues: Sequence[int]):
+  """Adds a harmonic potential that restrains the system to a structure."""
+  assert rset in ["non_hydrogen", "c_alpha"]
+
+  force = openmm.CustomExternalForce(
+      "0.5 * k * ((x-x0)^2 + (y-y0)^2 + (z-z0)^2)")
+  force.addGlobalParameter("k", stiffness)
+  for p in ["x0", "y0", "z0"]:
+    force.addPerParticleParameter(p)
+
+  for i, atom in enumerate(reference_pdb.topology.atoms()):
+    if atom.residue.index in exclude_residues:
+      continue
+    if will_restrain(atom, rset):
+      force.addParticle(i, reference_pdb.positions[i])
+  logging.info("Restraining %d / %d particles.",
+               force.getNumParticles(), system.getNumParticles())
+  system.addForce(force)
+
+
+def _openmm_minimize(
+    pdb_str: str,
+    max_iterations: int,
+    tolerance: unit.Unit,
+    stiffness: unit.Unit,
+    restraint_set: str,
+    exclude_residues: Sequence[int]):
+  """Minimize energy via openmm."""
+
+  pdb_file = io.StringIO(pdb_str)
+  pdb = openmm_app.PDBFile(pdb_file)
+
+  force_field = openmm_app.ForceField("amber99sb.xml")
+  constraints = openmm_app.HBonds
+  system = force_field.createSystem(
+      pdb.topology, constraints=constraints)
+  if stiffness > 0 * ENERGY / (LENGTH**2):
+    _add_restraints(system, pdb, stiffness, restraint_set, exclude_residues)
+
+  integrator = openmm.LangevinIntegrator(0, 0.01, 0.0)
+  platform = openmm.Platform.getPlatformByName("CPU")
+  simulation = openmm_app.Simulation(
+      pdb.topology, system, integrator, platform)
+  simulation.context.setPositions(pdb.positions)
+
+  ret = {}
+  state = simulation.context.getState(getEnergy=True, getPositions=True)
+  ret["einit"] = state.getPotentialEnergy().value_in_unit(ENERGY)
+  ret["posinit"] = state.getPositions(asNumpy=True).value_in_unit(LENGTH)
+  simulation.minimizeEnergy(maxIterations=max_iterations,
+                            tolerance=tolerance)
+  state = simulation.context.getState(getEnergy=True, getPositions=True)
+  ret["efinal"] = state.getPotentialEnergy().value_in_unit(ENERGY)
+  ret["pos"] = state.getPositions(asNumpy=True).value_in_unit(LENGTH)
+  ret["min_pdb"] = _get_pdb_string(simulation.topology, state.getPositions())
+  return ret
+
+
+def _get_pdb_string(topology: openmm_app.Topology, positions: unit.Quantity):
+  """Returns a pdb string provided OpenMM topology and positions."""
+  with io.StringIO() as f:
+    openmm_app.PDBFile.writeFile(topology, positions, f)
+    return f.getvalue()
+
+
+def _check_cleaned_atoms(pdb_cleaned_string: str, pdb_ref_string: str):
+  """Checks that no atom positions have been altered by cleaning."""
+  cleaned = openmm_app.PDBFile(io.StringIO(pdb_cleaned_string))
+  reference = openmm_app.PDBFile(io.StringIO(pdb_ref_string))
+
+  cl_xyz = np.array(cleaned.getPositions().value_in_unit(LENGTH))
+  ref_xyz = np.array(reference.getPositions().value_in_unit(LENGTH))
+
+  for ref_res, cl_res in zip(reference.topology.residues(),
+                             cleaned.topology.residues()):
+    assert ref_res.name == cl_res.name
+    for rat in ref_res.atoms():
+      for cat in cl_res.atoms():
+        if cat.name == rat.name:
+          if not np.array_equal(cl_xyz[cat.index], ref_xyz[rat.index]):
+            raise ValueError(f"Coordinates of cleaned atom {cat} do not match "
+                             f"coordinates of reference atom {rat}.")
+
+
+def _check_residues_are_well_defined(prot: protein.Protein):
+  """Checks that all residues contain non-empty atom sets."""
+  if (prot.atom_mask.sum(axis=-1) == 0).any():
+    raise ValueError("Amber minimization can only be performed on proteins with"
+                     " well-defined residues. This protein contains at least"
+                     " one residue with no atoms.")
+
+
+def _check_atom_mask_is_ideal(prot):
+  """Sanity-check the atom mask is ideal, up to a possible OXT."""
+  atom_mask = prot.atom_mask
+  ideal_atom_mask = protein.ideal_atom_mask(prot)
+  utils.assert_equal_nonterminal_atom_types(atom_mask, ideal_atom_mask)
+
+
+def clean_protein(
+    prot: protein.Protein,
+    checks: bool = True):
+  """Adds missing atoms to Protein instance.
+
+  Args:
+    prot: A `protein.Protein` instance.
+    checks: A `bool` specifying whether to add additional checks to the cleaning
+      process.
+
+  Returns:
+    pdb_string: A string of the cleaned protein.
+  """
+  _check_atom_mask_is_ideal(prot)
+
+  # Clean pdb.
+  prot_pdb_string = protein.to_pdb(prot)
+  pdb_file = io.StringIO(prot_pdb_string)
+  alterations_info = {}
+  fixed_pdb = cleanup.fix_pdb(pdb_file, alterations_info)
+  fixed_pdb_file = io.StringIO(fixed_pdb)
+  pdb_structure = PdbStructure(fixed_pdb_file)
+  cleanup.clean_structure(pdb_structure, alterations_info)
+
+  logging.info("alterations info: %s", alterations_info)
+
+  # Write pdb file of cleaned structure.
+  as_file = openmm_app.PDBFile(pdb_structure)
+  pdb_string = _get_pdb_string(as_file.getTopology(), as_file.getPositions())
+  if checks:
+    _check_cleaned_atoms(pdb_string, prot_pdb_string)
+  return pdb_string
+
+
+def make_atom14_positions(prot):
+  """Constructs denser atom positions (14 dimensions instead of 37)."""
+  restype_atom14_to_atom37 = []  # mapping (restype, atom14) --> atom37
+  restype_atom37_to_atom14 = []  # mapping (restype, atom37) --> atom14
+  restype_atom14_mask = []
+
+  for rt in residue_constants.restypes:
+    atom_names = residue_constants.restype_name_to_atom14_names[
+        residue_constants.restype_1to3[rt]]
+
+    restype_atom14_to_atom37.append([
+        (residue_constants.atom_order[name] if name else 0)
+        for name in atom_names
+    ])
+
+    atom_name_to_idx14 = {name: i for i, name in enumerate(atom_names)}
+    restype_atom37_to_atom14.append([
+        (atom_name_to_idx14[name] if name in atom_name_to_idx14 else 0)
+        for name in residue_constants.atom_types
+    ])
+
+    restype_atom14_mask.append([(1. if name else 0.) for name in atom_names])
+
+  # Add dummy mapping for restype 'UNK'.
+  restype_atom14_to_atom37.append([0] * 14)
+  restype_atom37_to_atom14.append([0] * 37)
+  restype_atom14_mask.append([0.] * 14)
+
+  restype_atom14_to_atom37 = np.array(restype_atom14_to_atom37, dtype=np.int32)
+  restype_atom37_to_atom14 = np.array(restype_atom37_to_atom14, dtype=np.int32)
+  restype_atom14_mask = np.array(restype_atom14_mask, dtype=np.float32)
+
+  # Create the mapping for (residx, atom14) --> atom37, i.e. an array
+  # with shape (num_res, 14) containing the atom37 indices for this protein.
+  residx_atom14_to_atom37 = restype_atom14_to_atom37[prot["aatype"]]
+  residx_atom14_mask = restype_atom14_mask[prot["aatype"]]
+
+  # Create a mask for known ground truth positions.
+  residx_atom14_gt_mask = residx_atom14_mask * np.take_along_axis(
+      prot["all_atom_mask"], residx_atom14_to_atom37, axis=1).astype(np.float32)
+
+  # Gather the ground truth positions.
+  residx_atom14_gt_positions = residx_atom14_gt_mask[:, :, None] * (
+      np.take_along_axis(prot["all_atom_positions"],
+                         residx_atom14_to_atom37[..., None],
+                         axis=1))
+
+  prot["atom14_atom_exists"] = residx_atom14_mask
+  prot["atom14_gt_exists"] = residx_atom14_gt_mask
+  prot["atom14_gt_positions"] = residx_atom14_gt_positions
+
+  prot["residx_atom14_to_atom37"] = residx_atom14_to_atom37
+
+  # Create the gather indices for mapping back.
+  residx_atom37_to_atom14 = restype_atom37_to_atom14[prot["aatype"]]
+  prot["residx_atom37_to_atom14"] = residx_atom37_to_atom14
+
+  # Create the corresponding mask.
+  restype_atom37_mask = np.zeros([21, 37], dtype=np.float32)
+  for restype, restype_letter in enumerate(residue_constants.restypes):
+    restype_name = residue_constants.restype_1to3[restype_letter]
+    atom_names = residue_constants.residue_atoms[restype_name]
+    for atom_name in atom_names:
+      atom_type = residue_constants.atom_order[atom_name]
+      restype_atom37_mask[restype, atom_type] = 1
+
+  residx_atom37_mask = restype_atom37_mask[prot["aatype"]]
+  prot["atom37_atom_exists"] = residx_atom37_mask
+
+  # As the atom naming is ambiguous for 7 of the 20 amino acids, provide
+  # alternative ground truth coordinates where the naming is swapped
+  restype_3 = [
+      residue_constants.restype_1to3[res] for res in residue_constants.restypes
+  ]
+  restype_3 += ["UNK"]
+
+  # Matrices for renaming ambiguous atoms.
+  all_matrices = {res: np.eye(14, dtype=np.float32) for res in restype_3}
+  for resname, swap in residue_constants.residue_atom_renaming_swaps.items():
+    correspondences = np.arange(14)
+    for source_atom_swap, target_atom_swap in swap.items():
+      source_index = residue_constants.restype_name_to_atom14_names[
+          resname].index(source_atom_swap)
+      target_index = residue_constants.restype_name_to_atom14_names[
+          resname].index(target_atom_swap)
+      correspondences[source_index] = target_index
+      correspondences[target_index] = source_index
+      renaming_matrix = np.zeros((14, 14), dtype=np.float32)
+      for index, correspondence in enumerate(correspondences):
+        renaming_matrix[index, correspondence] = 1.
+    all_matrices[resname] = renaming_matrix.astype(np.float32)
+  renaming_matrices = np.stack([all_matrices[restype] for restype in restype_3])
+
+  # Pick the transformation matrices for the given residue sequence
+  # shape (num_res, 14, 14).
+  renaming_transform = renaming_matrices[prot["aatype"]]
+
+  # Apply it to the ground truth positions. shape (num_res, 14, 3).
+  alternative_gt_positions = np.einsum("rac,rab->rbc",
+                                       residx_atom14_gt_positions,
+                                       renaming_transform)
+  prot["atom14_alt_gt_positions"] = alternative_gt_positions
+
+  # Create the mask for the alternative ground truth (differs from the
+  # ground truth mask, if only one of the atoms in an ambiguous pair has a
+  # ground truth position).
+  alternative_gt_mask = np.einsum("ra,rab->rb",
+                                  residx_atom14_gt_mask,
+                                  renaming_transform)
+
+  prot["atom14_alt_gt_exists"] = alternative_gt_mask
+
+  # Create an ambiguous atoms mask.  shape: (21, 14).
+  restype_atom14_is_ambiguous = np.zeros((21, 14), dtype=np.float32)
+  for resname, swap in residue_constants.residue_atom_renaming_swaps.items():
+    for atom_name1, atom_name2 in swap.items():
+      restype = residue_constants.restype_order[
+          residue_constants.restype_3to1[resname]]
+      atom_idx1 = residue_constants.restype_name_to_atom14_names[resname].index(
+          atom_name1)
+      atom_idx2 = residue_constants.restype_name_to_atom14_names[resname].index(
+          atom_name2)
+      restype_atom14_is_ambiguous[restype, atom_idx1] = 1
+      restype_atom14_is_ambiguous[restype, atom_idx2] = 1
+
+  # From this create an ambiguous_mask for the given sequence.
+  prot["atom14_atom_is_ambiguous"] = (
+      restype_atom14_is_ambiguous[prot["aatype"]])
+
+  return prot
+
+
+def find_violations(prot_np: protein.Protein):
+  """Analyzes a protein and returns structural violation information.
+
+  Args:
+    prot_np: A protein.
+
+  Returns:
+    violations: A `dict` of structure components with structural violations.
+    violation_metrics: A `dict` of violation metrics.
+  """
+  batch = {
+      "aatype": prot_np.aatype,
+      "all_atom_positions": prot_np.atom_positions.astype(np.float32),
+      "all_atom_mask": prot_np.atom_mask.astype(np.float32),
+      "residue_index": prot_np.residue_index,
+  }
+
+  batch["seq_mask"] = np.ones_like(batch["aatype"], np.float32)
+  batch = make_atom14_positions(batch)
+
+  violations = folding.find_structural_violations(
+      batch=batch,
+      atom14_pred_positions=batch["atom14_gt_positions"],
+      config=ml_collections.ConfigDict(
+          {"violation_tolerance_factor": 12,  # Taken from model config.
+           "clash_overlap_tolerance": 1.5,  # Taken from model config.
+          }))
+  violation_metrics = folding.compute_violation_metrics(
+      batch=batch,
+      atom14_pred_positions=batch["atom14_gt_positions"],
+      violations=violations,
+  )
+
+  return violations, violation_metrics
+
+
+def get_violation_metrics(prot: protein.Protein):
+  """Computes violation and alignment metrics."""
+  structural_violations, struct_metrics = find_violations(prot)
+  violation_idx = np.flatnonzero(
+      structural_violations["total_per_residue_violations_mask"])
+
+  struct_metrics["residue_violations"] = violation_idx
+  struct_metrics["num_residue_violations"] = len(violation_idx)
+  struct_metrics["structural_violations"] = structural_violations
+  return struct_metrics
+
+
+def _run_one_iteration(
+    *,
+    pdb_string: str,
+    max_iterations: int,
+    tolerance: float,
+    stiffness: float,
+    restraint_set: str,
+    max_attempts: int,
+    exclude_residues: Optional[Collection[int]] = None):
+  """Runs the minimization pipeline.
+
+  Args:
+    pdb_string: A pdb string.
+    max_iterations: An `int` specifying the maximum number of L-BFGS iterations.
+    A value of 0 specifies no limit.
+    tolerance: kcal/mol, the energy tolerance of L-BFGS.
+    stiffness: kcal/mol A**2, spring constant of heavy atom restraining
+      potential.
+    restraint_set: The set of atoms to restrain.
+    max_attempts: The maximum number of minimization attempts.
+    exclude_residues: An optional list of zero-indexed residues to exclude from
+        restraints.
+
+  Returns:
+    A `dict` of minimization info.
+  """
+  exclude_residues = exclude_residues or []
+
+  # Assign physical dimensions.
+  tolerance = tolerance * ENERGY
+  stiffness = stiffness * ENERGY / (LENGTH**2)
+
+  start = time.time()
+  minimized = False
+  attempts = 0
+  while not minimized and attempts < max_attempts:
+    attempts += 1
+    try:
+      logging.info("Minimizing protein, attempt %d of %d.",
+                   attempts, max_attempts)
+      ret = _openmm_minimize(
+          pdb_string, max_iterations=max_iterations,
+          tolerance=tolerance, stiffness=stiffness,
+          restraint_set=restraint_set,
+          exclude_residues=exclude_residues)
+      minimized = True
+    except Exception as e:  # pylint: disable=broad-except
+      logging.info(e)
+  if not minimized:
+    raise ValueError(f"Minimization failed after {max_attempts} attempts.")
+  ret["opt_time"] = time.time() - start
+  ret["min_attempts"] = attempts
+  return ret
+
+
+def run_pipeline(
+    prot: protein.Protein,
+    stiffness: float,
+    max_outer_iterations: int = 1,
+    place_hydrogens_every_iteration: bool = True,
+    max_iterations: int = 0,
+    tolerance: float = 2.39,
+    restraint_set: str = "non_hydrogen",
+    max_attempts: int = 100,
+    checks: bool = True,
+    exclude_residues: Optional[Sequence[int]] = None):
+  """Run iterative amber relax.
+
+  Successive relax iterations are performed until all violations have been
+  resolved. Each iteration involves a restrained Amber minimization, with
+  restraint exclusions determined by violation-participating residues.
+
+  Args:
+    prot: A protein to be relaxed.
+    stiffness: kcal/mol A**2, the restraint stiffness.
+    max_outer_iterations: The maximum number of iterative minimization.
+    place_hydrogens_every_iteration: Whether hydrogens are re-initialized
+        prior to every minimization.
+    max_iterations: An `int` specifying the maximum number of L-BFGS steps
+        per relax iteration. A value of 0 specifies no limit.
+    tolerance: kcal/mol, the energy tolerance of L-BFGS.
+        The default value is the OpenMM default.
+    restraint_set: The set of atoms to restrain.
+    max_attempts: The maximum number of minimization attempts per iteration.
+    checks: Whether to perform cleaning checks.
+    exclude_residues: An optional list of zero-indexed residues to exclude from
+        restraints.
+
+  Returns:
+    out: A dictionary of output values.
+  """
+
+  # `protein.to_pdb` will strip any poorly-defined residues so we need to
+  # perform this check before `clean_protein`.
+  _check_residues_are_well_defined(prot)
+  pdb_string = clean_protein(prot, checks=checks)
+
+  exclude_residues = exclude_residues or []
+  exclude_residues = set(exclude_residues)
+  violations = np.inf
+  iteration = 0
+
+  while violations > 0 and iteration < max_outer_iterations:
+    ret = _run_one_iteration(
+        pdb_string=pdb_string,
+        exclude_residues=exclude_residues,
+        max_iterations=max_iterations,
+        tolerance=tolerance,
+        stiffness=stiffness,
+        restraint_set=restraint_set,
+        max_attempts=max_attempts)
+    prot = protein.from_pdb_string(ret["min_pdb"])
+    if place_hydrogens_every_iteration:
+      pdb_string = clean_protein(prot, checks=True)
+    else:
+      pdb_string = ret["min_pdb"]
+    ret.update(get_violation_metrics(prot))
+    ret.update({
+        "num_exclusions": len(exclude_residues),
+        "iteration": iteration,
+    })
+    violations = ret["violations_per_residue"]
+    exclude_residues = exclude_residues.union(ret["residue_violations"])
+
+    logging.info("Iteration completed: Einit %.2f Efinal %.2f Time %.2f s "
+                 "num residue violations %d num residue exclusions %d ",
+                 ret["einit"], ret["efinal"], ret["opt_time"],
+                 ret["num_residue_violations"], ret["num_exclusions"])
+    iteration += 1
+  return ret
+
+
+def get_initial_energies(pdb_strs: Sequence[str],
+                         stiffness: float = 0.0,
+                         restraint_set: str = "non_hydrogen",
+                         exclude_residues: Optional[Sequence[int]] = None):
+  """Returns initial potential energies for a sequence of PDBs.
+
+  Assumes the input PDBs are ready for minimization, and all have the same
+  topology.
+  Allows time to be saved by not pdbfixing / rebuilding the system.
+
+  Args:
+    pdb_strs: List of PDB strings.
+    stiffness: kcal/mol A**2, spring constant of heavy atom restraining
+        potential.
+    restraint_set: Which atom types to restrain.
+    exclude_residues: An optional list of zero-indexed residues to exclude from
+        restraints.
+
+  Returns:
+    A list of initial energies in the same order as pdb_strs.
+  """
+  exclude_residues = exclude_residues or []
+
+  openmm_pdbs = [openmm_app.PDBFile(PdbStructure(io.StringIO(p)))
+                 for p in pdb_strs]
+  force_field = openmm_app.ForceField("amber99sb.xml")
+  system = force_field.createSystem(openmm_pdbs[0].topology,
+                                    constraints=openmm_app.HBonds)
+  stiffness = stiffness * ENERGY / (LENGTH**2)
+  if stiffness > 0 * ENERGY / (LENGTH**2):
+    _add_restraints(system, openmm_pdbs[0], stiffness, restraint_set,
+                    exclude_residues)
+  simulation = openmm_app.Simulation(openmm_pdbs[0].topology,
+                                     system,
+                                     openmm.LangevinIntegrator(0, 0.01, 0.0),
+                                     openmm.Platform.getPlatformByName("CPU"))
+  energies = []
+  for pdb in openmm_pdbs:
+    try:
+      simulation.context.setPositions(pdb.positions)
+      state = simulation.context.getState(getEnergy=True)
+      energies.append(state.getPotentialEnergy().value_in_unit(ENERGY))
+    except Exception as e:  # pylint: disable=broad-except
+      logging.error("Error getting initial energy, returning large value %s", e)
+      energies.append(unit.Quantity(1e20, ENERGY))
+  return energies
diff --git a/alphafold/alphafold/relax/amber_minimize_test.py b/alphafold/alphafold/relax/amber_minimize_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..b67cb911cbb07b505c7313eb4e7c13d518f162d9
--- /dev/null
+++ b/alphafold/alphafold/relax/amber_minimize_test.py
@@ -0,0 +1,130 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for amber_minimize."""
+import os
+
+from absl.testing import absltest
+from alphafold.common import protein
+from alphafold.relax import amber_minimize
+import numpy as np
+# Internal import (7716).
+
+
+def _load_test_protein(data_path):
+  pdb_path = os.path.join(absltest.get_default_test_srcdir(), data_path)
+  with open(pdb_path, 'r') as f:
+    return protein.from_pdb_string(f.read())
+
+
+class AmberMinimizeTest(absltest.TestCase):
+
+  def test_multiple_disulfides_target(self):
+    prot = _load_test_protein(
+        'alphafold/relax/testdata/multiple_disulfides_target.pdb'
+        )
+    ret = amber_minimize.run_pipeline(prot, max_iterations=10, max_attempts=1,
+                                      stiffness=10.)
+    self.assertIn('opt_time', ret)
+    self.assertIn('min_attempts', ret)
+
+  def test_raises_invalid_protein_assertion(self):
+    prot = _load_test_protein(
+        'alphafold/relax/testdata/multiple_disulfides_target.pdb'
+        )
+    prot.atom_mask[4, :] = 0
+    with self.assertRaisesRegex(
+        ValueError,
+        'Amber minimization can only be performed on proteins with well-defined'
+        ' residues. This protein contains at least one residue with no atoms.'):
+      amber_minimize.run_pipeline(prot, max_iterations=10,
+                                  stiffness=1.,
+                                  max_attempts=1)
+
+  def test_iterative_relax(self):
+    prot = _load_test_protein(
+        'alphafold/relax/testdata/with_violations.pdb'
+        )
+    violations = amber_minimize.get_violation_metrics(prot)
+    self.assertGreater(violations['num_residue_violations'], 0)
+    out = amber_minimize.run_pipeline(
+        prot=prot, max_outer_iterations=10, stiffness=10.)
+    self.assertLess(out['efinal'], out['einit'])
+    self.assertEqual(0, out['num_residue_violations'])
+
+  def test_find_violations(self):
+    prot = _load_test_protein(
+        'alphafold/relax/testdata/multiple_disulfides_target.pdb'
+        )
+    viols, _ = amber_minimize.find_violations(prot)
+
+    expected_between_residues_connection_mask = np.zeros((191,), np.float32)
+    for residue in (42, 43, 59, 60, 135, 136):
+      expected_between_residues_connection_mask[residue] = 1.0
+
+    expected_clash_indices = np.array([
+        [8, 4],
+        [8, 5],
+        [13, 3],
+        [14, 1],
+        [14, 4],
+        [26, 4],
+        [26, 5],
+        [31, 8],
+        [31, 10],
+        [39, 0],
+        [39, 1],
+        [39, 2],
+        [39, 3],
+        [39, 4],
+        [42, 5],
+        [42, 6],
+        [42, 7],
+        [42, 8],
+        [47, 7],
+        [47, 8],
+        [47, 9],
+        [47, 10],
+        [64, 4],
+        [85, 5],
+        [102, 4],
+        [102, 5],
+        [109, 13],
+        [111, 5],
+        [118, 6],
+        [118, 7],
+        [118, 8],
+        [124, 4],
+        [124, 5],
+        [131, 5],
+        [139, 7],
+        [147, 4],
+        [152, 7]], dtype=np.int32)
+    expected_between_residues_clash_mask = np.zeros([191, 14])
+    expected_between_residues_clash_mask[expected_clash_indices[:, 0],
+                                         expected_clash_indices[:, 1]] += 1
+    expected_per_atom_violations = np.zeros([191, 14])
+    np.testing.assert_array_equal(
+        viols['between_residues']['connections_per_residue_violation_mask'],
+        expected_between_residues_connection_mask)
+    np.testing.assert_array_equal(
+        viols['between_residues']['clashes_per_atom_clash_mask'],
+        expected_between_residues_clash_mask)
+    np.testing.assert_array_equal(
+        viols['within_residues']['per_atom_violations'],
+        expected_per_atom_violations)
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/relax/cleanup.py b/alphafold/alphafold/relax/cleanup.py
new file mode 100644
index 0000000000000000000000000000000000000000..4bdd449d28c6733eb948f0502db04dbbade53ad2
--- /dev/null
+++ b/alphafold/alphafold/relax/cleanup.py
@@ -0,0 +1,127 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Cleans up a PDB file using pdbfixer in preparation for OpenMM simulations.
+
+fix_pdb uses a third-party tool. We also support fixing some additional edge
+cases like removing chains of length one (see clean_structure).
+"""
+import io
+
+import pdbfixer
+from simtk.openmm import app
+from simtk.openmm.app import element
+
+
+def fix_pdb(pdbfile, alterations_info):
+  """Apply pdbfixer to the contents of a PDB file; return a PDB string result.
+
+  1) Replaces nonstandard residues.
+  2) Removes heterogens (non protein residues) including water.
+  3) Adds missing residues and missing atoms within existing residues.
+  4) Adds hydrogens assuming pH=7.0.
+  5) KeepIds is currently true, so the fixer must keep the existing chain and
+     residue identifiers. This will fail for some files in wider PDB that have
+     invalid IDs.
+
+  Args:
+    pdbfile: Input PDB file handle.
+    alterations_info: A dict that will store details of changes made.
+
+  Returns:
+    A PDB string representing the fixed structure.
+  """
+  fixer = pdbfixer.PDBFixer(pdbfile=pdbfile)
+  fixer.findNonstandardResidues()
+  alterations_info['nonstandard_residues'] = fixer.nonstandardResidues
+  fixer.replaceNonstandardResidues()
+  _remove_heterogens(fixer, alterations_info, keep_water=False)
+  fixer.findMissingResidues()
+  alterations_info['missing_residues'] = fixer.missingResidues
+  fixer.findMissingAtoms()
+  alterations_info['missing_heavy_atoms'] = fixer.missingAtoms
+  alterations_info['missing_terminals'] = fixer.missingTerminals
+  fixer.addMissingAtoms(seed=0)
+  fixer.addMissingHydrogens()
+  out_handle = io.StringIO()
+  app.PDBFile.writeFile(fixer.topology, fixer.positions, out_handle,
+                        keepIds=True)
+  return out_handle.getvalue()
+
+
+def clean_structure(pdb_structure, alterations_info):
+  """Applies additional fixes to an OpenMM structure, to handle edge cases.
+
+  Args:
+    pdb_structure: An OpenMM structure to modify and fix.
+    alterations_info: A dict that will store details of changes made.
+  """
+  _replace_met_se(pdb_structure, alterations_info)
+  _remove_chains_of_length_one(pdb_structure, alterations_info)
+
+
+def _remove_heterogens(fixer, alterations_info, keep_water):
+  """Removes the residues that Pdbfixer considers to be heterogens.
+
+  Args:
+    fixer: A Pdbfixer instance.
+    alterations_info: A dict that will store details of changes made.
+    keep_water: If True, water (HOH) is not considered to be a heterogen.
+  """
+  initial_resnames = set()
+  for chain in fixer.topology.chains():
+    for residue in chain.residues():
+      initial_resnames.add(residue.name)
+  fixer.removeHeterogens(keepWater=keep_water)
+  final_resnames = set()
+  for chain in fixer.topology.chains():
+    for residue in chain.residues():
+      final_resnames.add(residue.name)
+  alterations_info['removed_heterogens'] = (
+      initial_resnames.difference(final_resnames))
+
+
+def _replace_met_se(pdb_structure, alterations_info):
+  """Replace the Se in any MET residues that were not marked as modified."""
+  modified_met_residues = []
+  for res in pdb_structure.iter_residues():
+    name = res.get_name_with_spaces().strip()
+    if name == 'MET':
+      s_atom = res.get_atom('SD')
+      if s_atom.element_symbol == 'Se':
+        s_atom.element_symbol = 'S'
+        s_atom.element = element.get_by_symbol('S')
+        modified_met_residues.append(s_atom.residue_number)
+  alterations_info['Se_in_MET'] = modified_met_residues
+
+
+def _remove_chains_of_length_one(pdb_structure, alterations_info):
+  """Removes chains that correspond to a single amino acid.
+
+  A single amino acid in a chain is both N and C terminus. There is no force
+  template for this case.
+
+  Args:
+    pdb_structure: An OpenMM pdb_structure to modify and fix.
+    alterations_info: A dict that will store details of changes made.
+  """
+  removed_chains = {}
+  for model in pdb_structure.iter_models():
+    valid_chains = [c for c in model.iter_chains() if len(c) > 1]
+    invalid_chain_ids = [c.chain_id for c in model.iter_chains() if len(c) <= 1]
+    model.chains = valid_chains
+    for chain_id in invalid_chain_ids:
+      model.chains_by_id.pop(chain_id)
+    removed_chains[model.number] = invalid_chain_ids
+  alterations_info['removed_chains'] = removed_chains
diff --git a/alphafold/alphafold/relax/cleanup_test.py b/alphafold/alphafold/relax/cleanup_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..7061b292953fe9512bd7243031ac1cb4611e4556
--- /dev/null
+++ b/alphafold/alphafold/relax/cleanup_test.py
@@ -0,0 +1,137 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for relax.cleanup."""
+import io
+
+from absl.testing import absltest
+from alphafold.relax import cleanup
+from simtk.openmm.app.internal import pdbstructure
+
+
+def _pdb_to_structure(pdb_str):
+  handle = io.StringIO(pdb_str)
+  return pdbstructure.PdbStructure(handle)
+
+
+def _lines_to_structure(pdb_lines):
+  return _pdb_to_structure('\n'.join(pdb_lines))
+
+
+class CleanupTest(absltest.TestCase):
+
+  def test_missing_residues(self):
+    pdb_lines = ['SEQRES   1 C    3  CYS GLY LEU',
+                 'ATOM      1  N   CYS C   1     -12.262  20.115  60.959  1.00 '
+                 '19.08           N',
+                 'ATOM      2  CA  CYS C   1     -11.065  20.934  60.773  1.00 '
+                 '17.23           C',
+                 'ATOM      3  C   CYS C   1     -10.002  20.742  61.844  1.00 '
+                 '15.38           C',
+                 'ATOM      4  O   CYS C   1     -10.284  20.225  62.929  1.00 '
+                 '16.04           O',
+                 'ATOM      5  N   LEU C   3      -7.688  18.700  62.045  1.00 '
+                 '14.75           N',
+                 'ATOM      6  CA  LEU C   3      -7.256  17.320  62.234  1.00 '
+                 '16.81           C',
+                 'ATOM      7  C   LEU C   3      -6.380  16.864  61.070  1.00 '
+                 '16.95           C',
+                 'ATOM      8  O   LEU C   3      -6.551  17.332  59.947  1.00 '
+                 '16.97           O']
+    input_handle = io.StringIO('\n'.join(pdb_lines))
+    alterations = {}
+    result = cleanup.fix_pdb(input_handle, alterations)
+    structure = _pdb_to_structure(result)
+    residue_names = [r.get_name() for r in structure.iter_residues()]
+    self.assertCountEqual(residue_names, ['CYS', 'GLY', 'LEU'])
+    self.assertCountEqual(alterations['missing_residues'].values(), [['GLY']])
+
+  def test_missing_atoms(self):
+    pdb_lines = ['SEQRES   1 A    1  PRO',
+                 'ATOM      1  CA  PRO A   1       1.000   1.000   1.000  1.00 '
+                 ' 0.00           C']
+    input_handle = io.StringIO('\n'.join(pdb_lines))
+    alterations = {}
+    result = cleanup.fix_pdb(input_handle, alterations)
+    structure = _pdb_to_structure(result)
+    atom_names = [a.get_name() for a in structure.iter_atoms()]
+    self.assertCountEqual(atom_names, ['N', 'CD', 'HD2', 'HD3', 'CG', 'HG2',
+                                       'HG3', 'CB', 'HB2', 'HB3', 'CA', 'HA',
+                                       'C', 'O', 'H2', 'H3', 'OXT'])
+    missing_atoms_by_residue = list(alterations['missing_heavy_atoms'].values())
+    self.assertLen(missing_atoms_by_residue, 1)
+    atoms_added = [a.name for a in missing_atoms_by_residue[0]]
+    self.assertCountEqual(atoms_added, ['N', 'CD', 'CG', 'CB', 'C', 'O'])
+    missing_terminals_by_residue = alterations['missing_terminals']
+    self.assertLen(missing_terminals_by_residue, 1)
+    has_missing_terminal = [r.name for r in missing_terminals_by_residue.keys()]
+    self.assertCountEqual(has_missing_terminal, ['PRO'])
+    self.assertCountEqual([t for t in missing_terminals_by_residue.values()],
+                          [['OXT']])
+
+  def test_remove_heterogens(self):
+    pdb_lines = ['SEQRES   1 A    1  GLY',
+                 'ATOM      1  CA  GLY A   1       0.000   0.000   0.000  1.00 '
+                 ' 0.00           C',
+                 'ATOM      2   O  HOH A   2       0.000   0.000   0.000  1.00 '
+                 ' 0.00           O']
+    input_handle = io.StringIO('\n'.join(pdb_lines))
+    alterations = {}
+    result = cleanup.fix_pdb(input_handle, alterations)
+    structure = _pdb_to_structure(result)
+    self.assertCountEqual([res.get_name() for res in structure.iter_residues()],
+                          ['GLY'])
+    self.assertEqual(alterations['removed_heterogens'], set(['HOH']))
+
+  def test_fix_nonstandard_residues(self):
+    pdb_lines = ['SEQRES   1 A    1  DAL',
+                 'ATOM      1  CA  DAL A   1       0.000   0.000   0.000  1.00 '
+                 ' 0.00           C']
+    input_handle = io.StringIO('\n'.join(pdb_lines))
+    alterations = {}
+    result = cleanup.fix_pdb(input_handle, alterations)
+    structure = _pdb_to_structure(result)
+    residue_names = [res.get_name() for res in structure.iter_residues()]
+    self.assertCountEqual(residue_names, ['ALA'])
+    self.assertLen(alterations['nonstandard_residues'], 1)
+    original_res, new_name = alterations['nonstandard_residues'][0]
+    self.assertEqual(original_res.id, '1')
+    self.assertEqual(new_name, 'ALA')
+
+  def test_replace_met_se(self):
+    pdb_lines = ['SEQRES   1 A    1  MET',
+                 'ATOM      1  SD  MET A   1       0.000   0.000   0.000  1.00 '
+                 ' 0.00          Se']
+    structure = _lines_to_structure(pdb_lines)
+    alterations = {}
+    cleanup._replace_met_se(structure, alterations)
+    sd = [a for a in structure.iter_atoms() if a.get_name() == 'SD']
+    self.assertLen(sd, 1)
+    self.assertEqual(sd[0].element_symbol, 'S')
+    self.assertCountEqual(alterations['Se_in_MET'], [sd[0].residue_number])
+
+  def test_remove_chains_of_length_one(self):
+    pdb_lines = ['SEQRES   1 A    1  GLY',
+                 'ATOM      1  CA  GLY A   1       0.000   0.000   0.000  1.00 '
+                 ' 0.00           C']
+    structure = _lines_to_structure(pdb_lines)
+    alterations = {}
+    cleanup._remove_chains_of_length_one(structure, alterations)
+    chains = list(structure.iter_chains())
+    self.assertEmpty(chains)
+    self.assertCountEqual(alterations['removed_chains'].values(), [['A']])
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/relax/relax.py b/alphafold/alphafold/relax/relax.py
new file mode 100644
index 0000000000000000000000000000000000000000..f7af5856dc03b714d9a3566d0d393729c57c0522
--- /dev/null
+++ b/alphafold/alphafold/relax/relax.py
@@ -0,0 +1,80 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Amber relaxation."""
+from typing import Any, Dict, Sequence, Tuple
+from alphafold.common import protein
+from alphafold.relax import amber_minimize
+from alphafold.relax import utils
+import numpy as np
+
+
+class AmberRelaxation(object):
+  """Amber relaxation."""
+
+  def __init__(self,
+               *,
+               max_iterations: int,
+               tolerance: float,
+               stiffness: float,
+               exclude_residues: Sequence[int],
+               max_outer_iterations: int):
+    """Initialize Amber Relaxer.
+
+    Args:
+      max_iterations: Maximum number of L-BFGS iterations. 0 means no max.
+      tolerance: kcal/mol, the energy tolerance of L-BFGS.
+      stiffness: kcal/mol A**2, spring constant of heavy atom restraining
+        potential.
+      exclude_residues: Residues to exclude from per-atom restraining.
+        Zero-indexed.
+      max_outer_iterations: Maximum number of violation-informed relax
+       iterations. A value of 1 will run the non-iterative procedure used in
+       CASP14. Use 20 so that >95% of the bad cases are relaxed. Relax finishes
+       as soon as there are no violations, hence in most cases this causes no
+       slowdown. In the worst case we do 20 outer iterations.
+    """
+
+    self._max_iterations = max_iterations
+    self._tolerance = tolerance
+    self._stiffness = stiffness
+    self._exclude_residues = exclude_residues
+    self._max_outer_iterations = max_outer_iterations
+
+  def process(self, *,
+              prot: protein.Protein) -> Tuple[str, Dict[str, Any], np.ndarray]:
+    """Runs Amber relax on a prediction, adds hydrogens, returns PDB string."""
+    out = amber_minimize.run_pipeline(
+        prot=prot, max_iterations=self._max_iterations,
+        tolerance=self._tolerance, stiffness=self._stiffness,
+        exclude_residues=self._exclude_residues,
+        max_outer_iterations=self._max_outer_iterations)
+    min_pos = out['pos']
+    start_pos = out['posinit']
+    rmsd = np.sqrt(np.sum((start_pos - min_pos)**2) / start_pos.shape[0])
+    debug_data = {
+        'initial_energy': out['einit'],
+        'final_energy': out['efinal'],
+        'attempts': out['min_attempts'],
+        'rmsd': rmsd
+    }
+    pdb_str = amber_minimize.clean_protein(prot)
+    min_pdb = utils.overwrite_pdb_coordinates(pdb_str, min_pos)
+    min_pdb = utils.overwrite_b_factors(min_pdb, prot.b_factors)
+    utils.assert_equal_nonterminal_atom_types(
+        protein.from_pdb_string(min_pdb).atom_mask,
+        prot.atom_mask)
+    violations = out['structural_violations'][
+        'total_per_residue_violations_mask']
+    return min_pdb, debug_data, violations
diff --git a/alphafold/alphafold/relax/relax_test.py b/alphafold/alphafold/relax/relax_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..eba67ef2359e0a35696fcf4fd47404ec47cd3736
--- /dev/null
+++ b/alphafold/alphafold/relax/relax_test.py
@@ -0,0 +1,88 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for relax."""
+import os
+
+from absl.testing import absltest
+from alphafold.common import protein
+from alphafold.relax import relax
+import numpy as np
+# Internal import (7716).
+
+
+class RunAmberRelaxTest(absltest.TestCase):
+
+  def setUp(self):
+    super().setUp()
+    self.test_dir = os.path.join(
+        absltest.get_default_test_srcdir(),
+        'alphafold/relax/testdata/')
+    self.test_config = {
+        'max_iterations': 1,
+        'tolerance': 2.39,
+        'stiffness': 10.0,
+        'exclude_residues': [],
+        'max_outer_iterations': 1}
+
+  def test_process(self):
+    amber_relax = relax.AmberRelaxation(**self.test_config)
+
+    with open(os.path.join(self.test_dir, 'model_output.pdb')) as f:
+      test_prot = protein.from_pdb_string(f.read())
+    pdb_min, debug_info, num_violations = amber_relax.process(prot=test_prot)
+
+    self.assertCountEqual(debug_info.keys(),
+                          set({'initial_energy', 'final_energy',
+                               'attempts', 'rmsd'}))
+    self.assertLess(debug_info['final_energy'], debug_info['initial_energy'])
+    self.assertGreater(debug_info['rmsd'], 0)
+
+    prot_min = protein.from_pdb_string(pdb_min)
+    # Most protein properties should be unchanged.
+    np.testing.assert_almost_equal(test_prot.aatype, prot_min.aatype)
+    np.testing.assert_almost_equal(test_prot.residue_index,
+                                   prot_min.residue_index)
+    # Atom mask and bfactors identical except for terminal OXT of last residue.
+    np.testing.assert_almost_equal(test_prot.atom_mask[:-1, :],
+                                   prot_min.atom_mask[:-1, :])
+    np.testing.assert_almost_equal(test_prot.b_factors[:-1, :],
+                                   prot_min.b_factors[:-1, :])
+    np.testing.assert_almost_equal(test_prot.atom_mask[:, :-1],
+                                   prot_min.atom_mask[:, :-1])
+    np.testing.assert_almost_equal(test_prot.b_factors[:, :-1],
+                                   prot_min.b_factors[:, :-1])
+    # There are no residues with violations.
+    np.testing.assert_equal(num_violations, np.zeros_like(num_violations))
+
+  def test_unresolved_violations(self):
+    amber_relax = relax.AmberRelaxation(**self.test_config)
+    with open(os.path.join(self.test_dir,
+                                 'with_violations_casp14.pdb')) as f:
+      test_prot = protein.from_pdb_string(f.read())
+    _, _, num_violations = amber_relax.process(prot=test_prot)
+    exp_num_violations = np.array(
+        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+         1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
+         0, 0, 0, 0])
+    # Check no violations were added. Can't check exactly due to stochasticity.
+    self.assertTrue(np.all(num_violations <= exp_num_violations))
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/alphafold/relax/testdata/model_output.pdb b/alphafold/alphafold/relax/testdata/model_output.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..f6e00beec4a5c55441d28e7bf3af48dcc0db87f6
--- /dev/null
+++ b/alphafold/alphafold/relax/testdata/model_output.pdb
@@ -0,0 +1,98 @@
+ATOM      1  C   MET A   1       1.921 -46.152   7.786  1.00  4.39           C  
+ATOM      2  CA  MET A   1       1.631 -46.829   9.131  1.00  4.39           C  
+ATOM      3  CB  MET A   1       2.759 -47.768   9.578  1.00  4.39           C  
+ATOM      4  CE  MET A   1       3.466 -49.770  13.198  1.00  4.39           C  
+ATOM      5  CG  MET A   1       2.581 -48.221  11.034  1.00  4.39           C  
+ATOM      6  H   MET A   1       0.234 -48.249   8.549  1.00  4.39           H  
+ATOM      7  H2  MET A   1      -0.424 -46.789   8.952  1.00  4.39           H  
+ATOM      8  H3  MET A   1       0.111 -47.796  10.118  1.00  4.39           H  
+ATOM      9  HA  MET A   1       1.628 -46.009   9.849  1.00  4.39           H  
+ATOM     10  HB2 MET A   1       3.701 -47.225   9.500  1.00  4.39           H  
+ATOM     11  HB3 MET A   1       2.807 -48.640   8.926  1.00  4.39           H  
+ATOM     12  HE1 MET A   1       2.747 -50.537  12.910  1.00  4.39           H  
+ATOM     13  HE2 MET A   1       4.296 -50.241  13.725  1.00  4.39           H  
+ATOM     14  HE3 MET A   1       2.988 -49.052  13.864  1.00  4.39           H  
+ATOM     15  HG2 MET A   1       1.791 -48.971  11.083  1.00  4.39           H  
+ATOM     16  HG3 MET A   1       2.295 -47.368  11.650  1.00  4.39           H  
+ATOM     17  N   MET A   1       0.291 -47.464   9.182  1.00  4.39           N  
+ATOM     18  O   MET A   1       2.091 -44.945   7.799  1.00  4.39           O  
+ATOM     19  SD  MET A   1       4.096 -48.921  11.725  1.00  4.39           S  
+ATOM     20  C   LYS A   2       1.366 -45.033   4.898  1.00  2.92           C  
+ATOM     21  CA  LYS A   2       2.235 -46.242   5.308  1.00  2.92           C  
+ATOM     22  CB  LYS A   2       2.206 -47.314   4.196  1.00  2.92           C  
+ATOM     23  CD  LYS A   2       3.331 -49.342   3.134  1.00  2.92           C  
+ATOM     24  CE  LYS A   2       4.434 -50.403   3.293  1.00  2.92           C  
+ATOM     25  CG  LYS A   2       3.294 -48.395   4.349  1.00  2.92           C  
+ATOM     26  H   LYS A   2       1.832 -47.853   6.656  1.00  2.92           H  
+ATOM     27  HA  LYS A   2       3.248 -45.841   5.355  1.00  2.92           H  
+ATOM     28  HB2 LYS A   2       1.223 -47.785   4.167  1.00  2.92           H  
+ATOM     29  HB3 LYS A   2       2.363 -46.812   3.241  1.00  2.92           H  
+ATOM     30  HD2 LYS A   2       3.524 -48.754   2.237  1.00  2.92           H  
+ATOM     31  HD3 LYS A   2       2.364 -49.833   3.031  1.00  2.92           H  
+ATOM     32  HE2 LYS A   2       5.383 -49.891   3.455  1.00  2.92           H  
+ATOM     33  HE3 LYS A   2       4.225 -51.000   4.180  1.00  2.92           H  
+ATOM     34  HG2 LYS A   2       3.102 -48.977   5.250  1.00  2.92           H  
+ATOM     35  HG3 LYS A   2       4.264 -47.909   4.446  1.00  2.92           H  
+ATOM     36  HZ1 LYS A   2       4.763 -50.747   1.274  1.00  2.92           H  
+ATOM     37  HZ2 LYS A   2       3.681 -51.785   1.931  1.00  2.92           H  
+ATOM     38  HZ3 LYS A   2       5.280 -51.965   2.224  1.00  2.92           H  
+ATOM     39  N   LYS A   2       1.907 -46.846   6.629  1.00  2.92           N  
+ATOM     40  NZ  LYS A   2       4.542 -51.286   2.100  1.00  2.92           N  
+ATOM     41  O   LYS A   2       1.882 -44.093   4.312  1.00  2.92           O  
+ATOM     42  C   PHE A   3      -0.511 -42.597   5.624  1.00  4.39           C  
+ATOM     43  CA  PHE A   3      -0.853 -43.933   4.929  1.00  4.39           C  
+ATOM     44  CB  PHE A   3      -2.271 -44.408   5.285  1.00  4.39           C  
+ATOM     45  CD1 PHE A   3      -3.760 -43.542   3.432  1.00  4.39           C  
+ATOM     46  CD2 PHE A   3      -4.050 -42.638   5.675  1.00  4.39           C  
+ATOM     47  CE1 PHE A   3      -4.797 -42.715   2.965  1.00  4.39           C  
+ATOM     48  CE2 PHE A   3      -5.091 -41.818   5.207  1.00  4.39           C  
+ATOM     49  CG  PHE A   3      -3.382 -43.505   4.788  1.00  4.39           C  
+ATOM     50  CZ  PHE A   3      -5.463 -41.853   3.853  1.00  4.39           C  
+ATOM     51  H   PHE A   3      -0.311 -45.868   5.655  1.00  4.39           H  
+ATOM     52  HA  PHE A   3      -0.817 -43.746   3.856  1.00  4.39           H  
+ATOM     53  HB2 PHE A   3      -2.353 -44.512   6.367  1.00  4.39           H  
+ATOM     54  HB3 PHE A   3      -2.432 -45.393   4.848  1.00  4.39           H  
+ATOM     55  HD1 PHE A   3      -3.255 -44.198   2.739  1.00  4.39           H  
+ATOM     56  HD2 PHE A   3      -3.768 -42.590   6.716  1.00  4.39           H  
+ATOM     57  HE1 PHE A   3      -5.083 -42.735   1.923  1.00  4.39           H  
+ATOM     58  HE2 PHE A   3      -5.604 -41.151   5.885  1.00  4.39           H  
+ATOM     59  HZ  PHE A   3      -6.257 -41.215   3.493  1.00  4.39           H  
+ATOM     60  N   PHE A   3       0.079 -45.027   5.253  1.00  4.39           N  
+ATOM     61  O   PHE A   3      -0.633 -41.541   5.014  1.00  4.39           O  
+ATOM     62  C   LEU A   4       1.598 -40.732   7.042  1.00  4.39           C  
+ATOM     63  CA  LEU A   4       0.367 -41.437   7.633  1.00  4.39           C  
+ATOM     64  CB  LEU A   4       0.628 -41.823   9.104  1.00  4.39           C  
+ATOM     65  CD1 LEU A   4      -0.319 -42.778  11.228  1.00  4.39           C  
+ATOM     66  CD2 LEU A   4      -1.300 -40.694  10.309  1.00  4.39           C  
+ATOM     67  CG  LEU A   4      -0.650 -42.027   9.937  1.00  4.39           C  
+ATOM     68  H   LEU A   4       0.163 -43.538   7.292  1.00  4.39           H  
+ATOM     69  HA  LEU A   4      -0.445 -40.712   7.588  1.00  4.39           H  
+ATOM     70  HB2 LEU A   4       1.213 -41.034   9.576  1.00  4.39           H  
+ATOM     71  HB3 LEU A   4       1.235 -42.728   9.127  1.00  4.39           H  
+ATOM     72 HD11 LEU A   4       0.380 -42.191  11.824  1.00  4.39           H  
+ATOM     73 HD12 LEU A   4       0.127 -43.747  11.002  1.00  4.39           H  
+ATOM     74 HD13 LEU A   4      -1.230 -42.927  11.808  1.00  4.39           H  
+ATOM     75 HD21 LEU A   4      -0.606 -40.080  10.883  1.00  4.39           H  
+ATOM     76 HD22 LEU A   4      -2.193 -40.869  10.909  1.00  4.39           H  
+ATOM     77 HD23 LEU A   4      -1.593 -40.147   9.413  1.00  4.39           H  
+ATOM     78  HG  LEU A   4      -1.359 -42.630   9.370  1.00  4.39           H  
+ATOM     79  N   LEU A   4      -0.012 -42.638   6.869  1.00  4.39           N  
+ATOM     80  O   LEU A   4       1.655 -39.508   7.028  1.00  4.39           O  
+ATOM     81  C   VAL A   5       3.372 -40.190   4.573  1.00  4.39           C  
+ATOM     82  CA  VAL A   5       3.752 -40.956   5.845  1.00  4.39           C  
+ATOM     83  CB  VAL A   5       4.757 -42.083   5.528  1.00  4.39           C  
+ATOM     84  CG1 VAL A   5       6.019 -41.568   4.827  1.00  4.39           C  
+ATOM     85  CG2 VAL A   5       5.199 -42.807   6.810  1.00  4.39           C  
+ATOM     86  H   VAL A   5       2.440 -42.503   6.548  1.00  4.39           H  
+ATOM     87  HA  VAL A   5       4.234 -40.242   6.512  1.00  4.39           H  
+ATOM     88  HB  VAL A   5       4.279 -42.813   4.875  1.00  4.39           H  
+ATOM     89 HG11 VAL A   5       6.494 -40.795   5.431  1.00  4.39           H  
+ATOM     90 HG12 VAL A   5       5.770 -41.145   3.853  1.00  4.39           H  
+ATOM     91 HG13 VAL A   5       6.725 -42.383   4.670  1.00  4.39           H  
+ATOM     92 HG21 VAL A   5       4.347 -43.283   7.297  1.00  4.39           H  
+ATOM     93 HG22 VAL A   5       5.933 -43.575   6.568  1.00  4.39           H  
+ATOM     94 HG23 VAL A   5       5.651 -42.093   7.498  1.00  4.39           H  
+ATOM     95  N   VAL A   5       2.554 -41.501   6.509  1.00  4.39           N  
+ATOM     96  O   VAL A   5       3.937 -39.138   4.297  1.00  4.39           O  
+TER      96      VAL A   5                                                      
+END
diff --git a/alphafold/alphafold/relax/testdata/multiple_disulfides_target.pdb b/alphafold/alphafold/relax/testdata/multiple_disulfides_target.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..9e01f8d4b17f4dc704802b7afae28850ee7e39e4
--- /dev/null
+++ b/alphafold/alphafold/relax/testdata/multiple_disulfides_target.pdb
@@ -0,0 +1,1478 @@
+MODEL        0
+ATOM      1  N   MET A   1      19.164 -28.457  26.130  1.00  0.00          N   
+ATOM      2  CA  MET A   1      19.746 -27.299  25.456  1.00  0.00          C   
+ATOM      3  C   MET A   1      19.080 -26.008  25.921  1.00  0.00          C   
+ATOM      4  CB  MET A   1      19.615 -27.438  23.938  1.00  0.00          C   
+ATOM      5  O   MET A   1      17.853 -25.899  25.913  1.00  0.00          O   
+ATOM      6  CG  MET A   1      19.873 -28.846  23.427  1.00  0.00          C   
+ATOM      7  SD  MET A   1      21.636 -29.126  23.002  1.00  0.00          S   
+ATOM      8  CE  MET A   1      22.302 -27.462  23.284  1.00  0.00          C   
+ATOM      9  N   ALA A   2      19.679 -25.354  27.019  1.00  0.00          N   
+ATOM     10  CA  ALA A   2      19.241 -24.061  27.539  1.00  0.00          C   
+ATOM     11  C   ALA A   2      18.629 -23.204  26.434  1.00  0.00          C   
+ATOM     12  CB  ALA A   2      20.410 -23.326  28.192  1.00  0.00          C   
+ATOM     13  O   ALA A   2      19.158 -23.145  25.322  1.00  0.00          O   
+ATOM     14  N   HIS A   3      17.369 -23.382  26.161  1.00  0.00          N   
+ATOM     15  CA  HIS A   3      16.748 -22.427  25.250  1.00  0.00          C   
+ATOM     16  C   HIS A   3      17.419 -21.061  25.342  1.00  0.00          C   
+ATOM     17  CB  HIS A   3      15.252 -22.299  25.547  1.00  0.00          C   
+ATOM     18  O   HIS A   3      17.896 -20.669  26.409  1.00  0.00          O   
+ATOM     19  CG  HIS A   3      14.464 -23.520  25.196  1.00  0.00          C   
+ATOM     20  CD2 HIS A   3      13.848 -24.436  25.979  1.00  0.00          C   
+ATOM     21  ND1 HIS A   3      14.242 -23.914  23.894  1.00  0.00          N   
+ATOM     22  CE1 HIS A   3      13.520 -25.022  23.892  1.00  0.00          C   
+ATOM     23  NE2 HIS A   3      13.268 -25.360  25.145  1.00  0.00          N   
+ATOM     24  N   GLU A   4      18.306 -20.798  24.429  1.00  0.00          N   
+ATOM     25  CA  GLU A   4      18.907 -19.505  24.115  1.00  0.00          C   
+ATOM     26  C   GLU A   4      18.392 -18.415  25.050  1.00  0.00          C   
+ATOM     27  CB  GLU A   4      18.631 -19.123  22.659  1.00  0.00          C   
+ATOM     28  O   GLU A   4      17.240 -18.458  25.486  1.00  0.00          O   
+ATOM     29  CG  GLU A   4      19.253 -20.072  21.645  1.00  0.00          C   
+ATOM     30  CD  GLU A   4      20.767 -19.956  21.564  1.00  0.00          C   
+ATOM     31  OE1 GLU A   4      21.330 -18.981  22.111  1.00  0.00          O   
+ATOM     32  OE2 GLU A   4      21.394 -20.846  20.948  1.00  0.00          O   
+ATOM     33  N   GLU A   5      19.093 -18.090  26.026  1.00  0.00          N   
+ATOM     34  CA  GLU A   5      19.080 -16.885  26.849  1.00  0.00          C   
+ATOM     35  C   GLU A   5      17.938 -15.956  26.449  1.00  0.00          C   
+ATOM     36  CB  GLU A   5      20.418 -16.148  26.746  1.00  0.00          C   
+ATOM     37  O   GLU A   5      17.774 -15.636  25.269  1.00  0.00          O   
+ATOM     38  CG  GLU A   5      21.604 -16.952  27.257  1.00  0.00          C   
+ATOM     39  CD  GLU A   5      21.641 -17.070  28.772  1.00  0.00          C   
+ATOM     40  OE1 GLU A   5      20.899 -16.330  29.457  1.00  0.00          O   
+ATOM     41  OE2 GLU A   5      22.419 -17.909  29.279  1.00  0.00          O   
+ATOM     42  N   ASP A   6      16.721 -16.161  26.857  1.00  0.00          N   
+ATOM     43  CA  ASP A   6      15.629 -15.196  26.948  1.00  0.00          C   
+ATOM     44  C   ASP A   6      16.107 -13.791  26.591  1.00  0.00          C   
+ATOM     45  CB  ASP A   6      15.022 -15.204  28.353  1.00  0.00          C   
+ATOM     46  O   ASP A   6      17.144 -13.339  27.079  1.00  0.00          O   
+ATOM     47  CG  ASP A   6      14.317 -16.507  28.687  1.00  0.00          C   
+ATOM     48  OD1 ASP A   6      14.123 -16.805  29.885  1.00  0.00          O   
+ATOM     49  OD2 ASP A   6      13.956 -17.243  27.744  1.00  0.00          O   
+ATOM     50  N   GLY A   7      16.251 -13.433  25.339  1.00  0.00          N   
+ATOM     51  CA  GLY A   7      16.311 -11.996  25.123  1.00  0.00          C   
+ATOM     52  C   GLY A   7      15.833 -11.192  26.317  1.00  0.00          C   
+ATOM     53  O   GLY A   7      15.023 -11.674  27.112  1.00  0.00          O   
+ATOM     54  N   VAL A   8      16.762 -10.664  27.143  1.00  0.00          N   
+ATOM     55  CA  VAL A   8      16.521  -9.756  28.260  1.00  0.00          C   
+ATOM     56  C   VAL A   8      15.307  -8.880  27.960  1.00  0.00          C   
+ATOM     57  CB  VAL A   8      17.755  -8.875  28.552  1.00  0.00          C   
+ATOM     58  O   VAL A   8      15.173  -8.351  26.854  1.00  0.00          O   
+ATOM     59  CG1 VAL A   8      17.461  -7.891  29.683  1.00  0.00          C   
+ATOM     60  CG2 VAL A   8      18.962  -9.745  28.898  1.00  0.00          C   
+ATOM     61  N   CYS A   9      14.157  -9.255  28.398  1.00  0.00          N   
+ATOM     62  CA  CYS A   9      13.010  -8.353  28.403  1.00  0.00          C   
+ATOM     63  C   CYS A   9      13.310  -7.095  29.209  1.00  0.00          C   
+ATOM     64  CB  CYS A   9      11.779  -9.055  28.975  1.00  0.00          C   
+ATOM     65  O   CYS A   9      14.058  -7.142  30.187  1.00  0.00          O   
+ATOM     66  SG  CYS A   9      11.197 -10.439  27.970  1.00  0.00          S   
+ATOM     67  N   ASN A  10      13.304  -5.993  28.589  1.00  0.00          N   
+ATOM     68  CA  ASN A  10      13.371  -4.703  29.267  1.00  0.00          C   
+ATOM     69  C   ASN A  10      12.018  -3.997  29.264  1.00  0.00          C   
+ATOM     70  CB  ASN A  10      14.436  -3.812  28.624  1.00  0.00          C   
+ATOM     71  O   ASN A  10      11.047  -4.510  28.706  1.00  0.00          O   
+ATOM     72  CG  ASN A  10      14.149  -3.521  27.164  1.00  0.00          C   
+ATOM     73  ND2 ASN A  10      15.189  -3.547  26.338  1.00  0.00          N   
+ATOM     74  OD1 ASN A  10      13.003  -3.275  26.781  1.00  0.00          O   
+ATOM     75  N   SER A  11      11.830  -2.986  30.142  1.00  0.00          N   
+ATOM     76  CA  SER A  11      10.597  -2.233  30.343  1.00  0.00          C   
+ATOM     77  C   SER A  11      10.027  -1.741  29.017  1.00  0.00          C   
+ATOM     78  CB  SER A  11      10.840  -1.044  31.274  1.00  0.00          C   
+ATOM     79  O   SER A  11       8.847  -1.392  28.933  1.00  0.00          O   
+ATOM     80  OG  SER A  11      11.841  -0.190  30.748  1.00  0.00          O   
+ATOM     81  N   ASN A  12      10.789  -1.874  27.933  1.00  0.00          N   
+ATOM     82  CA  ASN A  12      10.334  -1.422  26.622  1.00  0.00          C   
+ATOM     83  C   ASN A  12       9.775  -2.576  25.795  1.00  0.00          C   
+ATOM     84  CB  ASN A  12      11.472  -0.730  25.868  1.00  0.00          C   
+ATOM     85  O   ASN A  12       9.262  -2.365  24.694  1.00  0.00          O   
+ATOM     86  CG  ASN A  12      11.875   0.587  26.501  1.00  0.00          C   
+ATOM     87  ND2 ASN A  12      13.170   0.882  26.482  1.00  0.00          N   
+ATOM     88  OD1 ASN A  12      11.031   1.333  27.004  1.00  0.00          O   
+ATOM     89  N   ALA A  13      10.045  -3.775  26.303  1.00  0.00          N   
+ATOM     90  CA  ALA A  13       9.523  -4.930  25.578  1.00  0.00          C   
+ATOM     91  C   ALA A  13       8.001  -4.994  25.671  1.00  0.00          C   
+ATOM     92  CB  ALA A  13      10.140  -6.219  26.115  1.00  0.00          C   
+ATOM     93  O   ALA A  13       7.423  -4.684  26.715  1.00  0.00          O   
+ATOM     94  N   PRO A  14       7.310  -5.193  24.591  1.00  0.00          N   
+ATOM     95  CA  PRO A  14       5.846  -5.238  24.577  1.00  0.00          C   
+ATOM     96  C   PRO A  14       5.280  -6.316  25.499  1.00  0.00          C   
+ATOM     97  CB  PRO A  14       5.517  -5.544  23.113  1.00  0.00          C   
+ATOM     98  O   PRO A  14       4.127  -6.222  25.929  1.00  0.00          O   
+ATOM     99  CG  PRO A  14       6.757  -6.177  22.568  1.00  0.00          C   
+ATOM    100  CD  PRO A  14       7.941  -5.617  23.303  1.00  0.00          C   
+ATOM    101  N   CYS A  15       6.076  -7.229  25.793  1.00  0.00          N   
+ATOM    102  CA  CYS A  15       5.597  -8.339  26.610  1.00  0.00          C   
+ATOM    103  C   CYS A  15       6.142  -8.245  28.030  1.00  0.00          C   
+ATOM    104  CB  CYS A  15       5.999  -9.676  25.987  1.00  0.00          C   
+ATOM    105  O   CYS A  15       6.205  -9.249  28.743  1.00  0.00          O   
+ATOM    106  SG  CYS A  15       7.766  -9.813  25.636  1.00  0.00          S   
+ATOM    107  N   TYR A  16       6.510  -6.994  28.366  1.00  0.00          N   
+ATOM    108  CA  TYR A  16       7.076  -6.735  29.685  1.00  0.00          C   
+ATOM    109  C   TYR A  16       5.978  -6.589  30.731  1.00  0.00          C   
+ATOM    110  CB  TYR A  16       7.944  -5.473  29.659  1.00  0.00          C   
+ATOM    111  O   TYR A  16       5.053  -5.791  30.563  1.00  0.00          O   
+ATOM    112  CG  TYR A  16       8.545  -5.122  30.998  1.00  0.00          C   
+ATOM    113  CD1 TYR A  16       8.126  -3.993  31.698  1.00  0.00          C   
+ATOM    114  CD2 TYR A  16       9.534  -5.918  31.566  1.00  0.00          C   
+ATOM    115  CE1 TYR A  16       8.678  -3.665  32.932  1.00  0.00          C   
+ATOM    116  CE2 TYR A  16      10.093  -5.600  32.799  1.00  0.00          C   
+ATOM    117  OH  TYR A  16      10.210  -4.153  34.695  1.00  0.00          O   
+ATOM    118  CZ  TYR A  16       9.660  -4.473  33.474  1.00  0.00          C   
+ATOM    119  N   HIS A  17       5.834  -7.548  31.703  1.00  0.00          N   
+ATOM    120  CA  HIS A  17       4.846  -7.504  32.775  1.00  0.00          C   
+ATOM    121  C   HIS A  17       5.518  -7.493  34.143  1.00  0.00          C   
+ATOM    122  CB  HIS A  17       3.888  -8.692  32.669  1.00  0.00          C   
+ATOM    123  O   HIS A  17       6.482  -8.228  34.372  1.00  0.00          O   
+ATOM    124  CG  HIS A  17       2.782  -8.661  33.675  1.00  0.00          C   
+ATOM    125  CD2 HIS A  17       2.548  -9.432  34.764  1.00  0.00          C   
+ATOM    126  ND1 HIS A  17       1.748  -7.752  33.617  1.00  0.00          N   
+ATOM    127  CE1 HIS A  17       0.924  -7.965  34.630  1.00  0.00          C   
+ATOM    128  NE2 HIS A  17       1.387  -8.979  35.341  1.00  0.00          N   
+ATOM    129  N   CYS A  18       5.067  -6.579  34.995  1.00  0.00          N   
+ATOM    130  CA  CYS A  18       5.599  -6.487  36.350  1.00  0.00          C   
+ATOM    131  C   CYS A  18       4.501  -6.711  37.383  1.00  0.00          C   
+ATOM    132  CB  CYS A  18       6.255  -5.126  36.577  1.00  0.00          C   
+ATOM    133  O   CYS A  18       3.325  -6.465  37.109  1.00  0.00          O   
+ATOM    134  SG  CYS A  18       7.757  -4.870  35.607  1.00  0.00          S   
+ATOM    135  N   ASP A  19       4.791  -7.344  38.476  1.00  0.00          N   
+ATOM    136  CA  ASP A  19       3.829  -7.460  39.568  1.00  0.00          C   
+ATOM    137  C   ASP A  19       3.430  -6.084  40.096  1.00  0.00          C   
+ATOM    138  CB  ASP A  19       4.403  -8.313  40.701  1.00  0.00          C   
+ATOM    139  O   ASP A  19       3.960  -5.064  39.651  1.00  0.00          O   
+ATOM    140  CG  ASP A  19       5.572  -7.650  41.408  1.00  0.00          C   
+ATOM    141  OD1 ASP A  19       6.325  -8.345  42.124  1.00  0.00          O   
+ATOM    142  OD2 ASP A  19       5.741  -6.422  41.250  1.00  0.00          O   
+ATOM    143  N   ALA A  20       2.383  -5.908  40.933  1.00  0.00          N   
+ATOM    144  CA  ALA A  20       1.776  -4.676  41.429  1.00  0.00          C   
+ATOM    145  C   ALA A  20       2.806  -3.807  42.144  1.00  0.00          C   
+ATOM    146  CB  ALA A  20       0.612  -4.995  42.363  1.00  0.00          C   
+ATOM    147  O   ALA A  20       2.714  -2.577  42.119  1.00  0.00          O   
+ATOM    148  N   ASN A  21       3.841  -4.457  42.638  1.00  0.00          N   
+ATOM    149  CA  ASN A  21       4.863  -3.719  43.373  1.00  0.00          C   
+ATOM    150  C   ASN A  21       6.048  -3.362  42.480  1.00  0.00          C   
+ATOM    151  CB  ASN A  21       5.335  -4.521  44.588  1.00  0.00          C   
+ATOM    152  O   ASN A  21       6.980  -2.686  42.919  1.00  0.00          O   
+ATOM    153  CG  ASN A  21       4.246  -4.704  45.626  1.00  0.00          C   
+ATOM    154  ND2 ASN A  21       4.183  -5.892  46.216  1.00  0.00          N   
+ATOM    155  OD1 ASN A  21       3.467  -3.786  45.895  1.00  0.00          O   
+ATOM    156  N   GLY A  22       5.989  -3.893  41.230  1.00  0.00          N   
+ATOM    157  CA  GLY A  22       7.093  -3.614  40.325  1.00  0.00          C   
+ATOM    158  C   GLY A  22       8.376  -4.324  40.712  1.00  0.00          C   
+ATOM    159  O   GLY A  22       9.456  -3.972  40.234  1.00  0.00          O   
+ATOM    160  N   GLU A  23       8.305  -5.221  41.664  1.00  0.00          N   
+ATOM    161  CA  GLU A  23       9.501  -5.877  42.183  1.00  0.00          C   
+ATOM    162  C   GLU A  23       9.861  -7.105  41.352  1.00  0.00          C   
+ATOM    163  CB  GLU A  23       9.306  -6.272  43.649  1.00  0.00          C   
+ATOM    164  O   GLU A  23      11.038  -7.361  41.089  1.00  0.00          O   
+ATOM    165  CG  GLU A  23       9.200  -5.085  44.596  1.00  0.00          C   
+ATOM    166  CD  GLU A  23       9.074  -5.493  46.055  1.00  0.00          C   
+ATOM    167  OE1 GLU A  23       9.075  -6.710  46.348  1.00  0.00          O   
+ATOM    168  OE2 GLU A  23       8.972  -4.587  46.913  1.00  0.00          O   
+ATOM    169  N   ASN A  24       8.853  -7.853  40.844  1.00  0.00          N   
+ATOM    170  CA  ASN A  24       9.050  -9.077  40.075  1.00  0.00          C   
+ATOM    171  C   ASN A  24       8.522  -8.936  38.651  1.00  0.00          C   
+ATOM    172  CB  ASN A  24       8.381 -10.263  40.774  1.00  0.00          C   
+ATOM    173  O   ASN A  24       7.317  -9.045  38.417  1.00  0.00          O   
+ATOM    174  CG  ASN A  24       8.973 -10.546  42.140  1.00  0.00          C   
+ATOM    175  ND2 ASN A  24       8.125 -10.569  43.162  1.00  0.00          N   
+ATOM    176  OD1 ASN A  24      10.184 -10.741  42.277  1.00  0.00          O   
+ATOM    177  N   CYS A  25       9.371  -8.554  37.764  1.00  0.00          N   
+ATOM    178  CA  CYS A  25       8.978  -8.390  36.369  1.00  0.00          C   
+ATOM    179  C   CYS A  25       9.448  -9.572  35.529  1.00  0.00          C   
+ATOM    180  CB  CYS A  25       9.548  -7.091  35.800  1.00  0.00          C   
+ATOM    181  O   CYS A  25      10.486 -10.171  35.816  1.00  0.00          O   
+ATOM    182  SG  CYS A  25       8.933  -5.605  36.623  1.00  0.00          S   
+ATOM    183  N   SER A  26       8.561 -10.102  34.701  1.00  0.00          N   
+ATOM    184  CA  SER A  26       8.921 -11.145  33.746  1.00  0.00          C   
+ATOM    185  C   SER A  26       8.422 -10.808  32.345  1.00  0.00          C   
+ATOM    186  CB  SER A  26       8.353 -12.495  34.187  1.00  0.00          C   
+ATOM    187  O   SER A  26       7.563  -9.940  32.178  1.00  0.00          O   
+ATOM    188  OG  SER A  26       6.936 -12.470  34.186  1.00  0.00          O   
+ATOM    189  N   CYS A  27       9.208 -11.265  31.277  1.00  0.00          N   
+ATOM    190  CA  CYS A  27       8.779 -11.211  29.884  1.00  0.00          C   
+ATOM    191  C   CYS A  27       7.948 -12.436  29.521  1.00  0.00          C   
+ATOM    192  CB  CYS A  27       9.988 -11.110  28.954  1.00  0.00          C   
+ATOM    193  O   CYS A  27       8.470 -13.551  29.464  1.00  0.00          O   
+ATOM    194  SG  CYS A  27      10.970  -9.614  29.197  1.00  0.00          S   
+ATOM    195  N   ASN A  28       6.768 -12.360  29.728  1.00  0.00          N   
+ATOM    196  CA  ASN A  28       5.905 -13.476  29.355  1.00  0.00          C   
+ATOM    197  C   ASN A  28       5.123 -13.178  28.079  1.00  0.00          C   
+ATOM    198  CB  ASN A  28       4.946 -13.817  30.498  1.00  0.00          C   
+ATOM    199  O   ASN A  28       4.074 -12.532  28.125  1.00  0.00          O   
+ATOM    200  CG  ASN A  28       4.239 -15.142  30.291  1.00  0.00          C   
+ATOM    201  ND2 ASN A  28       3.472 -15.568  31.288  1.00  0.00          N   
+ATOM    202  OD1 ASN A  28       4.381 -15.779  29.243  1.00  0.00          O   
+ATOM    203  N   CYS A  29       5.741 -13.488  26.787  1.00  0.00          N   
+ATOM    204  CA  CYS A  29       5.086 -13.282  25.500  1.00  0.00          C   
+ATOM    205  C   CYS A  29       3.880 -14.201  25.348  1.00  0.00          C   
+ATOM    206  CB  CYS A  29       6.070 -13.522  24.355  1.00  0.00          C   
+ATOM    207  O   CYS A  29       3.011 -13.958  24.510  1.00  0.00          O   
+ATOM    208  SG  CYS A  29       7.446 -12.353  24.319  1.00  0.00          S   
+ATOM    209  N   GLU A  30       3.849 -15.077  26.140  1.00  0.00          N   
+ATOM    210  CA  GLU A  30       2.725 -16.005  26.063  1.00  0.00          C   
+ATOM    211  C   GLU A  30       1.452 -15.379  26.627  1.00  0.00          C   
+ATOM    212  CB  GLU A  30       3.047 -17.303  26.808  1.00  0.00          C   
+ATOM    213  O   GLU A  30       0.344 -15.770  26.255  1.00  0.00          O   
+ATOM    214  CG  GLU A  30       4.161 -18.119  26.169  1.00  0.00          C   
+ATOM    215  CD  GLU A  30       4.469 -19.405  26.919  1.00  0.00          C   
+ATOM    216  OE1 GLU A  30       3.822 -19.672  27.957  1.00  0.00          O   
+ATOM    217  OE2 GLU A  30       5.366 -20.150  26.466  1.00  0.00          O   
+ATOM    218  N   LEU A  31       1.743 -14.305  27.387  1.00  0.00          N   
+ATOM    219  CA  LEU A  31       0.622 -13.672  28.074  1.00  0.00          C   
+ATOM    220  C   LEU A  31       0.044 -12.536  27.237  1.00  0.00          C   
+ATOM    221  CB  LEU A  31       1.061 -13.142  29.441  1.00  0.00          C   
+ATOM    222  O   LEU A  31      -0.996 -11.971  27.584  1.00  0.00          O   
+ATOM    223  CG  LEU A  31       1.437 -14.194  30.487  1.00  0.00          C   
+ATOM    224  CD1 LEU A  31       1.920 -13.520  31.766  1.00  0.00          C   
+ATOM    225  CD2 LEU A  31       0.252 -15.110  30.774  1.00  0.00          C   
+ATOM    226  N   PHE A  32       0.769 -12.166  26.008  1.00  0.00          N   
+ATOM    227  CA  PHE A  32       0.157 -11.063  25.278  1.00  0.00          C   
+ATOM    228  C   PHE A  32      -1.020 -11.553  24.443  1.00  0.00          C   
+ATOM    229  CB  PHE A  32       1.188 -10.374  24.378  1.00  0.00          C   
+ATOM    230  O   PHE A  32      -0.898 -12.531  23.702  1.00  0.00          O   
+ATOM    231  CG  PHE A  32       2.115  -9.447  25.117  1.00  0.00          C   
+ATOM    232  CD1 PHE A  32       3.383  -9.869  25.499  1.00  0.00          C   
+ATOM    233  CD2 PHE A  32       1.719  -8.153  25.429  1.00  0.00          C   
+ATOM    234  CE1 PHE A  32       4.243  -9.014  26.183  1.00  0.00          C   
+ATOM    235  CE2 PHE A  32       2.574  -7.293  26.112  1.00  0.00          C   
+ATOM    236  CZ  PHE A  32       3.835  -7.725  26.489  1.00  0.00          C   
+ATOM    237  N   ASP A  33      -2.070 -11.361  25.097  1.00  0.00          N   
+ATOM    238  CA  ASP A  33      -3.364 -11.602  24.466  1.00  0.00          C   
+ATOM    239  C   ASP A  33      -3.423 -10.975  23.075  1.00  0.00          C   
+ATOM    240  CB  ASP A  33      -4.496 -11.055  25.339  1.00  0.00          C   
+ATOM    241  O   ASP A  33      -3.225  -9.767  22.924  1.00  0.00          O   
+ATOM    242  CG  ASP A  33      -5.861 -11.590  24.943  1.00  0.00          C   
+ATOM    243  OD1 ASP A  33      -6.769 -11.638  25.800  1.00  0.00          O   
+ATOM    244  OD2 ASP A  33      -6.029 -11.969  23.764  1.00  0.00          O   
+ATOM    245  N   CYS A  34      -3.021 -11.756  22.063  1.00  0.00          N   
+ATOM    246  CA  CYS A  34      -3.371 -11.337  20.711  1.00  0.00          C   
+ATOM    247  C   CYS A  34      -4.691 -10.576  20.700  1.00  0.00          C   
+ATOM    248  CB  CYS A  34      -3.461 -12.547  19.781  1.00  0.00          C   
+ATOM    249  O   CYS A  34      -4.986  -9.851  19.748  1.00  0.00          O   
+ATOM    250  SG  CYS A  34      -1.909 -13.455  19.615  1.00  0.00          S   
+ATOM    251  N   GLU A  35      -5.284 -10.672  21.987  1.00  0.00          N   
+ATOM    252  CA  GLU A  35      -6.617 -10.086  22.085  1.00  0.00          C   
+ATOM    253  C   GLU A  35      -6.556  -8.667  22.644  1.00  0.00          C   
+ATOM    254  CB  GLU A  35      -7.525 -10.956  22.958  1.00  0.00          C   
+ATOM    255  O   GLU A  35      -7.592  -8.032  22.853  1.00  0.00          O   
+ATOM    256  CG  GLU A  35      -7.790 -12.339  22.381  1.00  0.00          C   
+ATOM    257  CD  GLU A  35      -8.779 -13.152  23.202  1.00  0.00          C   
+ATOM    258  OE1 GLU A  35      -9.290 -12.636  24.222  1.00  0.00          O   
+ATOM    259  OE2 GLU A  35      -9.046 -14.314  22.821  1.00  0.00          O   
+ATOM    260  N   ALA A  36      -5.315  -8.202  22.860  1.00  0.00          N   
+ATOM    261  CA  ALA A  36      -5.282  -6.884  23.489  1.00  0.00          C   
+ATOM    262  C   ALA A  36      -5.714  -5.797  22.509  1.00  0.00          C   
+ATOM    263  CB  ALA A  36      -3.884  -6.586  24.027  1.00  0.00          C   
+ATOM    264  O   ALA A  36      -5.299  -5.799  21.348  1.00  0.00          O   
+ATOM    265  N   LYS A  37      -6.942  -5.271  22.819  1.00  0.00          N   
+ATOM    266  CA  LYS A  37      -7.519  -4.143  22.094  1.00  0.00          C   
+ATOM    267  C   LYS A  37      -6.974  -2.817  22.617  1.00  0.00          C   
+ATOM    268  CB  LYS A  37      -9.045  -4.160  22.200  1.00  0.00          C   
+ATOM    269  O   LYS A  37      -6.897  -2.606  23.829  1.00  0.00          O   
+ATOM    270  CG  LYS A  37      -9.701  -5.341  21.499  1.00  0.00          C   
+ATOM    271  CD  LYS A  37     -11.220  -5.239  21.536  1.00  0.00          C   
+ATOM    272  CE  LYS A  37     -11.877  -6.385  20.778  1.00  0.00          C   
+ATOM    273  NZ  LYS A  37     -13.353  -6.194  20.656  1.00  0.00          N   
+ATOM    274  N   LYS A  38      -6.207  -2.111  21.604  1.00  0.00          N   
+ATOM    275  CA  LYS A  38      -5.876  -0.745  21.998  1.00  0.00          C   
+ATOM    276  C   LYS A  38      -7.131   0.118  22.100  1.00  0.00          C   
+ATOM    277  CB  LYS A  38      -4.892  -0.123  21.007  1.00  0.00          C   
+ATOM    278  O   LYS A  38      -8.188  -0.253  21.585  1.00  0.00          O   
+ATOM    279  CG  LYS A  38      -3.518  -0.776  21.006  1.00  0.00          C   
+ATOM    280  CD  LYS A  38      -2.564  -0.072  20.049  1.00  0.00          C   
+ATOM    281  CE  LYS A  38      -1.196  -0.740  20.029  1.00  0.00          C   
+ATOM    282  NZ  LYS A  38      -0.234  -0.007  19.153  1.00  0.00          N   
+ATOM    283  N   PRO A  39      -7.175   1.097  22.994  1.00  0.00          N   
+ATOM    284  CA  PRO A  39      -8.319   2.000  23.133  1.00  0.00          C   
+ATOM    285  C   PRO A  39      -8.863   2.474  21.787  1.00  0.00          C   
+ATOM    286  CB  PRO A  39      -7.748   3.173  23.934  1.00  0.00          C   
+ATOM    287  O   PRO A  39     -10.057   2.762  21.666  1.00  0.00          O   
+ATOM    288  CG  PRO A  39      -6.594   2.594  24.688  1.00  0.00          C   
+ATOM    289  CD  PRO A  39      -6.004   1.478  23.874  1.00  0.00          C   
+ATOM    290  N   ASP A  40      -8.068   2.468  20.731  1.00  0.00          N   
+ATOM    291  CA  ASP A  40      -8.452   2.969  19.415  1.00  0.00          C   
+ATOM    292  C   ASP A  40      -9.034   1.852  18.551  1.00  0.00          C   
+ATOM    293  CB  ASP A  40      -7.252   3.607  18.712  1.00  0.00          C   
+ATOM    294  O   ASP A  40      -9.337   2.064  17.375  1.00  0.00          O   
+ATOM    295  CG  ASP A  40      -6.113   2.630  18.480  1.00  0.00          C   
+ATOM    296  OD1 ASP A  40      -5.040   3.049  17.994  1.00  0.00          O   
+ATOM    297  OD2 ASP A  40      -6.290   1.431  18.784  1.00  0.00          O   
+ATOM    298  N   GLY A  41      -9.199   0.638  19.013  1.00  0.00          N   
+ATOM    299  CA  GLY A  41      -9.761  -0.484  18.279  1.00  0.00          C   
+ATOM    300  C   GLY A  41      -8.723  -1.268  17.500  1.00  0.00          C   
+ATOM    301  O   GLY A  41      -9.019  -2.338  16.963  1.00  0.00          O   
+ATOM    302  N   SER A  42      -7.510  -0.651  17.403  1.00  0.00          N   
+ATOM    303  CA  SER A  42      -6.433  -1.355  16.714  1.00  0.00          C   
+ATOM    304  C   SER A  42      -5.824  -2.436  17.601  1.00  0.00          C   
+ATOM    305  CB  SER A  42      -5.346  -0.373  16.274  1.00  0.00          C   
+ATOM    306  O   SER A  42      -6.031  -2.440  18.816  1.00  0.00          O   
+ATOM    307  OG  SER A  42      -4.758   0.262  17.396  1.00  0.00          O   
+ATOM    308  N   TYR A  43      -5.412  -3.575  16.938  1.00  0.00          N   
+ATOM    309  CA  TYR A  43      -4.705  -4.628  17.660  1.00  0.00          C   
+ATOM    310  C   TYR A  43      -3.244  -4.254  17.877  1.00  0.00          C   
+ATOM    311  CB  TYR A  43      -4.798  -5.955  16.901  1.00  0.00          C   
+ATOM    312  O   TYR A  43      -2.651  -3.542  17.063  1.00  0.00          O   
+ATOM    313  CG  TYR A  43      -6.184  -6.551  16.887  1.00  0.00          C   
+ATOM    314  CD1 TYR A  43      -7.022  -6.388  15.786  1.00  0.00          C   
+ATOM    315  CD2 TYR A  43      -6.659  -7.277  17.974  1.00  0.00          C   
+ATOM    316  CE1 TYR A  43      -8.302  -6.934  15.769  1.00  0.00          C   
+ATOM    317  CE2 TYR A  43      -7.937  -7.827  17.968  1.00  0.00          C   
+ATOM    318  OH  TYR A  43     -10.015  -8.194  16.852  1.00  0.00          O   
+ATOM    319  CZ  TYR A  43      -8.749  -7.651  16.863  1.00  0.00          C   
+ATOM    320  N   ALA A  44      -3.024  -4.415  19.155  1.00  0.00          N   
+ATOM    321  CA  ALA A  44      -1.659  -4.137  19.595  1.00  0.00          C   
+ATOM    322  C   ALA A  44      -0.642  -4.865  18.721  1.00  0.00          C   
+ATOM    323  CB  ALA A  44      -1.480  -4.536  21.058  1.00  0.00          C   
+ATOM    324  O   ALA A  44       0.477  -4.383  18.527  1.00  0.00          O   
+ATOM    325  N   HIS A  45      -1.081  -5.938  17.989  1.00  0.00          N   
+ATOM    326  CA  HIS A  45      -0.065  -6.665  17.236  1.00  0.00          C   
+ATOM    327  C   HIS A  45      -0.455  -6.795  15.768  1.00  0.00          C   
+ATOM    328  CB  HIS A  45       0.163  -8.051  17.843  1.00  0.00          C   
+ATOM    329  O   HIS A  45      -1.558  -7.246  15.452  1.00  0.00          O   
+ATOM    330  CG  HIS A  45       1.501  -8.634  17.520  1.00  0.00          C   
+ATOM    331  CD2 HIS A  45       2.577  -8.880  18.304  1.00  0.00          C   
+ATOM    332  ND1 HIS A  45       1.850  -9.037  16.249  1.00  0.00          N   
+ATOM    333  CE1 HIS A  45       3.086  -9.508  16.266  1.00  0.00          C   
+ATOM    334  NE2 HIS A  45       3.550  -9.423  17.502  1.00  0.00          N   
+ATOM    335  N   PRO A  46       0.267  -6.191  14.776  1.00  0.00          N   
+ATOM    336  CA  PRO A  46       0.007  -6.193  13.334  1.00  0.00          C   
+ATOM    337  C   PRO A  46      -0.224  -7.596  12.778  1.00  0.00          C   
+ATOM    338  CB  PRO A  46       1.278  -5.574  12.747  1.00  0.00          C   
+ATOM    339  O   PRO A  46      -0.835  -7.750  11.717  1.00  0.00          O   
+ATOM    340  CG  PRO A  46       2.320  -5.770  13.800  1.00  0.00          C   
+ATOM    341  CD  PRO A  46       1.648  -5.768  15.143  1.00  0.00          C   
+ATOM    342  N   CYS A  47       0.238  -8.592  13.354  1.00  0.00          N   
+ATOM    343  CA  CYS A  47       0.115  -9.950  12.835  1.00  0.00          C   
+ATOM    344  C   CYS A  47      -1.253 -10.537  13.163  1.00  0.00          C   
+ATOM    345  CB  CYS A  47       1.214 -10.844  13.408  1.00  0.00          C   
+ATOM    346  O   CYS A  47      -1.515 -11.707  12.880  1.00  0.00          O   
+ATOM    347  SG  CYS A  47       1.222 -10.923  15.212  1.00  0.00          S   
+ATOM    348  N   ARG A  48      -2.155  -9.724  13.452  1.00  0.00          N   
+ATOM    349  CA  ARG A  48      -3.422 -10.192  14.005  1.00  0.00          C   
+ATOM    350  C   ARG A  48      -4.542 -10.086  12.974  1.00  0.00          C   
+ATOM    351  CB  ARG A  48      -3.788  -9.396  15.260  1.00  0.00          C   
+ATOM    352  O   ARG A  48      -4.649  -9.082  12.268  1.00  0.00          O   
+ATOM    353  CG  ARG A  48      -5.032  -9.905  15.970  1.00  0.00          C   
+ATOM    354  CD  ARG A  48      -5.909  -8.761  16.460  1.00  0.00          C   
+ATOM    355  NE  ARG A  48      -6.344  -7.906  15.359  1.00  0.00          N   
+ATOM    356  NH1 ARG A  48      -6.885  -6.103  16.700  1.00  0.00          N   
+ATOM    357  NH2 ARG A  48      -7.167  -5.974  14.429  1.00  0.00          N   
+ATOM    358  CZ  ARG A  48      -6.798  -6.663  15.499  1.00  0.00          C   
+ATOM    359  N   ARG A  49      -5.146 -11.174  12.527  1.00  0.00          N   
+ATOM    360  CA  ARG A  49      -6.391 -11.158  11.765  1.00  0.00          C   
+ATOM    361  C   ARG A  49      -7.546 -11.713  12.593  1.00  0.00          C   
+ATOM    362  CB  ARG A  49      -6.241 -11.962  10.472  1.00  0.00          C   
+ATOM    363  O   ARG A  49      -7.402 -12.739  13.261  1.00  0.00          O   
+ATOM    364  CG  ARG A  49      -5.303 -11.327   9.458  1.00  0.00          C   
+ATOM    365  CD  ARG A  49      -5.887 -10.048   8.873  1.00  0.00          C   
+ATOM    366  NE  ARG A  49      -5.349  -9.769   7.544  1.00  0.00          N   
+ATOM    367  NH1 ARG A  49      -6.902  -8.137   7.033  1.00  0.00          N   
+ATOM    368  NH2 ARG A  49      -5.276  -8.694   5.516  1.00  0.00          N   
+ATOM    369  CZ  ARG A  49      -5.843  -8.867   6.701  1.00  0.00          C   
+ATOM    370  N   CYS A  50      -8.427 -10.800  12.832  1.00  0.00          N   
+ATOM    371  CA  CYS A  50      -9.591 -11.226  13.601  1.00  0.00          C   
+ATOM    372  C   CYS A  50     -10.795 -11.442  12.692  1.00  0.00          C   
+ATOM    373  CB  CYS A  50      -9.931 -10.193  14.675  1.00  0.00          C   
+ATOM    374  O   CYS A  50     -11.034 -10.657  11.773  1.00  0.00          O   
+ATOM    375  SG  CYS A  50      -8.684 -10.057  15.975  1.00  0.00          S   
+ATOM    376  N   ASP A  51     -11.409 -12.618  12.691  1.00  0.00          N   
+ATOM    377  CA  ASP A  51     -12.641 -12.851  11.943  1.00  0.00          C   
+ATOM    378  C   ASP A  51     -13.818 -12.115  12.580  1.00  0.00          C   
+ATOM    379  CB  ASP A  51     -12.942 -14.349  11.858  1.00  0.00          C   
+ATOM    380  O   ASP A  51     -13.640 -11.361  13.539  1.00  0.00          O   
+ATOM    381  CG  ASP A  51     -13.232 -14.974  13.211  1.00  0.00          C   
+ATOM    382  OD1 ASP A  51     -13.125 -16.212  13.347  1.00  0.00          O   
+ATOM    383  OD2 ASP A  51     -13.573 -14.221  14.150  1.00  0.00          O   
+ATOM    384  N   ALA A  52     -15.076 -12.051  11.991  1.00  0.00          N   
+ATOM    385  CA  ALA A  52     -16.275 -11.314  12.381  1.00  0.00          C   
+ATOM    386  C   ALA A  52     -16.730 -11.710  13.783  1.00  0.00          C   
+ATOM    387  CB  ALA A  52     -17.397 -11.550  11.374  1.00  0.00          C   
+ATOM    388  O   ALA A  52     -17.439 -10.952  14.450  1.00  0.00          O   
+ATOM    389  N   ASN A  53     -16.263 -12.790  14.290  1.00  0.00          N   
+ATOM    390  CA  ASN A  53     -16.638 -13.257  15.620  1.00  0.00          C   
+ATOM    391  C   ASN A  53     -15.557 -12.943  16.650  1.00  0.00          C   
+ATOM    392  CB  ASN A  53     -16.930 -14.759  15.599  1.00  0.00          C   
+ATOM    393  O   ASN A  53     -15.602 -13.442  17.776  1.00  0.00          O   
+ATOM    394  CG  ASN A  53     -18.169 -15.101  14.795  1.00  0.00          C   
+ATOM    395  ND2 ASN A  53     -18.098 -16.183  14.029  1.00  0.00          N   
+ATOM    396  OD1 ASN A  53     -19.181 -14.399  14.862  1.00  0.00          O   
+ATOM    397  N   ASN A  54     -14.551 -12.153  16.191  1.00  0.00          N   
+ATOM    398  CA  ASN A  54     -13.470 -11.666  17.041  1.00  0.00          C   
+ATOM    399  C   ASN A  54     -12.543 -12.798  17.474  1.00  0.00          C   
+ATOM    400  CB  ASN A  54     -14.034 -10.943  18.266  1.00  0.00          C   
+ATOM    401  O   ASN A  54     -11.968 -12.753  18.563  1.00  0.00          O   
+ATOM    402  CG  ASN A  54     -14.752  -9.657  17.906  1.00  0.00          C   
+ATOM    403  ND2 ASN A  54     -15.894  -9.418  18.540  1.00  0.00          N   
+ATOM    404  OD1 ASN A  54     -14.285  -8.885  17.065  1.00  0.00          O   
+ATOM    405  N   ILE A  55     -12.428 -13.839  16.751  1.00  0.00          N   
+ATOM    406  CA  ILE A  55     -11.423 -14.875  16.963  1.00  0.00          C   
+ATOM    407  C   ILE A  55     -10.158 -14.536  16.179  1.00  0.00          C   
+ATOM    408  CB  ILE A  55     -11.952 -16.268  16.552  1.00  0.00          C   
+ATOM    409  O   ILE A  55     -10.162 -14.552  14.946  1.00  0.00          O   
+ATOM    410  CG1 ILE A  55     -13.233 -16.602  17.325  1.00  0.00          C   
+ATOM    411  CG2 ILE A  55     -10.881 -17.340  16.777  1.00  0.00          C   
+ATOM    412  CD1 ILE A  55     -13.942 -17.857  16.834  1.00  0.00          C   
+ATOM    413  N   CYS A  56      -9.197 -14.050  16.887  1.00  0.00          N   
+ATOM    414  CA  CYS A  56      -7.960 -13.587  16.266  1.00  0.00          C   
+ATOM    415  C   CYS A  56      -6.914 -14.694  16.244  1.00  0.00          C   
+ATOM    416  CB  CYS A  56      -7.411 -12.369  17.009  1.00  0.00          C   
+ATOM    417  O   CYS A  56      -6.807 -15.473  17.192  1.00  0.00          O   
+ATOM    418  SG  CYS A  56      -8.495 -10.925  16.941  1.00  0.00          S   
+ATOM    419  N   LYS A  57      -6.417 -14.976  15.112  1.00  0.00          N   
+ATOM    420  CA  LYS A  57      -5.263 -15.861  14.977  1.00  0.00          C   
+ATOM    421  C   LYS A  57      -4.007 -15.075  14.612  1.00  0.00          C   
+ATOM    422  CB  LYS A  57      -5.532 -16.937  13.924  1.00  0.00          C   
+ATOM    423  O   LYS A  57      -4.077 -14.092  13.873  1.00  0.00          O   
+ATOM    424  CG  LYS A  57      -6.672 -17.880  14.280  1.00  0.00          C   
+ATOM    425  CD  LYS A  57      -6.811 -19.000  13.257  1.00  0.00          C   
+ATOM    426  CE  LYS A  57      -7.903 -19.986  13.651  1.00  0.00          C   
+ATOM    427  NZ  LYS A  57      -7.947 -21.161  12.730  1.00  0.00          N   
+ATOM    428  N   CYS A  58      -2.976 -15.105  15.608  1.00  0.00          N   
+ATOM    429  CA  CYS A  58      -1.644 -14.583  15.328  1.00  0.00          C   
+ATOM    430  C   CYS A  58      -0.938 -15.425  14.272  1.00  0.00          C   
+ATOM    431  CB  CYS A  58      -0.804 -14.543  16.605  1.00  0.00          C   
+ATOM    432  O   CYS A  58      -0.662 -16.605  14.495  1.00  0.00          O   
+ATOM    433  SG  CYS A  58      -1.471 -13.452  17.881  1.00  0.00          S   
+ATOM    434  N   SER A  59      -1.100 -15.266  13.105  1.00  0.00          N   
+ATOM    435  CA  SER A  59      -0.317 -16.194  12.296  1.00  0.00          C   
+ATOM    436  C   SER A  59       0.363 -15.475  11.135  1.00  0.00          C   
+ATOM    437  CB  SER A  59      -1.204 -17.319  11.760  1.00  0.00          C   
+ATOM    438  O   SER A  59      -0.281 -15.151  10.135  1.00  0.00          O   
+ATOM    439  OG  SER A  59      -0.425 -18.302  11.100  1.00  0.00          O   
+ATOM    440  N   CYS A  60       1.699 -14.861  11.329  1.00  0.00          N   
+ATOM    441  CA  CYS A  60       2.405 -14.577  10.084  1.00  0.00          C   
+ATOM    442  C   CYS A  60       2.585 -15.845   9.258  1.00  0.00          C   
+ATOM    443  CB  CYS A  60       3.768 -13.947  10.372  1.00  0.00          C   
+ATOM    444  O   CYS A  60       2.717 -15.781   8.035  1.00  0.00          O   
+ATOM    445  SG  CYS A  60       4.863 -14.997  11.352  1.00  0.00          S   
+ATOM    446  N   THR A  61       2.370 -16.747  10.083  1.00  0.00          N   
+ATOM    447  CA  THR A  61       2.549 -18.025   9.403  1.00  0.00          C   
+ATOM    448  C   THR A  61       1.237 -18.493   8.779  1.00  0.00          C   
+ATOM    449  CB  THR A  61       3.075 -19.103  10.369  1.00  0.00          C   
+ATOM    450  O   THR A  61       1.241 -19.301   7.848  1.00  0.00          O   
+ATOM    451  CG2 THR A  61       4.474 -18.758  10.869  1.00  0.00          C   
+ATOM    452  OG1 THR A  61       2.190 -19.204  11.491  1.00  0.00          O   
+ATOM    453  N   ALA A  62       0.127 -17.759   9.279  1.00  0.00          N   
+ATOM    454  CA  ALA A  62      -1.157 -18.259   8.792  1.00  0.00          C   
+ATOM    455  C   ALA A  62      -1.490 -17.673   7.423  1.00  0.00          C   
+ATOM    456  CB  ALA A  62      -2.266 -17.936   9.790  1.00  0.00          C   
+ATOM    457  O   ALA A  62      -2.183 -18.305   6.623  1.00  0.00          O   
+ATOM    458  N   ILE A  63      -0.953 -16.508   7.207  1.00  0.00          N   
+ATOM    459  CA  ILE A  63      -1.310 -15.966   5.900  1.00  0.00          C   
+ATOM    460  C   ILE A  63      -0.123 -16.091   4.948  1.00  0.00          C   
+ATOM    461  CB  ILE A  63      -1.761 -14.492   6.004  1.00  0.00          C   
+ATOM    462  O   ILE A  63       0.973 -15.611   5.246  1.00  0.00          O   
+ATOM    463  CG1 ILE A  63      -2.978 -14.369   6.929  1.00  0.00          C   
+ATOM    464  CG2 ILE A  63      -2.068 -13.922   4.616  1.00  0.00          C   
+ATOM    465  CD1 ILE A  63      -3.430 -12.936   7.171  1.00  0.00          C   
+ATOM    466  N   PRO A  64      -0.261 -17.160   4.081  1.00  0.00          N   
+ATOM    467  CA  PRO A  64       0.812 -17.254   3.088  1.00  0.00          C   
+ATOM    468  C   PRO A  64       1.182 -15.899   2.489  1.00  0.00          C   
+ATOM    469  CB  PRO A  64       0.224 -18.181   2.021  1.00  0.00          C   
+ATOM    470  O   PRO A  64       0.304 -15.069   2.242  1.00  0.00          O   
+ATOM    471  CG  PRO A  64      -1.257 -18.050   2.175  1.00  0.00          C   
+ATOM    472  CD  PRO A  64      -1.560 -17.707   3.605  1.00  0.00          C   
+ATOM    473  N   CYS A  65       2.470 -15.492   2.721  1.00  0.00          N   
+ATOM    474  CA  CYS A  65       2.970 -14.283   2.076  1.00  0.00          C   
+ATOM    475  C   CYS A  65       2.884 -14.399   0.559  1.00  0.00          C   
+ATOM    476  CB  CYS A  65       4.415 -14.011   2.494  1.00  0.00          C   
+ATOM    477  O   CYS A  65       3.627 -15.170  -0.052  1.00  0.00          O   
+ATOM    478  SG  CYS A  65       4.983 -12.341   2.107  1.00  0.00          S   
+ATOM    479  N   ASN A  66       1.810 -14.008   0.034  1.00  0.00          N   
+ATOM    480  CA  ASN A  66       1.657 -13.952  -1.416  1.00  0.00          C   
+ATOM    481  C   ASN A  66       1.636 -12.512  -1.922  1.00  0.00          C   
+ATOM    482  CB  ASN A  66       0.388 -14.686  -1.851  1.00  0.00          C   
+ATOM    483  O   ASN A  66       1.843 -11.575  -1.149  1.00  0.00          O   
+ATOM    484  CG  ASN A  66      -0.864 -14.121  -1.209  1.00  0.00          C   
+ATOM    485  ND2 ASN A  66      -1.787 -14.999  -0.835  1.00  0.00          N   
+ATOM    486  OD1 ASN A  66      -0.999 -12.905  -1.050  1.00  0.00          O   
+ATOM    487  N   GLU A  67       1.630 -12.346  -3.214  1.00  0.00          N   
+ATOM    488  CA  GLU A  67       1.700 -11.038  -3.857  1.00  0.00          C   
+ATOM    489  C   GLU A  67       0.657 -10.083  -3.284  1.00  0.00          C   
+ATOM    490  CB  GLU A  67       1.515 -11.172  -5.371  1.00  0.00          C   
+ATOM    491  O   GLU A  67       0.820  -8.863  -3.353  1.00  0.00          O   
+ATOM    492  CG  GLU A  67       0.220 -11.863  -5.773  1.00  0.00          C   
+ATOM    493  CD  GLU A  67       0.104 -12.095  -7.271  1.00  0.00          C   
+ATOM    494  OE1 GLU A  67      -1.026 -12.040  -7.808  1.00  0.00          O   
+ATOM    495  OE2 GLU A  67       1.151 -12.333  -7.914  1.00  0.00          O   
+ATOM    496  N   ASP A  68      -0.317 -10.492  -2.553  1.00  0.00          N   
+ATOM    497  CA  ASP A  68      -1.388  -9.666  -2.004  1.00  0.00          C   
+ATOM    498  C   ASP A  68      -1.103  -9.292  -0.551  1.00  0.00          C   
+ATOM    499  CB  ASP A  68      -2.731 -10.391  -2.108  1.00  0.00          C   
+ATOM    500  O   ASP A  68      -1.847  -8.517   0.053  1.00  0.00          O   
+ATOM    501  CG  ASP A  68      -3.195 -10.578  -3.541  1.00  0.00          C   
+ATOM    502  OD1 ASP A  68      -3.828 -11.611  -3.848  1.00  0.00          O   
+ATOM    503  OD2 ASP A  68      -2.923  -9.685  -4.373  1.00  0.00          O   
+ATOM    504  N   HIS A  69      -0.167  -9.956   0.090  1.00  0.00          N   
+ATOM    505  CA  HIS A  69       0.211  -9.683   1.472  1.00  0.00          C   
+ATOM    506  C   HIS A  69       1.044  -8.410   1.574  1.00  0.00          C   
+ATOM    507  CB  HIS A  69       0.985 -10.865   2.059  1.00  0.00          C   
+ATOM    508  O   HIS A  69       2.031  -8.249   0.852  1.00  0.00          O   
+ATOM    509  CG  HIS A  69       1.021 -10.875   3.555  1.00  0.00          C   
+ATOM    510  CD2 HIS A  69       0.448 -11.711   4.452  1.00  0.00          C   
+ATOM    511  ND1 HIS A  69       1.712  -9.936   4.288  1.00  0.00          N   
+ATOM    512  CE1 HIS A  69       1.562 -10.195   5.577  1.00  0.00          C   
+ATOM    513  NE2 HIS A  69       0.800 -11.267   5.703  1.00  0.00          N   
+ATOM    514  N   PRO A  70       0.701  -7.489   2.427  1.00  0.00          N   
+ATOM    515  CA  PRO A  70       1.384  -6.197   2.516  1.00  0.00          C   
+ATOM    516  C   PRO A  70       2.882  -6.337   2.776  1.00  0.00          C   
+ATOM    517  CB  PRO A  70       0.687  -5.510   3.693  1.00  0.00          C   
+ATOM    518  O   PRO A  70       3.663  -5.461   2.397  1.00  0.00          O   
+ATOM    519  CG  PRO A  70      -0.046  -6.606   4.396  1.00  0.00          C   
+ATOM    520  CD  PRO A  70      -0.242  -7.742   3.433  1.00  0.00          C   
+ATOM    521  N   CYS A  71       3.295  -7.400   3.302  1.00  0.00          N   
+ATOM    522  CA  CYS A  71       4.698  -7.619   3.633  1.00  0.00          C   
+ATOM    523  C   CYS A  71       5.402  -8.407   2.534  1.00  0.00          C   
+ATOM    524  CB  CYS A  71       4.825  -8.359   4.965  1.00  0.00          C   
+ATOM    525  O   CYS A  71       6.576  -8.754   2.669  1.00  0.00          O   
+ATOM    526  SG  CYS A  71       4.149  -7.448   6.371  1.00  0.00          S   
+ATOM    527  N   HIS A  72       4.559  -8.757   1.576  1.00  0.00          N   
+ATOM    528  CA  HIS A  72       5.119  -9.541   0.482  1.00  0.00          C   
+ATOM    529  C   HIS A  72       6.010  -8.684  -0.411  1.00  0.00          C   
+ATOM    530  CB  HIS A  72       4.003 -10.179  -0.347  1.00  0.00          C   
+ATOM    531  O   HIS A  72       5.596  -7.614  -0.864  1.00  0.00          O   
+ATOM    532  CG  HIS A  72       4.498 -10.942  -1.534  1.00  0.00          C   
+ATOM    533  CD2 HIS A  72       4.508 -10.627  -2.851  1.00  0.00          C   
+ATOM    534  ND1 HIS A  72       5.064 -12.194  -1.431  1.00  0.00          N   
+ATOM    535  CE1 HIS A  72       5.402 -12.618  -2.638  1.00  0.00          C   
+ATOM    536  NE2 HIS A  72       5.076 -11.686  -3.517  1.00  0.00          N   
+ATOM    537  N   HIS A  73       7.276  -9.193  -0.608  1.00  0.00          N   
+ATOM    538  CA  HIS A  73       8.219  -8.528  -1.500  1.00  0.00          C   
+ATOM    539  C   HIS A  73       8.888  -9.527  -2.439  1.00  0.00          C   
+ATOM    540  CB  HIS A  73       9.278  -7.774  -0.695  1.00  0.00          C   
+ATOM    541  O   HIS A  73       9.246 -10.632  -2.024  1.00  0.00          O   
+ATOM    542  CG  HIS A  73       8.715  -6.693   0.172  1.00  0.00          C   
+ATOM    543  CD2 HIS A  73       8.550  -6.625   1.514  1.00  0.00          C   
+ATOM    544  ND1 HIS A  73       8.240  -5.504  -0.336  1.00  0.00          N   
+ATOM    545  CE1 HIS A  73       7.806  -4.749   0.660  1.00  0.00          C   
+ATOM    546  NE2 HIS A  73       7.983  -5.406   1.793  1.00  0.00          N   
+ATOM    547  N   CYS A  74       8.907  -9.137  -3.729  1.00  0.00          N   
+ATOM    548  CA  CYS A  74       9.582  -9.976  -4.713  1.00  0.00          C   
+ATOM    549  C   CYS A  74      10.677  -9.199  -5.433  1.00  0.00          C   
+ATOM    550  CB  CYS A  74       8.580 -10.523  -5.729  1.00  0.00          C   
+ATOM    551  O   CYS A  74      10.529  -8.003  -5.689  1.00  0.00          O   
+ATOM    552  SG  CYS A  74       7.391 -11.686  -5.025  1.00  0.00          S   
+ATOM    553  N   HIS A  75      11.715  -9.738  -5.575  1.00  0.00          N   
+ATOM    554  CA  HIS A  75      12.772  -9.115  -6.364  1.00  0.00          C   
+ATOM    555  C   HIS A  75      13.308 -10.074  -7.422  1.00  0.00          C   
+ATOM    556  CB  HIS A  75      13.910  -8.643  -5.458  1.00  0.00          C   
+ATOM    557  O   HIS A  75      13.275 -11.292  -7.235  1.00  0.00          O   
+ATOM    558  CG  HIS A  75      14.605  -9.755  -4.740  1.00  0.00          C   
+ATOM    559  CD2 HIS A  75      15.789 -10.366  -4.981  1.00  0.00          C   
+ATOM    560  ND1 HIS A  75      14.075 -10.368  -3.625  1.00  0.00          N   
+ATOM    561  CE1 HIS A  75      14.905 -11.310  -3.211  1.00  0.00          C   
+ATOM    562  NE2 HIS A  75      15.954 -11.330  -4.016  1.00  0.00          N   
+ATOM    563  N   GLU A  76      13.647  -9.546  -8.538  1.00  0.00          N   
+ATOM    564  CA  GLU A  76      14.228 -10.322  -9.630  1.00  0.00          C   
+ATOM    565  C   GLU A  76      15.753 -10.283  -9.585  1.00  0.00          C   
+ATOM    566  CB  GLU A  76      13.727  -9.806 -10.981  1.00  0.00          C   
+ATOM    567  O   GLU A  76      16.350  -9.205  -9.546  1.00  0.00          O   
+ATOM    568  CG  GLU A  76      14.060 -10.722 -12.150  1.00  0.00          C   
+ATOM    569  CD  GLU A  76      13.399 -10.297 -13.452  1.00  0.00          C   
+ATOM    570  OE1 GLU A  76      12.554  -9.373 -13.430  1.00  0.00          O   
+ATOM    571  OE2 GLU A  76      13.727 -10.894 -14.501  1.00  0.00          O   
+ATOM    572  N   GLU A  77      16.313 -11.414  -9.551  1.00  0.00          N   
+ATOM    573  CA  GLU A  77      17.769 -11.510  -9.570  1.00  0.00          C   
+ATOM    574  C   GLU A  77      18.310 -11.423 -10.994  1.00  0.00          C   
+ATOM    575  CB  GLU A  77      18.231 -12.812  -8.911  1.00  0.00          C   
+ATOM    576  O   GLU A  77      17.548 -11.510 -11.959  1.00  0.00          O   
+ATOM    577  CG  GLU A  77      17.844 -12.929  -7.444  1.00  0.00          C   
+ATOM    578  CD  GLU A  77      18.639 -12.003  -6.537  1.00  0.00          C   
+ATOM    579  OE1 GLU A  77      19.776 -11.626  -6.901  1.00  0.00          O   
+ATOM    580  OE2 GLU A  77      18.120 -11.651  -5.454  1.00  0.00          O   
+ATOM    581  N   ASP A  78      19.573 -11.066 -11.091  1.00  0.00          N   
+ATOM    582  CA  ASP A  78      20.266 -10.915 -12.367  1.00  0.00          C   
+ATOM    583  C   ASP A  78      20.084 -12.153 -13.241  1.00  0.00          C   
+ATOM    584  CB  ASP A  78      21.755 -10.645 -12.140  1.00  0.00          C   
+ATOM    585  O   ASP A  78      20.095 -12.059 -14.470  1.00  0.00          O   
+ATOM    586  CG  ASP A  78      22.029  -9.254 -11.597  1.00  0.00          C   
+ATOM    587  OD1 ASP A  78      23.114  -9.028 -11.018  1.00  0.00          O   
+ATOM    588  OD2 ASP A  78      21.152  -8.376 -11.747  1.00  0.00          O   
+ATOM    589  N   ASP A  79      19.875 -13.279 -12.572  1.00  0.00          N   
+ATOM    590  CA  ASP A  79      19.730 -14.515 -13.335  1.00  0.00          C   
+ATOM    591  C   ASP A  79      18.288 -14.708 -13.799  1.00  0.00          C   
+ATOM    592  CB  ASP A  79      20.180 -15.716 -12.501  1.00  0.00          C   
+ATOM    593  O   ASP A  79      17.946 -15.750 -14.363  1.00  0.00          O   
+ATOM    594  CG  ASP A  79      19.357 -15.903 -11.238  1.00  0.00          C   
+ATOM    595  OD1 ASP A  79      19.656 -16.822 -10.446  1.00  0.00          O   
+ATOM    596  OD2 ASP A  79      18.399 -15.127 -11.036  1.00  0.00          O   
+ATOM    597  N   GLY A  80      17.414 -13.715 -13.581  1.00  0.00          N   
+ATOM    598  CA  GLY A  80      16.044 -13.776 -14.063  1.00  0.00          C   
+ATOM    599  C   GLY A  80      15.095 -14.439 -13.081  1.00  0.00          C   
+ATOM    600  O   GLY A  80      13.881 -14.444 -13.291  1.00  0.00          O   
+ATOM    601  N   ASP A  81      15.662 -15.063 -12.040  1.00  0.00          N   
+ATOM    602  CA  ASP A  81      14.823 -15.721 -11.043  1.00  0.00          C   
+ATOM    603  C   ASP A  81      14.161 -14.699 -10.121  1.00  0.00          C   
+ATOM    604  CB  ASP A  81      15.646 -16.715 -10.221  1.00  0.00          C   
+ATOM    605  O   ASP A  81      14.715 -13.625  -9.878  1.00  0.00          O   
+ATOM    606  CG  ASP A  81      16.113 -17.911 -11.031  1.00  0.00          C   
+ATOM    607  OD1 ASP A  81      17.118 -18.550 -10.652  1.00  0.00          O   
+ATOM    608  OD2 ASP A  81      15.472 -18.216 -12.060  1.00  0.00          O   
+ATOM    609  N   THR A  82      12.968 -14.929  -9.764  1.00  0.00          N   
+ATOM    610  CA  THR A  82      12.231 -14.082  -8.832  1.00  0.00          C   
+ATOM    611  C   THR A  82      12.233 -14.689  -7.432  1.00  0.00          C   
+ATOM    612  CB  THR A  82      10.780 -13.868  -9.299  1.00  0.00          C   
+ATOM    613  O   THR A  82      11.931 -15.872  -7.262  1.00  0.00          O   
+ATOM    614  CG2 THR A  82      10.028 -12.938  -8.352  1.00  0.00          C   
+ATOM    615  OG1 THR A  82      10.786 -13.291 -10.611  1.00  0.00          O   
+ATOM    616  N   HIS A  83      12.679 -13.936  -6.510  1.00  0.00          N   
+ATOM    617  CA  HIS A  83      12.653 -14.347  -5.110  1.00  0.00          C   
+ATOM    618  C   HIS A  83      11.661 -13.511  -4.309  1.00  0.00          C   
+ATOM    619  CB  HIS A  83      14.049 -14.239  -4.494  1.00  0.00          C   
+ATOM    620  O   HIS A  83      11.675 -12.280  -4.387  1.00  0.00          O   
+ATOM    621  CG  HIS A  83      15.047 -15.170  -5.104  1.00  0.00          C   
+ATOM    622  CD2 HIS A  83      15.925 -14.991  -6.119  1.00  0.00          C   
+ATOM    623  ND1 HIS A  83      15.219 -16.466  -4.669  1.00  0.00          N   
+ATOM    624  CE1 HIS A  83      16.163 -17.046  -5.391  1.00  0.00          C   
+ATOM    625  NE2 HIS A  83      16.608 -16.172  -6.279  1.00  0.00          N   
+ATOM    626  N   CYS A  84      10.791 -14.185  -3.722  1.00  0.00          N   
+ATOM    627  CA  CYS A  84       9.793 -13.514  -2.896  1.00  0.00          C   
+ATOM    628  C   CYS A  84      10.017 -13.813  -1.419  1.00  0.00          C   
+ATOM    629  CB  CYS A  84       8.384 -13.942  -3.305  1.00  0.00          C   
+ATOM    630  O   CYS A  84      10.408 -14.924  -1.059  1.00  0.00          O   
+ATOM    631  SG  CYS A  84       7.968 -13.539  -5.016  1.00  0.00          S   
+ATOM    632  N   HIS A  85       9.909 -12.859  -0.708  1.00  0.00          N   
+ATOM    633  CA  HIS A  85       9.975 -13.070   0.733  1.00  0.00          C   
+ATOM    634  C   HIS A  85       8.927 -12.236   1.461  1.00  0.00          C   
+ATOM    635  CB  HIS A  85      11.372 -12.734   1.260  1.00  0.00          C   
+ATOM    636  O   HIS A  85       8.377 -11.289   0.894  1.00  0.00          O   
+ATOM    637  CG  HIS A  85      11.748 -11.296   1.089  1.00  0.00          C   
+ATOM    638  CD2 HIS A  85      11.777 -10.273   1.975  1.00  0.00          C   
+ATOM    639  ND1 HIS A  85      12.152 -10.772  -0.120  1.00  0.00          N   
+ATOM    640  CE1 HIS A  85      12.415  -9.485   0.031  1.00  0.00          C   
+ATOM    641  NE2 HIS A  85      12.196  -9.157   1.293  1.00  0.00          N   
+ATOM    642  N   CYS A  86       8.500 -12.728   2.583  1.00  0.00          N   
+ATOM    643  CA  CYS A  86       7.596 -12.021   3.484  1.00  0.00          C   
+ATOM    644  C   CYS A  86       8.373 -11.290   4.572  1.00  0.00          C   
+ATOM    645  CB  CYS A  86       6.603 -12.993   4.119  1.00  0.00          C   
+ATOM    646  O   CYS A  86       8.939 -11.920   5.467  1.00  0.00          O   
+ATOM    647  SG  CYS A  86       5.473 -13.757   2.934  1.00  0.00          S   
+ATOM    648  N   SER A  87       8.541 -10.143   4.355  1.00  0.00          N   
+ATOM    649  CA  SER A  87       9.296  -9.406   5.363  1.00  0.00          C   
+ATOM    650  C   SER A  87       8.570  -8.129   5.774  1.00  0.00          C   
+ATOM    651  CB  SER A  87      10.692  -9.064   4.843  1.00  0.00          C   
+ATOM    652  O   SER A  87       8.018  -7.424   4.927  1.00  0.00          O   
+ATOM    653  OG  SER A  87      11.410  -8.297   5.794  1.00  0.00          O   
+ATOM    654  N   CYS A  88       8.324  -8.020   6.956  1.00  0.00          N   
+ATOM    655  CA  CYS A  88       7.764  -6.786   7.497  1.00  0.00          C   
+ATOM    656  C   CYS A  88       8.869  -5.829   7.928  1.00  0.00          C   
+ATOM    657  CB  CYS A  88       6.847  -7.088   8.681  1.00  0.00          C   
+ATOM    658  O   CYS A  88       8.600  -4.816   8.576  1.00  0.00          O   
+ATOM    659  SG  CYS A  88       5.414  -8.102   8.253  1.00  0.00          S   
+ATOM    660  N   GLU A  89       9.941  -6.277   7.427  1.00  0.00          N   
+ATOM    661  CA  GLU A  89      11.079  -5.417   7.736  1.00  0.00          C   
+ATOM    662  C   GLU A  89      11.164  -4.244   6.763  1.00  0.00          C   
+ATOM    663  CB  GLU A  89      12.382  -6.219   7.709  1.00  0.00          C   
+ATOM    664  O   GLU A  89      10.884  -4.397   5.572  1.00  0.00          O   
+ATOM    665  CG  GLU A  89      12.497  -7.244   8.828  1.00  0.00          C   
+ATOM    666  CD  GLU A  89      12.821  -6.626  10.178  1.00  0.00          C   
+ATOM    667  OE1 GLU A  89      13.318  -5.477  10.216  1.00  0.00          O   
+ATOM    668  OE2 GLU A  89      12.577  -7.295  11.207  1.00  0.00          O   
+ATOM    669  N   HIS A  90      10.877  -2.882   7.151  1.00  0.00          N   
+ATOM    670  CA  HIS A  90      11.037  -1.634   6.414  1.00  0.00          C   
+ATOM    671  C   HIS A  90      12.477  -1.452   5.945  1.00  0.00          C   
+ATOM    672  CB  HIS A  90      10.611  -0.444   7.276  1.00  0.00          C   
+ATOM    673  O   HIS A  90      13.291  -0.847   6.647  1.00  0.00          O   
+ATOM    674  CG  HIS A  90       9.172  -0.482   7.682  1.00  0.00          C   
+ATOM    675  CD2 HIS A  90       8.592  -0.729   8.880  1.00  0.00          C   
+ATOM    676  ND1 HIS A  90       8.143  -0.249   6.795  1.00  0.00          N   
+ATOM    677  CE1 HIS A  90       6.989  -0.350   7.434  1.00  0.00          C   
+ATOM    678  NE2 HIS A  90       7.234  -0.641   8.700  1.00  0.00          N   
+ATOM    679  N   SER A  91      13.113  -2.415   5.257  1.00  0.00          N   
+ATOM    680  CA  SER A  91      14.468  -1.999   4.909  1.00  0.00          C   
+ATOM    681  C   SER A  91      14.482  -1.180   3.623  1.00  0.00          C   
+ATOM    682  CB  SER A  91      15.380  -3.217   4.758  1.00  0.00          C   
+ATOM    683  O   SER A  91      13.868  -1.568   2.627  1.00  0.00          O   
+ATOM    684  OG  SER A  91      15.023  -3.974   3.614  1.00  0.00          O   
+ATOM    685  N   HIS A  92      14.296   0.148   3.642  1.00  0.00          N   
+ATOM    686  CA  HIS A  92      14.603   1.170   2.647  1.00  0.00          C   
+ATOM    687  C   HIS A  92      15.930   0.882   1.953  1.00  0.00          C   
+ATOM    688  CB  HIS A  92      14.638   2.555   3.295  1.00  0.00          C   
+ATOM    689  O   HIS A  92      16.284   1.551   0.979  1.00  0.00          O   
+ATOM    690  CG  HIS A  92      13.324   2.984   3.866  1.00  0.00          C   
+ATOM    691  CD2 HIS A  92      12.943   3.213   5.145  1.00  0.00          C   
+ATOM    692  ND1 HIS A  92      12.216   3.224   3.084  1.00  0.00          N   
+ATOM    693  CE1 HIS A  92      11.207   3.584   3.859  1.00  0.00          C   
+ATOM    694  NE2 HIS A  92      11.621   3.585   5.114  1.00  0.00          N   
+ATOM    695  N   ASP A  93      16.676  -0.193   2.168  1.00  0.00          N   
+ATOM    696  CA  ASP A  93      18.015  -0.132   1.589  1.00  0.00          C   
+ATOM    697  C   ASP A  93      18.097  -0.954   0.305  1.00  0.00          C   
+ATOM    698  CB  ASP A  93      19.058  -0.622   2.596  1.00  0.00          C   
+ATOM    699  O   ASP A  93      19.179  -1.132  -0.256  1.00  0.00          O   
+ATOM    700  CG  ASP A  93      19.487   0.454   3.577  1.00  0.00          C   
+ATOM    701  OD1 ASP A  93      20.370   0.192   4.423  1.00  0.00          O   
+ATOM    702  OD2 ASP A  93      18.935   1.573   3.507  1.00  0.00          O   
+ATOM    703  N   HIS A  94      17.467  -0.634  -0.758  1.00  0.00          N   
+ATOM    704  CA  HIS A  94      18.140  -1.057  -1.982  1.00  0.00          C   
+ATOM    705  C   HIS A  94      17.627  -0.280  -3.189  1.00  0.00          C   
+ATOM    706  CB  HIS A  94      17.951  -2.559  -2.205  1.00  0.00          C   
+ATOM    707  O   HIS A  94      16.419  -0.075  -3.334  1.00  0.00          O   
+ATOM    708  CG  HIS A  94      18.800  -3.409  -1.315  1.00  0.00          C   
+ATOM    709  CD2 HIS A  94      18.467  -4.255  -0.312  1.00  0.00          C   
+ATOM    710  ND1 HIS A  94      20.175  -3.442  -1.407  1.00  0.00          N   
+ATOM    711  CE1 HIS A  94      20.651  -4.276  -0.497  1.00  0.00          C   
+ATOM    712  NE2 HIS A  94      19.635  -4.782   0.181  1.00  0.00          N   
+ATOM    713  N   HIS A  95      18.249   0.957  -3.481  1.00  0.00          N   
+ATOM    714  CA  HIS A  95      18.496   1.578  -4.778  1.00  0.00          C   
+ATOM    715  C   HIS A  95      18.041   0.672  -5.918  1.00  0.00          C   
+ATOM    716  CB  HIS A  95      19.979   1.916  -4.936  1.00  0.00          C   
+ATOM    717  O   HIS A  95      18.521   0.799  -7.046  1.00  0.00          O   
+ATOM    718  CG  HIS A  95      20.458   2.973  -3.992  1.00  0.00          C   
+ATOM    719  CD2 HIS A  95      21.388   2.932  -3.010  1.00  0.00          C   
+ATOM    720  ND1 HIS A  95      19.959   4.258  -3.999  1.00  0.00          N   
+ATOM    721  CE1 HIS A  95      20.565   4.963  -3.059  1.00  0.00          C   
+ATOM    722  NE2 HIS A  95      21.437   4.182  -2.444  1.00  0.00          N   
+ATOM    723  N   ASP A  96      16.923   0.136  -5.980  1.00  0.00          N   
+ATOM    724  CA  ASP A  96      16.554  -0.218  -7.347  1.00  0.00          C   
+ATOM    725  C   ASP A  96      15.459   0.705  -7.877  1.00  0.00          C   
+ATOM    726  CB  ASP A  96      16.093  -1.676  -7.418  1.00  0.00          C   
+ATOM    727  O   ASP A  96      14.655   1.230  -7.104  1.00  0.00          O   
+ATOM    728  CG  ASP A  96      17.246  -2.663  -7.414  1.00  0.00          C   
+ATOM    729  OD1 ASP A  96      17.024  -3.859  -7.125  1.00  0.00          O   
+ATOM    730  OD2 ASP A  96      18.388  -2.242  -7.699  1.00  0.00          O   
+ATOM    731  N   ASP A  97      15.890   1.837  -8.509  1.00  0.00          N   
+ATOM    732  CA  ASP A  97      15.081   2.551  -9.491  1.00  0.00          C   
+ATOM    733  C   ASP A  97      13.874   1.718  -9.918  1.00  0.00          C   
+ATOM    734  CB  ASP A  97      15.923   2.923 -10.713  1.00  0.00          C   
+ATOM    735  O   ASP A  97      13.369   1.874 -11.032  1.00  0.00          O   
+ATOM    736  CG  ASP A  97      16.981   3.969 -10.409  1.00  0.00          C   
+ATOM    737  OD1 ASP A  97      18.049   3.963 -11.058  1.00  0.00          O   
+ATOM    738  OD2 ASP A  97      16.746   4.804  -9.509  1.00  0.00          O   
+ATOM    739  N   ASP A  98      13.468   0.802  -9.181  1.00  0.00          N   
+ATOM    740  CA  ASP A  98      12.224   0.241  -9.699  1.00  0.00          C   
+ATOM    741  C   ASP A  98      11.093   1.266  -9.639  1.00  0.00          C   
+ATOM    742  CB  ASP A  98      11.837  -1.017  -8.920  1.00  0.00          C   
+ATOM    743  O   ASP A  98      10.974   2.010  -8.663  1.00  0.00          O   
+ATOM    744  CG  ASP A  98      12.688  -2.222  -9.278  1.00  0.00          C   
+ATOM    745  OD1 ASP A  98      12.775  -3.170  -8.468  1.00  0.00          O   
+ATOM    746  OD2 ASP A  98      13.280  -2.223 -10.379  1.00  0.00          O   
+ATOM    747  N   THR A  99      11.132   2.146 -10.695  1.00  0.00          N   
+ATOM    748  CA  THR A  99       9.998   2.959 -11.120  1.00  0.00          C   
+ATOM    749  C   THR A  99       8.685   2.355 -10.628  1.00  0.00          C   
+ATOM    750  CB  THR A  99       9.957   3.102 -12.653  1.00  0.00          C   
+ATOM    751  O   THR A  99       7.730   2.223 -11.396  1.00  0.00          O   
+ATOM    752  CG2 THR A  99      11.214   3.791 -13.174  1.00  0.00          C   
+ATOM    753  OG1 THR A  99       9.857   1.802 -13.246  1.00  0.00          O   
+ATOM    754  N   HIS A 100       8.653   1.675  -9.540  1.00  0.00          N   
+ATOM    755  CA  HIS A 100       7.234   1.548  -9.228  1.00  0.00          C   
+ATOM    756  C   HIS A 100       6.625   2.899  -8.870  1.00  0.00          C   
+ATOM    757  CB  HIS A 100       7.024   0.557  -8.082  1.00  0.00          C   
+ATOM    758  O   HIS A 100       7.154   3.617  -8.019  1.00  0.00          O   
+ATOM    759  CG  HIS A 100       7.437  -0.842  -8.414  1.00  0.00          C   
+ATOM    760  CD2 HIS A 100       8.446  -1.607  -7.937  1.00  0.00          C   
+ATOM    761  ND1 HIS A 100       6.777  -1.610  -9.349  1.00  0.00          N   
+ATOM    762  CE1 HIS A 100       7.365  -2.793  -9.431  1.00  0.00          C   
+ATOM    763  NE2 HIS A 100       8.380  -2.816  -8.585  1.00  0.00          N   
+ATOM    764  N   GLY A 101       6.381   3.654  -9.900  1.00  0.00          N   
+ATOM    765  CA  GLY A 101       5.487   4.753  -9.574  1.00  0.00          C   
+ATOM    766  C   GLY A 101       4.744   4.550  -8.267  1.00  0.00          C   
+ATOM    767  O   GLY A 101       3.522   4.386  -8.261  1.00  0.00          O   
+ATOM    768  N   GLU A 102       5.430   3.707  -7.432  1.00  0.00          N   
+ATOM    769  CA  GLU A 102       4.594   3.693  -6.235  1.00  0.00          C   
+ATOM    770  C   GLU A 102       4.478   5.087  -5.627  1.00  0.00          C   
+ATOM    771  CB  GLU A 102       5.153   2.712  -5.201  1.00  0.00          C   
+ATOM    772  O   GLU A 102       5.392   5.905  -5.757  1.00  0.00          O   
+ATOM    773  CG  GLU A 102       5.195   1.269  -5.681  1.00  0.00          C   
+ATOM    774  CD  GLU A 102       3.815   0.668  -5.897  1.00  0.00          C   
+ATOM    775  OE1 GLU A 102       2.810   1.292  -5.486  1.00  0.00          O   
+ATOM    776  OE2 GLU A 102       3.738  -0.436  -6.481  1.00  0.00          O   
+ATOM    777  N   CYS A 103       3.304   5.585  -5.881  1.00  0.00          N   
+ATOM    778  CA  CYS A 103       2.937   6.733  -5.061  1.00  0.00          C   
+ATOM    779  C   CYS A 103       3.767   6.778  -3.783  1.00  0.00          C   
+ATOM    780  CB  CYS A 103       1.449   6.690  -4.712  1.00  0.00          C   
+ATOM    781  O   CYS A 103       3.803   5.806  -3.027  1.00  0.00          O   
+ATOM    782  SG  CYS A 103       0.362   6.999  -6.121  1.00  0.00          S   
+ATOM    783  N   THR A 104       4.856   7.423  -3.910  1.00  0.00          N   
+ATOM    784  CA  THR A 104       5.617   7.650  -2.686  1.00  0.00          C   
+ATOM    785  C   THR A 104       5.025   8.808  -1.888  1.00  0.00          C   
+ATOM    786  CB  THR A 104       7.098   7.939  -2.995  1.00  0.00          C   
+ATOM    787  O   THR A 104       4.142   9.517  -2.375  1.00  0.00          O   
+ATOM    788  CG2 THR A 104       7.686   6.875  -3.916  1.00  0.00          C   
+ATOM    789  OG1 THR A 104       7.206   9.219  -3.631  1.00  0.00          O   
+ATOM    790  N   LYS A 105       5.301   8.726  -0.683  1.00  0.00          N   
+ATOM    791  CA  LYS A 105       4.870   9.830   0.169  1.00  0.00          C   
+ATOM    792  C   LYS A 105       5.196  11.178  -0.469  1.00  0.00          C   
+ATOM    793  CB  LYS A 105       5.523   9.731   1.548  1.00  0.00          C   
+ATOM    794  O   LYS A 105       4.534  12.179  -0.190  1.00  0.00          O   
+ATOM    795  CG  LYS A 105       4.955   8.625   2.425  1.00  0.00          C   
+ATOM    796  CD  LYS A 105       5.514   8.690   3.840  1.00  0.00          C   
+ATOM    797  CE  LYS A 105       4.894   7.627   4.736  1.00  0.00          C   
+ATOM    798  NZ  LYS A 105       5.487   7.643   6.107  1.00  0.00          N   
+ATOM    799  N   LYS A 106       6.132  11.170  -1.417  1.00  0.00          N   
+ATOM    800  CA  LYS A 106       6.565  12.408  -2.059  1.00  0.00          C   
+ATOM    801  C   LYS A 106       5.727  12.707  -3.298  1.00  0.00          C   
+ATOM    802  CB  LYS A 106       8.046  12.329  -2.434  1.00  0.00          C   
+ATOM    803  O   LYS A 106       5.794  13.808  -3.849  1.00  0.00          O   
+ATOM    804  CG  LYS A 106       8.986  12.274  -1.239  1.00  0.00          C   
+ATOM    805  CD  LYS A 106      10.445  12.262  -1.676  1.00  0.00          C   
+ATOM    806  CE  LYS A 106      11.387  12.222  -0.480  1.00  0.00          C   
+ATOM    807  NZ  LYS A 106      12.817  12.151  -0.903  1.00  0.00          N   
+ATOM    808  N   ALA A 107       5.009  11.655  -3.672  1.00  0.00          N   
+ATOM    809  CA  ALA A 107       4.208  11.854  -4.877  1.00  0.00          C   
+ATOM    810  C   ALA A 107       3.004  12.748  -4.594  1.00  0.00          C   
+ATOM    811  CB  ALA A 107       3.749  10.511  -5.439  1.00  0.00          C   
+ATOM    812  O   ALA A 107       2.358  12.618  -3.552  1.00  0.00          O   
+ATOM    813  N   PRO A 108       2.750  13.735  -5.350  1.00  0.00          N   
+ATOM    814  CA  PRO A 108       1.593  14.609  -5.140  1.00  0.00          C   
+ATOM    815  C   PRO A 108       0.271  13.845  -5.124  1.00  0.00          C   
+ATOM    816  CB  PRO A 108       1.656  15.568  -6.331  1.00  0.00          C   
+ATOM    817  O   PRO A 108      -0.730  14.348  -4.607  1.00  0.00          O   
+ATOM    818  CG  PRO A 108       2.473  14.851  -7.356  1.00  0.00          C   
+ATOM    819  CD  PRO A 108       3.398  13.901  -6.650  1.00  0.00          C   
+ATOM    820  N   CYS A 109       0.245  12.652  -5.681  1.00  0.00          N   
+ATOM    821  CA  CYS A 109      -1.009  11.911  -5.770  1.00  0.00          C   
+ATOM    822  C   CYS A 109      -1.162  10.954  -4.594  1.00  0.00          C   
+ATOM    823  CB  CYS A 109      -1.079  11.134  -7.084  1.00  0.00          C   
+ATOM    824  O   CYS A 109      -2.174  10.261  -4.480  1.00  0.00          O   
+ATOM    825  SG  CYS A 109       0.290   9.980  -7.322  1.00  0.00          S   
+ATOM    826  N   TRP A 110      -0.068  10.925  -3.822  1.00  0.00          N   
+ATOM    827  CA  TRP A 110      -0.125  10.100  -2.621  1.00  0.00          C   
+ATOM    828  C   TRP A 110      -1.071  10.704  -1.589  1.00  0.00          C   
+ATOM    829  CB  TRP A 110       1.272   9.934  -2.016  1.00  0.00          C   
+ATOM    830  O   TRP A 110      -0.962  11.887  -1.255  1.00  0.00          O   
+ATOM    831  CG  TRP A 110       1.322   8.997  -0.846  1.00  0.00          C   
+ATOM    832  CD1 TRP A 110       1.696   7.682  -0.859  1.00  0.00          C   
+ATOM    833  CD2 TRP A 110       0.980   9.304   0.509  1.00  0.00          C   
+ATOM    834  CE2 TRP A 110       1.172   8.127   1.266  1.00  0.00          C   
+ATOM    835  CE3 TRP A 110       0.531  10.462   1.158  1.00  0.00          C   
+ATOM    836  NE1 TRP A 110       1.608   7.153   0.408  1.00  0.00          N   
+ATOM    837  CH2 TRP A 110       0.491   9.222   3.250  1.00  0.00          C   
+ATOM    838  CZ2 TRP A 110       0.929   8.075   2.640  1.00  0.00          C   
+ATOM    839  CZ3 TRP A 110       0.290  10.409   2.526  1.00  0.00          C   
+ATOM    840  N   ARG A 111      -2.102   9.880  -1.162  1.00  0.00          N   
+ATOM    841  CA  ARG A 111      -3.086  10.357  -0.197  1.00  0.00          C   
+ATOM    842  C   ARG A 111      -3.345   9.313   0.884  1.00  0.00          C   
+ATOM    843  CB  ARG A 111      -4.397  10.720  -0.899  1.00  0.00          C   
+ATOM    844  O   ARG A 111      -3.329   8.111   0.610  1.00  0.00          O   
+ATOM    845  CG  ARG A 111      -5.466  11.263   0.034  1.00  0.00          C   
+ATOM    846  CD  ARG A 111      -5.180  12.701   0.443  1.00  0.00          C   
+ATOM    847  NE  ARG A 111      -6.289  13.277   1.200  1.00  0.00          N   
+ATOM    848  NH1 ARG A 111      -5.313  15.357   1.444  1.00  0.00          N   
+ATOM    849  NH2 ARG A 111      -7.384  14.946   2.335  1.00  0.00          N   
+ATOM    850  CZ  ARG A 111      -6.326  14.525   1.658  1.00  0.00          C   
+ATOM    851  N   CYS A 112      -3.365   9.888   2.033  1.00  0.00          N   
+ATOM    852  CA  CYS A 112      -3.705   9.030   3.162  1.00  0.00          C   
+ATOM    853  C   CYS A 112      -5.019   9.463   3.801  1.00  0.00          C   
+ATOM    854  CB  CYS A 112      -2.589   9.051   4.206  1.00  0.00          C   
+ATOM    855  O   CYS A 112      -5.318  10.657   3.866  1.00  0.00          O   
+ATOM    856  SG  CYS A 112      -1.031   8.349   3.621  1.00  0.00          S   
+ATOM    857  N   GLU A 113      -5.830   8.580   3.951  1.00  0.00          N   
+ATOM    858  CA  GLU A 113      -7.053   8.822   4.710  1.00  0.00          C   
+ATOM    859  C   GLU A 113      -7.031   8.080   6.044  1.00  0.00          C   
+ATOM    860  CB  GLU A 113      -8.282   8.407   3.897  1.00  0.00          C   
+ATOM    861  O   GLU A 113      -6.553   6.947   6.122  1.00  0.00          O   
+ATOM    862  CG  GLU A 113      -8.500   9.241   2.643  1.00  0.00          C   
+ATOM    863  CD  GLU A 113      -9.731   8.826   1.853  1.00  0.00          C   
+ATOM    864  OE1 GLU A 113     -10.458   7.909   2.299  1.00  0.00          O   
+ATOM    865  OE2 GLU A 113      -9.971   9.422   0.780  1.00  0.00          O   
+ATOM    866  N   TYR A 114      -7.305   8.869   7.059  1.00  0.00          N   
+ATOM    867  CA  TYR A 114      -7.411   8.262   8.381  1.00  0.00          C   
+ATOM    868  C   TYR A 114      -8.671   7.412   8.491  1.00  0.00          C   
+ATOM    869  CB  TYR A 114      -7.412   9.340   9.469  1.00  0.00          C   
+ATOM    870  O   TYR A 114      -9.775   7.889   8.219  1.00  0.00          O   
+ATOM    871  CG  TYR A 114      -7.392   8.785  10.872  1.00  0.00          C   
+ATOM    872  CD1 TYR A 114      -8.527   8.834  11.678  1.00  0.00          C   
+ATOM    873  CD2 TYR A 114      -6.238   8.213  11.396  1.00  0.00          C   
+ATOM    874  CE1 TYR A 114      -8.513   8.326  12.973  1.00  0.00          C   
+ATOM    875  CE2 TYR A 114      -6.212   7.702  12.690  1.00  0.00          C   
+ATOM    876  OH  TYR A 114      -7.333   7.258  14.750  1.00  0.00          O   
+ATOM    877  CZ  TYR A 114      -7.353   7.762  13.469  1.00  0.00          C   
+ATOM    878  N   ASN A 115      -8.439   6.137   8.704  1.00  0.00          N   
+ATOM    879  CA  ASN A 115      -9.527   5.202   8.972  1.00  0.00          C   
+ATOM    880  C   ASN A 115      -9.770   5.039  10.469  1.00  0.00          C   
+ATOM    881  CB  ASN A 115      -9.238   3.844   8.330  1.00  0.00          C   
+ATOM    882  O   ASN A 115      -8.953   4.443  11.174  1.00  0.00          O   
+ATOM    883  CG  ASN A 115     -10.442   2.922   8.345  1.00  0.00          C   
+ATOM    884  ND2 ASN A 115     -10.511   2.021   7.373  1.00  0.00          N   
+ATOM    885  OD1 ASN A 115     -11.302   3.020   9.224  1.00  0.00          O   
+ATOM    886  N   ALA A 116     -10.796   5.699  10.920  1.00  0.00          N   
+ATOM    887  CA  ALA A 116     -11.108   5.723  12.347  1.00  0.00          C   
+ATOM    888  C   ALA A 116     -11.283   4.310  12.894  1.00  0.00          C   
+ATOM    889  CB  ALA A 116     -12.366   6.549  12.603  1.00  0.00          C   
+ATOM    890  O   ALA A 116     -10.898   4.025  14.031  1.00  0.00          O   
+ATOM    891  N   ASP A 117     -11.725   3.414  12.007  1.00  0.00          N   
+ATOM    892  CA  ASP A 117     -11.929   2.033  12.433  1.00  0.00          C   
+ATOM    893  C   ASP A 117     -10.595   1.313  12.619  1.00  0.00          C   
+ATOM    894  CB  ASP A 117     -12.796   1.281  11.421  1.00  0.00          C   
+ATOM    895  O   ASP A 117     -10.432   0.529  13.557  1.00  0.00          O   
+ATOM    896  CG  ASP A 117     -14.225   1.793  11.369  1.00  0.00          C   
+ATOM    897  OD1 ASP A 117     -14.898   1.618  10.331  1.00  0.00          O   
+ATOM    898  OD2 ASP A 117     -14.681   2.378  12.375  1.00  0.00          O   
+ATOM    899  N   LEU A 118      -9.664   1.666  11.738  1.00  0.00          N   
+ATOM    900  CA  LEU A 118      -8.349   1.035  11.785  1.00  0.00          C   
+ATOM    901  C   LEU A 118      -7.364   1.891  12.575  1.00  0.00          C   
+ATOM    902  CB  LEU A 118      -7.816   0.800  10.369  1.00  0.00          C   
+ATOM    903  O   LEU A 118      -6.231   1.472  12.822  1.00  0.00          O   
+ATOM    904  CG  LEU A 118      -8.639  -0.135   9.481  1.00  0.00          C   
+ATOM    905  CD1 LEU A 118      -8.022  -0.225   8.090  1.00  0.00          C   
+ATOM    906  CD2 LEU A 118      -8.746  -1.518  10.115  1.00  0.00          C   
+ATOM    907  N   LYS A 119      -7.828   3.091  12.895  1.00  0.00          N   
+ATOM    908  CA  LYS A 119      -6.988   4.069  13.580  1.00  0.00          C   
+ATOM    909  C   LYS A 119      -5.640   4.222  12.882  1.00  0.00          C   
+ATOM    910  CB  LYS A 119      -6.780   3.668  15.041  1.00  0.00          C   
+ATOM    911  O   LYS A 119      -4.596   4.257  13.537  1.00  0.00          O   
+ATOM    912  CG  LYS A 119      -8.064   3.604  15.855  1.00  0.00          C   
+ATOM    913  CD  LYS A 119      -7.786   3.255  17.311  1.00  0.00          C   
+ATOM    914  CE  LYS A 119      -9.062   3.263  18.143  1.00  0.00          C   
+ATOM    915  NZ  LYS A 119      -8.786   2.979  19.583  1.00  0.00          N   
+ATOM    916  N   HIS A 120      -5.544   4.099  11.731  1.00  0.00          N   
+ATOM    917  CA  HIS A 120      -4.341   4.353  10.946  1.00  0.00          C   
+ATOM    918  C   HIS A 120      -4.690   4.898   9.565  1.00  0.00          C   
+ATOM    919  CB  HIS A 120      -3.510   3.075  10.811  1.00  0.00          C   
+ATOM    920  O   HIS A 120      -5.853   4.869   9.156  1.00  0.00          O   
+ATOM    921  CG  HIS A 120      -4.217   1.973  10.089  1.00  0.00          C   
+ATOM    922  CD2 HIS A 120      -4.107   1.532   8.813  1.00  0.00          C   
+ATOM    923  ND1 HIS A 120      -5.174   1.183  10.689  1.00  0.00          N   
+ATOM    924  CE1 HIS A 120      -5.622   0.301   9.811  1.00  0.00          C   
+ATOM    925  NE2 HIS A 120      -4.990   0.491   8.666  1.00  0.00          N   
+ATOM    926  N   ASP A 121      -3.704   5.475   9.017  1.00  0.00          N   
+ATOM    927  CA  ASP A 121      -3.873   6.009   7.669  1.00  0.00          C   
+ATOM    928  C   ASP A 121      -3.838   4.892   6.628  1.00  0.00          C   
+ATOM    929  CB  ASP A 121      -2.792   7.047   7.363  1.00  0.00          C   
+ATOM    930  O   ASP A 121      -3.053   3.949   6.747  1.00  0.00          O   
+ATOM    931  CG  ASP A 121      -2.917   8.301   8.210  1.00  0.00          C   
+ATOM    932  OD1 ASP A 121      -1.936   9.069   8.312  1.00  0.00          O   
+ATOM    933  OD2 ASP A 121      -4.006   8.521   8.784  1.00  0.00          O   
+ATOM    934  N   VAL A 122      -4.829   4.935   5.875  1.00  0.00          N   
+ATOM    935  CA  VAL A 122      -4.775   4.123   4.663  1.00  0.00          C   
+ATOM    936  C   VAL A 122      -4.276   4.971   3.495  1.00  0.00          C   
+ATOM    937  CB  VAL A 122      -6.154   3.511   4.328  1.00  0.00          C   
+ATOM    938  O   VAL A 122      -4.857   6.013   3.184  1.00  0.00          O   
+ATOM    939  CG1 VAL A 122      -6.063   2.625   3.087  1.00  0.00          C   
+ATOM    940  CG2 VAL A 122      -6.688   2.717   5.518  1.00  0.00          C   
+ATOM    941  N   CYS A 123      -3.142   4.531   3.102  1.00  0.00          N   
+ATOM    942  CA  CYS A 123      -2.472   5.318   2.073  1.00  0.00          C   
+ATOM    943  C   CYS A 123      -2.628   4.669   0.702  1.00  0.00          C   
+ATOM    944  CB  CYS A 123      -0.988   5.481   2.403  1.00  0.00          C   
+ATOM    945  O   CYS A 123      -2.671   3.443   0.593  1.00  0.00          O   
+ATOM    946  SG  CYS A 123      -0.681   6.285   3.991  1.00  0.00          S   
+ATOM    947  N   GLY A 124      -2.924   5.462  -0.260  1.00  0.00          N   
+ATOM    948  CA  GLY A 124      -2.940   5.028  -1.648  1.00  0.00          C   
+ATOM    949  C   GLY A 124      -2.699   6.159  -2.630  1.00  0.00          C   
+ATOM    950  O   GLY A 124      -2.463   7.299  -2.225  1.00  0.00          O   
+ATOM    951  N   CYS A 125      -2.378   5.820  -3.813  1.00  0.00          N   
+ATOM    952  CA  CYS A 125      -2.283   6.770  -4.916  1.00  0.00          C   
+ATOM    953  C   CYS A 125      -3.667   7.160  -5.421  1.00  0.00          C   
+ATOM    954  CB  CYS A 125      -1.458   6.183  -6.061  1.00  0.00          C   
+ATOM    955  O   CYS A 125      -4.425   6.307  -5.886  1.00  0.00          O   
+ATOM    956  SG  CYS A 125       0.275   5.900  -5.639  1.00  0.00          S   
+ATOM    957  N   GLU A 126      -4.004   8.323  -5.203  1.00  0.00          N   
+ATOM    958  CA  GLU A 126      -5.332   8.779  -5.604  1.00  0.00          C   
+ATOM    959  C   GLU A 126      -5.243   9.988  -6.530  1.00  0.00          C   
+ATOM    960  CB  GLU A 126      -6.177   9.119  -4.374  1.00  0.00          C   
+ATOM    961  O   GLU A 126      -5.752  11.064  -6.206  1.00  0.00          O   
+ATOM    962  CG  GLU A 126      -6.467   7.924  -3.478  1.00  0.00          C   
+ATOM    963  CD  GLU A 126      -7.488   6.964  -4.068  1.00  0.00          C   
+ATOM    964  OE1 GLU A 126      -8.228   7.361  -4.997  1.00  0.00          O   
+ATOM    965  OE2 GLU A 126      -7.550   5.807  -3.597  1.00  0.00          O   
+ATOM    966  N   CYS A 127      -4.822   9.841  -7.699  1.00  0.00          N   
+ATOM    967  CA  CYS A 127      -4.615  10.948  -8.626  1.00  0.00          C   
+ATOM    968  C   CYS A 127      -5.940  11.598  -9.005  1.00  0.00          C   
+ATOM    969  CB  CYS A 127      -3.895  10.466  -9.885  1.00  0.00          C   
+ATOM    970  O   CYS A 127      -5.987  12.790  -9.312  1.00  0.00          O   
+ATOM    971  SG  CYS A 127      -2.217   9.868  -9.581  1.00  0.00          S   
+ATOM    972  N   SER A 128      -6.846  10.833  -8.955  1.00  0.00          N   
+ATOM    973  CA  SER A 128      -8.150  11.305  -9.408  1.00  0.00          C   
+ATOM    974  C   SER A 128      -8.755  12.293  -8.417  1.00  0.00          C   
+ATOM    975  CB  SER A 128      -9.104  10.128  -9.616  1.00  0.00          C   
+ATOM    976  O   SER A 128      -9.642  13.073  -8.772  1.00  0.00          O   
+ATOM    977  OG  SER A 128      -9.249   9.381  -8.420  1.00  0.00          O   
+ATOM    978  N   LYS A 129      -8.286  12.254  -7.213  1.00  0.00          N   
+ATOM    979  CA  LYS A 129      -8.887  13.076  -6.166  1.00  0.00          C   
+ATOM    980  C   LYS A 129      -8.020  14.294  -5.859  1.00  0.00          C   
+ATOM    981  CB  LYS A 129      -9.104  12.253  -4.896  1.00  0.00          C   
+ATOM    982  O   LYS A 129      -8.420  15.169  -5.089  1.00  0.00          O   
+ATOM    983  CG  LYS A 129     -10.151  11.158  -5.039  1.00  0.00          C   
+ATOM    984  CD  LYS A 129     -10.395  10.441  -3.717  1.00  0.00          C   
+ATOM    985  CE  LYS A 129     -11.490   9.392  -3.843  1.00  0.00          C   
+ATOM    986  NZ  LYS A 129     -11.820   8.774  -2.524  1.00  0.00          N   
+ATOM    987  N   LEU A 130      -6.820  14.391  -6.394  1.00  0.00          N   
+ATOM    988  CA  LEU A 130      -5.922  15.506  -6.110  1.00  0.00          C   
+ATOM    989  C   LEU A 130      -6.255  16.708  -6.987  1.00  0.00          C   
+ATOM    990  CB  LEU A 130      -4.465  15.089  -6.326  1.00  0.00          C   
+ATOM    991  O   LEU A 130      -6.713  16.548  -8.120  1.00  0.00          O   
+ATOM    992  CG  LEU A 130      -3.879  14.117  -5.300  1.00  0.00          C   
+ATOM    993  CD1 LEU A 130      -2.476  13.689  -5.718  1.00  0.00          C   
+ATOM    994  CD2 LEU A 130      -3.859  14.751  -3.913  1.00  0.00          C   
+ATOM    995  N   PRO A 131      -6.218  17.878  -6.321  1.00  0.00          N   
+ATOM    996  CA  PRO A 131      -6.403  19.088  -7.125  1.00  0.00          C   
+ATOM    997  C   PRO A 131      -5.423  19.176  -8.293  1.00  0.00          C   
+ATOM    998  CB  PRO A 131      -6.159  20.219  -6.123  1.00  0.00          C   
+ATOM    999  O   PRO A 131      -4.287  18.706  -8.188  1.00  0.00          O   
+ATOM   1000  CG  PRO A 131      -5.279  19.617  -5.075  1.00  0.00          C   
+ATOM   1001  CD  PRO A 131      -5.586  18.150  -4.979  1.00  0.00          C   
+ATOM   1002  N   CYS A 132      -5.915  19.530  -9.527  1.00  0.00          N   
+ATOM   1003  CA  CYS A 132      -5.087  19.711 -10.714  1.00  0.00          C   
+ATOM   1004  C   CYS A 132      -4.132  20.886 -10.540  1.00  0.00          C   
+ATOM   1005  CB  CYS A 132      -5.960  19.930 -11.949  1.00  0.00          C   
+ATOM   1006  O   CYS A 132      -4.531  22.042 -10.690  1.00  0.00          O   
+ATOM   1007  SG  CYS A 132      -6.896  18.468 -12.448  1.00  0.00          S   
+ATOM   1008  N   ASN A 133      -3.080  20.705  -9.927  1.00  0.00          N   
+ATOM   1009  CA  ASN A 133      -2.027  21.708  -9.810  1.00  0.00          C   
+ATOM   1010  C   ASN A 133      -0.764  21.283 -10.553  1.00  0.00          C   
+ATOM   1011  CB  ASN A 133      -1.710  21.986  -8.339  1.00  0.00          C   
+ATOM   1012  O   ASN A 133      -0.740  20.230 -11.194  1.00  0.00          O   
+ATOM   1013  CG  ASN A 133      -1.260  20.744  -7.595  1.00  0.00          C   
+ATOM   1014  ND2 ASN A 133      -1.758  20.570  -6.376  1.00  0.00          N   
+ATOM   1015  OD1 ASN A 133      -0.470  19.949  -8.110  1.00  0.00          O   
+ATOM   1016  N   ASP A 134       0.201  22.148 -10.651  1.00  0.00          N   
+ATOM   1017  CA  ASP A 134       1.408  21.962 -11.451  1.00  0.00          C   
+ATOM   1018  C   ASP A 134       2.162  20.705 -11.023  1.00  0.00          C   
+ATOM   1019  CB  ASP A 134       2.320  23.185 -11.338  1.00  0.00          C   
+ATOM   1020  O   ASP A 134       2.999  20.192 -11.768  1.00  0.00          O   
+ATOM   1021  CG  ASP A 134       1.789  24.392 -12.091  1.00  0.00          C   
+ATOM   1022  OD1 ASP A 134       2.250  25.525 -11.832  1.00  0.00          O   
+ATOM   1023  OD2 ASP A 134       0.898  24.210 -12.950  1.00  0.00          O   
+ATOM   1024  N   GLU A 135       1.732  20.132  -9.899  1.00  0.00          N   
+ATOM   1025  CA  GLU A 135       2.429  18.946  -9.410  1.00  0.00          C   
+ATOM   1026  C   GLU A 135       1.714  17.669  -9.840  1.00  0.00          C   
+ATOM   1027  CB  GLU A 135       2.559  18.988  -7.885  1.00  0.00          C   
+ATOM   1028  O   GLU A 135       2.282  16.577  -9.766  1.00  0.00          O   
+ATOM   1029  CG  GLU A 135       3.439  20.120  -7.374  1.00  0.00          C   
+ATOM   1030  CD  GLU A 135       3.561  20.146  -5.859  1.00  0.00          C   
+ATOM   1031  OE1 GLU A 135       2.885  19.340  -5.181  1.00  0.00          O   
+ATOM   1032  OE2 GLU A 135       4.339  20.981  -5.346  1.00  0.00          O   
+ATOM   1033  N   HIS A 136       0.480  17.885 -10.293  1.00  0.00          N   
+ATOM   1034  CA  HIS A 136      -0.314  16.733 -10.704  1.00  0.00          C   
+ATOM   1035  C   HIS A 136       0.053  16.287 -12.116  1.00  0.00          C   
+ATOM   1036  CB  HIS A 136      -1.807  17.057 -10.628  1.00  0.00          C   
+ATOM   1037  O   HIS A 136       0.114  17.107 -13.035  1.00  0.00          O   
+ATOM   1038  CG  HIS A 136      -2.685  15.846 -10.645  1.00  0.00          C   
+ATOM   1039  CD2 HIS A 136      -3.469  15.303  -9.684  1.00  0.00          C   
+ATOM   1040  ND1 HIS A 136      -2.822  15.042 -11.756  1.00  0.00          N   
+ATOM   1041  CE1 HIS A 136      -3.655  14.054 -11.476  1.00  0.00          C   
+ATOM   1042  NE2 HIS A 136      -4.062  14.189 -10.225  1.00  0.00          N   
+ATOM   1043  N   PRO A 137       0.226  15.184 -12.322  1.00  0.00          N   
+ATOM   1044  CA  PRO A 137       0.690  14.688 -13.619  1.00  0.00          C   
+ATOM   1045  C   PRO A 137      -0.331  14.908 -14.734  1.00  0.00          C   
+ATOM   1046  CB  PRO A 137       0.910  13.194 -13.368  1.00  0.00          C   
+ATOM   1047  O   PRO A 137       0.032  14.929 -15.913  1.00  0.00          O   
+ATOM   1048  CG  PRO A 137       0.170  12.907 -12.101  1.00  0.00          C   
+ATOM   1049  CD  PRO A 137       0.003  14.193 -11.344  1.00  0.00          C   
+ATOM   1050  N   CYS A 138      -1.650  15.096 -14.399  1.00  0.00          N   
+ATOM   1051  CA  CYS A 138      -2.702  15.293 -15.390  1.00  0.00          C   
+ATOM   1052  C   CYS A 138      -2.947  16.776 -15.639  1.00  0.00          C   
+ATOM   1053  CB  CYS A 138      -3.998  14.621 -14.937  1.00  0.00          C   
+ATOM   1054  O   CYS A 138      -3.870  17.144 -16.368  1.00  0.00          O   
+ATOM   1055  SG  CYS A 138      -3.887  12.822 -14.830  1.00  0.00          S   
+ATOM   1056  N   TYR A 139      -2.050  17.530 -14.923  1.00  0.00          N   
+ATOM   1057  CA  TYR A 139      -2.147  18.977 -15.082  1.00  0.00          C   
+ATOM   1058  C   TYR A 139      -1.580  19.417 -16.427  1.00  0.00          C   
+ATOM   1059  CB  TYR A 139      -1.411  19.693 -13.946  1.00  0.00          C   
+ATOM   1060  O   TYR A 139      -0.470  19.029 -16.796  1.00  0.00          O   
+ATOM   1061  CG  TYR A 139      -1.400  21.197 -14.083  1.00  0.00          C   
+ATOM   1062  CD1 TYR A 139      -0.320  21.854 -14.668  1.00  0.00          C   
+ATOM   1063  CD2 TYR A 139      -2.468  21.962 -13.627  1.00  0.00          C   
+ATOM   1064  CE1 TYR A 139      -0.305  23.239 -14.795  1.00  0.00          C   
+ATOM   1065  CE2 TYR A 139      -2.463  23.348 -13.748  1.00  0.00          C   
+ATOM   1066  OH  TYR A 139      -1.369  25.348 -14.456  1.00  0.00          O   
+ATOM   1067  CZ  TYR A 139      -1.379  23.976 -14.333  1.00  0.00          C   
+ATOM   1068  N   ARG A 140      -2.489  20.100 -17.284  1.00  0.00          N   
+ATOM   1069  CA  ARG A 140      -2.036  20.668 -18.550  1.00  0.00          C   
+ATOM   1070  C   ARG A 140      -2.355  22.157 -18.626  1.00  0.00          C   
+ATOM   1071  CB  ARG A 140      -2.678  19.934 -19.729  1.00  0.00          C   
+ATOM   1072  O   ARG A 140      -3.435  22.589 -18.217  1.00  0.00          O   
+ATOM   1073  CG  ARG A 140      -2.260  18.477 -19.849  1.00  0.00          C   
+ATOM   1074  CD  ARG A 140      -2.856  17.819 -21.086  1.00  0.00          C   
+ATOM   1075  NE  ARG A 140      -2.303  16.486 -21.307  1.00  0.00          N   
+ATOM   1076  NH1 ARG A 140      -1.510  16.942 -23.429  1.00  0.00          N   
+ATOM   1077  NH2 ARG A 140      -1.212  14.863 -22.510  1.00  0.00          N   
+ATOM   1078  CZ  ARG A 140      -1.676  16.100 -22.415  1.00  0.00          C   
+ATOM   1079  N   LYS A 141      -1.270  22.911 -18.875  1.00  0.00          N   
+ATOM   1080  CA  LYS A 141      -1.432  24.343 -19.105  1.00  0.00          C   
+ATOM   1081  C   LYS A 141      -1.210  24.693 -20.574  1.00  0.00          C   
+ATOM   1082  CB  LYS A 141      -0.468  25.141 -18.226  1.00  0.00          C   
+ATOM   1083  O   LYS A 141      -0.111  24.513 -21.101  1.00  0.00          O   
+ATOM   1084  CG  LYS A 141      -0.749  26.636 -18.196  1.00  0.00          C   
+ATOM   1085  CD  LYS A 141       0.167  27.359 -17.217  1.00  0.00          C   
+ATOM   1086  CE  LYS A 141      -0.124  28.853 -17.175  1.00  0.00          C   
+ATOM   1087  NZ  LYS A 141       0.783  29.568 -16.230  1.00  0.00          N   
+ATOM   1088  N   GLU A 142      -2.285  24.849 -21.311  1.00  0.00          N   
+ATOM   1089  CA  GLU A 142      -2.217  25.247 -22.713  1.00  0.00          C   
+ATOM   1090  C   GLU A 142      -2.920  26.583 -22.942  1.00  0.00          C   
+ATOM   1091  CB  GLU A 142      -2.832  24.169 -23.609  1.00  0.00          C   
+ATOM   1092  O   GLU A 142      -4.113  26.718 -22.665  1.00  0.00          O   
+ATOM   1093  CG  GLU A 142      -2.588  24.391 -25.095  1.00  0.00          C   
+ATOM   1094  CD  GLU A 142      -3.160  23.287 -25.969  1.00  0.00          C   
+ATOM   1095  OE1 GLU A 142      -3.890  22.415 -25.445  1.00  0.00          O   
+ATOM   1096  OE2 GLU A 142      -2.875  23.292 -27.187  1.00  0.00          O   
+ATOM   1097  N   GLY A 143      -2.182  27.579 -23.469  1.00  0.00          N   
+ATOM   1098  CA  GLY A 143      -2.758  28.882 -23.764  1.00  0.00          C   
+ATOM   1099  C   GLY A 143      -3.342  29.566 -22.543  1.00  0.00          C   
+ATOM   1100  O   GLY A 143      -4.385  30.217 -22.629  1.00  0.00          O   
+ATOM   1101  N   GLY A 144      -2.777  29.290 -21.354  1.00  0.00          N   
+ATOM   1102  CA  GLY A 144      -3.245  29.947 -20.144  1.00  0.00          C   
+ATOM   1103  C   GLY A 144      -4.395  29.217 -19.476  1.00  0.00          C   
+ATOM   1104  O   GLY A 144      -4.892  29.651 -18.435  1.00  0.00          O   
+ATOM   1105  N   VAL A 145      -4.936  28.140 -20.164  1.00  0.00          N   
+ATOM   1106  CA  VAL A 145      -6.039  27.365 -19.605  1.00  0.00          C   
+ATOM   1107  C   VAL A 145      -5.504  26.079 -18.980  1.00  0.00          C   
+ATOM   1108  CB  VAL A 145      -7.101  27.035 -20.678  1.00  0.00          C   
+ATOM   1109  O   VAL A 145      -4.666  25.395 -19.573  1.00  0.00          O   
+ATOM   1110  CG1 VAL A 145      -8.253  26.236 -20.071  1.00  0.00          C   
+ATOM   1111  CG2 VAL A 145      -7.619  28.316 -21.328  1.00  0.00          C   
+ATOM   1112  N   VAL A 146      -5.959  25.837 -17.763  1.00  0.00          N   
+ATOM   1113  CA  VAL A 146      -5.574  24.626 -17.045  1.00  0.00          C   
+ATOM   1114  C   VAL A 146      -6.593  23.521 -17.311  1.00  0.00          C   
+ATOM   1115  CB  VAL A 146      -5.450  24.882 -15.526  1.00  0.00          C   
+ATOM   1116  O   VAL A 146      -7.803  23.758 -17.264  1.00  0.00          O   
+ATOM   1117  CG1 VAL A 146      -5.098  23.592 -14.788  1.00  0.00          C   
+ATOM   1118  CG2 VAL A 146      -4.405  25.962 -15.251  1.00  0.00          C   
+ATOM   1119  N   SER A 147      -6.150  22.494 -17.818  1.00  0.00          N   
+ATOM   1120  CA  SER A 147      -7.007  21.324 -17.979  1.00  0.00          C   
+ATOM   1121  C   SER A 147      -6.522  20.161 -17.121  1.00  0.00          C   
+ATOM   1122  CB  SER A 147      -7.062  20.898 -19.447  1.00  0.00          C   
+ATOM   1123  O   SER A 147      -5.316  19.946 -16.982  1.00  0.00          O   
+ATOM   1124  OG  SER A 147      -7.912  19.776 -19.614  1.00  0.00          O   
+ATOM   1125  N   CYS A 148      -7.409  19.637 -16.271  1.00  0.00          N   
+ATOM   1126  CA  CYS A 148      -7.135  18.448 -15.471  1.00  0.00          C   
+ATOM   1127  C   CYS A 148      -7.876  17.237 -16.024  1.00  0.00          C   
+ATOM   1128  CB  CYS A 148      -7.534  18.680 -14.014  1.00  0.00          C   
+ATOM   1129  O   CYS A 148      -8.941  16.873 -15.523  1.00  0.00          O   
+ATOM   1130  SG  CYS A 148      -6.884  17.438 -12.875  1.00  0.00          S   
+ATOM   1131  N   ASP A 149      -7.699  16.869 -17.159  1.00  0.00          N   
+ATOM   1132  CA  ASP A 149      -8.393  15.760 -17.806  1.00  0.00          C   
+ATOM   1133  C   ASP A 149      -7.445  14.590 -18.056  1.00  0.00          C   
+ATOM   1134  CB  ASP A 149      -9.023  16.217 -19.124  1.00  0.00          C   
+ATOM   1135  O   ASP A 149      -6.548  14.679 -18.896  1.00  0.00          O   
+ATOM   1136  CG  ASP A 149      -9.976  15.192 -19.713  1.00  0.00          C   
+ATOM   1137  OD1 ASP A 149     -10.762  15.540 -20.620  1.00  0.00          O   
+ATOM   1138  OD2 ASP A 149      -9.941  14.025 -19.265  1.00  0.00          O   
+ATOM   1139  N   CYS A 150      -7.567  13.519 -17.222  1.00  0.00          N   
+ATOM   1140  CA  CYS A 150      -6.727  12.334 -17.354  1.00  0.00          C   
+ATOM   1141  C   CYS A 150      -7.054  11.573 -18.634  1.00  0.00          C   
+ATOM   1142  CB  CYS A 150      -6.900  11.416 -16.145  1.00  0.00          C   
+ATOM   1143  O   CYS A 150      -6.244  10.777 -19.112  1.00  0.00          O   
+ATOM   1144  SG  CYS A 150      -6.406  12.171 -14.581  1.00  0.00          S   
+ATOM   1145  N   LYS A 151      -8.188  11.835 -19.161  1.00  0.00          N   
+ATOM   1146  CA  LYS A 151      -8.679  11.063 -20.298  1.00  0.00          C   
+ATOM   1147  C   LYS A 151      -8.050  11.543 -21.603  1.00  0.00          C   
+ATOM   1148  CB  LYS A 151     -10.204  11.151 -20.388  1.00  0.00          C   
+ATOM   1149  O   LYS A 151      -7.990  10.796 -22.581  1.00  0.00          O   
+ATOM   1150  CG  LYS A 151     -10.931  10.505 -19.219  1.00  0.00          C   
+ATOM   1151  CD  LYS A 151     -12.443  10.620 -19.368  1.00  0.00          C   
+ATOM   1152  CE  LYS A 151     -13.172   9.972 -18.199  1.00  0.00          C   
+ATOM   1153  NZ  LYS A 151     -14.653  10.132 -18.313  1.00  0.00          N   
+ATOM   1154  N   THR A 152      -7.674  12.782 -21.597  1.00  0.00          N   
+ATOM   1155  CA  THR A 152      -7.207  13.367 -22.850  1.00  0.00          C   
+ATOM   1156  C   THR A 152      -5.688  13.279 -22.954  1.00  0.00          C   
+ATOM   1157  CB  THR A 152      -7.649  14.836 -22.979  1.00  0.00          C   
+ATOM   1158  O   THR A 152      -5.115  13.562 -24.008  1.00  0.00          O   
+ATOM   1159  CG2 THR A 152      -9.168  14.950 -23.052  1.00  0.00          C   
+ATOM   1160  OG1 THR A 152      -7.180  15.572 -21.843  1.00  0.00          O   
+ATOM   1161  N   ILE A 153      -5.064  12.924 -21.810  1.00  0.00          N   
+ATOM   1162  CA  ILE A 153      -3.608  12.834 -21.820  1.00  0.00          C   
+ATOM   1163  C   ILE A 153      -3.181  11.435 -22.259  1.00  0.00          C   
+ATOM   1164  CB  ILE A 153      -3.011  13.167 -20.435  1.00  0.00          C   
+ATOM   1165  O   ILE A 153      -3.826  10.444 -21.909  1.00  0.00          O   
+ATOM   1166  CG1 ILE A 153      -3.390  14.593 -20.018  1.00  0.00          C   
+ATOM   1167  CG2 ILE A 153      -1.490  12.986 -20.444  1.00  0.00          C   
+ATOM   1168  CD1 ILE A 153      -2.744  15.679 -20.868  1.00  0.00          C   
+ATOM   1169  N   THR A 154      -2.270  11.363 -23.110  1.00  0.00          N   
+ATOM   1170  CA  THR A 154      -1.713  10.090 -23.553  1.00  0.00          C   
+ATOM   1171  C   THR A 154      -1.160   9.301 -22.370  1.00  0.00          C   
+ATOM   1172  CB  THR A 154      -0.603  10.299 -24.599  1.00  0.00          C   
+ATOM   1173  O   THR A 154      -0.336   9.812 -21.607  1.00  0.00          O   
+ATOM   1174  CG2 THR A 154      -0.102   8.965 -25.144  1.00  0.00          C   
+ATOM   1175  OG1 THR A 154      -1.117  11.082 -25.683  1.00  0.00          O   
+ATOM   1176  N   CYS A 155      -1.859   8.148 -22.092  1.00  0.00          N   
+ATOM   1177  CA  CYS A 155      -1.409   7.282 -21.008  1.00  0.00          C   
+ATOM   1178  C   CYS A 155      -0.060   6.653 -21.338  1.00  0.00          C   
+ATOM   1179  CB  CYS A 155      -2.439   6.187 -20.734  1.00  0.00          C   
+ATOM   1180  O   CYS A 155       0.086   5.991 -22.367  1.00  0.00          O   
+ATOM   1181  SG  CYS A 155      -4.010   6.809 -20.095  1.00  0.00          S   
+ATOM   1182  N   ASN A 156       0.893   7.176 -20.743  1.00  0.00          N   
+ATOM   1183  CA  ASN A 156       2.201   6.536 -20.836  1.00  0.00          C   
+ATOM   1184  C   ASN A 156       2.611   5.904 -19.509  1.00  0.00          C   
+ATOM   1185  CB  ASN A 156       3.259   7.541 -21.294  1.00  0.00          C   
+ATOM   1186  O   ASN A 156       1.841   5.916 -18.546  1.00  0.00          O   
+ATOM   1187  CG  ASN A 156       3.393   8.721 -20.351  1.00  0.00          C   
+ATOM   1188  ND2 ASN A 156       3.554   9.913 -20.912  1.00  0.00          N   
+ATOM   1189  OD1 ASN A 156       3.352   8.561 -19.128  1.00  0.00          O   
+ATOM   1190  N   GLU A 157       3.624   5.165 -19.538  1.00  0.00          N   
+ATOM   1191  CA  GLU A 157       4.078   4.402 -18.379  1.00  0.00          C   
+ATOM   1192  C   GLU A 157       4.196   5.291 -17.145  1.00  0.00          C   
+ATOM   1193  CB  GLU A 157       5.421   3.727 -18.672  1.00  0.00          C   
+ATOM   1194  O   GLU A 157       4.169   4.799 -16.014  1.00  0.00          O   
+ATOM   1195  CG  GLU A 157       5.336   2.611 -19.703  1.00  0.00          C   
+ATOM   1196  CD  GLU A 157       6.670   1.925 -19.955  1.00  0.00          C   
+ATOM   1197  OE1 GLU A 157       7.660   2.250 -19.261  1.00  0.00          O   
+ATOM   1198  OE2 GLU A 157       6.725   1.058 -20.855  1.00  0.00          O   
+ATOM   1199  N   ASP A 158       4.203   6.614 -17.357  1.00  0.00          N   
+ATOM   1200  CA  ASP A 158       4.344   7.540 -16.237  1.00  0.00          C   
+ATOM   1201  C   ASP A 158       2.979   8.001 -15.731  1.00  0.00          C   
+ATOM   1202  CB  ASP A 158       5.190   8.748 -16.643  1.00  0.00          C   
+ATOM   1203  O   ASP A 158       2.882   8.629 -14.675  1.00  0.00          O   
+ATOM   1204  CG  ASP A 158       6.638   8.390 -16.927  1.00  0.00          C   
+ATOM   1205  OD1 ASP A 158       7.251   8.999 -17.830  1.00  0.00          O   
+ATOM   1206  OD2 ASP A 158       7.169   7.487 -16.244  1.00  0.00          O   
+ATOM   1207  N   HIS A 159       2.048   7.688 -16.589  1.00  0.00          N   
+ATOM   1208  CA  HIS A 159       0.697   8.104 -16.230  1.00  0.00          C   
+ATOM   1209  C   HIS A 159       0.098   7.180 -15.176  1.00  0.00          C   
+ATOM   1210  CB  HIS A 159      -0.199   8.139 -17.469  1.00  0.00          C   
+ATOM   1211  O   HIS A 159       0.148   5.956 -15.317  1.00  0.00          O   
+ATOM   1212  CG  HIS A 159      -1.463   8.914 -17.273  1.00  0.00          C   
+ATOM   1213  CD2 HIS A 159      -1.859  10.110 -17.769  1.00  0.00          C   
+ATOM   1214  ND1 HIS A 159      -2.495   8.466 -16.477  1.00  0.00          N   
+ATOM   1215  CE1 HIS A 159      -3.474   9.356 -16.493  1.00  0.00          C   
+ATOM   1216  NE2 HIS A 159      -3.113  10.363 -17.270  1.00  0.00          N   
+ATOM   1217  N   PRO A 160      -0.393   7.607 -14.171  1.00  0.00          N   
+ATOM   1218  CA  PRO A 160      -0.882   6.789 -13.059  1.00  0.00          C   
+ATOM   1219  C   PRO A 160      -2.041   5.880 -13.461  1.00  0.00          C   
+ATOM   1220  CB  PRO A 160      -1.334   7.828 -12.030  1.00  0.00          C   
+ATOM   1221  O   PRO A 160      -2.326   4.896 -12.773  1.00  0.00          O   
+ATOM   1222  CG  PRO A 160      -1.619   9.058 -12.828  1.00  0.00          C   
+ATOM   1223  CD  PRO A 160      -0.678   9.096 -13.998  1.00  0.00          C   
+ATOM   1224  N   CYS A 161      -2.737   6.193 -14.475  1.00  0.00          N   
+ATOM   1225  CA  CYS A 161      -3.885   5.408 -14.913  1.00  0.00          C   
+ATOM   1226  C   CYS A 161      -3.470   4.357 -15.936  1.00  0.00          C   
+ATOM   1227  CB  CYS A 161      -4.960   6.317 -15.509  1.00  0.00          C   
+ATOM   1228  O   CYS A 161      -4.312   3.621 -16.453  1.00  0.00          O   
+ATOM   1229  SG  CYS A 161      -5.656   7.493 -14.328  1.00  0.00          S   
+ATOM   1230  N   TYR A 162      -2.132   4.465 -16.183  1.00  0.00          N   
+ATOM   1231  CA  TYR A 162      -1.573   3.516 -17.140  1.00  0.00          C   
+ATOM   1232  C   TYR A 162      -1.452   2.127 -16.525  1.00  0.00          C   
+ATOM   1233  CB  TYR A 162      -0.201   3.992 -17.629  1.00  0.00          C   
+ATOM   1234  O   TYR A 162      -0.908   1.972 -15.429  1.00  0.00          O   
+ATOM   1235  CG  TYR A 162       0.469   3.033 -18.583  1.00  0.00          C   
+ATOM   1236  CD1 TYR A 162       1.424   2.124 -18.131  1.00  0.00          C   
+ATOM   1237  CD2 TYR A 162       0.151   3.035 -19.936  1.00  0.00          C   
+ATOM   1238  CE1 TYR A 162       2.046   1.240 -19.007  1.00  0.00          C   
+ATOM   1239  CE2 TYR A 162       0.766   2.155 -20.821  1.00  0.00          C   
+ATOM   1240  OH  TYR A 162       2.323   0.390 -21.219  1.00  0.00          O   
+ATOM   1241  CZ  TYR A 162       1.710   1.263 -20.348  1.00  0.00          C   
+ATOM   1242  N   HIS A 163      -2.235   1.147 -17.118  1.00  0.00          N   
+ATOM   1243  CA  HIS A 163      -2.129  -0.243 -16.689  1.00  0.00          C   
+ATOM   1244  C   HIS A 163      -1.553  -1.119 -17.797  1.00  0.00          C   
+ATOM   1245  CB  HIS A 163      -3.496  -0.776 -16.256  1.00  0.00          C   
+ATOM   1246  O   HIS A 163      -1.953  -1.002 -18.957  1.00  0.00          O   
+ATOM   1247  CG  HIS A 163      -4.058  -0.081 -15.057  1.00  0.00          C   
+ATOM   1248  CD2 HIS A 163      -5.018   0.867 -14.948  1.00  0.00          C   
+ATOM   1249  ND1 HIS A 163      -3.625  -0.342 -13.775  1.00  0.00          N   
+ATOM   1250  CE1 HIS A 163      -4.297   0.419 -12.926  1.00  0.00          C   
+ATOM   1251  NE2 HIS A 163      -5.148   1.162 -13.613  1.00  0.00          N   
+ATOM   1252  N   SER A 164      -0.416  -1.652 -17.433  1.00  0.00          N   
+ATOM   1253  CA  SER A 164       0.122  -2.646 -18.356  1.00  0.00          C   
+ATOM   1254  C   SER A 164      -0.175  -4.063 -17.877  1.00  0.00          C   
+ATOM   1255  CB  SER A 164       1.630  -2.462 -18.523  1.00  0.00          C   
+ATOM   1256  O   SER A 164      -0.055  -4.360 -16.687  1.00  0.00          O   
+ATOM   1257  OG  SER A 164       2.304  -2.686 -17.297  1.00  0.00          O   
+ATOM   1258  N   TYR A 165      -0.841  -4.799 -18.656  1.00  0.00          N   
+ATOM   1259  CA  TYR A 165      -1.123  -6.182 -18.287  1.00  0.00          C   
+ATOM   1260  C   TYR A 165      -0.783  -7.132 -19.429  1.00  0.00          C   
+ATOM   1261  CB  TYR A 165      -2.594  -6.345 -17.894  1.00  0.00          C   
+ATOM   1262  O   TYR A 165      -0.643  -6.705 -20.578  1.00  0.00          O   
+ATOM   1263  CG  TYR A 165      -3.559  -6.039 -19.013  1.00  0.00          C   
+ATOM   1264  CD1 TYR A 165      -3.953  -4.730 -19.282  1.00  0.00          C   
+ATOM   1265  CD2 TYR A 165      -4.080  -7.058 -19.804  1.00  0.00          C   
+ATOM   1266  CE1 TYR A 165      -4.843  -4.444 -20.312  1.00  0.00          C   
+ATOM   1267  CE2 TYR A 165      -4.971  -6.783 -20.836  1.00  0.00          C   
+ATOM   1268  OH  TYR A 165      -6.228  -5.197 -22.103  1.00  0.00          O   
+ATOM   1269  CZ  TYR A 165      -5.346  -5.475 -21.082  1.00  0.00          C   
+ATOM   1270  N   GLU A 166      -0.437  -8.271 -19.075  1.00  0.00          N   
+ATOM   1271  CA  GLU A 166      -0.092  -9.311 -20.039  1.00  0.00          C   
+ATOM   1272  C   GLU A 166      -1.292 -10.203 -20.342  1.00  0.00          C   
+ATOM   1273  CB  GLU A 166       1.075 -10.158 -19.523  1.00  0.00          C   
+ATOM   1274  O   GLU A 166      -1.951 -10.699 -19.426  1.00  0.00          O   
+ATOM   1275  CG  GLU A 166       1.667 -11.091 -20.569  1.00  0.00          C   
+ATOM   1276  CD  GLU A 166       2.944 -11.776 -20.108  1.00  0.00          C   
+ATOM   1277  OE1 GLU A 166       3.581 -11.289 -19.146  1.00  0.00          O   
+ATOM   1278  OE2 GLU A 166       3.310 -12.808 -20.713  1.00  0.00          O   
+ATOM   1279  N   GLU A 167      -1.701 -10.268 -21.599  1.00  0.00          N   
+ATOM   1280  CA  GLU A 167      -2.770 -11.135 -22.087  1.00  0.00          C   
+ATOM   1281  C   GLU A 167      -2.310 -11.956 -23.288  1.00  0.00          C   
+ATOM   1282  CB  GLU A 167      -4.006 -10.310 -22.455  1.00  0.00          C   
+ATOM   1283  O   GLU A 167      -1.837 -11.400 -24.282  1.00  0.00          O   
+ATOM   1284  CG  GLU A 167      -5.232 -11.150 -22.780  1.00  0.00          C   
+ATOM   1285  CD  GLU A 167      -6.476 -10.318 -23.048  1.00  0.00          C   
+ATOM   1286  OE1 GLU A 167      -6.367  -9.075 -23.139  1.00  0.00          O   
+ATOM   1287  OE2 GLU A 167      -7.570 -10.915 -23.165  1.00  0.00          O   
+ATOM   1288  N   ASP A 168      -2.308 -13.235 -23.226  1.00  0.00          N   
+ATOM   1289  CA  ASP A 168      -1.919 -14.168 -24.278  1.00  0.00          C   
+ATOM   1290  C   ASP A 168      -0.472 -13.938 -24.708  1.00  0.00          C   
+ATOM   1291  CB  ASP A 168      -2.852 -14.039 -25.483  1.00  0.00          C   
+ATOM   1292  O   ASP A 168      -0.162 -13.963 -25.901  1.00  0.00          O   
+ATOM   1293  CG  ASP A 168      -4.284 -14.437 -25.170  1.00  0.00          C   
+ATOM   1294  OD1 ASP A 168      -5.222 -13.831 -25.730  1.00  0.00          O   
+ATOM   1295  OD2 ASP A 168      -4.475 -15.363 -24.352  1.00  0.00          O   
+ATOM   1296  N   GLY A 169       0.378 -13.615 -23.661  1.00  0.00          N   
+ATOM   1297  CA  GLY A 169       1.802 -13.483 -23.928  1.00  0.00          C   
+ATOM   1298  C   GLY A 169       2.181 -12.123 -24.482  1.00  0.00          C   
+ATOM   1299  O   GLY A 169       3.340 -11.889 -24.830  1.00  0.00          O   
+ATOM   1300  N   VAL A 170       1.173 -11.220 -24.645  1.00  0.00          N   
+ATOM   1301  CA  VAL A 170       1.451  -9.891 -25.180  1.00  0.00          C   
+ATOM   1302  C   VAL A 170       1.131  -8.832 -24.128  1.00  0.00          C   
+ATOM   1303  CB  VAL A 170       0.648  -9.620 -26.472  1.00  0.00          C   
+ATOM   1304  O   VAL A 170       0.124  -8.932 -23.423  1.00  0.00          O   
+ATOM   1305  CG1 VAL A 170       0.954  -8.226 -27.016  1.00  0.00          C   
+ATOM   1306  CG2 VAL A 170       0.952 -10.686 -27.523  1.00  0.00          C   
+ATOM   1307  N   THR A 171       2.053  -7.976 -23.977  1.00  0.00          N   
+ATOM   1308  CA  THR A 171       1.846  -6.867 -23.053  1.00  0.00          C   
+ATOM   1309  C   THR A 171       0.857  -5.859 -23.631  1.00  0.00          C   
+ATOM   1310  CB  THR A 171       3.173  -6.158 -22.725  1.00  0.00          C   
+ATOM   1311  O   THR A 171       1.042  -5.370 -24.747  1.00  0.00          O   
+ATOM   1312  CG2 THR A 171       2.958  -5.020 -21.732  1.00  0.00          C   
+ATOM   1313  OG1 THR A 171       4.087  -7.105 -22.158  1.00  0.00          O   
+ATOM   1314  N   LYS A 172      -0.220  -5.669 -22.883  1.00  0.00          N   
+ATOM   1315  CA  LYS A 172      -1.215  -4.669 -23.260  1.00  0.00          C   
+ATOM   1316  C   LYS A 172      -1.232  -3.510 -22.267  1.00  0.00          C   
+ATOM   1317  CB  LYS A 172      -2.604  -5.301 -23.351  1.00  0.00          C   
+ATOM   1318  O   LYS A 172      -0.846  -3.673 -21.107  1.00  0.00          O   
+ATOM   1319  CG  LYS A 172      -2.720  -6.393 -24.405  1.00  0.00          C   
+ATOM   1320  CD  LYS A 172      -4.154  -6.886 -24.543  1.00  0.00          C   
+ATOM   1321  CE  LYS A 172      -4.280  -7.941 -25.634  1.00  0.00          C   
+ATOM   1322  NZ  LYS A 172      -5.700  -8.358 -25.841  1.00  0.00          N   
+ATOM   1323  N   SER A 173      -1.325  -2.368 -22.806  1.00  0.00          N   
+ATOM   1324  CA  SER A 173      -1.442  -1.178 -21.969  1.00  0.00          C   
+ATOM   1325  C   SER A 173      -2.815  -0.530 -22.119  1.00  0.00          C   
+ATOM   1326  CB  SER A 173      -0.350  -0.167 -22.320  1.00  0.00          C   
+ATOM   1327  O   SER A 173      -3.418  -0.584 -23.193  1.00  0.00          O   
+ATOM   1328  OG  SER A 173      -0.430   0.207 -23.684  1.00  0.00          O   
+ATOM   1329  N   ASP A 174      -3.338  -0.380 -21.075  1.00  0.00          N   
+ATOM   1330  CA  ASP A 174      -4.630   0.300 -21.062  1.00  0.00          C   
+ATOM   1331  C   ASP A 174      -4.627   1.467 -20.077  1.00  0.00          C   
+ATOM   1332  CB  ASP A 174      -5.749  -0.682 -20.712  1.00  0.00          C   
+ATOM   1333  O   ASP A 174      -3.834   1.488 -19.134  1.00  0.00          O   
+ATOM   1334  CG  ASP A 174      -7.118  -0.209 -21.168  1.00  0.00          C   
+ATOM   1335  OD1 ASP A 174      -8.137  -0.811 -20.767  1.00  0.00          O   
+ATOM   1336  OD2 ASP A 174      -7.178   0.774 -21.938  1.00  0.00          O   
+ATOM   1337  N   CYS A 175      -5.254   2.474 -20.569  1.00  0.00          N   
+ATOM   1338  CA  CYS A 175      -5.511   3.614 -19.696  1.00  0.00          C   
+ATOM   1339  C   CYS A 175      -6.886   3.506 -19.049  1.00  0.00          C   
+ATOM   1340  CB  CYS A 175      -5.407   4.922 -20.479  1.00  0.00          C   
+ATOM   1341  O   CYS A 175      -7.906   3.530 -19.740  1.00  0.00          O   
+ATOM   1342  SG  CYS A 175      -5.469   6.399 -19.441  1.00  0.00          S   
+ATOM   1343  N   ASP A 176      -6.926   3.117 -17.897  1.00  0.00          N   
+ATOM   1344  CA  ASP A 176      -8.216   2.947 -17.236  1.00  0.00          C   
+ATOM   1345  C   ASP A 176      -8.579   4.181 -16.413  1.00  0.00          C   
+ATOM   1346  CB  ASP A 176      -8.202   1.705 -16.343  1.00  0.00          C   
+ATOM   1347  O   ASP A 176      -8.390   4.199 -15.195  1.00  0.00          O   
+ATOM   1348  CG  ASP A 176      -9.574   1.352 -15.795  1.00  0.00          C   
+ATOM   1349  OD1 ASP A 176      -9.681   0.413 -14.978  1.00  0.00          O   
+ATOM   1350  OD2 ASP A 176     -10.557   2.018 -16.187  1.00  0.00          O   
+ATOM   1351  N   CYS A 177      -8.999   5.207 -17.129  1.00  0.00          N   
+ATOM   1352  CA  CYS A 177      -9.425   6.426 -16.450  1.00  0.00          C   
+ATOM   1353  C   CYS A 177     -10.930   6.422 -16.214  1.00  0.00          C   
+ATOM   1354  CB  CYS A 177      -9.030   7.658 -17.264  1.00  0.00          C   
+ATOM   1355  O   CYS A 177     -11.489   7.406 -15.726  1.00  0.00          O   
+ATOM   1356  SG  CYS A 177      -7.251   7.814 -17.535  1.00  0.00          S   
+ATOM   1357  N   GLU A 178     -11.529   5.450 -16.815  1.00  0.00          N   
+ATOM   1358  CA  GLU A 178     -12.986   5.385 -16.754  1.00  0.00          C   
+ATOM   1359  C   GLU A 178     -13.473   5.263 -15.313  1.00  0.00          C   
+ATOM   1360  CB  GLU A 178     -13.508   4.211 -17.586  1.00  0.00          C   
+ATOM   1361  O   GLU A 178     -14.584   5.686 -14.990  1.00  0.00          O   
+ATOM   1362  CG  GLU A 178     -13.379   4.417 -19.089  1.00  0.00          C   
+ATOM   1363  CD  GLU A 178     -13.985   3.285 -19.903  1.00  0.00          C   
+ATOM   1364  OE1 GLU A 178     -14.377   2.254 -19.312  1.00  0.00          O   
+ATOM   1365  OE2 GLU A 178     -14.069   3.431 -21.143  1.00  0.00          O   
+ATOM   1366  N   HIS A 179     -12.602   4.539 -14.596  1.00  0.00          N   
+ATOM   1367  CA  HIS A 179     -13.083   4.370 -13.230  1.00  0.00          C   
+ATOM   1368  C   HIS A 179     -12.913   5.654 -12.423  1.00  0.00          C   
+ATOM   1369  CB  HIS A 179     -12.350   3.217 -12.542  1.00  0.00          C   
+ATOM   1370  O   HIS A 179     -13.259   5.699 -11.241  1.00  0.00          O   
+ATOM   1371  CG  HIS A 179     -12.672   1.874 -13.117  1.00  0.00          C   
+ATOM   1372  CD2 HIS A 179     -11.913   1.007 -13.828  1.00  0.00          C   
+ATOM   1373  ND1 HIS A 179     -13.911   1.286 -12.986  1.00  0.00          N   
+ATOM   1374  CE1 HIS A 179     -13.900   0.111 -13.593  1.00  0.00          C   
+ATOM   1375  NE2 HIS A 179     -12.700  -0.082 -14.113  1.00  0.00          N   
+ATOM   1376  N   SER A 180     -12.761   6.762 -13.153  1.00  0.00          N   
+ATOM   1377  CA  SER A 180     -12.625   8.074 -12.529  1.00  0.00          C   
+ATOM   1378  C   SER A 180     -13.967   8.797 -12.465  1.00  0.00          C   
+ATOM   1379  CB  SER A 180     -11.612   8.928 -13.291  1.00  0.00          C   
+ATOM   1380  O   SER A 180     -14.740   8.767 -13.424  1.00  0.00          O   
+ATOM   1381  OG  SER A 180     -12.114   9.284 -14.568  1.00  0.00          O   
+ATOM   1382  N   PRO A 181     -14.719   8.802 -11.393  1.00  0.00          N   
+ATOM   1383  CA  PRO A 181     -15.790   9.799 -11.316  1.00  0.00          C   
+ATOM   1384  C   PRO A 181     -15.334  11.190 -11.748  1.00  0.00          C   
+ATOM   1385  CB  PRO A 181     -16.178   9.786  -9.836  1.00  0.00          C   
+ATOM   1386  O   PRO A 181     -14.337  11.704 -11.233  1.00  0.00          O   
+ATOM   1387  CG  PRO A 181     -14.965   9.275  -9.127  1.00  0.00          C   
+ATOM   1388  CD  PRO A 181     -14.184   8.416 -10.079  1.00  0.00          C   
+ATOM   1389  N   GLY A 182     -15.240  11.453 -13.029  1.00  0.00          N   
+ATOM   1390  CA  GLY A 182     -15.037  12.822 -13.476  1.00  0.00          C   
+ATOM   1391  C   GLY A 182     -15.937  13.820 -12.770  1.00  0.00          C   
+ATOM   1392  O   GLY A 182     -16.871  13.431 -12.066  1.00  0.00          O   
+ATOM   1393  N   PRO A 183     -15.396  14.822 -12.165  1.00  0.00          N   
+ATOM   1394  CA  PRO A 183     -16.219  15.888 -11.589  1.00  0.00          C   
+ATOM   1395  C   PRO A 183     -17.636  15.913 -12.158  1.00  0.00          C   
+ATOM   1396  CB  PRO A 183     -15.458  17.162 -11.964  1.00  0.00          C   
+ATOM   1397  O   PRO A 183     -17.838  15.604 -13.335  1.00  0.00          O   
+ATOM   1398  CG  PRO A 183     -14.695  16.803 -13.198  1.00  0.00          C   
+ATOM   1399  CD  PRO A 183     -14.401  15.330 -13.164  1.00  0.00          C   
+ATOM   1400  N   SER A 184     -18.521  15.085 -11.531  1.00  0.00          N   
+ATOM   1401  CA  SER A 184     -19.918  15.360 -11.852  1.00  0.00          C   
+ATOM   1402  C   SER A 184     -20.093  16.779 -12.385  1.00  0.00          C   
+ATOM   1403  CB  SER A 184     -20.801  15.157 -10.620  1.00  0.00          C   
+ATOM   1404  O   SER A 184     -19.543  17.730 -11.826  1.00  0.00          O   
+ATOM   1405  OG  SER A 184     -20.375  15.985  -9.553  1.00  0.00          O   
+ATOM   1406  N   GLU A 185     -19.658  16.958 -13.662  1.00  0.00          N   
+ATOM   1407  CA  GLU A 185     -20.167  18.200 -14.237  1.00  0.00          C   
+ATOM   1408  C   GLU A 185     -21.492  18.603 -13.597  1.00  0.00          C   
+ATOM   1409  CB  GLU A 185     -20.336  18.061 -15.752  1.00  0.00          C   
+ATOM   1410  O   GLU A 185     -22.450  17.827 -13.598  1.00  0.00          O   
+ATOM   1411  CG  GLU A 185     -19.029  17.836 -16.499  1.00  0.00          C   
+ATOM   1412  CD  GLU A 185     -18.110  19.046 -16.478  1.00  0.00          C   
+ATOM   1413  OE1 GLU A 185     -18.546  20.132 -16.032  1.00  0.00          O   
+ATOM   1414  OE2 GLU A 185     -16.944  18.908 -16.911  1.00  0.00          O   
+ATOM   1415  N   HIS A 186     -21.419  18.961 -12.324  1.00  0.00          N   
+ATOM   1416  CA  HIS A 186     -22.672  19.612 -11.958  1.00  0.00          C   
+ATOM   1417  C   HIS A 186     -23.102  20.617 -13.022  1.00  0.00          C   
+ATOM   1418  CB  HIS A 186     -22.539  20.307 -10.602  1.00  0.00          C   
+ATOM   1419  O   HIS A 186     -22.311  21.471 -13.430  1.00  0.00          O   
+ATOM   1420  CG  HIS A 186     -22.402  19.359  -9.453  1.00  0.00          C   
+ATOM   1421  CD2 HIS A 186     -21.354  19.097  -8.637  1.00  0.00          C   
+ATOM   1422  ND1 HIS A 186     -23.431  18.543  -9.034  1.00  0.00          N   
+ATOM   1423  CE1 HIS A 186     -23.020  17.819  -8.007  1.00  0.00          C   
+ATOM   1424  NE2 HIS A 186     -21.763  18.136  -7.746  1.00  0.00          N   
+ATOM   1425  N   HIS A 187     -23.592  20.072 -14.139  1.00  0.00          N   
+ATOM   1426  CA  HIS A 187     -24.308  20.983 -15.025  1.00  0.00          C   
+ATOM   1427  C   HIS A 187     -24.996  22.092 -14.235  1.00  0.00          C   
+ATOM   1428  CB  HIS A 187     -25.335  20.219 -15.862  1.00  0.00          C   
+ATOM   1429  O   HIS A 187     -25.860  21.819 -13.399  1.00  0.00          O   
+ATOM   1430  CG  HIS A 187     -24.723  19.267 -16.840  1.00  0.00          C   
+ATOM   1431  CD2 HIS A 187     -24.703  17.913 -16.868  1.00  0.00          C   
+ATOM   1432  ND1 HIS A 187     -24.026  19.687 -17.952  1.00  0.00          N   
+ATOM   1433  CE1 HIS A 187     -23.603  18.630 -18.624  1.00  0.00          C   
+ATOM   1434  NE2 HIS A 187     -24.000  17.541 -17.988  1.00  0.00          N   
+ATOM   1435  N   HIS A 188     -24.187  22.915 -13.610  1.00  0.00          N   
+ATOM   1436  CA  HIS A 188     -24.905  24.094 -13.140  1.00  0.00          C   
+ATOM   1437  C   HIS A 188     -25.814  24.656 -14.228  1.00  0.00          C   
+ATOM   1438  CB  HIS A 188     -23.923  25.168 -12.669  1.00  0.00          C   
+ATOM   1439  O   HIS A 188     -25.380  24.849 -15.366  1.00  0.00          O   
+ATOM   1440  CG  HIS A 188     -23.207  24.814 -11.404  1.00  0.00          C   
+ATOM   1441  CD2 HIS A 188     -21.913  24.489 -11.176  1.00  0.00          C   
+ATOM   1442  ND1 HIS A 188     -23.839  24.765 -10.181  1.00  0.00          N   
+ATOM   1443  CE1 HIS A 188     -22.961  24.425  -9.252  1.00  0.00          C   
+ATOM   1444  NE2 HIS A 188     -21.785  24.251  -9.830  1.00  0.00          N   
+ATOM   1445  N   HIS A 189     -26.993  24.045 -14.412  1.00  0.00          N   
+ATOM   1446  CA  HIS A 189     -28.031  24.708 -15.193  1.00  0.00          C   
+ATOM   1447  C   HIS A 189     -28.031  26.213 -14.944  1.00  0.00          C   
+ATOM   1448  CB  HIS A 189     -29.406  24.122 -14.865  1.00  0.00          C   
+ATOM   1449  O   HIS A 189     -27.980  26.656 -13.795  1.00  0.00          O   
+ATOM   1450  CG  HIS A 189     -29.586  22.714 -15.335  1.00  0.00          C   
+ATOM   1451  CD2 HIS A 189     -29.619  21.546 -14.652  1.00  0.00          C   
+ATOM   1452  ND1 HIS A 189     -29.755  22.390 -16.664  1.00  0.00          N   
+ATOM   1453  CE1 HIS A 189     -29.887  21.079 -16.778  1.00  0.00          C   
+ATOM   1454  NE2 HIS A 189     -29.808  20.543 -15.572  1.00  0.00          N   
+ATOM   1455  N   HIS A 190     -27.150  26.911 -15.639  1.00  0.00          N   
+ATOM   1456  CA  HIS A 190     -27.271  28.363 -15.688  1.00  0.00          C   
+ATOM   1457  C   HIS A 190     -28.733  28.796 -15.667  1.00  0.00          C   
+ATOM   1458  CB  HIS A 190     -26.577  28.917 -16.934  1.00  0.00          C   
+ATOM   1459  O   HIS A 190     -29.546  28.288 -16.443  1.00  0.00          O   
+ATOM   1460  CG  HIS A 190     -25.087  28.794 -16.896  1.00  0.00          C   
+ATOM   1461  CD2 HIS A 190     -24.243  27.997 -17.592  1.00  0.00          C   
+ATOM   1462  ND1 HIS A 190     -24.299  29.553 -16.058  1.00  0.00          N   
+ATOM   1463  CE1 HIS A 190     -23.030  29.227 -16.242  1.00  0.00          C   
+ATOM   1464  NE2 HIS A 190     -22.969  28.285 -17.168  1.00  0.00          N   
+ATOM   1465  N   HIS A 191     -29.301  28.820 -14.496  1.00  0.00          N   
+ATOM   1466  CA  HIS A 191     -30.497  29.651 -14.423  1.00  0.00          C   
+ATOM   1467  C   HIS A 191     -30.240  31.039 -15.001  1.00  0.00          C   
+ATOM   1468  CB  HIS A 191     -30.981  29.766 -12.976  1.00  0.00          C   
+ATOM   1469  O   HIS A 191     -29.144  31.584 -14.855  1.00  0.00          O   
+ATOM   1470  CG  HIS A 191     -31.644  28.528 -12.465  1.00  0.00          C   
+ATOM   1471  CD2 HIS A 191     -31.230  27.603 -11.566  1.00  0.00          C   
+ATOM   1472  ND1 HIS A 191     -32.892  28.123 -12.888  1.00  0.00          N   
+ATOM   1473  CE1 HIS A 191     -33.217  27.000 -12.270  1.00  0.00          C   
+ATOM   1474  NE2 HIS A 191     -32.226  26.664 -11.462  1.00  0.00          N   
+TER    1475      HIS A 191
+ENDMDL
+END
diff --git a/alphafold/alphafold/relax/testdata/with_violations.pdb b/alphafold/alphafold/relax/testdata/with_violations.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..92f4a2a8703956bbd56642da6ebb518c7a588ef0
--- /dev/null
+++ b/alphafold/alphafold/relax/testdata/with_violations.pdb
@@ -0,0 +1,1193 @@
+MODEL        0
+ATOM      1  N   SER A   1      23.291   1.505   0.613  1.00  6.08          N   
+ATOM      2  CA  SER A   1      22.518   0.883  -0.457  1.00  6.08          C   
+ATOM      3  C   SER A   1      21.020   1.015  -0.206  1.00  6.08          C   
+ATOM      4  CB  SER A   1      22.891  -0.593  -0.601  1.00  6.08          C   
+ATOM      5  O   SER A   1      20.593   1.246   0.928  1.00  6.08          O   
+ATOM      6  OG  SER A   1      22.364  -1.352   0.474  1.00  6.08          O   
+ATOM      7  N   PHE A   2      20.180   1.317  -1.280  1.00  6.08          N   
+ATOM      8  CA  PHE A   2      18.725   1.321  -1.187  1.00  6.08          C   
+ATOM      9  C   PHE A   2      18.244   0.288  -0.175  1.00  6.08          C   
+ATOM     10  CB  PHE A   2      18.097   1.046  -2.557  1.00  6.08          C   
+ATOM     11  O   PHE A   2      17.437   0.600   0.703  1.00  6.08          O   
+ATOM     12  CG  PHE A   2      16.601   0.880  -2.517  1.00  6.08          C   
+ATOM     13  CD1 PHE A   2      15.765   1.989  -2.519  1.00  6.08          C   
+ATOM     14  CD2 PHE A   2      16.033  -0.386  -2.478  1.00  6.08          C   
+ATOM     15  CE1 PHE A   2      14.380   1.838  -2.482  1.00  6.08          C   
+ATOM     16  CE2 PHE A   2      14.650  -0.545  -2.441  1.00  6.08          C   
+ATOM     17  CZ  PHE A   2      13.826   0.569  -2.442  1.00  6.08          C   
+ATOM     18  N   GLU A   3      18.695  -0.904  -0.178  1.00  6.08          N   
+ATOM     19  CA  GLU A   3      18.305  -2.028   0.668  1.00  6.08          C   
+ATOM     20  C   GLU A   3      18.535  -1.714   2.144  1.00  6.08          C   
+ATOM     21  CB  GLU A   3      19.073  -3.291   0.273  1.00  6.08          C   
+ATOM     22  O   GLU A   3      17.664  -1.961   2.980  1.00  6.08          O   
+ATOM     23  CG  GLU A   3      18.413  -4.088  -0.843  1.00  6.08          C   
+ATOM     24  CD  GLU A   3      19.408  -4.840  -1.713  1.00  6.08          C   
+ATOM     25  OE1 GLU A   3      18.977  -5.585  -2.622  1.00  6.08          O   
+ATOM     26  OE2 GLU A   3      20.628  -4.683  -1.482  1.00  6.08          O   
+ATOM     27  N   GLU A   4      19.823  -1.305   2.459  1.00  6.08          N   
+ATOM     28  CA  GLU A   4      20.190  -1.047   3.848  1.00  6.08          C   
+ATOM     29  C   GLU A   4      19.315   0.044   4.456  1.00  6.08          C   
+ATOM     30  CB  GLU A   4      21.666  -0.656   3.950  1.00  6.08          C   
+ATOM     31  O   GLU A   4      18.868  -0.076   5.599  1.00  6.08          O   
+ATOM     32  CG  GLU A   4      22.621  -1.841   3.913  1.00  6.08          C   
+ATOM     33  CD  GLU A   4      24.085  -1.434   3.973  1.00  6.08          C   
+ATOM     34  OE1 GLU A   4      24.957  -2.324   4.094  1.00  6.08          O   
+ATOM     35  OE2 GLU A   4      24.361  -0.216   3.899  1.00  6.08          O   
+ATOM     36  N   GLN A   5      19.061   1.102   3.590  1.00  6.08          N   
+ATOM     37  CA  GLN A   5      18.207   2.189   4.056  1.00  6.08          C   
+ATOM     38  C   GLN A   5      16.771   1.714   4.255  1.00  6.08          C   
+ATOM     39  CB  GLN A   5      18.241   3.359   3.071  1.00  6.08          C   
+ATOM     40  O   GLN A   5      16.113   2.097   5.225  1.00  6.08          O   
+ATOM     41  CG  GLN A   5      19.395   4.326   3.304  1.00  6.08          C   
+ATOM     42  CD  GLN A   5      19.384   5.496   2.338  1.00  6.08          C   
+ATOM     43  NE2 GLN A   5      20.565   6.022   2.031  1.00  6.08          N   
+ATOM     44  OE1 GLN A   5      18.323   5.922   1.871  1.00  6.08          O   
+ATOM     45  N   PHE A   6      16.354   0.831   3.208  1.00  5.36          N   
+ATOM     46  CA  PHE A   6      15.014   0.260   3.283  1.00  5.36          C   
+ATOM     47  C   PHE A   6      14.844  -0.555   4.559  1.00  5.36          C   
+ATOM     48  CB  PHE A   6      14.732  -0.616   2.059  1.00  5.36          C   
+ATOM     49  O   PHE A   6      13.859  -0.388   5.282  1.00  5.36          O   
+ATOM     50  CG  PHE A   6      13.331  -1.164   2.014  1.00  5.36          C   
+ATOM     51  CD1 PHE A   6      12.278  -0.379   1.561  1.00  5.36          C   
+ATOM     52  CD2 PHE A   6      13.068  -2.464   2.424  1.00  5.36          C   
+ATOM     53  CE1 PHE A   6      10.980  -0.884   1.518  1.00  5.36          C   
+ATOM     54  CE2 PHE A   6      11.774  -2.975   2.384  1.00  5.36          C   
+ATOM     55  CZ  PHE A   6      10.731  -2.183   1.932  1.00  5.36          C   
+ATOM     56  N   ILE A   7      15.772  -1.382   4.937  1.00  6.08          N   
+ATOM     57  CA  ILE A   7      15.726  -2.220   6.131  1.00  6.08          C   
+ATOM     58  C   ILE A   7      15.811  -1.345   7.379  1.00  6.08          C   
+ATOM     59  CB  ILE A   7      16.864  -3.266   6.130  1.00  6.08          C   
+ATOM     60  O   ILE A   7      15.052  -1.538   8.332  1.00  6.08          O   
+ATOM     61  CG1 ILE A   7      16.652  -4.286   5.006  1.00  6.08          C   
+ATOM     62  CG2 ILE A   7      16.957  -3.962   7.491  1.00  6.08          C   
+ATOM     63  CD1 ILE A   7      17.837  -5.214   4.781  1.00  6.08          C   
+ATOM     64  N   LYS A   8      16.750  -0.406   7.403  1.00  6.08          N   
+ATOM     65  CA  LYS A   8      16.953   0.493   8.535  1.00  6.08          C   
+ATOM     66  C   LYS A   8      15.689   1.294   8.836  1.00  6.08          C   
+ATOM     67  CB  LYS A   8      18.122   1.442   8.265  1.00  6.08          C   
+ATOM     68  O   LYS A   8      15.304   1.443   9.997  1.00  6.08          O   
+ATOM     69  CG  LYS A   8      18.564   2.242   9.481  1.00  6.08          C   
+ATOM     70  CD  LYS A   8      19.735   3.159   9.151  1.00  6.08          C   
+ATOM     71  CE  LYS A   8      20.102   4.046  10.333  1.00  6.08          C   
+ATOM     72  NZ  LYS A   8      21.192   5.007   9.987  1.00  6.08          N   
+ATOM     73  N   ASN A   9      14.988   1.804   7.750  1.00  6.08          N   
+ATOM     74  CA  ASN A   9      13.799   2.629   7.937  1.00  6.08          C   
+ATOM     75  C   ASN A   9      12.593   1.788   8.349  1.00  6.08          C   
+ATOM     76  CB  ASN A   9      13.486   3.416   6.663  1.00  6.08          C   
+ATOM     77  O   ASN A   9      11.581   2.327   8.801  1.00  6.08          O   
+ATOM     78  CG  ASN A   9      14.404   4.608   6.473  1.00  6.08          C   
+ATOM     79  ND2 ASN A   9      14.484   5.105   5.244  1.00  6.08          N   
+ATOM     80  OD1 ASN A   9      15.036   5.078   7.423  1.00  6.08          O   
+ATOM     81  N   ASN A  10      12.800   0.438   8.337  1.00  6.08          N   
+ATOM     82  CA  ASN A  10      11.572  -0.311   8.581  1.00  6.08          C   
+ATOM     83  C   ASN A  10      11.753  -1.335   9.699  1.00  6.08          C   
+ATOM     84  CB  ASN A  10      11.100  -1.002   7.300  1.00  6.08          C   
+ATOM     85  O   ASN A  10      10.808  -2.039  10.060  1.00  6.08          O   
+ATOM     86  CG  ASN A  10      10.549  -0.025   6.280  1.00  6.08          C   
+ATOM     87  ND2 ASN A  10      11.285   0.176   5.193  1.00  6.08          N   
+ATOM     88  OD1 ASN A  10       9.471   0.545   6.467  1.00  6.08          O   
+ATOM     89  N   SER A  11      12.959  -1.512  10.211  1.00  6.08          N   
+ATOM     90  CA  SER A  11      13.197  -2.465  11.291  1.00  6.08          C   
+ATOM     91  C   SER A  11      12.666  -1.938  12.620  1.00  6.08          C   
+ATOM     92  CB  SER A  11      14.690  -2.772  11.415  1.00  6.08          C   
+ATOM     93  O   SER A  11      12.451  -2.709  13.557  1.00  6.08          O   
+ATOM     94  OG  SER A  11      15.435  -1.581  11.601  1.00  6.08          O   
+ATOM     95  N   ASP A  12      12.220  -0.675  12.710  1.00  6.08          N   
+ATOM     96  CA  ASP A  12      11.747  -0.267  14.029  1.00  6.08          C   
+ATOM     97  C   ASP A  12      10.304  -0.711  14.256  1.00  6.08          C   
+ATOM     98  CB  ASP A  12      11.864   1.249  14.196  1.00  6.08          C   
+ATOM     99  O   ASP A  12       9.847  -0.792  15.398  1.00  6.08          O   
+ATOM    100  CG  ASP A  12      13.206   1.682  14.760  1.00  6.08          C   
+ATOM    101  OD1 ASP A  12      13.586   2.861  14.592  1.00  6.08          O   
+ATOM    102  OD2 ASP A  12      13.890   0.837  15.376  1.00  6.08          O   
+ATOM    103  N   SER A  13       9.678  -1.277  13.274  1.00  6.08          N   
+ATOM    104  CA  SER A  13       8.274  -1.520  13.587  1.00  6.08          C   
+ATOM    105  C   SER A  13       8.041  -2.973  13.988  1.00  6.08          C   
+ATOM    106  CB  SER A  13       7.389  -1.164  12.393  1.00  6.08          C   
+ATOM    107  O   SER A  13       8.569  -3.889  13.355  1.00  6.08          O   
+ATOM    108  OG  SER A  13       7.871  -1.776  11.209  1.00  6.08          O   
+ATOM    109  N   ASN A  14       8.368  -3.385  15.178  1.00  6.08          N   
+ATOM    110  CA  ASN A  14       7.591  -4.466  15.775  1.00  6.08          C   
+ATOM    111  C   ASN A  14       6.843  -5.271  14.716  1.00  6.08          C   
+ATOM    112  CB  ASN A  14       6.610  -3.912  16.812  1.00  6.08          C   
+ATOM    113  O   ASN A  14       6.016  -6.122  15.047  1.00  6.08          O   
+ATOM    114  CG  ASN A  14       7.250  -3.709  18.171  1.00  6.08          C   
+ATOM    115  ND2 ASN A  14       6.608  -2.910  19.015  1.00  6.08          N   
+ATOM    116  OD1 ASN A  14       8.313  -4.265  18.460  1.00  6.08          O   
+ATOM    117  N   ILE A  15       7.204  -5.229  13.474  1.00  6.08          N   
+ATOM    118  CA  ILE A  15       6.430  -5.995  12.502  1.00  6.08          C   
+ATOM    119  C   ILE A  15       7.095  -7.349  12.265  1.00  6.08          C   
+ATOM    120  CB  ILE A  15       6.282  -5.229  11.168  1.00  6.08          C   
+ATOM    121  O   ILE A  15       8.306  -7.422  12.045  1.00  6.08          O   
+ATOM    122  CG1 ILE A  15       5.583  -3.885  11.398  1.00  6.08          C   
+ATOM    123  CG2 ILE A  15       5.520  -6.074  10.143  1.00  6.08          C   
+ATOM    124  CD1 ILE A  15       5.473  -3.022  10.149  1.00  6.08          C   
+ATOM    125  N   LEU A  16       6.669  -8.397  13.068  1.00  6.08          N   
+ATOM    126  CA  LEU A  16       6.808  -9.846  12.972  1.00  6.08          C   
+ATOM    127  C   LEU A  16       6.967 -10.281  11.519  1.00  6.08          C   
+ATOM    128  CB  LEU A  16       5.597 -10.544  13.596  1.00  6.08          C   
+ATOM    129  O   LEU A  16       6.238  -9.812  10.643  1.00  6.08          O   
+ATOM    130  CG  LEU A  16       5.559 -10.598  15.125  1.00  6.08          C   
+ATOM    131  CD1 LEU A  16       4.134 -10.839  15.611  1.00  6.08          C   
+ATOM    132  CD2 LEU A  16       6.498 -11.682  15.644  1.00  6.08          C   
+ATOM    133  N   ALA A  17       8.248 -10.386  11.036  1.00  6.08          N   
+ATOM    134  CA  ALA A  17       8.700 -10.996   9.788  1.00  6.08          C   
+ATOM    135  C   ALA A  17       7.863 -12.224   9.444  1.00  6.08          C   
+ATOM    136  CB  ALA A  17      10.177 -11.372   9.884  1.00  6.08          C   
+ATOM    137  O   ALA A  17       7.473 -12.986  10.332  1.00  6.08          O   
+ATOM    138  N   PRO A  18       7.023 -12.218   8.206  1.00  6.08          N   
+ATOM    139  CA  PRO A  18       6.298 -13.437   7.841  1.00  6.08          C   
+ATOM    140  C   PRO A  18       7.204 -14.499   7.222  1.00  6.08          C   
+ATOM    141  CB  PRO A  18       5.264 -12.942   6.826  1.00  6.08          C   
+ATOM    142  O   PRO A  18       8.307 -14.186   6.767  1.00  6.08          O   
+ATOM    143  CG  PRO A  18       5.663 -11.532   6.531  1.00  6.08          C   
+ATOM    144  CD  PRO A  18       6.762 -11.140   7.476  1.00  6.08          C   
+ATOM    145  N   LYS A  19       6.910 -15.813   7.261  1.00  6.08          N   
+ATOM    146  CA  LYS A  19       7.401 -17.032   6.627  1.00  6.08          C   
+ATOM    147  C   LYS A  19       6.700 -17.279   5.294  1.00  6.08          C   
+ATOM    148  CB  LYS A  19       7.206 -18.235   7.552  1.00  6.08          C   
+ATOM    149  O   LYS A  19       5.494 -17.054   5.170  1.00  6.08          O   
+ATOM    150  CG  LYS A  19       8.289 -18.383   8.610  1.00  6.08          C   
+ATOM    151  CD  LYS A  19       8.149 -19.695   9.372  1.00  6.08          C   
+ATOM    152  CE  LYS A  19       9.213 -19.830  10.454  1.00  6.08          C   
+ATOM    153  NZ  LYS A  19       9.104 -21.132  11.178  1.00  6.08          N   
+ATOM    154  N   VAL A  20       7.272 -17.218   4.055  1.00  6.08          N   
+ATOM    155  CA  VAL A  20       6.741 -17.404   2.708  1.00  6.08          C   
+ATOM    156  C   VAL A  20       7.061 -18.814   2.217  1.00  6.08          C   
+ATOM    157  CB  VAL A  20       7.307 -16.355   1.725  1.00  6.08          C   
+ATOM    158  O   VAL A  20       8.148 -19.336   2.476  1.00  6.08          O   
+ATOM    159  CG1 VAL A  20       6.686 -16.524   0.339  1.00  6.08          C   
+ATOM    160  CG2 VAL A  20       7.064 -14.943   2.254  1.00  6.08          C   
+ATOM    161  N   SER A  21       6.082 -19.480   1.504  1.00  6.08          N   
+ATOM    162  CA  SER A  21       6.281 -20.787   0.888  1.00  6.08          C   
+ATOM    163  C   SER A  21       7.315 -20.720  -0.230  1.00  6.08          C   
+ATOM    164  CB  SER A  21       4.960 -21.329   0.340  1.00  6.08          C   
+ATOM    165  O   SER A  21       7.458 -19.688  -0.889  1.00  6.08          O   
+ATOM    166  OG  SER A  21       4.811 -20.999  -1.030  1.00  6.08          O   
+ATOM    167  N   GLN A  22       8.094 -21.778  -0.457  1.00  6.08          N   
+ATOM    168  CA  GLN A  22       9.146 -22.023  -1.437  1.00  6.08          C   
+ATOM    169  C   GLN A  22       8.608 -21.912  -2.861  1.00  6.08          C   
+ATOM    170  CB  GLN A  22       9.774 -23.400  -1.218  1.00  6.08          C   
+ATOM    171  O   GLN A  22       9.307 -21.436  -3.758  1.00  6.08          O   
+ATOM    172  CG  GLN A  22      11.028 -23.375  -0.356  1.00  6.08          C   
+ATOM    173  CD  GLN A  22      11.900 -24.601  -0.550  1.00  6.08          C   
+ATOM    174  NE2 GLN A  22      13.017 -24.654   0.167  1.00  6.08          N   
+ATOM    175  OE1 GLN A  22      11.570 -25.495  -1.337  1.00  6.08          O   
+ATOM    176  N   SER A  23       7.326 -22.350  -3.087  1.00  6.08          N   
+ATOM    177  CA  SER A  23       6.818 -22.344  -4.455  1.00  6.08          C   
+ATOM    178  C   SER A  23       6.627 -20.921  -4.968  1.00  6.08          C   
+ATOM    179  CB  SER A  23       5.494 -23.106  -4.539  1.00  6.08          C   
+ATOM    180  O   SER A  23       6.916 -20.631  -6.131  1.00  6.08          O   
+ATOM    181  OG  SER A  23       4.496 -22.467  -3.762  1.00  6.08          O   
+ATOM    182  N   VAL A  24       6.156 -19.987  -4.125  1.00  6.08          N   
+ATOM    183  CA  VAL A  24       5.987 -18.582  -4.483  1.00  6.08          C   
+ATOM    184  C   VAL A  24       7.353 -17.938  -4.708  1.00  6.08          C   
+ATOM    185  CB  VAL A  24       5.206 -17.809  -3.397  1.00  6.08          C   
+ATOM    186  O   VAL A  24       7.534 -17.165  -5.652  1.00  6.08          O   
+ATOM    187  CG1 VAL A  24       5.211 -16.310  -3.691  1.00  6.08          C   
+ATOM    188  CG2 VAL A  24       3.775 -18.332  -3.296  1.00  6.08          C   
+ATOM    189  N   ILE A  25       8.365 -18.356  -3.827  1.00  6.08          N   
+ATOM    190  CA  ILE A  25       9.724 -17.836  -3.937  1.00  6.08          C   
+ATOM    191  C   ILE A  25      10.325 -18.244  -5.280  1.00  6.08          C   
+ATOM    192  CB  ILE A  25      10.616 -18.332  -2.777  1.00  6.08          C   
+ATOM    193  O   ILE A  25      11.011 -17.450  -5.928  1.00  6.08          O   
+ATOM    194  CG1 ILE A  25      10.127 -17.755  -1.444  1.00  6.08          C   
+ATOM    195  CG2 ILE A  25      12.081 -17.966  -3.028  1.00  6.08          C   
+ATOM    196  CD1 ILE A  25      10.848 -18.316  -0.226  1.00  6.08          C   
+ATOM    197  N   LYS A  26       9.942 -19.394  -5.728  1.00  6.08          N   
+ATOM    198  CA  LYS A  26      10.533 -19.885  -6.969  1.00  6.08          C   
+ATOM    199  C   LYS A  26       9.961 -19.150  -8.178  1.00  6.08          C   
+ATOM    200  CB  LYS A  26      10.303 -21.391  -7.115  1.00  6.08          C   
+ATOM    201  O   LYS A  26      10.615 -19.055  -9.219  1.00  6.08          O   
+ATOM    202  CG  LYS A  26      11.247 -22.244  -6.281  1.00  6.08          C   
+ATOM    203  CD  LYS A  26      11.022 -23.730  -6.527  1.00  6.08          C   
+ATOM    204  CE  LYS A  26      11.909 -24.587  -5.634  1.00  6.08          C   
+ATOM    205  NZ  LYS A  26      11.672 -26.045  -5.852  1.00  6.08          N   
+ATOM    206  N   SER A  27       8.716 -18.585  -8.016  1.00  6.08          N   
+ATOM    207  CA  SER A  27       8.115 -17.884  -9.146  1.00  6.08          C   
+ATOM    208  C   SER A  27       8.597 -16.439  -9.220  1.00  6.08          C   
+ATOM    209  CB  SER A  27       6.589 -17.917  -9.047  1.00  6.08          C   
+ATOM    210  O   SER A  27       8.389 -15.761 -10.229  1.00  6.08          O   
+ATOM    211  OG  SER A  27       6.145 -17.239  -7.885  1.00  6.08          O   
+ATOM    212  N   ILE A  28       9.326 -16.021  -8.127  1.00  6.08          N   
+ATOM    213  CA  ILE A  28       9.655 -14.600  -8.095  1.00  6.08          C   
+ATOM    214  C   ILE A  28      11.013 -14.370  -8.753  1.00  6.08          C   
+ATOM    215  CB  ILE A  28       9.660 -14.055  -6.649  1.00  6.08          C   
+ATOM    216  O   ILE A  28      12.005 -15.000  -8.381  1.00  6.08          O   
+ATOM    217  CG1 ILE A  28       8.282 -14.238  -6.004  1.00  6.08          C   
+ATOM    218  CG2 ILE A  28      10.082 -12.583  -6.629  1.00  6.08          C   
+ATOM    219  CD1 ILE A  28       8.241 -13.892  -4.522  1.00  6.08          C   
+ATOM    220  N   LYS A  29      11.102 -13.748  -9.982  1.00  6.08          N   
+ATOM    221  CA  LYS A  29      12.253 -13.354 -10.790  1.00  6.08          C   
+ATOM    222  C   LYS A  29      12.954 -12.137 -10.192  1.00  6.08          C   
+ATOM    223  CB  LYS A  29      11.825 -13.058 -12.228  1.00  6.08          C   
+ATOM    224  O   LYS A  29      12.302 -11.156  -9.829  1.00  6.08          O   
+ATOM    225  CG  LYS A  29      11.657 -14.299 -13.092  1.00  6.08          C   
+ATOM    226  CD  LYS A  29      11.456 -13.937 -14.557  1.00  6.08          C   
+ATOM    227  CE  LYS A  29      11.272 -15.178 -15.421  1.00  6.08          C   
+ATOM    228  NZ  LYS A  29      11.145 -14.832 -16.868  1.00  6.08          N   
+ATOM    229  N   GLY A  30      13.888 -12.322  -9.217  1.00  6.08          N   
+ATOM    230  CA  GLY A  30      14.719 -11.185  -8.854  1.00  6.08          C   
+ATOM    231  C   GLY A  30      14.960 -11.074  -7.361  1.00  6.08          C   
+ATOM    232  O   GLY A  30      14.940  -9.975  -6.804  1.00  6.08          O   
+ATOM    233  N   ILE A  31      15.279 -12.138  -6.638  1.00  6.08          N   
+ATOM    234  CA  ILE A  31      15.591 -12.164  -5.214  1.00  6.08          C   
+ATOM    235  C   ILE A  31      16.885 -11.396  -4.954  1.00  6.08          C   
+ATOM    236  CB  ILE A  31      15.713 -13.612  -4.689  1.00  6.08          C   
+ATOM    237  O   ILE A  31      17.945 -11.761  -5.468  1.00  6.08          O   
+ATOM    238  CG1 ILE A  31      14.396 -14.369  -4.897  1.00  6.08          C   
+ATOM    239  CG2 ILE A  31      16.121 -13.619  -3.212  1.00  6.08          C   
+ATOM    240  CD1 ILE A  31      14.475 -15.853  -4.565  1.00  6.08          C   
+ATOM    241  N   LYS A  32      16.933 -10.089  -4.574  1.00  6.08          N   
+ATOM    242  CA  LYS A  32      18.183  -9.378  -4.323  1.00  6.08          C   
+ATOM    243  C   LYS A  32      18.755  -9.738  -2.954  1.00  6.08          C   
+ATOM    244  CB  LYS A  32      17.970  -7.867  -4.420  1.00  6.08          C   
+ATOM    245  O   LYS A  32      19.969  -9.892  -2.804  1.00  6.08          O   
+ATOM    246  CG  LYS A  32      18.023  -7.324  -5.841  1.00  6.08          C   
+ATOM    247  CD  LYS A  32      18.626  -5.926  -5.883  1.00  6.08          C   
+ATOM    248  CE  LYS A  32      18.645  -5.367  -7.300  1.00  6.08          C   
+ATOM    249  NZ  LYS A  32      19.320  -4.036  -7.361  1.00  6.08          N   
+ATOM    250  N   SER A  33      17.909 -10.205  -1.893  1.00  6.08          N   
+ATOM    251  CA  SER A  33      18.320 -10.572  -0.542  1.00  6.08          C   
+ATOM    252  C   SER A  33      17.215 -11.331   0.185  1.00  6.08          C   
+ATOM    253  CB  SER A  33      18.707  -9.328   0.258  1.00  6.08          C   
+ATOM    254  O   SER A  33      16.099 -11.450  -0.324  1.00  6.08          O   
+ATOM    255  OG  SER A  33      17.560  -8.560   0.581  1.00  6.08          O   
+ATOM    256  N   LYS A  34      17.506 -12.068   1.188  1.00  6.08          N   
+ATOM    257  CA  LYS A  34      16.610 -12.918   1.967  1.00  6.08          C   
+ATOM    258  C   LYS A  34      15.403 -12.131   2.468  1.00  6.08          C   
+ATOM    259  CB  LYS A  34      17.356 -13.542   3.148  1.00  6.08          C   
+ATOM    260  O   LYS A  34      14.341 -12.706   2.718  1.00  6.08          O   
+ATOM    261  CG  LYS A  34      18.074 -14.840   2.810  1.00  6.08          C   
+ATOM    262  CD  LYS A  34      18.733 -15.451   4.040  1.00  6.08          C   
+ATOM    263  CE  LYS A  34      19.519 -16.707   3.689  1.00  6.08          C   
+ATOM    264  NZ  LYS A  34      20.155 -17.318   4.894  1.00  6.08          N   
+ATOM    265  N   HIS A  35      15.371 -10.863   2.266  1.00  5.36          N   
+ATOM    266  CA  HIS A  35      14.261 -10.259   2.994  1.00  5.36          C   
+ATOM    267  C   HIS A  35      13.500  -9.270   2.117  1.00  5.36          C   
+ATOM    268  CB  HIS A  35      14.765  -9.560   4.258  1.00  5.36          C   
+ATOM    269  O   HIS A  35      12.451  -8.760   2.515  1.00  5.36          O   
+ATOM    270  CG  HIS A  35      15.436 -10.482   5.225  1.00  5.36          C   
+ATOM    271  CD2 HIS A  35      16.730 -10.574   5.614  1.00  5.36          C   
+ATOM    272  ND1 HIS A  35      14.755 -11.461   5.916  1.00  5.36          N   
+ATOM    273  CE1 HIS A  35      15.604 -12.116   6.691  1.00  5.36          C   
+ATOM    274  NE2 HIS A  35      16.808 -11.597   6.526  1.00  5.36          N   
+ATOM    275  N   VAL A  36      14.059  -8.954   0.978  1.00  5.36          N   
+ATOM    276  CA  VAL A  36      13.407  -7.973   0.118  1.00  5.36          C   
+ATOM    277  C   VAL A  36      13.086  -8.603  -1.235  1.00  5.36          C   
+ATOM    278  CB  VAL A  36      14.284  -6.715  -0.074  1.00  5.36          C   
+ATOM    279  O   VAL A  36      13.962  -9.187  -1.878  1.00  5.36          O   
+ATOM    280  CG1 VAL A  36      13.591  -5.709  -0.992  1.00  5.36          C   
+ATOM    281  CG2 VAL A  36      14.605  -6.078   1.277  1.00  5.36          C   
+ATOM    282  N   PHE A  37      11.770  -8.603  -1.484  1.00  5.36          N   
+ATOM    283  CA  PHE A  37      11.361  -9.204  -2.749  1.00  5.36          C   
+ATOM    284  C   PHE A  37      10.980  -8.129  -3.760  1.00  5.36          C   
+ATOM    285  CB  PHE A  37      10.186 -10.163  -2.535  1.00  5.36          C   
+ATOM    286  O   PHE A  37      10.245  -7.195  -3.434  1.00  5.36          O   
+ATOM    287  CG  PHE A  37      10.500 -11.311  -1.614  1.00  5.36          C   
+ATOM    288  CD1 PHE A  37      10.346 -11.180  -0.239  1.00  5.36          C   
+ATOM    289  CD2 PHE A  37      10.949 -12.522  -2.124  1.00  5.36          C   
+ATOM    290  CE1 PHE A  37      10.636 -12.242   0.616  1.00  5.36          C   
+ATOM    291  CE2 PHE A  37      11.241 -13.587  -1.276  1.00  5.36          C   
+ATOM    292  CZ  PHE A  37      11.084 -13.445   0.093  1.00  5.36          C   
+ATOM    293  N   GLU A  38      11.560  -8.160  -4.884  1.00  5.36          N   
+ATOM    294  CA  GLU A  38      11.250  -7.279  -6.006  1.00  5.36          C   
+ATOM    295  C   GLU A  38      10.193  -7.897  -6.917  1.00  5.36          C   
+ATOM    296  CB  GLU A  38      12.516  -6.965  -6.808  1.00  5.36          C   
+ATOM    297  O   GLU A  38      10.363  -9.016  -7.405  1.00  5.36          O   
+ATOM    298  CG  GLU A  38      12.298  -5.965  -7.934  1.00  5.36          C   
+ATOM    299  CD  GLU A  38      13.552  -5.698  -8.751  1.00  5.36          C   
+ATOM    300  OE1 GLU A  38      13.571  -6.025  -9.960  1.00  5.36          O   
+ATOM    301  OE2 GLU A  38      14.525  -5.158  -8.178  1.00  5.36          O   
+ATOM    302  N   LEU A  39       9.040  -7.269  -6.940  1.00  5.36          N   
+ATOM    303  CA  LEU A  39       7.988  -7.741  -7.834  1.00  5.36          C   
+ATOM    304  C   LEU A  39       7.842  -6.816  -9.038  1.00  5.36          C   
+ATOM    305  CB  LEU A  39       6.655  -7.839  -7.087  1.00  5.36          C   
+ATOM    306  O   LEU A  39       7.250  -5.740  -8.931  1.00  5.36          O   
+ATOM    307  CG  LEU A  39       6.571  -8.896  -5.984  1.00  5.36          C   
+ATOM    308  CD1 LEU A  39       5.425  -8.577  -5.030  1.00  5.36          C   
+ATOM    309  CD2 LEU A  39       6.401 -10.286  -6.587  1.00  5.36          C   
+ATOM    310  N   PRO A  40       8.487  -7.251 -10.143  1.00  6.08          N   
+ATOM    311  CA  PRO A  40       8.346  -6.359 -11.296  1.00  6.08          C   
+ATOM    312  C   PRO A  40       6.896  -6.208 -11.751  1.00  6.08          C   
+ATOM    313  CB  PRO A  40       9.189  -7.043 -12.376  1.00  6.08          C   
+ATOM    314  O   PRO A  40       6.198  -7.207 -11.942  1.00  6.08          O   
+ATOM    315  CG  PRO A  40       9.550  -8.371 -11.794  1.00  6.08          C   
+ATOM    316  CD  PRO A  40       9.068  -8.416 -10.373  1.00  6.08          C   
+ATOM    317  N   ILE A  41       6.243  -4.982 -11.734  1.00  6.08          N   
+ATOM    318  CA  ILE A  41       4.884  -4.747 -12.210  1.00  6.08          C   
+ATOM    319  C   ILE A  41       4.900  -4.508 -13.718  1.00  6.08          C   
+ATOM    320  CB  ILE A  41       4.229  -3.551 -11.484  1.00  6.08          C   
+ATOM    321  O   ILE A  41       4.158  -5.153 -14.463  1.00  6.08          O   
+ATOM    322  CG1 ILE A  41       4.176  -3.807  -9.974  1.00  6.08          C   
+ATOM    323  CG2 ILE A  41       2.829  -3.280 -12.044  1.00  6.08          C   
+ATOM    324  CD1 ILE A  41       3.647  -2.630  -9.165  1.00  6.08          C   
+ATOM    325  N   ASN A  42       5.810  -3.703 -14.250  1.00  6.08          N   
+ATOM    326  CA  ASN A  42       6.141  -3.456 -15.649  1.00  6.08          C   
+ATOM    327  C   ASN A  42       7.598  -3.034 -15.814  1.00  6.08          C   
+ATOM    328  CB  ASN A  42       5.210  -2.396 -16.242  1.00  6.08          C   
+ATOM    329  O   ASN A  42       8.396  -3.167 -14.885  1.00  6.08          O   
+ATOM    330  CG  ASN A  42       5.303  -1.067 -15.518  1.00  6.08          C   
+ATOM    331  ND2 ASN A  42       4.156  -0.448 -15.267  1.00  6.08          N   
+ATOM    332  OD1 ASN A  42       6.397  -0.600 -15.189  1.00  6.08          O   
+ATOM    333  N   ASP A  43       7.989  -2.622 -17.089  1.00  6.08          N   
+ATOM    334  CA  ASP A  43       9.387  -2.328 -17.387  1.00  6.08          C   
+ATOM    335  C   ASP A  43       9.898  -1.169 -16.534  1.00  6.08          C   
+ATOM    336  CB  ASP A  43       9.563  -2.005 -18.873  1.00  6.08          C   
+ATOM    337  O   ASP A  43      11.101  -1.051 -16.294  1.00  6.08          O   
+ATOM    338  CG  ASP A  43       9.350  -3.211 -19.771  1.00  6.08          C   
+ATOM    339  OD1 ASP A  43       9.124  -3.033 -20.987  1.00  6.08          O   
+ATOM    340  OD2 ASP A  43       9.406  -4.349 -19.257  1.00  6.08          O   
+ATOM    341  N   LYS A  44       8.964  -0.340 -16.036  1.00  6.08          N   
+ATOM    342  CA  LYS A  44       9.421   0.879 -15.374  1.00  6.08          C   
+ATOM    343  C   LYS A  44       9.078   0.858 -13.887  1.00  6.08          C   
+ATOM    344  CB  LYS A  44       8.806   2.113 -16.036  1.00  6.08          C   
+ATOM    345  O   LYS A  44       9.523   1.723 -13.130  1.00  6.08          O   
+ATOM    346  CG  LYS A  44       9.329   2.388 -17.438  1.00  6.08          C   
+ATOM    347  CD  LYS A  44       8.792   3.704 -17.986  1.00  6.08          C   
+ATOM    348  CE  LYS A  44       9.281   3.960 -19.405  1.00  6.08          C   
+ATOM    349  NZ  LYS A  44       8.775   5.260 -19.939  1.00  6.08          N   
+ATOM    350  N   THR A  45       8.261  -0.019 -13.522  1.00  6.08          N   
+ATOM    351  CA  THR A  45       7.740   0.030 -12.161  1.00  6.08          C   
+ATOM    352  C   THR A  45       8.037  -1.272 -11.421  1.00  6.08          C   
+ATOM    353  CB  THR A  45       6.223   0.293 -12.152  1.00  6.08          C   
+ATOM    354  O   THR A  45       7.755  -2.359 -11.929  1.00  6.08          O   
+ATOM    355  CG2 THR A  45       5.716   0.544 -10.736  1.00  6.08          C   
+ATOM    356  OG1 THR A  45       5.938   1.442 -12.960  1.00  6.08          O   
+ATOM    357  N   LYS A  46       8.731  -1.136 -10.322  1.00  5.36          N   
+ATOM    358  CA  LYS A  46       9.040  -2.324  -9.532  1.00  5.36          C   
+ATOM    359  C   LYS A  46       8.519  -2.186  -8.104  1.00  5.36          C   
+ATOM    360  CB  LYS A  46      10.548  -2.581  -9.517  1.00  5.36          C   
+ATOM    361  O   LYS A  46       8.374  -1.073  -7.595  1.00  5.36          O   
+ATOM    362  CG  LYS A  46      11.163  -2.738 -10.899  1.00  5.36          C   
+ATOM    363  CD  LYS A  46      12.677  -2.883 -10.824  1.00  5.36          C   
+ATOM    364  CE  LYS A  46      13.302  -2.960 -12.211  1.00  5.36          C   
+ATOM    365  NZ  LYS A  46      14.790  -2.843 -12.156  1.00  5.36          N   
+ATOM    366  N   ARG A  47       8.105  -3.267  -7.558  1.00  5.36          N   
+ATOM    367  CA  ARG A  47       7.620  -3.302  -6.182  1.00  5.36          C   
+ATOM    368  C   ARG A  47       8.642  -3.956  -5.258  1.00  5.36          C   
+ATOM    369  CB  ARG A  47       6.286  -4.047  -6.100  1.00  5.36          C   
+ATOM    370  O   ARG A  47       9.291  -4.934  -5.635  1.00  5.36          O   
+ATOM    371  CG  ARG A  47       5.588  -3.915  -4.756  1.00  5.36          C   
+ATOM    372  CD  ARG A  47       4.227  -4.596  -4.758  1.00  5.36          C   
+ATOM    373  NE  ARG A  47       3.162  -3.674  -4.374  1.00  5.36          N   
+ATOM    374  NH1 ARG A  47       1.449  -5.188  -4.705  1.00  5.36          N   
+ATOM    375  NH2 ARG A  47       0.983  -3.060  -3.991  1.00  5.36          N   
+ATOM    376  CZ  ARG A  47       1.867  -3.976  -4.358  1.00  5.36          C   
+ATOM    377  N   TYR A  48       8.748  -3.477  -3.978  1.00  5.36          N   
+ATOM    378  CA  TYR A  48       9.593  -4.175  -3.016  1.00  5.36          C   
+ATOM    379  C   TYR A  48       8.779  -4.649  -1.818  1.00  5.36          C   
+ATOM    380  CB  TYR A  48      10.734  -3.268  -2.546  1.00  5.36          C   
+ATOM    381  O   TYR A  48       7.943  -3.908  -1.295  1.00  5.36          O   
+ATOM    382  CG  TYR A  48      11.694  -2.881  -3.645  1.00  5.36          C   
+ATOM    383  CD1 TYR A  48      11.441  -1.781  -4.462  1.00  5.36          C   
+ATOM    384  CD2 TYR A  48      12.854  -3.613  -3.869  1.00  5.36          C   
+ATOM    385  CE1 TYR A  48      12.321  -1.421  -5.477  1.00  5.36          C   
+ATOM    386  CE2 TYR A  48      13.742  -3.263  -4.881  1.00  5.36          C   
+ATOM    387  OH  TYR A  48      14.342  -1.815  -6.682  1.00  5.36          O   
+ATOM    388  CZ  TYR A  48      13.467  -2.167  -5.678  1.00  5.36          C   
+ATOM    389  N   ILE A  49       8.717  -5.888  -1.613  1.00  5.36          N   
+ATOM    390  CA  ILE A  49       7.989  -6.430  -0.471  1.00  5.36          C   
+ATOM    391  C   ILE A  49       8.975  -6.856   0.614  1.00  5.36          C   
+ATOM    392  CB  ILE A  49       7.097  -7.622  -0.882  1.00  5.36          C   
+ATOM    393  O   ILE A  49      10.017  -7.445   0.318  1.00  5.36          O   
+ATOM    394  CG1 ILE A  49       6.166  -7.220  -2.032  1.00  5.36          C   
+ATOM    395  CG2 ILE A  49       6.296  -8.136   0.317  1.00  5.36          C   
+ATOM    396  CD1 ILE A  49       5.367  -8.378  -2.615  1.00  5.36          C   
+ATOM    397  N   LEU A  50       8.862  -6.262   1.857  1.00  5.36          N   
+ATOM    398  CA  LEU A  50       9.614  -6.778   2.996  1.00  5.36          C   
+ATOM    399  C   LEU A  50       8.946  -8.023   3.570  1.00  5.36          C   
+ATOM    400  CB  LEU A  50       9.742  -5.707   4.083  1.00  5.36          C   
+ATOM    401  O   LEU A  50       7.743  -8.018   3.842  1.00  5.36          O   
+ATOM    402  CG  LEU A  50      11.100  -5.606   4.779  1.00  5.36          C   
+ATOM    403  CD1 LEU A  50      11.885  -4.416   4.238  1.00  5.36          C   
+ATOM    404  CD2 LEU A  50      10.920  -5.493   6.289  1.00  5.36          C   
+ATOM    405  N   GLY A  51       9.463  -9.224   3.543  1.00  5.36          N   
+ATOM    406  CA  GLY A  51       9.015 -10.310   4.400  1.00  5.36          C   
+ATOM    407  C   GLY A  51       7.865 -11.102   3.807  1.00  5.36          C   
+ATOM    408  O   GLY A  51       6.957 -10.529   3.200  1.00  5.36          O   
+ATOM    409  N   ALA A  52       8.049 -12.344   3.364  1.00  5.36          N   
+ATOM    410  CA  ALA A  52       6.949 -13.257   3.063  1.00  5.36          C   
+ATOM    411  C   ALA A  52       6.954 -14.454   4.009  1.00  5.36          C   
+ATOM    412  CB  ALA A  52       7.031 -13.728   1.613  1.00  5.36          C   
+ATOM    413  O   ALA A  52       8.016 -14.901   4.449  1.00  5.36          O   
+ATOM    414  N   THR A  53       5.741 -14.626   4.821  1.00  6.08          N   
+ATOM    415  CA  THR A  53       5.638 -15.818   5.655  1.00  6.08          C   
+ATOM    416  C   THR A  53       4.816 -16.898   4.956  1.00  6.08          C   
+ATOM    417  CB  THR A  53       5.005 -15.492   7.020  1.00  6.08          C   
+ATOM    418  O   THR A  53       4.163 -16.631   3.944  1.00  6.08          O   
+ATOM    419  CG2 THR A  53       5.758 -14.364   7.719  1.00  6.08          C   
+ATOM    420  OG1 THR A  53       3.643 -15.093   6.826  1.00  6.08          O   
+ATOM    421  N   GLU A  54       4.971 -18.204   5.377  1.00  6.08          N   
+ATOM    422  CA  GLU A  54       4.419 -19.510   5.031  1.00  6.08          C   
+ATOM    423  C   GLU A  54       2.894 -19.498   5.093  1.00  6.08          C   
+ATOM    424  CB  GLU A  54       4.974 -20.593   5.960  1.00  6.08          C   
+ATOM    425  O   GLU A  54       2.229 -20.148   4.283  1.00  6.08          O   
+ATOM    426  CG  GLU A  54       6.145 -21.367   5.371  1.00  6.08          C   
+ATOM    427  CD  GLU A  54       6.620 -22.505   6.261  1.00  6.08          C   
+ATOM    428  OE1 GLU A  54       7.586 -23.207   5.885  1.00  6.08          O   
+ATOM    429  OE2 GLU A  54       6.021 -22.696   7.343  1.00  6.08          O   
+ATOM    430  N   THR A  55       2.284 -18.768   6.100  1.00  6.08          N   
+ATOM    431  CA  THR A  55       0.931 -19.163   6.472  1.00  6.08          C   
+ATOM    432  C   THR A  55      -0.065 -18.051   6.153  1.00  6.08          C   
+ATOM    433  CB  THR A  55       0.844 -19.519   7.968  1.00  6.08          C   
+ATOM    434  O   THR A  55      -1.275 -18.282   6.132  1.00  6.08          O   
+ATOM    435  CG2 THR A  55       1.686 -20.749   8.290  1.00  6.08          C   
+ATOM    436  OG1 THR A  55       1.318 -18.412   8.745  1.00  6.08          O   
+ATOM    437  N   LYS A  56       0.188 -16.955   5.564  1.00  6.08          N   
+ATOM    438  CA  LYS A  56      -0.870 -15.980   5.311  1.00  6.08          C   
+ATOM    439  C   LYS A  56      -0.294 -14.671   4.777  1.00  6.08          C   
+ATOM    440  CB  LYS A  56      -1.676 -15.719   6.584  1.00  6.08          C   
+ATOM    441  O   LYS A  56       0.578 -14.069   5.406  1.00  6.08          O   
+ATOM    442  CG  LYS A  56      -2.640 -16.838   6.947  1.00  6.08          C   
+ATOM    443  CD  LYS A  56      -3.584 -16.421   8.067  1.00  6.08          C   
+ATOM    444  CE  LYS A  56      -4.524 -17.554   8.458  1.00  6.08          C   
+ATOM    445  NZ  LYS A  56      -5.505 -17.125   9.499  1.00  6.08          N   
+ATOM    446  N   GLU A  57      -0.274 -14.530   3.508  1.00  6.08          N   
+ATOM    447  CA  GLU A  57      -0.600 -13.449   2.582  1.00  6.08          C   
+ATOM    448  C   GLU A  57      -0.543 -12.092   3.276  1.00  6.08          C   
+ATOM    449  CB  GLU A  57      -1.984 -13.668   1.966  1.00  6.08          C   
+ATOM    450  O   GLU A  57      -0.932 -11.075   2.696  1.00  6.08          O   
+ATOM    451  CG  GLU A  57      -1.976 -14.563   0.735  1.00  6.08          C   
+ATOM    452  CD  GLU A  57      -3.338 -14.683   0.071  1.00  6.08          C   
+ATOM    453  OE1 GLU A  57      -3.423 -15.253  -1.040  1.00  6.08          O   
+ATOM    454  OE2 GLU A  57      -4.328 -14.203   0.667  1.00  6.08          O   
+ATOM    455  N   GLU A  58       0.126 -11.928   4.480  1.00  6.08          N   
+ATOM    456  CA  GLU A  58      -0.009 -10.492   4.706  1.00  6.08          C   
+ATOM    457  C   GLU A  58       1.168  -9.726   4.108  1.00  6.08          C   
+ATOM    458  CB  GLU A  58      -0.125 -10.192   6.203  1.00  6.08          C   
+ATOM    459  O   GLU A  58       2.323 -10.126   4.271  1.00  6.08          O   
+ATOM    460  CG  GLU A  58      -1.553  -9.953   6.673  1.00  6.08          C   
+ATOM    461  CD  GLU A  58      -1.648  -9.595   8.147  1.00  6.08          C   
+ATOM    462  OE1 GLU A  58      -2.761  -9.279   8.625  1.00  6.08          O   
+ATOM    463  OE2 GLU A  58      -0.600  -9.629   8.830  1.00  6.08          O   
+ATOM    464  N   VAL A  59       0.923  -8.970   3.115  1.00  5.36          N   
+ATOM    465  CA  VAL A  59       1.676  -8.056   2.262  1.00  5.36          C   
+ATOM    466  C   VAL A  59       1.616  -6.644   2.838  1.00  5.36          C   
+ATOM    467  CB  VAL A  59       1.141  -8.064   0.812  1.00  5.36          C   
+ATOM    468  O   VAL A  59       0.550  -6.026   2.875  1.00  5.36          O   
+ATOM    469  CG1 VAL A  59       2.113  -7.351  -0.126  1.00  5.36          C   
+ATOM    470  CG2 VAL A  59       0.894  -9.496   0.342  1.00  5.36          C   
+ATOM    471  N   LEU A  60       2.134  -6.382   4.062  1.00  5.36          N   
+ATOM    472  CA  LEU A  60       2.206  -4.926   4.093  1.00  5.36          C   
+ATOM    473  C   LEU A  60       3.467  -4.459   4.813  1.00  5.36          C   
+ATOM    474  CB  LEU A  60       0.968  -4.342   4.778  1.00  5.36          C   
+ATOM    475  O   LEU A  60       3.645  -4.732   6.002  1.00  5.36          O   
+ATOM    476  CG  LEU A  60      -0.362  -4.523   4.044  1.00  5.36          C   
+ATOM    477  CD1 LEU A  60      -1.528  -4.217   4.977  1.00  5.36          C   
+ATOM    478  CD2 LEU A  60      -0.414  -3.635   2.805  1.00  5.36          C   
+ATOM    479  N   PRO A  61       4.690  -3.899   4.294  1.00  5.36          N   
+ATOM    480  CA  PRO A  61       4.413  -2.559   3.771  1.00  5.36          C   
+ATOM    481  C   PRO A  61       4.305  -2.531   2.248  1.00  5.36          C   
+ATOM    482  CB  PRO A  61       5.614  -1.739   4.248  1.00  5.36          C   
+ATOM    483  O   PRO A  61       4.930  -3.348   1.566  1.00  5.36          O   
+ATOM    484  CG  PRO A  61       6.588  -2.750   4.760  1.00  5.36          C   
+ATOM    485  CD  PRO A  61       5.908  -4.089   4.803  1.00  5.36          C   
+ATOM    486  N   ASN A  62       3.352  -1.777   1.774  1.00  4.42          N   
+ATOM    487  CA  ASN A  62       2.773  -1.209   0.561  1.00  4.42          C   
+ATOM    488  C   ASN A  62       3.673  -0.134  -0.041  1.00  4.42          C   
+ATOM    489  CB  ASN A  62       1.382  -0.637   0.847  1.00  4.42          C   
+ATOM    490  O   ASN A  62       3.461   1.058   0.186  1.00  4.42          O   
+ATOM    491  CG  ASN A  62       0.321  -1.714   0.963  1.00  4.42          C   
+ATOM    492  ND2 ASN A  62      -0.756  -1.410   1.679  1.00  4.42          N   
+ATOM    493  OD1 ASN A  62       0.468  -2.809   0.415  1.00  4.42          O   
+ATOM    494  N   TYR A  63       4.982  -0.411  -0.311  1.00  4.42          N   
+ATOM    495  CA  TYR A  63       5.766   0.563  -1.062  1.00  4.42          C   
+ATOM    496  C   TYR A  63       5.569   0.381  -2.563  1.00  4.42          C   
+ATOM    497  CB  TYR A  63       7.252   0.442  -0.712  1.00  4.42          C   
+ATOM    498  O   TYR A  63       5.291  -0.726  -3.029  1.00  4.42          O   
+ATOM    499  CG  TYR A  63       7.556   0.705   0.743  1.00  4.42          C   
+ATOM    500  CD1 TYR A  63       7.564  -0.333   1.672  1.00  4.42          C   
+ATOM    501  CD2 TYR A  63       7.835   1.992   1.191  1.00  4.42          C   
+ATOM    502  CE1 TYR A  63       7.842  -0.094   3.014  1.00  4.42          C   
+ATOM    503  CE2 TYR A  63       8.114   2.242   2.531  1.00  4.42          C   
+ATOM    504  OH  TYR A  63       8.392   1.435   4.760  1.00  4.42          O   
+ATOM    505  CZ  TYR A  63       8.116   1.194   3.433  1.00  4.42          C   
+ATOM    506  N   VAL A  64       5.361   1.479  -3.257  1.00  4.42          N   
+ATOM    507  CA  VAL A  64       5.323   1.484  -4.716  1.00  4.42          C   
+ATOM    508  C   VAL A  64       6.456   2.350  -5.260  1.00  4.42          C   
+ATOM    509  CB  VAL A  64       3.963   1.991  -5.246  1.00  4.42          C   
+ATOM    510  O   VAL A  64       6.668   3.472  -4.794  1.00  4.42          O   
+ATOM    511  CG1 VAL A  64       4.005   2.161  -6.764  1.00  4.42          C   
+ATOM    512  CG2 VAL A  64       2.843   1.034  -4.844  1.00  4.42          C   
+ATOM    513  N   LYS A  65       7.501   1.678  -5.944  1.00  5.36          N   
+ATOM    514  CA  LYS A  65       8.535   2.445  -6.634  1.00  5.36          C   
+ATOM    515  C   LYS A  65       8.078   2.847  -8.033  1.00  5.36          C   
+ATOM    516  CB  LYS A  65       9.834   1.643  -6.717  1.00  5.36          C   
+ATOM    517  O   LYS A  65       7.631   2.004  -8.812  1.00  5.36          O   
+ATOM    518  CG  LYS A  65      11.017   2.434  -7.256  1.00  5.36          C   
+ATOM    519  CD  LYS A  65      12.295   1.605  -7.245  1.00  5.36          C   
+ATOM    520  CE  LYS A  65      13.479   2.395  -7.786  1.00  5.36          C   
+ATOM    521  NZ  LYS A  65      14.742   1.599  -7.745  1.00  5.36          N   
+ATOM    522  N   VAL A  66       8.093   4.091  -8.333  1.00  5.36          N   
+ATOM    523  CA  VAL A  66       7.778   4.641  -9.647  1.00  5.36          C   
+ATOM    524  C   VAL A  66       9.008   5.340 -10.223  1.00  5.36          C   
+ATOM    525  CB  VAL A  66       6.589   5.625  -9.580  1.00  5.36          C   
+ATOM    526  O   VAL A  66       9.375   6.430  -9.779  1.00  5.36          O   
+ATOM    527  CG1 VAL A  66       6.222   6.125 -10.977  1.00  5.36          C   
+ATOM    528  CG2 VAL A  66       5.385   4.962  -8.914  1.00  5.36          C   
+ATOM    529  N   GLY A  67       9.659   4.635 -11.193  1.00  5.36          N   
+ATOM    530  CA  GLY A  67      10.950   5.142 -11.630  1.00  5.36          C   
+ATOM    531  C   GLY A  67      12.012   5.081 -10.548  1.00  5.36          C   
+ATOM    532  O   GLY A  67      12.305   4.007 -10.019  1.00  5.36          O   
+ATOM    533  N   SER A  68      12.514   6.343 -10.271  1.00  5.36          N   
+ATOM    534  CA  SER A  68      13.526   6.411  -9.222  1.00  5.36          C   
+ATOM    535  C   SER A  68      12.902   6.759  -7.874  1.00  5.36          C   
+ATOM    536  CB  SER A  68      14.598   7.442  -9.577  1.00  5.36          C   
+ATOM    537  O   SER A  68      13.608   6.894  -6.873  1.00  5.36          O   
+ATOM    538  OG  SER A  68      14.006   8.654 -10.011  1.00  5.36          O   
+ATOM    539  N   ASP A  69      11.527   6.878  -7.937  1.00  5.36          N   
+ATOM    540  CA  ASP A  69      10.872   7.348  -6.720  1.00  5.36          C   
+ATOM    541  C   ASP A  69      10.208   6.193  -5.973  1.00  5.36          C   
+ATOM    542  CB  ASP A  69       9.837   8.425  -7.049  1.00  5.36          C   
+ATOM    543  O   ASP A  69       9.669   5.274  -6.594  1.00  5.36          O   
+ATOM    544  CG  ASP A  69      10.453   9.672  -7.660  1.00  5.36          C   
+ATOM    545  OD1 ASP A  69       9.841  10.271  -8.571  1.00  5.36          O   
+ATOM    546  OD2 ASP A  69      11.561  10.057  -7.229  1.00  5.36          O   
+ATOM    547  N   LEU A  70      10.310   6.167  -4.690  1.00  4.42          N   
+ATOM    548  CA  LEU A  70       9.712   5.170  -3.810  1.00  4.42          C   
+ATOM    549  C   LEU A  70       8.614   5.789  -2.952  1.00  4.42          C   
+ATOM    550  CB  LEU A  70      10.780   4.537  -2.914  1.00  4.42          C   
+ATOM    551  O   LEU A  70       8.810   6.853  -2.359  1.00  4.42          O   
+ATOM    552  CG  LEU A  70      10.378   3.255  -2.182  1.00  4.42          C   
+ATOM    553  CD1 LEU A  70      10.240   2.102  -3.170  1.00  4.42          C   
+ATOM    554  CD2 LEU A  70      11.395   2.918  -1.097  1.00  4.42          C   
+ATOM    555  N   TYR A  71       7.500   5.181  -2.953  1.00  4.42          N   
+ATOM    556  CA  TYR A  71       6.370   5.703  -2.192  1.00  4.42          C   
+ATOM    557  C   TYR A  71       5.940   4.719  -1.110  1.00  4.42          C   
+ATOM    558  CB  TYR A  71       5.190   6.006  -3.121  1.00  4.42          C   
+ATOM    559  O   TYR A  71       5.994   3.504  -1.311  1.00  4.42          O   
+ATOM    560  CG  TYR A  71       5.502   7.031  -4.184  1.00  4.42          C   
+ATOM    561  CD1 TYR A  71       6.112   6.661  -5.380  1.00  4.42          C   
+ATOM    562  CD2 TYR A  71       5.190   8.373  -3.993  1.00  4.42          C   
+ATOM    563  CE1 TYR A  71       6.403   7.603  -6.361  1.00  4.42          C   
+ATOM    564  CE2 TYR A  71       5.476   9.324  -4.967  1.00  4.42          C   
+ATOM    565  OH  TYR A  71       6.367   9.867  -7.114  1.00  4.42          O   
+ATOM    566  CZ  TYR A  71       6.081   8.930  -6.146  1.00  4.42          C   
+ATOM    567  N   ARG A  72       5.750   5.231   0.077  1.00  4.42          N   
+ATOM    568  CA  ARG A  72       5.102   4.470   1.140  1.00  4.42          C   
+ATOM    569  C   ARG A  72       3.588   4.648   1.097  1.00  4.42          C   
+ATOM    570  CB  ARG A  72       5.641   4.892   2.509  1.00  4.42          C   
+ATOM    571  O   ARG A  72       3.093   5.772   0.987  1.00  4.42          O   
+ATOM    572  CG  ARG A  72       5.185   4.000   3.652  1.00  4.42          C   
+ATOM    573  CD  ARG A  72       5.797   4.427   4.979  1.00  4.42          C   
+ATOM    574  NE  ARG A  72       5.284   3.630   6.090  1.00  4.42          N   
+ATOM    575  NH1 ARG A  72       6.305   4.890   7.736  1.00  4.42          N   
+ATOM    576  NH2 ARG A  72       5.019   3.079   8.304  1.00  4.42          N   
+ATOM    577  CZ  ARG A  72       5.538   3.868   7.374  1.00  4.42          C   
+ATOM    578  N   LEU A  73       2.852   3.545   1.039  1.00  3.21          N   
+ATOM    579  CA  LEU A  73       1.395   3.610   1.029  1.00  3.21          C   
+ATOM    580  C   LEU A  73       0.833   3.435   2.436  1.00  3.21          C   
+ATOM    581  CB  LEU A  73       0.816   2.541   0.099  1.00  3.21          C   
+ATOM    582  O   LEU A  73       1.261   2.544   3.173  1.00  3.21          O   
+ATOM    583  CG  LEU A  73       1.212   2.639  -1.375  1.00  3.21          C   
+ATOM    584  CD1 LEU A  73       1.030   1.291  -2.064  1.00  3.21          C   
+ATOM    585  CD2 LEU A  73       0.396   3.719  -2.078  1.00  3.21          C   
+ATOM    586  N   LYS A  74       0.064   4.404   2.921  1.00  4.42          N   
+ATOM    587  CA  LYS A  74      -0.627   4.299   4.203  1.00  4.42          C   
+ATOM    588  C   LYS A  74      -2.140   4.374   4.020  1.00  4.42          C   
+ATOM    589  CB  LYS A  74      -0.159   5.400   5.156  1.00  4.42          C   
+ATOM    590  O   LYS A  74      -2.643   5.256   3.320  1.00  4.42          O   
+ATOM    591  CG  LYS A  74      -0.498   5.139   6.617  1.00  4.42          C   
+ATOM    592  CD  LYS A  74       0.083   6.214   7.526  1.00  4.42          C   
+ATOM    593  CE  LYS A  74      -0.315   5.993   8.979  1.00  4.42          C   
+ATOM    594  NZ  LYS A  74       0.270   7.033   9.878  1.00  4.42          N   
+ATOM    595  N   ALA A  75      -2.781   3.329   4.523  1.00  4.42          N   
+ATOM    596  CA  ALA A  75      -4.241   3.343   4.479  1.00  4.42          C   
+ATOM    597  C   ALA A  75      -4.826   3.741   5.831  1.00  4.42          C   
+ATOM    598  CB  ALA A  75      -4.774   1.977   4.053  1.00  4.42          C   
+ATOM    599  O   ALA A  75      -4.275   3.396   6.879  1.00  4.42          O   
+ATOM    600  N   TYR A  76      -5.770   4.597   5.772  1.00  5.36          N   
+ATOM    601  CA  TYR A  76      -6.435   4.990   7.009  1.00  5.36          C   
+ATOM    602  C   TYR A  76      -7.924   5.215   6.781  1.00  5.36          C   
+ATOM    603  CB  TYR A  76      -5.797   6.259   7.583  1.00  5.36          C   
+ATOM    604  O   TYR A  76      -8.375   5.314   5.637  1.00  5.36          O   
+ATOM    605  CG  TYR A  76      -5.887   7.453   6.665  1.00  5.36          C   
+ATOM    606  CD1 TYR A  76      -6.916   8.382   6.798  1.00  5.36          C   
+ATOM    607  CD2 TYR A  76      -4.946   7.653   5.661  1.00  5.36          C   
+ATOM    608  CE1 TYR A  76      -7.005   9.483   5.952  1.00  5.36          C   
+ATOM    609  CE2 TYR A  76      -5.024   8.750   4.809  1.00  5.36          C   
+ATOM    610  OH  TYR A  76      -6.138  10.746   4.123  1.00  5.36          O   
+ATOM    611  CZ  TYR A  76      -6.055   9.659   4.963  1.00  5.36          C   
+ATOM    612  N   ARG A  77      -8.726   5.218   7.799  1.00  5.36          N   
+ATOM    613  CA  ARG A  77     -10.169   5.419   7.723  1.00  5.36          C   
+ATOM    614  C   ARG A  77     -10.570   6.753   8.344  1.00  5.36          C   
+ATOM    615  CB  ARG A  77     -10.909   4.274   8.418  1.00  5.36          C   
+ATOM    616  O   ARG A  77     -10.028   7.151   9.377  1.00  5.36          O   
+ATOM    617  CG  ARG A  77     -12.424   4.372   8.322  1.00  5.36          C   
+ATOM    618  CD  ARG A  77     -13.109   3.207   9.024  1.00  5.36          C   
+ATOM    619  NE  ARG A  77     -13.016   1.977   8.244  1.00  5.36          N   
+ATOM    620  NH1 ARG A  77     -14.417   0.756   9.616  1.00  5.36          N   
+ATOM    621  NH2 ARG A  77     -13.484  -0.219   7.763  1.00  5.36          N   
+ATOM    622  CZ  ARG A  77     -13.639   0.841   8.542  1.00  5.36          C   
+ATOM    623  N   GLU A  78     -11.384   7.464   7.705  1.00  5.36          N   
+ATOM    624  CA  GLU A  78     -12.045   8.659   8.221  1.00  5.36          C   
+ATOM    625  C   GLU A  78     -13.563   8.519   8.164  1.00  5.36          C   
+ATOM    626  CB  GLU A  78     -11.601   9.899   7.439  1.00  5.36          C   
+ATOM    627  O   GLU A  78     -14.081   7.514   7.673  1.00  5.36          O   
+ATOM    628  CG  GLU A  78     -10.154  10.298   7.690  1.00  5.36          C   
+ATOM    629  CD  GLU A  78      -9.792  11.648   7.092  1.00  5.36          C   
+ATOM    630  OE1 GLU A  78      -8.647  12.113   7.291  1.00  5.36          O   
+ATOM    631  OE2 GLU A  78     -10.661  12.247   6.420  1.00  5.36          O   
+ATOM    632  N   LYS A  79     -14.255   9.510   8.676  1.00  5.36          N   
+ATOM    633  CA  LYS A  79     -15.715   9.478   8.716  1.00  5.36          C   
+ATOM    634  C   LYS A  79     -16.297   9.210   7.332  1.00  5.36          C   
+ATOM    635  CB  LYS A  79     -16.265  10.793   9.271  1.00  5.36          C   
+ATOM    636  O   LYS A  79     -17.266   8.460   7.195  1.00  5.36          O   
+ATOM    637  CG  LYS A  79     -16.312  10.853  10.790  1.00  5.36          C   
+ATOM    638  CD  LYS A  79     -16.955  12.144  11.279  1.00  5.36          C   
+ATOM    639  CE  LYS A  79     -16.920  12.247  12.798  1.00  5.36          C   
+ATOM    640  NZ  LYS A  79     -17.524  13.525  13.281  1.00  5.36          N   
+ATOM    641  N   SER A  80     -15.615   9.685   6.280  1.00  5.36          N   
+ATOM    642  CA  SER A  80     -16.194   9.676   4.940  1.00  5.36          C   
+ATOM    643  C   SER A  80     -15.768   8.435   4.163  1.00  5.36          C   
+ATOM    644  CB  SER A  80     -15.787  10.934   4.171  1.00  5.36          C   
+ATOM    645  O   SER A  80     -16.312   8.148   3.094  1.00  5.36          O   
+ATOM    646  OG  SER A  80     -14.376  11.064   4.131  1.00  5.36          O   
+ATOM    647  N   GLY A  81     -14.790   7.696   4.700  1.00  5.36          N   
+ATOM    648  CA  GLY A  81     -14.368   6.508   3.975  1.00  5.36          C   
+ATOM    649  C   GLY A  81     -12.932   6.112   4.264  1.00  5.36          C   
+ATOM    650  O   GLY A  81     -12.367   6.508   5.285  1.00  5.36          O   
+ATOM    651  N   VAL A  82     -12.402   5.137   3.681  1.00  5.36          N   
+ATOM    652  CA  VAL A  82     -11.030   4.653   3.791  1.00  5.36          C   
+ATOM    653  C   VAL A  82     -10.148   5.364   2.767  1.00  5.36          C   
+ATOM    654  CB  VAL A  82     -10.951   3.123   3.591  1.00  5.36          C   
+ATOM    655  O   VAL A  82     -10.540   5.531   1.610  1.00  5.36          O   
+ATOM    656  CG1 VAL A  82      -9.503   2.642   3.674  1.00  5.36          C   
+ATOM    657  CG2 VAL A  82     -11.816   2.405   4.626  1.00  5.36          C   
+ATOM    658  N   TYR A  83      -9.046   5.835   3.278  1.00  5.36          N   
+ATOM    659  CA  TYR A  83      -8.137   6.587   2.421  1.00  5.36          C   
+ATOM    660  C   TYR A  83      -6.784   5.894   2.319  1.00  5.36          C   
+ATOM    661  CB  TYR A  83      -7.955   8.013   2.949  1.00  5.36          C   
+ATOM    662  O   TYR A  83      -6.401   5.132   3.211  1.00  5.36          O   
+ATOM    663  CG  TYR A  83      -9.240   8.802   3.021  1.00  5.36          C   
+ATOM    664  CD1 TYR A  83     -10.101   8.671   4.108  1.00  5.36          C   
+ATOM    665  CD2 TYR A  83      -9.595   9.680   2.003  1.00  5.36          C   
+ATOM    666  CE1 TYR A  83     -11.287   9.395   4.177  1.00  5.36          C   
+ATOM    667  CE2 TYR A  83     -10.778  10.409   2.062  1.00  5.36          C   
+ATOM    668  OH  TYR A  83     -12.789  10.979   3.215  1.00  5.36          O   
+ATOM    669  CZ  TYR A  83     -11.616  10.260   3.151  1.00  5.36          C   
+ATOM    670  N   VAL A  84      -6.217   5.977   1.159  1.00  4.42          N   
+ATOM    671  CA  VAL A  84      -4.820   5.583   1.013  1.00  4.42          C   
+ATOM    672  C   VAL A  84      -3.961   6.815   0.737  1.00  4.42          C   
+ATOM    673  CB  VAL A  84      -4.638   4.544  -0.116  1.00  4.42          C   
+ATOM    674  O   VAL A  84      -4.300   7.638  -0.117  1.00  4.42          O   
+ATOM    675  CG1 VAL A  84      -3.161   4.207  -0.308  1.00  4.42          C   
+ATOM    676  CG2 VAL A  84      -5.442   3.281   0.188  1.00  4.42          C   
+ATOM    677  N   ARG A  85      -3.015   6.909   1.573  1.00  4.42          N   
+ATOM    678  CA  ARG A  85      -2.052   8.001   1.472  1.00  4.42          C   
+ATOM    679  C   ARG A  85      -0.722   7.508   0.912  1.00  4.42          C   
+ATOM    680  CB  ARG A  85      -1.835   8.655   2.838  1.00  4.42          C   
+ATOM    681  O   ARG A  85      -0.256   6.423   1.268  1.00  4.42          O   
+ATOM    682  CG  ARG A  85      -1.113   9.992   2.773  1.00  4.42          C   
+ATOM    683  CD  ARG A  85      -0.941  10.607   4.154  1.00  4.42          C   
+ATOM    684  NE  ARG A  85      -2.049  11.496   4.491  1.00  4.42          N   
+ATOM    685  NH1 ARG A  85      -1.423  11.780   6.696  1.00  4.42          N   
+ATOM    686  NH2 ARG A  85      -3.293  12.829   5.887  1.00  4.42          N   
+ATOM    687  CZ  ARG A  85      -2.252  12.033   5.691  1.00  4.42          C   
+ATOM    688  N   THR A  86      -0.152   8.200  -0.153  1.00  4.42          N   
+ATOM    689  CA  THR A  86       1.170   7.866  -0.672  1.00  4.42          C   
+ATOM    690  C   THR A  86       2.192   8.924  -0.269  1.00  4.42          C   
+ATOM    691  CB  THR A  86       1.148   7.726  -2.205  1.00  4.42          C   
+ATOM    692  O   THR A  86       1.918  10.123  -0.351  1.00  4.42          O   
+ATOM    693  CG2 THR A  86       0.290   6.542  -2.638  1.00  4.42          C   
+ATOM    694  OG1 THR A  86       0.614   8.925  -2.781  1.00  4.42          O   
+ATOM    695  N   ASN A  87       3.286   8.434   0.354  1.00  5.36          N   
+ATOM    696  CA  ASN A  87       4.370   9.361   0.664  1.00  5.36          C   
+ATOM    697  C   ASN A  87       5.610   9.075  -0.179  1.00  5.36          C   
+ATOM    698  CB  ASN A  87       4.716   9.304   2.153  1.00  5.36          C   
+ATOM    699  O   ASN A  87       6.062   7.932  -0.258  1.00  5.36          O   
+ATOM    700  CG  ASN A  87       3.662   9.959   3.024  1.00  5.36          C   
+ATOM    701  ND2 ASN A  87       3.845   9.882   4.336  1.00  5.36          N   
+ATOM    702  OD1 ASN A  87       2.690  10.529   2.520  1.00  5.36          O   
+ATOM    703  N   LYS A  88       6.095  10.057  -0.960  1.00  5.36          N   
+ATOM    704  CA  LYS A  88       7.392   9.866  -1.603  1.00  5.36          C   
+ATOM    705  C   LYS A  88       8.509   9.764  -0.569  1.00  5.36          C   
+ATOM    706  CB  LYS A  88       7.682  11.009  -2.577  1.00  5.36          C   
+ATOM    707  O   LYS A  88       8.639  10.630   0.299  1.00  5.36          O   
+ATOM    708  CG  LYS A  88       8.904  10.780  -3.454  1.00  5.36          C   
+ATOM    709  CD  LYS A  88       9.096  11.914  -4.452  1.00  5.36          C   
+ATOM    710  CE  LYS A  88      10.325  11.692  -5.323  1.00  5.36          C   
+ATOM    711  NZ  LYS A  88      10.494  12.781  -6.331  1.00  5.36          N   
+ATOM    712  N   LEU A  89       9.164   8.645  -0.576  1.00  5.36          N   
+ATOM    713  CA  LEU A  89      10.225   8.484   0.412  1.00  5.36          C   
+ATOM    714  C   LEU A  89      11.425   9.361   0.069  1.00  5.36          C   
+ATOM    715  CB  LEU A  89      10.658   7.018   0.498  1.00  5.36          C   
+ATOM    716  O   LEU A  89      11.670   9.653  -1.104  1.00  5.36          O   
+ATOM    717  CG  LEU A  89       9.718   6.077   1.253  1.00  5.36          C   
+ATOM    718  CD1 LEU A  89      10.100   4.624   0.990  1.00  5.36          C   
+ATOM    719  CD2 LEU A  89       9.744   6.380   2.747  1.00  5.36          C   
+ATOM    720  N   GLY A  90      12.223   9.812   1.163  1.00  5.36          N   
+ATOM    721  CA  GLY A  90      13.408  10.650   1.084  1.00  5.36          C   
+ATOM    722  C   GLY A  90      13.092  12.133   1.100  1.00  5.36          C   
+ATOM    723  O   GLY A  90      13.993  12.967   0.984  1.00  5.36          O   
+ATOM    724  N   PHE A  91      11.852  12.465   1.066  1.00  6.08          N   
+ATOM    725  CA  PHE A  91      11.399  13.841   1.233  1.00  6.08          C   
+ATOM    726  C   PHE A  91      10.518  13.974   2.470  1.00  6.08          C   
+ATOM    727  CB  PHE A  91      10.634  14.312  -0.008  1.00  6.08          C   
+ATOM    728  O   PHE A  91       9.318  13.699   2.417  1.00  6.08          O   
+ATOM    729  CG  PHE A  91      11.519  14.611  -1.188  1.00  6.08          C   
+ATOM    730  CD1 PHE A  91      11.797  13.630  -2.132  1.00  6.08          C   
+ATOM    731  CD2 PHE A  91      12.073  15.874  -1.353  1.00  6.08          C   
+ATOM    732  CE1 PHE A  91      12.615  13.904  -3.226  1.00  6.08          C   
+ATOM    733  CE2 PHE A  91      12.891  16.155  -2.443  1.00  6.08          C   
+ATOM    734  CZ  PHE A  91      13.162  15.168  -3.378  1.00  6.08          C   
+ATOM    735  N   GLU A  92      11.137  13.459   3.617  1.00  6.08          N   
+ATOM    736  CA  GLU A  92      10.535  13.509   4.945  1.00  6.08          C   
+ATOM    737  C   GLU A  92      10.313  14.950   5.397  1.00  6.08          C   
+ATOM    738  CB  GLU A  92      11.409  12.768   5.960  1.00  6.08          C   
+ATOM    739  O   GLU A  92      11.270  15.664   5.704  1.00  6.08          O   
+ATOM    740  CG  GLU A  92      10.998  11.320   6.186  1.00  6.08          C   
+ATOM    741  CD  GLU A  92      11.819  10.623   7.259  1.00  6.08          C   
+ATOM    742  OE1 GLU A  92      11.506   9.461   7.604  1.00  6.08          O   
+ATOM    743  OE2 GLU A  92      12.783  11.245   7.759  1.00  6.08          O   
+ATOM    744  N   ASP A  93       9.620  15.891   4.677  1.00  6.08          N   
+ATOM    745  CA  ASP A  93       9.157  16.934   5.587  1.00  6.08          C   
+ATOM    746  C   ASP A  93       7.745  16.640   6.087  1.00  6.08          C   
+ATOM    747  CB  ASP A  93       9.199  18.302   4.902  1.00  6.08          C   
+ATOM    748  O   ASP A  93       6.797  16.602   5.299  1.00  6.08          O   
+ATOM    749  CG  ASP A  93       8.970  19.454   5.864  1.00  6.08          C   
+ATOM    750  OD1 ASP A  93       9.176  20.624   5.475  1.00  6.08          O   
+ATOM    751  OD2 ASP A  93       8.583  19.190   7.023  1.00  6.08          O   
+ATOM    752  N   PRO A  94       7.665  15.732   7.134  1.00  6.08          N   
+ATOM    753  CA  PRO A  94       6.298  15.546   7.627  1.00  6.08          C   
+ATOM    754  C   PRO A  94       5.438  16.798   7.468  1.00  6.08          C   
+ATOM    755  CB  PRO A  94       6.500  15.207   9.106  1.00  6.08          C   
+ATOM    756  O   PRO A  94       4.211  16.701   7.386  1.00  6.08          O   
+ATOM    757  CG  PRO A  94       7.963  15.397   9.346  1.00  6.08          C   
+ATOM    758  CD  PRO A  94       8.633  15.652   8.026  1.00  6.08          C   
+ATOM    759  N   LYS A  95       6.057  18.015   7.264  1.00  6.08          N   
+ATOM    760  CA  LYS A  95       5.244  19.214   7.077  1.00  6.08          C   
+ATOM    761  C   LYS A  95       5.046  19.517   5.595  1.00  6.08          C   
+ATOM    762  CB  LYS A  95       5.887  20.413   7.776  1.00  6.08          C   
+ATOM    763  O   LYS A  95       4.278  20.413   5.236  1.00  6.08          O   
+ATOM    764  CG  LYS A  95       5.879  20.321   9.295  1.00  6.08          C   
+ATOM    765  CD  LYS A  95       6.403  21.600   9.935  1.00  6.08          C   
+ATOM    766  CE  LYS A  95       6.462  21.483  11.452  1.00  6.08          C   
+ATOM    767  NZ  LYS A  95       6.972  22.736  12.085  1.00  6.08          N   
+ATOM    768  N   SER A  96       5.718  18.813   4.741  1.00  6.08          N   
+ATOM    769  CA  SER A  96       5.637  19.195   3.335  1.00  6.08          C   
+ATOM    770  C   SER A  96       4.505  18.459   2.626  1.00  6.08          C   
+ATOM    771  CB  SER A  96       6.963  18.912   2.626  1.00  6.08          C   
+ATOM    772  O   SER A  96       4.417  17.231   2.696  1.00  6.08          O   
+ATOM    773  OG  SER A  96       6.791  17.942   1.607  1.00  6.08          O   
+ATOM    774  N   PHE A  97       3.312  18.985   2.701  1.00  6.08          N   
+ATOM    775  CA  PHE A  97       2.069  18.645   2.019  1.00  6.08          C   
+ATOM    776  C   PHE A  97       2.310  18.435   0.529  1.00  6.08          C   
+ATOM    777  CB  PHE A  97       1.020  19.741   2.232  1.00  6.08          C   
+ATOM    778  O   PHE A  97       1.445  17.913  -0.178  1.00  6.08          O   
+ATOM    779  CG  PHE A  97       0.311  19.653   3.556  1.00  6.08          C   
+ATOM    780  CD1 PHE A  97       0.741  20.404   4.643  1.00  6.08          C   
+ATOM    781  CD2 PHE A  97      -0.787  18.817   3.714  1.00  6.08          C   
+ATOM    782  CE1 PHE A  97       0.086  20.325   5.869  1.00  6.08          C   
+ATOM    783  CE2 PHE A  97      -1.447  18.732   4.937  1.00  6.08          C   
+ATOM    784  CZ  PHE A  97      -1.008  19.486   6.014  1.00  6.08          C   
+ATOM    785  N   LEU A  98       3.513  18.640   0.039  1.00  6.08          N   
+ATOM    786  CA  LEU A  98       3.587  18.842  -1.404  1.00  6.08          C   
+ATOM    787  C   LEU A  98       3.826  17.520  -2.126  1.00  6.08          C   
+ATOM    788  CB  LEU A  98       4.699  19.835  -1.751  1.00  6.08          C   
+ATOM    789  O   LEU A  98       3.478  17.377  -3.300  1.00  6.08          O   
+ATOM    790  CG  LEU A  98       4.372  21.315  -1.552  1.00  6.08          C   
+ATOM    791  CD1 LEU A  98       5.651  22.145  -1.553  1.00  6.08          C   
+ATOM    792  CD2 LEU A  98       3.413  21.801  -2.634  1.00  6.08          C   
+ATOM    793  N   SER A  99       3.933  16.395  -1.418  1.00  6.08          N   
+ATOM    794  CA  SER A  99       3.847  15.299  -2.377  1.00  6.08          C   
+ATOM    795  C   SER A  99       2.856  14.236  -1.915  1.00  6.08          C   
+ATOM    796  CB  SER A  99       5.222  14.666  -2.593  1.00  6.08          C   
+ATOM    797  O   SER A  99       3.126  13.039  -2.024  1.00  6.08          O   
+ATOM    798  OG  SER A  99       6.045  14.848  -1.453  1.00  6.08          O   
+ATOM    799  N   ILE A 100       1.863  14.672  -1.135  1.00  6.08          N   
+ATOM    800  CA  ILE A 100       0.897  13.774  -0.510  1.00  6.08          C   
+ATOM    801  C   ILE A 100      -0.327  13.626  -1.411  1.00  6.08          C   
+ATOM    802  CB  ILE A 100       0.475  14.281   0.887  1.00  6.08          C   
+ATOM    803  O   ILE A 100      -0.866  14.619  -1.905  1.00  6.08          O   
+ATOM    804  CG1 ILE A 100       1.693  14.364   1.815  1.00  6.08          C   
+ATOM    805  CG2 ILE A 100      -0.608  13.379   1.485  1.00  6.08          C   
+ATOM    806  CD1 ILE A 100       1.410  15.041   3.149  1.00  6.08          C   
+ATOM    807  N   LYS A 101      -0.627  12.452  -2.003  1.00  6.08          N   
+ATOM    808  CA  LYS A 101      -1.914  12.267  -2.668  1.00  6.08          C   
+ATOM    809  C   LYS A 101      -2.834  11.369  -1.846  1.00  6.08          C   
+ATOM    810  CB  LYS A 101      -1.717  11.677  -4.065  1.00  6.08          C   
+ATOM    811  O   LYS A 101      -2.372  10.433  -1.190  1.00  6.08          O   
+ATOM    812  CG  LYS A 101      -1.039  12.621  -5.046  1.00  6.08          C   
+ATOM    813  CD  LYS A 101      -1.055  12.062  -6.463  1.00  6.08          C   
+ATOM    814  CE  LYS A 101      -0.350  12.992  -7.441  1.00  6.08          C   
+ATOM    815  NZ  LYS A 101      -0.430  12.486  -8.844  1.00  6.08          N   
+ATOM    816  N   GLU A 102      -3.972  11.868  -1.441  1.00  6.08          N   
+ATOM    817  CA  GLU A 102      -5.024  11.157  -0.721  1.00  6.08          C   
+ATOM    818  C   GLU A 102      -6.074  10.605  -1.681  1.00  6.08          C   
+ATOM    819  CB  GLU A 102      -5.686  12.076   0.310  1.00  6.08          C   
+ATOM    820  O   GLU A 102      -6.525  11.308  -2.587  1.00  6.08          O   
+ATOM    821  CG  GLU A 102      -6.179  11.350   1.553  1.00  6.08          C   
+ATOM    822  CD  GLU A 102      -6.742  12.286   2.611  1.00  6.08          C   
+ATOM    823  OE1 GLU A 102      -7.929  12.141   2.980  1.00  6.08          O   
+ATOM    824  OE2 GLU A 102      -5.989  13.172   3.073  1.00  6.08          O   
+ATOM    825  N   TYR A 103      -6.415   9.341  -1.509  1.00  5.36          N   
+ATOM    826  CA  TYR A 103      -7.466   8.743  -2.325  1.00  5.36          C   
+ATOM    827  C   TYR A 103      -8.614   8.244  -1.456  1.00  5.36          C   
+ATOM    828  CB  TYR A 103      -6.906   7.589  -3.163  1.00  5.36          C   
+ATOM    829  O   TYR A 103      -8.406   7.443  -0.541  1.00  5.36          O   
+ATOM    830  CG  TYR A 103      -5.758   7.990  -4.057  1.00  5.36          C   
+ATOM    831  CD1 TYR A 103      -4.440   7.899  -3.614  1.00  5.36          C   
+ATOM    832  CD2 TYR A 103      -5.988   8.459  -5.345  1.00  5.36          C   
+ATOM    833  CE1 TYR A 103      -3.379   8.269  -4.434  1.00  5.36          C   
+ATOM    834  CE2 TYR A 103      -4.935   8.832  -6.174  1.00  5.36          C   
+ATOM    835  OH  TYR A 103      -2.589   9.101  -6.526  1.00  5.36          O   
+ATOM    836  CZ  TYR A 103      -3.636   8.733  -5.710  1.00  5.36          C   
+ATOM    837  N   LYS A 104      -9.836   8.844  -1.571  1.00  6.08          N   
+ATOM    838  CA  LYS A 104     -11.038   8.471  -0.832  1.00  6.08          C   
+ATOM    839  C   LYS A 104     -11.649   7.188  -1.387  1.00  6.08          C   
+ATOM    840  CB  LYS A 104     -12.066   9.602  -0.872  1.00  6.08          C   
+ATOM    841  O   LYS A 104     -11.782   7.033  -2.603  1.00  6.08          O   
+ATOM    842  CG  LYS A 104     -13.244   9.402   0.070  1.00  6.08          C   
+ATOM    843  CD  LYS A 104     -14.209  10.579   0.017  1.00  6.08          C   
+ATOM    844  CE  LYS A 104     -15.411  10.360   0.925  1.00  6.08          C   
+ATOM    845  NZ  LYS A 104     -16.346  11.524   0.898  1.00  6.08          N   
+ATOM    846  N   PHE A 105     -11.952   6.243  -0.555  1.00  6.08          N   
+ATOM    847  CA  PHE A 105     -12.601   4.981  -0.891  1.00  6.08          C   
+ATOM    848  C   PHE A 105     -14.029   4.948  -0.359  1.00  6.08          C   
+ATOM    849  CB  PHE A 105     -11.804   3.799  -0.330  1.00  6.08          C   
+ATOM    850  O   PHE A 105     -14.252   5.098   0.844  1.00  6.08          O   
+ATOM    851  CG  PHE A 105     -11.481   2.744  -1.354  1.00  6.08          C   
+ATOM    852  CD1 PHE A 105     -10.418   2.913  -2.234  1.00  6.08          C   
+ATOM    853  CD2 PHE A 105     -12.239   1.584  -1.436  1.00  6.08          C   
+ATOM    854  CE1 PHE A 105     -10.116   1.938  -3.182  1.00  6.08          C   
+ATOM    855  CE2 PHE A 105     -11.944   0.606  -2.382  1.00  6.08          C   
+ATOM    856  CZ  PHE A 105     -10.883   0.785  -3.254  1.00  6.08          C   
+ATOM    857  N   GLY A 106     -15.105   4.749  -1.141  1.00  6.08          N   
+ATOM    858  CA  GLY A 106     -16.469   4.462  -0.727  1.00  6.08          C   
+ATOM    859  C   GLY A 106     -17.097   5.584   0.078  1.00  6.08          C   
+ATOM    860  O   GLY A 106     -16.419   6.547   0.445  1.00  6.08          O   
+ATOM    861  N   THR A 107     -18.460   5.770  -0.034  1.00  6.08          N   
+ATOM    862  CA  THR A 107     -19.388   6.728   0.555  1.00  6.08          C   
+ATOM    863  C   THR A 107     -20.150   6.098   1.717  1.00  6.08          C   
+ATOM    864  CB  THR A 107     -20.386   7.256  -0.492  1.00  6.08          C   
+ATOM    865  O   THR A 107     -21.036   5.267   1.507  1.00  6.08          O   
+ATOM    866  CG2 THR A 107     -19.699   8.182  -1.490  1.00  6.08          C   
+ATOM    867  OG1 THR A 107     -20.957   6.148  -1.200  1.00  6.08          O   
+ATOM    868  N   ARG A 108     -19.518   5.476   2.709  1.00  6.08          N   
+ATOM    869  CA  ARG A 108     -20.503   5.366   3.780  1.00  6.08          C   
+ATOM    870  C   ARG A 108     -20.263   6.422   4.855  1.00  6.08          C   
+ATOM    871  CB  ARG A 108     -20.469   3.968   4.402  1.00  6.08          C   
+ATOM    872  O   ARG A 108     -19.123   6.646   5.268  1.00  6.08          O   
+ATOM    873  CG  ARG A 108     -21.303   2.941   3.653  1.00  6.08          C   
+ATOM    874  CD  ARG A 108     -21.351   1.609   4.389  1.00  6.08          C   
+ATOM    875  NE  ARG A 108     -22.338   0.706   3.804  1.00  6.08          N   
+ATOM    876  NH1 ARG A 108     -22.022  -0.977   5.356  1.00  6.08          N   
+ATOM    877  NH2 ARG A 108     -23.549  -1.241   3.667  1.00  6.08          N   
+ATOM    878  CZ  ARG A 108     -22.634  -0.502   4.277  1.00  6.08          C   
+ATOM    879  N   THR A 109     -21.000   7.550   4.650  1.00  6.08          N   
+ATOM    880  CA  THR A 109     -21.263   8.726   5.472  1.00  6.08          C   
+ATOM    881  C   THR A 109     -21.852   8.323   6.821  1.00  6.08          C   
+ATOM    882  CB  THR A 109     -22.219   9.702   4.762  1.00  6.08          C   
+ATOM    883  O   THR A 109     -22.761   7.492   6.883  1.00  6.08          O   
+ATOM    884  CG2 THR A 109     -21.477  10.545   3.730  1.00  6.08          C   
+ATOM    885  OG1 THR A 109     -23.249   8.956   4.102  1.00  6.08          O   
+ATOM    886  N   GLY A 110     -21.151   8.030   7.805  1.00  6.08          N   
+ATOM    887  CA  GLY A 110     -21.715   8.302   9.117  1.00  6.08          C   
+ATOM    888  C   GLY A 110     -20.888   7.731  10.253  1.00  6.08          C   
+ATOM    889  O   GLY A 110     -20.720   6.514  10.354  1.00  6.08          O   
+ATOM    890  N   GLY A 111     -20.142   8.505  10.862  1.00  6.08          N   
+ATOM    891  CA  GLY A 111     -19.936   8.533  12.301  1.00  6.08          C   
+ATOM    892  C   GLY A 111     -18.518   8.904  12.693  1.00  6.08          C   
+ATOM    893  O   GLY A 111     -17.638   9.007  11.836  1.00  6.08          O   
+ATOM    894  N   ASN A 112     -18.313   9.718  13.747  1.00  6.08          N   
+ATOM    895  CA  ASN A 112     -17.174  10.179  14.534  1.00  6.08          C   
+ATOM    896  C   ASN A 112     -16.127   9.082  14.702  1.00  6.08          C   
+ATOM    897  CB  ASN A 112     -17.637  10.685  15.902  1.00  6.08          C   
+ATOM    898  O   ASN A 112     -16.444   7.978  15.149  1.00  6.08          O   
+ATOM    899  CG  ASN A 112     -18.364  12.013  15.817  1.00  6.08          C   
+ATOM    900  ND2 ASN A 112     -19.255  12.262  16.770  1.00  6.08          N   
+ATOM    901  OD1 ASN A 112     -18.128  12.807  14.904  1.00  6.08          O   
+ATOM    902  N   PHE A 113     -14.987   8.972  14.050  1.00  6.08          N   
+ATOM    903  CA  PHE A 113     -14.107   7.891  14.478  1.00  6.08          C   
+ATOM    904  C   PHE A 113     -12.665   8.373  14.576  1.00  6.08          C   
+ATOM    905  CB  PHE A 113     -14.201   6.706  13.512  1.00  6.08          C   
+ATOM    906  O   PHE A 113     -12.245   9.251  13.819  1.00  6.08          O   
+ATOM    907  CG  PHE A 113     -15.131   5.617  13.975  1.00  6.08          C   
+ATOM    908  CD1 PHE A 113     -16.472   5.629  13.613  1.00  6.08          C   
+ATOM    909  CD2 PHE A 113     -14.664   4.581  14.774  1.00  6.08          C   
+ATOM    910  CE1 PHE A 113     -17.336   4.623  14.040  1.00  6.08          C   
+ATOM    911  CE2 PHE A 113     -15.520   3.572  15.204  1.00  6.08          C   
+ATOM    912  CZ  PHE A 113     -16.856   3.595  14.837  1.00  6.08          C   
+ATOM    913  N   THR A 114     -11.825   7.651  15.237  1.00  6.08          N   
+ATOM    914  CA  THR A 114     -10.413   7.467  15.554  1.00  6.08          C   
+ATOM    915  C   THR A 114     -10.065   5.983  15.631  1.00  6.08          C   
+ATOM    916  CB  THR A 114     -10.044   8.154  16.882  1.00  6.08          C   
+ATOM    917  O   THR A 114     -10.307   5.336  16.652  1.00  6.08          O   
+ATOM    918  CG2 THR A 114     -10.124   9.672  16.757  1.00  6.08          C   
+ATOM    919  OG1 THR A 114     -10.951   7.722  17.904  1.00  6.08          O   
+ATOM    920  N   GLY A 115     -10.385   5.096  14.476  1.00  6.08          N   
+ATOM    921  CA  GLY A 115      -9.894   3.756  14.757  1.00  6.08          C   
+ATOM    922  C   GLY A 115      -9.108   3.156  13.607  1.00  6.08          C   
+ATOM    923  O   GLY A 115      -8.864   3.823  12.600  1.00  6.08          O   
+ATOM    924  N   GLU A 116      -8.292   2.078  13.803  1.00  6.08          N   
+ATOM    925  CA  GLU A 116      -7.455   1.166  13.029  1.00  6.08          C   
+ATOM    926  C   GLU A 116      -8.271   0.435  11.966  1.00  6.08          C   
+ATOM    927  CB  GLU A 116      -6.766   0.156  13.950  1.00  6.08          C   
+ATOM    928  O   GLU A 116      -9.471   0.214  12.141  1.00  6.08          O   
+ATOM    929  CG  GLU A 116      -5.620   0.745  14.760  1.00  6.08          C   
+ATOM    930  CD  GLU A 116      -4.833  -0.301  15.533  1.00  6.08          C   
+ATOM    931  OE1 GLU A 116      -3.793   0.046  16.138  1.00  6.08          O   
+ATOM    932  OE2 GLU A 116      -5.258  -1.478  15.533  1.00  6.08          O   
+ATOM    933  N   LEU A 117      -7.867   0.276  10.616  1.00  5.36          N   
+ATOM    934  CA  LEU A 117      -8.515  -0.475   9.546  1.00  5.36          C   
+ATOM    935  C   LEU A 117      -8.722  -1.930   9.952  1.00  5.36          C   
+ATOM    936  CB  LEU A 117      -7.684  -0.404   8.263  1.00  5.36          C   
+ATOM    937  O   LEU A 117      -7.933  -2.483  10.723  1.00  5.36          O   
+ATOM    938  CG  LEU A 117      -7.563   0.973   7.608  1.00  5.36          C   
+ATOM    939  CD1 LEU A 117      -6.504   0.947   6.511  1.00  5.36          C   
+ATOM    940  CD2 LEU A 117      -8.910   1.418   7.048  1.00  5.36          C   
+ATOM    941  N   THR A 118      -9.851  -2.455   9.647  1.00  5.36          N   
+ATOM    942  CA  THR A 118     -10.035  -3.895   9.790  1.00  5.36          C   
+ATOM    943  C   THR A 118      -9.157  -4.654   8.798  1.00  5.36          C   
+ATOM    944  CB  THR A 118     -11.508  -4.294   9.584  1.00  5.36          C   
+ATOM    945  O   THR A 118      -8.605  -4.060   7.869  1.00  5.36          O   
+ATOM    946  CG2 THR A 118     -12.428  -3.487  10.493  1.00  5.36          C   
+ATOM    947  OG1 THR A 118     -11.875  -4.057   8.219  1.00  5.36          O   
+ATOM    948  N   LYS A 119      -8.889  -5.923   9.112  1.00  6.08          N   
+ATOM    949  CA  LYS A 119      -8.123  -6.769   8.201  1.00  6.08          C   
+ATOM    950  C   LYS A 119      -8.726  -6.753   6.799  1.00  6.08          C   
+ATOM    951  CB  LYS A 119      -8.057  -8.204   8.727  1.00  6.08          C   
+ATOM    952  O   LYS A 119      -8.000  -6.675   5.806  1.00  6.08          O   
+ATOM    953  CG  LYS A 119      -7.022  -9.073   8.027  1.00  6.08          C   
+ATOM    954  CD  LYS A 119      -6.951 -10.463   8.644  1.00  6.08          C   
+ATOM    955  CE  LYS A 119      -6.004 -11.371   7.872  1.00  6.08          C   
+ATOM    956  NZ  LYS A 119      -5.944 -12.741   8.463  1.00  6.08          N   
+ATOM    957  N   GLN A 120     -10.033  -6.874   6.687  1.00  6.08          N   
+ATOM    958  CA  GLN A 120     -10.739  -6.867   5.410  1.00  6.08          C   
+ATOM    959  C   GLN A 120     -10.510  -5.558   4.661  1.00  6.08          C   
+ATOM    960  CB  GLN A 120     -12.236  -7.096   5.623  1.00  6.08          C   
+ATOM    961  O   GLN A 120     -10.287  -5.560   3.449  1.00  6.08          O   
+ATOM    962  CG  GLN A 120     -12.965  -7.594   4.383  1.00  6.08          C   
+ATOM    963  CD  GLN A 120     -14.269  -8.298   4.711  1.00  6.08          C   
+ATOM    964  NE2 GLN A 120     -14.806  -9.032   3.742  1.00  6.08          N   
+ATOM    965  OE1 GLN A 120     -14.788  -8.184   5.826  1.00  6.08          O   
+ATOM    966  N   GLU A 121     -10.563  -4.457   5.339  1.00  5.36          N   
+ATOM    967  CA  GLU A 121     -10.315  -3.150   4.738  1.00  5.36          C   
+ATOM    968  C   GLU A 121      -8.891  -3.052   4.198  1.00  5.36          C   
+ATOM    969  CB  GLU A 121     -10.571  -2.034   5.753  1.00  5.36          C   
+ATOM    970  O   GLU A 121      -8.667  -2.500   3.119  1.00  5.36          O   
+ATOM    971  CG  GLU A 121     -12.041  -1.836   6.092  1.00  5.36          C   
+ATOM    972  CD  GLU A 121     -12.266  -0.891   7.262  1.00  5.36          C   
+ATOM    973  OE1 GLU A 121     -13.256  -0.126   7.243  1.00  5.36          O   
+ATOM    974  OE2 GLU A 121     -11.443  -0.916   8.205  1.00  5.36          O   
+ATOM    975  N   LEU A 122      -7.942  -3.571   4.960  1.00  5.36          N   
+ATOM    976  CA  LEU A 122      -6.554  -3.544   4.512  1.00  5.36          C   
+ATOM    977  C   LEU A 122      -6.385  -4.331   3.217  1.00  5.36          C   
+ATOM    978  CB  LEU A 122      -5.632  -4.115   5.593  1.00  5.36          C   
+ATOM    979  O   LEU A 122      -5.705  -3.876   2.294  1.00  5.36          O   
+ATOM    980  CG  LEU A 122      -5.295  -3.183   6.758  1.00  5.36          C   
+ATOM    981  CD1 LEU A 122      -4.667  -3.971   7.903  1.00  5.36          C   
+ATOM    982  CD2 LEU A 122      -4.365  -2.066   6.298  1.00  5.36          C   
+ATOM    983  N   VAL A 123      -6.991  -5.567   3.232  1.00  5.36          N   
+ATOM    984  CA  VAL A 123      -6.926  -6.409   2.042  1.00  5.36          C   
+ATOM    985  C   VAL A 123      -7.518  -5.664   0.848  1.00  5.36          C   
+ATOM    986  CB  VAL A 123      -7.667  -7.749   2.255  1.00  5.36          C   
+ATOM    987  O   VAL A 123      -6.921  -5.633  -0.230  1.00  5.36          O   
+ATOM    988  CG1 VAL A 123      -7.796  -8.509   0.936  1.00  5.36          C   
+ATOM    989  CG2 VAL A 123      -6.942  -8.599   3.296  1.00  5.36          C   
+ATOM    990  N   TYR A 124      -8.671  -5.070   1.043  1.00  5.36          N   
+ATOM    991  CA  TYR A 124      -9.359  -4.338  -0.015  1.00  5.36          C   
+ATOM    992  C   TYR A 124      -8.521  -3.160  -0.496  1.00  5.36          C   
+ATOM    993  CB  TYR A 124     -10.724  -3.844   0.473  1.00  5.36          C   
+ATOM    994  O   TYR A 124      -8.387  -2.937  -1.702  1.00  5.36          O   
+ATOM    995  CG  TYR A 124     -11.884  -4.667  -0.033  1.00  5.36          C   
+ATOM    996  CD1 TYR A 124     -12.554  -5.552   0.808  1.00  5.36          C   
+ATOM    997  CD2 TYR A 124     -12.312  -4.561  -1.352  1.00  5.36          C   
+ATOM    998  CE1 TYR A 124     -13.622  -6.314   0.346  1.00  5.36          C   
+ATOM    999  CE2 TYR A 124     -13.379  -5.318  -1.825  1.00  5.36          C   
+ATOM   1000  OH  TYR A 124     -15.084  -6.942  -1.432  1.00  5.36          O   
+ATOM   1001  CZ  TYR A 124     -14.027  -6.190  -0.969  1.00  5.36          C   
+ATOM   1002  N   THR A 125      -8.064  -2.317   0.476  1.00  5.36          N   
+ATOM   1003  CA  THR A 125      -7.230  -1.175   0.117  1.00  5.36          C   
+ATOM   1004  C   THR A 125      -6.008  -1.626  -0.679  1.00  5.36          C   
+ATOM   1005  CB  THR A 125      -6.774  -0.402   1.368  1.00  5.36          C   
+ATOM   1006  O   THR A 125      -5.643  -0.999  -1.675  1.00  5.36          O   
+ATOM   1007  CG2 THR A 125      -7.392   0.992   1.408  1.00  5.36          C   
+ATOM   1008  OG1 THR A 125      -7.173  -1.123   2.540  1.00  5.36          O   
+ATOM   1009  N   ASN A 126      -5.437  -2.705  -0.271  1.00  5.36          N   
+ATOM   1010  CA  ASN A 126      -4.265  -3.214  -0.977  1.00  5.36          C   
+ATOM   1011  C   ASN A 126      -4.614  -3.656  -2.395  1.00  5.36          C   
+ATOM   1012  CB  ASN A 126      -3.631  -4.370  -0.201  1.00  5.36          C   
+ATOM   1013  O   ASN A 126      -3.866  -3.384  -3.336  1.00  5.36          O   
+ATOM   1014  CG  ASN A 126      -2.693  -3.896   0.891  1.00  5.36          C   
+ATOM   1015  ND2 ASN A 126      -2.429  -4.760   1.864  1.00  5.36          N   
+ATOM   1016  OD1 ASN A 126      -2.209  -2.761   0.861  1.00  5.36          O   
+ATOM   1017  N   GLN A 127      -5.691  -4.483  -2.497  1.00  5.36          N   
+ATOM   1018  CA  GLN A 127      -6.138  -4.897  -3.823  1.00  5.36          C   
+ATOM   1019  C   GLN A 127      -6.385  -3.689  -4.722  1.00  5.36          C   
+ATOM   1020  CB  GLN A 127      -7.407  -5.744  -3.721  1.00  5.36          C   
+ATOM   1021  O   GLN A 127      -5.973  -3.679  -5.884  1.00  5.36          O   
+ATOM   1022  CG  GLN A 127      -7.729  -6.525  -4.989  1.00  5.36          C   
+ATOM   1023  CD  GLN A 127      -8.927  -7.440  -4.826  1.00  5.36          C   
+ATOM   1024  NE2 GLN A 127      -9.350  -8.064  -5.921  1.00  5.36          N   
+ATOM   1025  OE1 GLN A 127      -9.468  -7.587  -3.726  1.00  5.36          O   
+ATOM   1026  N   TRP A 128      -7.149  -2.688  -4.151  1.00  5.36          N   
+ATOM   1027  CA  TRP A 128      -7.418  -1.471  -4.911  1.00  5.36          C   
+ATOM   1028  C   TRP A 128      -6.119  -0.818  -5.371  1.00  5.36          C   
+ATOM   1029  CB  TRP A 128      -8.232  -0.482  -4.072  1.00  5.36          C   
+ATOM   1030  O   TRP A 128      -5.992  -0.427  -6.534  1.00  5.36          O   
+ATOM   1031  CG  TRP A 128      -8.637   0.757  -4.813  1.00  5.36          C   
+ATOM   1032  CD1 TRP A 128      -9.759   0.931  -5.576  1.00  5.36          C   
+ATOM   1033  CD2 TRP A 128      -7.919   1.993  -4.866  1.00  5.36          C   
+ATOM   1034  CE2 TRP A 128      -8.665   2.875  -5.680  1.00  5.36          C   
+ATOM   1035  CE3 TRP A 128      -6.717   2.442  -4.304  1.00  5.36          C   
+ATOM   1036  NE1 TRP A 128      -9.781   2.203  -6.099  1.00  5.36          N   
+ATOM   1037  CH2 TRP A 128      -7.067   4.595  -5.381  1.00  5.36          C   
+ATOM   1038  CZ2 TRP A 128      -8.247   4.181  -5.944  1.00  5.36          C   
+ATOM   1039  CZ3 TRP A 128      -6.302   3.742  -4.568  1.00  5.36          C   
+ATOM   1040  N   VAL A 129      -5.185  -0.613  -4.368  1.00  4.42          N   
+ATOM   1041  CA  VAL A 129      -3.899  -0.000  -4.687  1.00  4.42          C   
+ATOM   1042  C   VAL A 129      -3.213  -0.789  -5.800  1.00  4.42          C   
+ATOM   1043  CB  VAL A 129      -2.983   0.077  -3.446  1.00  4.42          C   
+ATOM   1044  O   VAL A 129      -2.691  -0.205  -6.753  1.00  4.42          O   
+ATOM   1045  CG1 VAL A 129      -1.562   0.471  -3.846  1.00  4.42          C   
+ATOM   1046  CG2 VAL A 129      -3.548   1.065  -2.427  1.00  4.42          C   
+ATOM   1047  N   ASN A 130      -3.323  -2.084  -5.765  1.00  5.36          N   
+ATOM   1048  CA  ASN A 130      -2.699  -2.948  -6.762  1.00  5.36          C   
+ATOM   1049  C   ASN A 130      -3.320  -2.751  -8.142  1.00  5.36          C   
+ATOM   1050  CB  ASN A 130      -2.799  -4.415  -6.339  1.00  5.36          C   
+ATOM   1051  O   ASN A 130      -2.613  -2.751  -9.151  1.00  5.36          O   
+ATOM   1052  CG  ASN A 130      -1.767  -4.793  -5.294  1.00  5.36          C   
+ATOM   1053  ND2 ASN A 130      -2.027  -5.874  -4.568  1.00  5.36          N   
+ATOM   1054  OD1 ASN A 130      -0.746  -4.118  -5.140  1.00  5.36          O   
+ATOM   1055  N   GLU A 131      -4.600  -2.603  -8.153  1.00  5.36          N   
+ATOM   1056  CA  GLU A 131      -5.337  -2.535  -9.412  1.00  5.36          C   
+ATOM   1057  C   GLU A 131      -5.256  -1.140 -10.024  1.00  5.36          C   
+ATOM   1058  CB  GLU A 131      -6.800  -2.932  -9.200  1.00  5.36          C   
+ATOM   1059  O   GLU A 131      -5.324  -0.988 -11.246  1.00  5.36          O   
+ATOM   1060  CG  GLU A 131      -7.000  -4.413  -8.911  1.00  5.36          C   
+ATOM   1061  CD  GLU A 131      -8.445  -4.776  -8.611  1.00  5.36          C   
+ATOM   1062  OE1 GLU A 131      -8.733  -5.970  -8.365  1.00  5.36          O   
+ATOM   1063  OE2 GLU A 131      -9.297  -3.860  -8.623  1.00  5.36          O   
+ATOM   1064  N   ASN A 132      -5.147  -0.162  -9.186  1.00  5.36          N   
+ATOM   1065  CA  ASN A 132      -5.357   1.190  -9.693  1.00  5.36          C   
+ATOM   1066  C   ASN A 132      -4.037   1.936  -9.863  1.00  5.36          C   
+ATOM   1067  CB  ASN A 132      -6.292   1.971  -8.767  1.00  5.36          C   
+ATOM   1068  O   ASN A 132      -3.931   2.838 -10.696  1.00  5.36          O   
+ATOM   1069  CG  ASN A 132      -7.729   1.494  -8.851  1.00  5.36          C   
+ATOM   1070  ND2 ASN A 132      -8.165   0.745  -7.845  1.00  5.36          N   
+ATOM   1071  OD1 ASN A 132      -8.441   1.795  -9.813  1.00  5.36          O   
+ATOM   1072  N   ILE A 133      -3.015   1.608  -8.992  1.00  5.36          N   
+ATOM   1073  CA  ILE A 133      -1.781   2.384  -9.062  1.00  5.36          C   
+ATOM   1074  C   ILE A 133      -0.907   1.861 -10.200  1.00  5.36          C   
+ATOM   1075  CB  ILE A 133      -1.007   2.336  -7.726  1.00  5.36          C   
+ATOM   1076  O   ILE A 133      -0.112   2.609 -10.773  1.00  5.36          O   
+ATOM   1077  CG1 ILE A 133      -1.777   3.089  -6.635  1.00  5.36          C   
+ATOM   1078  CG2 ILE A 133       0.402   2.911  -7.897  1.00  5.36          C   
+ATOM   1079  CD1 ILE A 133      -1.113   3.045  -5.266  1.00  5.36          C   
+ATOM   1080  N   THR A 134      -1.214   0.937 -10.975  1.00  6.08          N   
+ATOM   1081  CA  THR A 134      -0.412   0.479 -12.104  1.00  6.08          C   
+ATOM   1082  C   THR A 134      -0.466   1.485 -13.250  1.00  6.08          C   
+ATOM   1083  CB  THR A 134      -0.887  -0.898 -12.605  1.00  6.08          C   
+ATOM   1084  O   THR A 134       0.513   1.656 -13.980  1.00  6.08          O   
+ATOM   1085  CG2 THR A 134       0.024  -2.012 -12.097  1.00  6.08          C   
+ATOM   1086  OG1 THR A 134      -2.220  -1.137 -12.137  1.00  6.08          O   
+ATOM   1087  N   LEU A 135      -1.656   2.194 -13.502  1.00  6.08          N   
+ATOM   1088  CA  LEU A 135      -2.187   2.386 -14.847  1.00  6.08          C   
+ATOM   1089  C   LEU A 135      -2.051   3.841 -15.283  1.00  6.08          C   
+ATOM   1090  CB  LEU A 135      -3.656   1.958 -14.908  1.00  6.08          C   
+ATOM   1091  O   LEU A 135      -2.144   4.147 -16.474  1.00  6.08          O   
+ATOM   1092  CG  LEU A 135      -3.923   0.452 -14.925  1.00  6.08          C   
+ATOM   1093  CD1 LEU A 135      -5.388   0.171 -14.609  1.00  6.08          C   
+ATOM   1094  CD2 LEU A 135      -3.538  -0.144 -16.274  1.00  6.08          C   
+ATOM   1095  N   ALA A 136      -1.314   4.761 -14.697  1.00  6.08          N   
+ATOM   1096  CA  ALA A 136      -1.322   5.912 -15.597  1.00  6.08          C   
+ATOM   1097  C   ALA A 136       0.036   6.607 -15.610  1.00  6.08          C   
+ATOM   1098  CB  ALA A 136      -2.417   6.896 -15.193  1.00  6.08          C   
+ATOM   1099  O   ALA A 136       0.626   6.851 -14.555  1.00  6.08          O   
+ATOM   1100  N   ASN A 137       1.001   6.147 -16.376  1.00  6.08          N   
+ATOM   1101  CA  ASN A 137       1.962   7.100 -16.923  1.00  6.08          C   
+ATOM   1102  C   ASN A 137       2.561   7.982 -15.832  1.00  6.08          C   
+ATOM   1103  CB  ASN A 137       1.305   7.963 -18.003  1.00  6.08          C   
+ATOM   1104  O   ASN A 137       2.685   9.196 -16.007  1.00  6.08          O   
+ATOM   1105  CG  ASN A 137       1.244   7.267 -19.349  1.00  6.08          C   
+ATOM   1106  ND2 ASN A 137       0.354   7.734 -20.218  1.00  6.08          N   
+ATOM   1107  OD1 ASN A 137       1.989   6.318 -19.606  1.00  6.08          O   
+ATOM   1108  N   GLY A 138       2.939   7.445 -14.762  1.00  6.08          N   
+ATOM   1109  CA  GLY A 138       3.642   8.286 -13.808  1.00  6.08          C   
+ATOM   1110  C   GLY A 138       2.721   9.212 -13.036  1.00  6.08          C   
+ATOM   1111  O   GLY A 138       3.179  10.003 -12.209  1.00  6.08          O   
+ATOM   1112  N   TYR A 139       1.463   9.234 -13.302  1.00  6.08          N   
+ATOM   1113  CA  TYR A 139       0.469  10.113 -12.696  1.00  6.08          C   
+ATOM   1114  C   TYR A 139      -0.736   9.318 -12.207  1.00  6.08          C   
+ATOM   1115  CB  TYR A 139       0.019  11.184 -13.694  1.00  6.08          C   
+ATOM   1116  O   TYR A 139      -1.121   8.321 -12.822  1.00  6.08          O   
+ATOM   1117  CG  TYR A 139       0.919  12.395 -13.732  1.00  6.08          C   
+ATOM   1118  CD1 TYR A 139       1.986  12.467 -14.625  1.00  6.08          C   
+ATOM   1119  CD2 TYR A 139       0.705  13.469 -12.874  1.00  6.08          C   
+ATOM   1120  CE1 TYR A 139       2.819  13.580 -14.662  1.00  6.08          C   
+ATOM   1121  CE2 TYR A 139       1.532  14.587 -12.903  1.00  6.08          C   
+ATOM   1122  OH  TYR A 139       3.406  15.738 -13.831  1.00  6.08          O   
+ATOM   1123  CZ  TYR A 139       2.584  14.634 -13.799  1.00  6.08          C   
+ATOM   1124  N   ILE A 140      -0.939   9.058 -10.837  1.00  6.08          N   
+ATOM   1125  CA  ILE A 140      -2.155   8.654 -10.138  1.00  6.08          C   
+ATOM   1126  C   ILE A 140      -3.276   9.645 -10.440  1.00  6.08          C   
+ATOM   1127  CB  ILE A 140      -1.924   8.553  -8.614  1.00  6.08          C   
+ATOM   1128  O   ILE A 140      -3.182  10.824 -10.091  1.00  6.08          O   
+ATOM   1129  CG1 ILE A 140      -0.789   7.569  -8.310  1.00  6.08          C   
+ATOM   1130  CG2 ILE A 140      -3.213   8.140  -7.899  1.00  6.08          C   
+ATOM   1131  CD1 ILE A 140      -0.415   7.492  -6.836  1.00  6.08          C   
+ATOM   1132  N   SER A 141      -3.684   9.839 -11.715  1.00  6.08          N   
+ATOM   1133  CA  SER A 141      -4.883  10.669 -11.786  1.00  6.08          C   
+ATOM   1134  C   SER A 141      -6.105   9.922 -11.262  1.00  6.08          C   
+ATOM   1135  CB  SER A 141      -5.133  11.127 -13.224  1.00  6.08          C   
+ATOM   1136  O   SER A 141      -6.378   8.796 -11.682  1.00  6.08          O   
+ATOM   1137  OG  SER A 141      -6.496  10.963 -13.574  1.00  6.08          O   
+ATOM   1138  N   ALA A 142      -6.198   9.687  -9.878  1.00  6.08          N   
+ATOM   1139  CA  ALA A 142      -7.356   9.155  -9.164  1.00  6.08          C   
+ATOM   1140  C   ALA A 142      -8.656   9.539  -9.865  1.00  6.08          C   
+ATOM   1141  CB  ALA A 142      -7.366   9.651  -7.721  1.00  6.08          C   
+ATOM   1142  O   ALA A 142      -8.874  10.710 -10.184  1.00  6.08          O   
+ATOM   1143  N   ASP A 143      -9.016   8.898 -10.877  1.00  6.08          N   
+ATOM   1144  CA  ASP A 143     -10.425   8.964 -11.253  1.00  6.08          C   
+ATOM   1145  C   ASP A 143     -11.295   9.345 -10.057  1.00  6.08          C   
+ATOM   1146  CB  ASP A 143     -10.889   7.628 -11.836  1.00  6.08          C   
+ATOM   1147  O   ASP A 143     -11.158   8.769  -8.975  1.00  6.08          O   
+ATOM   1148  CG  ASP A 143     -11.385   7.746 -13.267  1.00  6.08          C   
+ATOM   1149  OD1 ASP A 143     -11.573   6.706 -13.934  1.00  6.08          O   
+ATOM   1150  OD2 ASP A 143     -11.586   8.889 -13.731  1.00  6.08          O   
+ATOM   1151  N   SER A 144     -11.432  10.610  -9.724  1.00  6.08          N   
+ATOM   1152  CA  SER A 144     -12.633  11.251  -9.197  1.00  6.08          C   
+ATOM   1153  C   SER A 144     -13.803  10.274  -9.147  1.00  6.08          C   
+ATOM   1154  CB  SER A 144     -13.009  12.466 -10.046  1.00  6.08          C   
+ATOM   1155  O   SER A 144     -14.946  10.678  -8.919  1.00  6.08          O   
+ATOM   1156  OG  SER A 144     -12.987  12.143 -11.426  1.00  6.08          O   
+ATOM   1157  N   ARG A 145     -13.625   8.971  -9.055  1.00  6.08          N   
+ATOM   1158  CA  ARG A 145     -14.877   8.231  -8.942  1.00  6.08          C   
+ATOM   1159  C   ARG A 145     -15.517   8.442  -7.574  1.00  6.08          C   
+ATOM   1160  CB  ARG A 145     -14.644   6.738  -9.187  1.00  6.08          C   
+ATOM   1161  O   ARG A 145     -14.826   8.444  -6.554  1.00  6.08          O   
+ATOM   1162  CG  ARG A 145     -14.402   6.383 -10.645  1.00  6.08          C   
+ATOM   1163  CD  ARG A 145     -14.336   4.877 -10.856  1.00  6.08          C   
+ATOM   1164  NE  ARG A 145     -13.186   4.497 -11.671  1.00  6.08          N   
+ATOM   1165  NH1 ARG A 145     -13.735   2.255 -11.769  1.00  6.08          N   
+ATOM   1166  NH2 ARG A 145     -11.852   3.025 -12.824  1.00  6.08          N   
+ATOM   1167  CZ  ARG A 145     -12.927   3.260 -12.086  1.00  6.08          C   
+ATOM   1168  N   THR A 146     -16.379   9.419  -7.415  1.00  6.08          N   
+ATOM   1169  CA  THR A 146     -17.507   9.485  -6.494  1.00  6.08          C   
+ATOM   1170  C   THR A 146     -18.280   8.169  -6.491  1.00  6.08          C   
+ATOM   1171  CB  THR A 146     -18.458  10.641  -6.856  1.00  6.08          C   
+ATOM   1172  O   THR A 146     -18.534   7.590  -7.549  1.00  6.08          O   
+ATOM   1173  CG2 THR A 146     -18.028  11.939  -6.180  1.00  6.08          C   
+ATOM   1174  OG1 THR A 146     -18.451  10.830  -8.276  1.00  6.08          O   
+ATOM   1175  N   VAL A 147     -17.785   7.142  -5.708  1.00  6.08          N   
+ATOM   1176  CA  VAL A 147     -18.621   5.978  -5.435  1.00  6.08          C   
+ATOM   1177  C   VAL A 147     -20.048   6.427  -5.126  1.00  6.08          C   
+ATOM   1178  CB  VAL A 147     -18.061   5.139  -4.264  1.00  6.08          C   
+ATOM   1179  O   VAL A 147     -20.261   7.305  -4.287  1.00  6.08          O   
+ATOM   1180  CG1 VAL A 147     -18.638   3.725  -4.289  1.00  6.08          C   
+ATOM   1181  CG2 VAL A 147     -16.535   5.098  -4.321  1.00  6.08          C   
+ATOM   1182  N   ASP A 148     -20.960   6.728  -6.190  1.00  6.08          N   
+ATOM   1183  CA  ASP A 148     -22.394   6.829  -5.938  1.00  6.08          C   
+ATOM   1184  C   ASP A 148     -22.901   5.619  -5.157  1.00  6.08          C   
+ATOM   1185  CB  ASP A 148     -23.162   6.965  -7.254  1.00  6.08          C   
+ATOM   1186  O   ASP A 148     -22.505   4.485  -5.432  1.00  6.08          O   
+ATOM   1187  CG  ASP A 148     -22.902   8.285  -7.959  1.00  6.08          C   
+ATOM   1188  OD1 ASP A 148     -23.140   8.380  -9.182  1.00  6.08          O   
+ATOM   1189  OD2 ASP A 148     -22.451   9.237  -7.286  1.00  6.08          O   
+TER    1190      ASP A 148
+ENDMDL
+END
diff --git a/alphafold/alphafold/relax/testdata/with_violations_casp14.pdb b/alphafold/alphafold/relax/testdata/with_violations_casp14.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..1a1aeb1f3437c7e3eabff6f0b1e183f0fee05fc6
--- /dev/null
+++ b/alphafold/alphafold/relax/testdata/with_violations_casp14.pdb
@@ -0,0 +1,1193 @@
+MODEL        0
+ATOM      1  N   SER A   1      27.311  -3.395  37.375  1.00  8.64          N   
+ATOM      2  CA  SER A   1      26.072  -4.109  37.084  1.00  8.64          C   
+ATOM      3  C   SER A   1      26.047  -4.608  35.643  1.00  8.64          C   
+ATOM      4  CB  SER A   1      24.862  -3.211  37.342  1.00  8.64          C   
+ATOM      5  O   SER A   1      26.782  -4.101  34.792  1.00  8.64          O   
+ATOM      6  OG  SER A   1      24.740  -2.228  36.329  1.00  8.64          O   
+ATOM      7  N   PHE A   2      25.619  -5.987  35.357  1.00  8.64          N   
+ATOM      8  CA  PHE A   2      25.448  -6.479  33.995  1.00  8.64          C   
+ATOM      9  C   PHE A   2      25.049  -5.347  33.056  1.00  8.64          C   
+ATOM     10  CB  PHE A   2      24.395  -7.591  33.953  1.00  8.64          C   
+ATOM     11  O   PHE A   2      25.590  -5.226  31.955  1.00  8.64          O   
+ATOM     12  CG  PHE A   2      24.140  -8.134  32.573  1.00  8.64          C   
+ATOM     13  CD1 PHE A   2      25.003  -9.063  32.006  1.00  8.64          C   
+ATOM     14  CD2 PHE A   2      23.036  -7.714  31.842  1.00  8.64          C   
+ATOM     15  CE1 PHE A   2      24.770  -9.567  30.728  1.00  8.64          C   
+ATOM     16  CE2 PHE A   2      22.796  -8.214  30.565  1.00  8.64          C   
+ATOM     17  CZ  PHE A   2      23.665  -9.139  30.010  1.00  8.64          C   
+ATOM     18  N   GLU A   3      24.279  -4.453  33.583  1.00  8.64          N   
+ATOM     19  CA  GLU A   3      23.756  -3.316  32.831  1.00  8.64          C   
+ATOM     20  C   GLU A   3      24.858  -2.308  32.517  1.00  8.64          C   
+ATOM     21  CB  GLU A   3      22.624  -2.635  33.604  1.00  8.64          C   
+ATOM     22  O   GLU A   3      24.963  -1.828  31.387  1.00  8.64          O   
+ATOM     23  CG  GLU A   3      21.251  -3.239  33.345  1.00  8.64          C   
+ATOM     24  CD  GLU A   3      20.291  -3.067  34.511  1.00  8.64          C   
+ATOM     25  OE1 GLU A   3      19.129  -3.525  34.413  1.00  8.64          O   
+ATOM     26  OE2 GLU A   3      20.702  -2.469  35.530  1.00  8.64          O   
+ATOM     27  N   GLU A   4      25.795  -2.118  33.499  1.00  8.64          N   
+ATOM     28  CA  GLU A   4      26.873  -1.150  33.321  1.00  8.64          C   
+ATOM     29  C   GLU A   4      27.923  -1.667  32.341  1.00  8.64          C   
+ATOM     30  CB  GLU A   4      27.526  -0.820  34.666  1.00  8.64          C   
+ATOM     31  O   GLU A   4      28.401  -0.920  31.485  1.00  8.64          O   
+ATOM     32  CG  GLU A   4      26.709   0.130  35.529  1.00  8.64          C   
+ATOM     33  CD  GLU A   4      27.351   0.416  36.878  1.00  8.64          C   
+ATOM     34  OE1 GLU A   4      26.801   1.234  37.650  1.00  8.64          O   
+ATOM     35  OE2 GLU A   4      28.412  -0.182  37.164  1.00  8.64          O   
+ATOM     36  N   GLN A   5      28.078  -2.983  32.335  1.00  8.64          N   
+ATOM     37  CA  GLN A   5      29.050  -3.614  31.449  1.00  8.64          C   
+ATOM     38  C   GLN A   5      28.520  -3.696  30.020  1.00  8.64          C   
+ATOM     39  CB  GLN A   5      29.410  -5.012  31.956  1.00  8.64          C   
+ATOM     40  O   GLN A   5      29.268  -3.487  29.063  1.00  8.64          O   
+ATOM     41  CG  GLN A   5      30.587  -5.031  32.922  1.00  8.64          C   
+ATOM     42  CD  GLN A   5      30.906  -6.425  33.430  1.00  8.64          C   
+ATOM     43  NE2 GLN A   5      31.803  -6.509  34.407  1.00  8.64          N   
+ATOM     44  OE1 GLN A   5      30.350  -7.418  32.950  1.00  8.64          O   
+ATOM     45  N   PHE A   6      27.127  -3.824  29.849  1.00  8.64          N   
+ATOM     46  CA  PHE A   6      26.442  -3.868  28.562  1.00  8.64          C   
+ATOM     47  C   PHE A   6      26.501  -2.512  27.870  1.00  8.64          C   
+ATOM     48  CB  PHE A   6      24.983  -4.302  28.744  1.00  8.64          C   
+ATOM     49  O   PHE A   6      26.819  -2.429  26.682  1.00  8.64          O   
+ATOM     50  CG  PHE A   6      24.232  -4.461  27.450  1.00  8.64          C   
+ATOM     51  CD1 PHE A   6      24.326  -5.636  26.715  1.00  8.64          C   
+ATOM     52  CD2 PHE A   6      23.431  -3.434  26.968  1.00  8.64          C   
+ATOM     53  CE1 PHE A   6      23.631  -5.786  25.517  1.00  8.64          C   
+ATOM     54  CE2 PHE A   6      22.734  -3.576  25.771  1.00  8.64          C   
+ATOM     55  CZ  PHE A   6      22.836  -4.753  25.047  1.00  8.64          C   
+ATOM     56  N   ILE A   7      26.367  -1.421  28.620  1.00  8.64          N   
+ATOM     57  CA  ILE A   7      26.395  -0.058  28.103  1.00  8.64          C   
+ATOM     58  C   ILE A   7      27.816   0.304  27.677  1.00  8.64          C   
+ATOM     59  CB  ILE A   7      25.874   0.954  29.148  1.00  8.64          C   
+ATOM     60  O   ILE A   7      28.020   0.896  26.614  1.00  8.64          O   
+ATOM     61  CG1 ILE A   7      24.383   0.725  29.417  1.00  8.64          C   
+ATOM     62  CG2 ILE A   7      26.133   2.391  28.685  1.00  8.64          C   
+ATOM     63  CD1 ILE A   7      23.831   1.540  30.579  1.00  8.64          C   
+ATOM     64  N   LYS A   8      28.765  -0.137  28.420  1.00  8.64          N   
+ATOM     65  CA  LYS A   8      30.171   0.158  28.160  1.00  8.64          C   
+ATOM     66  C   LYS A   8      30.668  -0.584  26.922  1.00  8.64          C   
+ATOM     67  CB  LYS A   8      31.030  -0.210  29.371  1.00  8.64          C   
+ATOM     68  O   LYS A   8      31.368  -0.008  26.086  1.00  8.64          O   
+ATOM     69  CG  LYS A   8      32.396   0.462  29.387  1.00  8.64          C   
+ATOM     70  CD  LYS A   8      33.170   0.123  30.655  1.00  8.64          C   
+ATOM     71  CE  LYS A   8      34.584   0.686  30.615  1.00  8.64          C   
+ATOM     72  NZ  LYS A   8      35.350   0.348  31.852  1.00  8.64          N   
+ATOM     73  N   ASN A   9      30.138  -1.772  26.738  1.00  8.64          N   
+ATOM     74  CA  ASN A   9      30.622  -2.602  25.640  1.00  8.64          C   
+ATOM     75  C   ASN A   9      29.908  -2.274  24.332  1.00  8.64          C   
+ATOM     76  CB  ASN A   9      30.461  -4.086  25.976  1.00  8.64          C   
+ATOM     77  O   ASN A   9      30.396  -2.610  23.252  1.00  8.64          O   
+ATOM     78  CG  ASN A   9      31.429  -4.551  27.046  1.00  8.64          C   
+ATOM     79  ND2 ASN A   9      31.123  -5.682  27.670  1.00  8.64          N   
+ATOM     80  OD1 ASN A   9      32.442  -3.898  27.310  1.00  8.64          O   
+ATOM     81  N   ASN A  10      28.860  -1.389  24.447  1.00  8.64          N   
+ATOM     82  CA  ASN A  10      28.104  -1.128  23.227  1.00  8.64          C   
+ATOM     83  C   ASN A  10      28.029   0.366  22.923  1.00  8.64          C   
+ATOM     84  CB  ASN A  10      26.697  -1.720  23.330  1.00  8.64          C   
+ATOM     85  O   ASN A  10      27.356   0.778  21.977  1.00  8.64          O   
+ATOM     86  CG  ASN A  10      26.693  -3.234  23.250  1.00  8.64          C   
+ATOM     87  ND2 ASN A  10      26.544  -3.888  24.396  1.00  8.64          N   
+ATOM     88  OD1 ASN A  10      26.823  -3.811  22.167  1.00  8.64          O   
+ATOM     89  N   SER A  11      28.833   1.149  23.636  1.00  8.64          N   
+ATOM     90  CA  SER A  11      28.835   2.602  23.500  1.00  8.64          C   
+ATOM     91  C   SER A  11      29.617   3.040  22.266  1.00  8.64          C   
+ATOM     92  CB  SER A  11      29.427   3.257  24.748  1.00  8.64          C   
+ATOM     93  O   SER A  11      29.395   4.132  21.740  1.00  8.64          O   
+ATOM     94  OG  SER A  11      30.701   2.712  25.046  1.00  8.64          O   
+ATOM     95  N   ASP A  12      30.212   2.067  21.630  1.00  8.64          N   
+ATOM     96  CA  ASP A  12      30.855   2.541  20.408  1.00  8.64          C   
+ATOM     97  C   ASP A  12      29.975   2.284  19.188  1.00  8.64          C   
+ATOM     98  CB  ASP A  12      32.218   1.871  20.224  1.00  8.64          C   
+ATOM     99  O   ASP A  12      30.218   2.836  18.113  1.00  8.64          O   
+ATOM    100  CG  ASP A  12      33.270   2.391  21.189  1.00  8.64          C   
+ATOM    101  OD1 ASP A  12      34.250   1.668  21.471  1.00  8.64          O   
+ATOM    102  OD2 ASP A  12      33.116   3.533  21.673  1.00  8.64          O   
+ATOM    103  N   SER A  13      28.711   1.753  19.485  1.00  8.64          N   
+ATOM    104  CA  SER A  13      27.850   1.458  18.344  1.00  8.64          C   
+ATOM    105  C   SER A  13      26.738   2.492  18.209  1.00  8.64          C   
+ATOM    106  CB  SER A  13      27.245   0.060  18.477  1.00  8.64          C   
+ATOM    107  O   SER A  13      26.268   3.040  19.208  1.00  8.64          O   
+ATOM    108  OG  SER A  13      26.522  -0.062  19.690  1.00  8.64          O   
+ATOM    109  N   ASN A  14      26.876   3.556  17.578  1.00  8.64          N   
+ATOM    110  CA  ASN A  14      25.876   4.507  17.103  1.00  8.64          C   
+ATOM    111  C   ASN A  14      24.502   3.857  16.973  1.00  8.64          C   
+ATOM    112  CB  ASN A  14      26.306   5.114  15.766  1.00  8.64          C   
+ATOM    113  O   ASN A  14      23.638   4.361  16.252  1.00  8.64          O   
+ATOM    114  CG  ASN A  14      27.367   6.185  15.925  1.00  8.64          C   
+ATOM    115  ND2 ASN A  14      28.105   6.452  14.854  1.00  8.64          N   
+ATOM    116  OD1 ASN A  14      27.523   6.767  17.002  1.00  8.64          O   
+ATOM    117  N   ILE A  15      24.147   2.876  17.739  1.00  8.64          N   
+ATOM    118  CA  ILE A  15      22.782   2.392  17.562  1.00  8.64          C   
+ATOM    119  C   ILE A  15      21.867   3.040  18.600  1.00  8.64          C   
+ATOM    120  CB  ILE A  15      22.709   0.853  17.670  1.00  8.64          C   
+ATOM    121  O   ILE A  15      22.173   3.037  19.794  1.00  8.64          O   
+ATOM    122  CG1 ILE A  15      23.583   0.200  16.594  1.00  8.64          C   
+ATOM    123  CG2 ILE A  15      21.259   0.372  17.564  1.00  8.64          C   
+ATOM    124  CD1 ILE A  15      23.694  -1.313  16.720  1.00  8.64          C   
+ATOM    125  N   LEU A  16      21.054   3.988  18.304  1.00  8.64          N   
+ATOM    126  CA  LEU A  16      19.978   4.667  19.017  1.00  8.64          C   
+ATOM    127  C   LEU A  16      18.932   3.668  19.501  1.00  8.64          C   
+ATOM    128  CB  LEU A  16      19.320   5.718  18.120  1.00  8.64          C   
+ATOM    129  O   LEU A  16      18.483   2.813  18.734  1.00  8.64          O   
+ATOM    130  CG  LEU A  16      20.096   7.021  17.921  1.00  8.64          C   
+ATOM    131  CD1 LEU A  16      19.696   7.681  16.605  1.00  8.64          C   
+ATOM    132  CD2 LEU A  16      19.860   7.968  19.093  1.00  8.64          C   
+ATOM    133  N   ALA A  17      18.869   3.238  20.703  1.00  8.64          N   
+ATOM    134  CA  ALA A  17      17.774   2.555  21.387  1.00  8.64          C   
+ATOM    135  C   ALA A  17      16.496   3.388  21.343  1.00  8.64          C   
+ATOM    136  CB  ALA A  17      18.158   2.251  22.833  1.00  8.64          C   
+ATOM    137  O   ALA A  17      16.550   4.620  21.358  1.00  8.64          O   
+ATOM    138  N   PRO A  18      15.357   2.800  20.785  1.00  8.64          N   
+ATOM    139  CA  PRO A  18      14.061   3.472  20.894  1.00  8.64          C   
+ATOM    140  C   PRO A  18      13.755   3.936  22.317  1.00  8.64          C   
+ATOM    141  CB  PRO A  18      13.067   2.397  20.446  1.00  8.64          C   
+ATOM    142  O   PRO A  18      14.149   3.277  23.283  1.00  8.64          O   
+ATOM    143  CG  PRO A  18      13.852   1.125  20.452  1.00  8.64          C   
+ATOM    144  CD  PRO A  18      15.296   1.456  20.699  1.00  8.64          C   
+ATOM    145  N   LYS A  19      13.655   5.179  22.533  1.00  8.64          N   
+ATOM    146  CA  LYS A  19      13.091   5.770  23.743  1.00  8.64          C   
+ATOM    147  C   LYS A  19      11.590   5.512  23.832  1.00  8.64          C   
+ATOM    148  CB  LYS A  19      13.369   7.273  23.786  1.00  8.64          C   
+ATOM    149  O   LYS A  19      10.851   5.783  22.884  1.00  8.64          O   
+ATOM    150  CG  LYS A  19      14.728   7.635  24.367  1.00  8.64          C   
+ATOM    151  CD  LYS A  19      14.887   9.143  24.519  1.00  8.64          C   
+ATOM    152  CE  LYS A  19      16.267   9.509  25.048  1.00  8.64          C   
+ATOM    153  NZ  LYS A  19      16.425  10.986  25.206  1.00  8.64          N   
+ATOM    154  N   VAL A  20      11.044   4.381  24.383  1.00  8.64          N   
+ATOM    155  CA  VAL A  20       9.629   4.231  24.706  1.00  8.64          C   
+ATOM    156  C   VAL A  20       9.274   5.116  25.898  1.00  8.64          C   
+ATOM    157  CB  VAL A  20       9.268   2.759  25.009  1.00  8.64          C   
+ATOM    158  O   VAL A  20       9.977   5.115  26.911  1.00  8.64          O   
+ATOM    159  CG1 VAL A  20       7.753   2.575  25.067  1.00  8.64          C   
+ATOM    160  CG2 VAL A  20       9.882   1.833  23.960  1.00  8.64          C   
+ATOM    161  N   SER A  21       8.650   6.317  25.693  1.00  8.64          N   
+ATOM    162  CA  SER A  21       8.096   7.229  26.687  1.00  8.64          C   
+ATOM    163  C   SER A  21       7.175   6.497  27.657  1.00  8.64          C   
+ATOM    164  CB  SER A  21       7.332   8.365  26.005  1.00  8.64          C   
+ATOM    165  O   SER A  21       6.372   5.657  27.245  1.00  8.64          O   
+ATOM    166  OG  SER A  21       5.963   8.343  26.373  1.00  8.64          O   
+ATOM    167  N   GLN A  22       7.597   6.311  28.856  1.00  8.64          N   
+ATOM    168  CA  GLN A  22       6.871   5.820  30.022  1.00  8.64          C   
+ATOM    169  C   GLN A  22       5.495   6.472  30.128  1.00  8.64          C   
+ATOM    170  CB  GLN A  22       7.672   6.073  31.300  1.00  8.64          C   
+ATOM    171  O   GLN A  22       4.544   5.852  30.609  1.00  8.64          O   
+ATOM    172  CG  GLN A  22       8.650   4.958  31.644  1.00  8.64          C   
+ATOM    173  CD  GLN A  22       9.489   5.270  32.869  1.00  8.64          C   
+ATOM    174  NE2 GLN A  22      10.341   4.329  33.260  1.00  8.64          N   
+ATOM    175  OE1 GLN A  22       9.372   6.349  33.460  1.00  8.64          O   
+ATOM    176  N   SER A  23       5.264   7.531  29.349  1.00  8.64          N   
+ATOM    177  CA  SER A  23       4.000   8.243  29.506  1.00  8.64          C   
+ATOM    178  C   SER A  23       2.897   7.603  28.670  1.00  8.64          C   
+ATOM    179  CB  SER A  23       4.160   9.713  29.115  1.00  8.64          C   
+ATOM    180  O   SER A  23       1.719   7.671  29.029  1.00  8.64          O   
+ATOM    181  OG  SER A  23       4.522   9.834  27.751  1.00  8.64          O   
+ATOM    182  N   VAL A  24       3.264   6.700  27.791  1.00  8.64          N   
+ATOM    183  CA  VAL A  24       2.305   6.038  26.913  1.00  8.64          C   
+ATOM    184  C   VAL A  24       1.784   4.767  27.581  1.00  8.64          C   
+ATOM    185  CB  VAL A  24       2.931   5.700  25.541  1.00  8.64          C   
+ATOM    186  O   VAL A  24       0.599   4.443  27.474  1.00  8.64          O   
+ATOM    187  CG1 VAL A  24       1.954   4.895  24.686  1.00  8.64          C   
+ATOM    188  CG2 VAL A  24       3.350   6.979  24.818  1.00  8.64          C   
+ATOM    189  N   ILE A  25       2.491   4.247  28.597  1.00  8.64          N   
+ATOM    190  CA  ILE A  25       2.093   2.989  29.220  1.00  8.64          C   
+ATOM    191  C   ILE A  25       1.071   3.261  30.322  1.00  8.64          C   
+ATOM    192  CB  ILE A  25       3.311   2.231  29.793  1.00  8.64          C   
+ATOM    193  O   ILE A  25       0.106   2.509  30.482  1.00  8.64          O   
+ATOM    194  CG1 ILE A  25       4.253   1.802  28.662  1.00  8.64          C   
+ATOM    195  CG2 ILE A  25       2.856   1.021  30.615  1.00  8.64          C   
+ATOM    196  CD1 ILE A  25       5.548   1.162  29.144  1.00  8.64          C   
+ATOM    197  N   LYS A  26       0.966   4.583  30.669  1.00  8.64          N   
+ATOM    198  CA  LYS A  26       0.057   4.828  31.785  1.00  8.64          C   
+ATOM    199  C   LYS A  26      -1.334   5.210  31.288  1.00  8.64          C   
+ATOM    200  CB  LYS A  26       0.608   5.928  32.694  1.00  8.64          C   
+ATOM    201  O   LYS A  26      -2.335   4.927  31.951  1.00  8.64          O   
+ATOM    202  CG  LYS A  26       1.656   5.444  33.686  1.00  8.64          C   
+ATOM    203  CD  LYS A  26       2.100   6.562  34.621  1.00  8.64          C   
+ATOM    204  CE  LYS A  26       3.222   6.107  35.544  1.00  8.64          C   
+ATOM    205  NZ  LYS A  26       3.671   7.205  36.452  1.00  8.64          N   
+ATOM    206  N   SER A  27      -1.519   5.405  29.984  1.00  8.64          N   
+ATOM    207  CA  SER A  27      -2.818   5.830  29.472  1.00  8.64          C   
+ATOM    208  C   SER A  27      -3.593   4.654  28.886  1.00  8.64          C   
+ATOM    209  CB  SER A  27      -2.647   6.918  28.412  1.00  8.64          C   
+ATOM    210  O   SER A  27      -4.818   4.714  28.757  1.00  8.64          O   
+ATOM    211  OG  SER A  27      -1.783   7.941  28.876  1.00  8.64          O   
+ATOM    212  N   ILE A  28      -3.005   3.525  29.012  1.00  8.64          N   
+ATOM    213  CA  ILE A  28      -3.699   2.421  28.358  1.00  8.64          C   
+ATOM    214  C   ILE A  28      -4.341   1.519  29.410  1.00  8.64          C   
+ATOM    215  CB  ILE A  28      -2.741   1.603  27.463  1.00  8.64          C   
+ATOM    216  O   ILE A  28      -5.121   0.624  29.076  1.00  8.64          O   
+ATOM    217  CG1 ILE A  28      -2.140   2.495  26.370  1.00  8.64          C   
+ATOM    218  CG2 ILE A  28      -3.468   0.402  26.851  1.00  8.64          C   
+ATOM    219  CD1 ILE A  28      -1.059   1.814  25.541  1.00  8.64          C   
+ATOM    220  N   LYS A  29      -4.577   2.107  30.648  1.00  8.64          N   
+ATOM    221  CA  LYS A  29      -5.233   1.333  31.698  1.00  8.64          C   
+ATOM    222  C   LYS A  29      -6.750   1.358  31.533  1.00  8.64          C   
+ATOM    223  CB  LYS A  29      -4.847   1.867  33.078  1.00  8.64          C   
+ATOM    224  O   LYS A  29      -7.358   2.430  31.493  1.00  8.64          O   
+ATOM    225  CG  LYS A  29      -3.666   1.147  33.712  1.00  8.64          C   
+ATOM    226  CD  LYS A  29      -3.402   1.645  35.127  1.00  8.64          C   
+ATOM    227  CE  LYS A  29      -2.190   0.960  35.745  1.00  8.64          C   
+ATOM    228  NZ  LYS A  29      -1.924   1.448  37.131  1.00  8.64          N   
+ATOM    229  N   GLY A  30      -7.229   1.083  30.294  1.00  8.64          N   
+ATOM    230  CA  GLY A  30      -8.601   0.618  30.176  1.00  8.64          C   
+ATOM    231  C   GLY A  30      -8.899  -0.029  28.837  1.00  8.64          C   
+ATOM    232  O   GLY A  30      -9.937  -0.674  28.670  1.00  8.64          O   
+ATOM    233  N   ILE A  31      -7.830  -0.266  28.050  1.00  8.64          N   
+ATOM    234  CA  ILE A  31      -8.106  -0.892  26.762  1.00  8.64          C   
+ATOM    235  C   ILE A  31      -7.458  -2.274  26.711  1.00  8.64          C   
+ATOM    236  CB  ILE A  31      -7.601  -0.021  25.590  1.00  8.64          C   
+ATOM    237  O   ILE A  31      -6.281  -2.428  27.045  1.00  8.64          O   
+ATOM    238  CG1 ILE A  31      -8.334   1.326  25.572  1.00  8.64          C   
+ATOM    239  CG2 ILE A  31      -7.773  -0.756  24.258  1.00  8.64          C   
+ATOM    240  CD1 ILE A  31      -7.778   2.319  24.562  1.00  8.64          C   
+ATOM    241  N   LYS A  32      -8.177  -3.230  27.032  1.00  8.64          N   
+ATOM    242  CA  LYS A  32      -7.883  -4.648  26.851  1.00  8.64          C   
+ATOM    243  C   LYS A  32      -7.261  -4.910  25.482  1.00  8.64          C   
+ATOM    244  CB  LYS A  32      -9.152  -5.485  27.018  1.00  8.64          C   
+ATOM    245  O   LYS A  32      -7.777  -4.449  24.461  1.00  8.64          O   
+ATOM    246  CG  LYS A  32      -9.602  -5.645  28.463  1.00  8.64          C   
+ATOM    247  CD  LYS A  32     -10.735  -6.656  28.587  1.00  8.64          C   
+ATOM    248  CE  LYS A  32     -11.232  -6.767  30.022  1.00  8.64          C   
+ATOM    249  NZ  LYS A  32     -12.323  -7.777  30.154  1.00  8.64          N   
+ATOM    250  N   SER A  33      -5.945  -4.505  25.154  1.00  8.64          N   
+ATOM    251  CA  SER A  33      -4.816  -4.797  24.277  1.00  8.64          C   
+ATOM    252  C   SER A  33      -5.289  -5.219  22.890  1.00  8.64          C   
+ATOM    253  CB  SER A  33      -3.937  -5.894  24.880  1.00  8.64          C   
+ATOM    254  O   SER A  33      -6.134  -6.107  22.759  1.00  8.64          O   
+ATOM    255  OG  SER A  33      -4.706  -7.046  25.181  1.00  8.64          O   
+ATOM    256  N   LYS A  34      -5.506  -4.290  21.907  1.00  8.64          N   
+ATOM    257  CA  LYS A  34      -5.176  -4.717  20.550  1.00  8.64          C   
+ATOM    258  C   LYS A  34      -3.963  -3.963  20.015  1.00  8.64          C   
+ATOM    259  CB  LYS A  34      -6.372  -4.514  19.618  1.00  8.64          C   
+ATOM    260  O   LYS A  34      -3.833  -2.755  20.227  1.00  8.64          O   
+ATOM    261  CG  LYS A  34      -7.490  -5.528  19.815  1.00  8.64          C   
+ATOM    262  CD  LYS A  34      -8.616  -5.321  18.811  1.00  8.64          C   
+ATOM    263  CE  LYS A  34      -9.773  -6.278  19.062  1.00  8.64          C   
+ATOM    264  NZ  LYS A  34     -10.875  -6.087  18.072  1.00  8.64          N   
+ATOM    265  N   HIS A  35      -2.824  -4.493  19.949  1.00  8.64          N   
+ATOM    266  CA  HIS A  35      -1.491  -4.114  19.495  1.00  8.64          C   
+ATOM    267  C   HIS A  35      -1.527  -3.581  18.066  1.00  8.64          C   
+ATOM    268  CB  HIS A  35      -0.535  -5.304  19.588  1.00  8.64          C   
+ATOM    269  O   HIS A  35      -2.122  -4.202  17.182  1.00  8.64          O   
+ATOM    270  CG  HIS A  35      -0.328  -5.799  20.983  1.00  8.64          C   
+ATOM    271  CD2 HIS A  35      -0.455  -7.038  21.515  1.00  8.64          C   
+ATOM    272  ND1 HIS A  35       0.057  -4.973  22.017  1.00  8.64          N   
+ATOM    273  CE1 HIS A  35       0.158  -5.684  23.127  1.00  8.64          C   
+ATOM    274  NE2 HIS A  35      -0.147  -6.940  22.850  1.00  8.64          N   
+ATOM    275  N   VAL A  36      -1.503  -2.286  17.829  1.00  8.64          N   
+ATOM    276  CA  VAL A  36      -1.192  -1.701  16.529  1.00  8.64          C   
+ATOM    277  C   VAL A  36       0.304  -1.410  16.437  1.00  8.64          C   
+ATOM    278  CB  VAL A  36      -2.002  -0.410  16.279  1.00  8.64          C   
+ATOM    279  O   VAL A  36       0.894  -0.861  17.371  1.00  8.64          O   
+ATOM    280  CG1 VAL A  36      -1.660   0.188  14.915  1.00  8.64          C   
+ATOM    281  CG2 VAL A  36      -3.500  -0.692  16.381  1.00  8.64          C   
+ATOM    282  N   PHE A  37       1.020  -2.124  15.486  1.00  8.64          N   
+ATOM    283  CA  PHE A  37       2.422  -1.855  15.187  1.00  8.64          C   
+ATOM    284  C   PHE A  37       2.551  -0.928  13.985  1.00  8.64          C   
+ATOM    285  CB  PHE A  37       3.177  -3.162  14.926  1.00  8.64          C   
+ATOM    286  O   PHE A  37       1.807  -1.060  13.010  1.00  8.64          O   
+ATOM    287  CG  PHE A  37       3.251  -4.071  16.124  1.00  8.64          C   
+ATOM    288  CD1 PHE A  37       2.301  -5.066  16.318  1.00  8.64          C   
+ATOM    289  CD2 PHE A  37       4.270  -3.928  17.057  1.00  8.64          C   
+ATOM    290  CE1 PHE A  37       2.367  -5.908  17.426  1.00  8.64          C   
+ATOM    291  CE2 PHE A  37       4.342  -4.766  18.166  1.00  8.64          C   
+ATOM    292  CZ  PHE A  37       3.389  -5.755  18.349  1.00  8.64          C   
+ATOM    293  N   GLU A  38       3.248   0.202  14.094  1.00  8.64          N   
+ATOM    294  CA  GLU A  38       3.645   1.092  13.007  1.00  8.64          C   
+ATOM    295  C   GLU A  38       5.086   0.830  12.578  1.00  8.64          C   
+ATOM    296  CB  GLU A  38       3.477   2.556  13.421  1.00  8.64          C   
+ATOM    297  O   GLU A  38       5.981   0.731  13.419  1.00  8.64          O   
+ATOM    298  CG  GLU A  38       2.545   3.348  12.515  1.00  8.64          C   
+ATOM    299  CD  GLU A  38       2.381   4.798  12.943  1.00  8.64          C   
+ATOM    300  OE1 GLU A  38       1.724   5.575  12.214  1.00  8.64          O   
+ATOM    301  OE2 GLU A  38       2.914   5.159  14.016  1.00  8.64          O   
+ATOM    302  N   LEU A  39       5.280   0.263  11.288  1.00  8.64          N   
+ATOM    303  CA  LEU A  39       6.615   0.024  10.751  1.00  8.64          C   
+ATOM    304  C   LEU A  39       7.133   1.253  10.013  1.00  8.64          C   
+ATOM    305  CB  LEU A  39       6.607  -1.185   9.811  1.00  8.64          C   
+ATOM    306  O   LEU A  39       6.371   1.936   9.324  1.00  8.64          O   
+ATOM    307  CG  LEU A  39       6.486  -2.558  10.474  1.00  8.64          C   
+ATOM    308  CD1 LEU A  39       5.969  -3.586   9.473  1.00  8.64          C   
+ATOM    309  CD2 LEU A  39       7.829  -2.994  11.050  1.00  8.64          C   
+ATOM    310  N   PRO A  40       8.338   1.782  10.282  1.00  8.64          N   
+ATOM    311  CA  PRO A  40       8.943   2.928   9.599  1.00  8.64          C   
+ATOM    312  C   PRO A  40       9.200   2.662   8.117  1.00  8.64          C   
+ATOM    313  CB  PRO A  40      10.259   3.133  10.353  1.00  8.64          C   
+ATOM    314  O   PRO A  40       9.522   1.534   7.735  1.00  8.64          O   
+ATOM    315  CG  PRO A  40      10.482   1.852  11.090  1.00  8.64          C   
+ATOM    316  CD  PRO A  40       9.238   1.017  10.981  1.00  8.64          C   
+ATOM    317  N   ILE A  41       8.660   3.312   7.012  1.00  8.64          N   
+ATOM    318  CA  ILE A  41       8.626   3.183   5.560  1.00  8.64          C   
+ATOM    319  C   ILE A  41       9.887   3.798   4.958  1.00  8.64          C   
+ATOM    320  CB  ILE A  41       7.367   3.850   4.962  1.00  8.64          C   
+ATOM    321  O   ILE A  41      10.222   4.950   5.244  1.00  8.64          O   
+ATOM    322  CG1 ILE A  41       6.099   3.238   5.570  1.00  8.64          C   
+ATOM    323  CG2 ILE A  41       7.360   3.722   3.436  1.00  8.64          C   
+ATOM    324  CD1 ILE A  41       4.813   3.939   5.155  1.00  8.64          C   
+ATOM    325  N   ASN A  42      10.941   3.063   4.710  1.00  8.64          N   
+ATOM    326  CA  ASN A  42      11.934   3.552   3.759  1.00  8.64          C   
+ATOM    327  C   ASN A  42      11.614   3.106   2.335  1.00  8.64          C   
+ATOM    328  CB  ASN A  42      13.336   3.085   4.159  1.00  8.64          C   
+ATOM    329  O   ASN A  42      10.806   2.198   2.131  1.00  8.64          O   
+ATOM    330  CG  ASN A  42      13.525   1.591   3.986  1.00  8.64          C   
+ATOM    331  ND2 ASN A  42      14.569   1.051   4.604  1.00  8.64          N   
+ATOM    332  OD1 ASN A  42      12.741   0.928   3.303  1.00  8.64          O   
+ATOM    333  N   ASP A  43      11.701   4.001   1.461  1.00  8.64          N   
+ATOM    334  CA  ASP A  43      11.331   4.253   0.072  1.00  8.64          C   
+ATOM    335  C   ASP A  43      11.757   3.096  -0.829  1.00  8.64          C   
+ATOM    336  CB  ASP A  43      11.956   5.561  -0.421  1.00  8.64          C   
+ATOM    337  O   ASP A  43      11.082   2.788  -1.813  1.00  8.64          O   
+ATOM    338  CG  ASP A  43      11.313   6.793   0.191  1.00  8.64          C   
+ATOM    339  OD1 ASP A  43      11.900   7.893   0.108  1.00  8.64          O   
+ATOM    340  OD2 ASP A  43      10.210   6.661   0.764  1.00  8.64          O   
+ATOM    341  N   LYS A  44      12.353   2.046  -0.514  1.00  8.64          N   
+ATOM    342  CA  LYS A  44      12.727   0.989  -1.449  1.00  8.64          C   
+ATOM    343  C   LYS A  44      11.978  -0.305  -1.142  1.00  8.64          C   
+ATOM    344  CB  LYS A  44      14.236   0.744  -1.407  1.00  8.64          C   
+ATOM    345  O   LYS A  44      11.810  -1.154  -2.021  1.00  8.64          O   
+ATOM    346  CG  LYS A  44      15.059   1.832  -2.080  1.00  8.64          C   
+ATOM    347  CD  LYS A  44      16.537   1.468  -2.124  1.00  8.64          C   
+ATOM    348  CE  LYS A  44      17.370   2.584  -2.741  1.00  8.64          C   
+ATOM    349  NZ  LYS A  44      18.820   2.229  -2.793  1.00  8.64          N   
+ATOM    350  N   THR A  45      11.103  -0.291  -0.142  1.00  8.64          N   
+ATOM    351  CA  THR A  45      10.454  -1.552   0.197  1.00  8.64          C   
+ATOM    352  C   THR A  45       8.939  -1.437   0.054  1.00  8.64          C   
+ATOM    353  CB  THR A  45      10.805  -1.993   1.630  1.00  8.64          C   
+ATOM    354  O   THR A  45       8.223  -2.436   0.149  1.00  8.64          O   
+ATOM    355  CG2 THR A  45      12.095  -2.806   1.656  1.00  8.64          C   
+ATOM    356  OG1 THR A  45      10.968  -0.832   2.454  1.00  8.64          O   
+ATOM    357  N   LYS A  46       8.412  -0.546  -0.642  1.00  8.64          N   
+ATOM    358  CA  LYS A  46       6.961  -0.392  -0.700  1.00  8.64          C   
+ATOM    359  C   LYS A  46       6.386  -1.066  -1.942  1.00  8.64          C   
+ATOM    360  CB  LYS A  46       6.578   1.089  -0.682  1.00  8.64          C   
+ATOM    361  O   LYS A  46       6.699  -0.675  -3.068  1.00  8.64          O   
+ATOM    362  CG  LYS A  46       6.727   1.750   0.680  1.00  8.64          C   
+ATOM    363  CD  LYS A  46       6.243   3.195   0.656  1.00  8.64          C   
+ATOM    364  CE  LYS A  46       6.459   3.880   1.998  1.00  8.64          C   
+ATOM    365  NZ  LYS A  46       6.003   5.302   1.974  1.00  8.64          N   
+ATOM    366  N   ARG A  47       6.500  -2.491  -2.290  1.00  8.64          N   
+ATOM    367  CA  ARG A  47       5.304  -2.979  -2.968  1.00  8.64          C   
+ATOM    368  C   ARG A  47       5.112  -4.474  -2.731  1.00  8.64          C   
+ATOM    369  CB  ARG A  47       5.382  -2.692  -4.469  1.00  8.64          C   
+ATOM    370  O   ARG A  47       5.990  -5.276  -3.055  1.00  8.64          O   
+ATOM    371  CG  ARG A  47       4.430  -1.603  -4.938  1.00  8.64          C   
+ATOM    372  CD  ARG A  47       4.526  -1.379  -6.440  1.00  8.64          C   
+ATOM    373  NE  ARG A  47       4.838   0.011  -6.759  1.00  8.64          N   
+ATOM    374  NH1 ARG A  47       4.576  -0.237  -9.041  1.00  8.64          N   
+ATOM    375  NH2 ARG A  47       5.152   1.801  -8.164  1.00  8.64          N   
+ATOM    376  CZ  ARG A  47       4.854   0.522  -7.987  1.00  8.64          C   
+ATOM    377  N   TYR A  48       4.776  -5.036  -1.672  1.00  8.64          N   
+ATOM    378  CA  TYR A  48       4.245  -6.394  -1.657  1.00  8.64          C   
+ATOM    379  C   TYR A  48       2.731  -6.390  -1.828  1.00  8.64          C   
+ATOM    380  CB  TYR A  48       4.621  -7.104  -0.353  1.00  8.64          C   
+ATOM    381  O   TYR A  48       2.027  -5.622  -1.168  1.00  8.64          O   
+ATOM    382  CG  TYR A  48       6.098  -7.385  -0.219  1.00  8.64          C   
+ATOM    383  CD1 TYR A  48       6.931  -6.518   0.484  1.00  8.64          C   
+ATOM    384  CD2 TYR A  48       6.663  -8.518  -0.795  1.00  8.64          C   
+ATOM    385  CE1 TYR A  48       8.293  -6.772   0.609  1.00  8.64          C   
+ATOM    386  CE2 TYR A  48       8.024  -8.782  -0.677  1.00  8.64          C   
+ATOM    387  OH  TYR A  48      10.177  -8.161   0.146  1.00  8.64          O   
+ATOM    388  CZ  TYR A  48       8.829  -7.905   0.026  1.00  8.64          C   
+ATOM    389  N   ILE A  49       2.115  -6.489  -3.067  1.00  8.64          N   
+ATOM    390  CA  ILE A  49       0.852  -6.880  -3.684  1.00  8.64          C   
+ATOM    391  C   ILE A  49       0.101  -7.837  -2.761  1.00  8.64          C   
+ATOM    392  CB  ILE A  49       1.076  -7.534  -5.066  1.00  8.64          C   
+ATOM    393  O   ILE A  49       0.588  -8.929  -2.459  1.00  8.64          O   
+ATOM    394  CG1 ILE A  49       1.810  -6.567  -6.002  1.00  8.64          C   
+ATOM    395  CG2 ILE A  49      -0.256  -7.981  -5.674  1.00  8.64          C   
+ATOM    396  CD1 ILE A  49       2.101  -7.142  -7.381  1.00  8.64          C   
+ATOM    397  N   LEU A  50      -0.593  -7.592  -1.660  1.00  8.64          N   
+ATOM    398  CA  LEU A  50      -1.573  -8.173  -0.750  1.00  8.64          C   
+ATOM    399  C   LEU A  50      -2.949  -8.245  -1.405  1.00  8.64          C   
+ATOM    400  CB  LEU A  50      -1.653  -7.358   0.544  1.00  8.64          C   
+ATOM    401  O   LEU A  50      -3.384  -7.289  -2.050  1.00  8.64          O   
+ATOM    402  CG  LEU A  50      -0.484  -7.515   1.517  1.00  8.64          C   
+ATOM    403  CD1 LEU A  50      -0.441  -6.339   2.488  1.00  8.64          C   
+ATOM    404  CD2 LEU A  50      -0.591  -8.835   2.273  1.00  8.64          C   
+ATOM    405  N   GLY A  51      -3.407  -9.384  -2.202  1.00  8.64          N   
+ATOM    406  CA  GLY A  51      -4.655 -10.100  -1.989  1.00  8.64          C   
+ATOM    407  C   GLY A  51      -5.574 -10.070  -3.195  1.00  8.64          C   
+ATOM    408  O   GLY A  51      -6.476  -9.233  -3.274  1.00  8.64          O   
+ATOM    409  N   ALA A  52      -5.228 -10.625  -4.456  1.00  8.64          N   
+ATOM    410  CA  ALA A  52      -6.350 -10.631  -5.391  1.00  8.64          C   
+ATOM    411  C   ALA A  52      -6.952 -12.027  -5.518  1.00  8.64          C   
+ATOM    412  CB  ALA A  52      -5.905 -10.121  -6.760  1.00  8.64          C   
+ATOM    413  O   ALA A  52      -6.245 -12.989  -5.829  1.00  8.64          O   
+ATOM    414  N   THR A  53      -7.821 -12.550  -4.658  1.00  8.64          N   
+ATOM    415  CA  THR A  53      -8.645 -13.723  -4.929  1.00  8.64          C   
+ATOM    416  C   THR A  53      -9.877 -13.343  -5.745  1.00  8.64          C   
+ATOM    417  CB  THR A  53      -9.083 -14.411  -3.622  1.00  8.64          C   
+ATOM    418  O   THR A  53     -10.285 -12.180  -5.756  1.00  8.64          O   
+ATOM    419  CG2 THR A  53      -7.877 -14.908  -2.831  1.00  8.64          C   
+ATOM    420  OG1 THR A  53      -9.815 -13.477  -2.820  1.00  8.64          O   
+ATOM    421  N   GLU A  54     -10.028 -13.989  -6.922  1.00  8.64          N   
+ATOM    422  CA  GLU A  54     -11.170 -13.968  -7.831  1.00  8.64          C   
+ATOM    423  C   GLU A  54     -12.473 -13.725  -7.074  1.00  8.64          C   
+ATOM    424  CB  GLU A  54     -11.256 -15.279  -8.618  1.00  8.64          C   
+ATOM    425  O   GLU A  54     -13.399 -13.109  -7.604  1.00  8.64          O   
+ATOM    426  CG  GLU A  54     -10.288 -15.357  -9.789  1.00  8.64          C   
+ATOM    427  CD  GLU A  54     -10.430 -16.635 -10.601  1.00  8.64          C   
+ATOM    428  OE1 GLU A  54      -9.704 -16.798 -11.608  1.00  8.64          O   
+ATOM    429  OE2 GLU A  54     -11.276 -17.478 -10.228  1.00  8.64          O   
+ATOM    430  N   THR A  55     -12.360 -13.799  -5.890  1.00  8.64          N   
+ATOM    431  CA  THR A  55     -13.448 -13.571  -4.946  1.00  8.64          C   
+ATOM    432  C   THR A  55     -13.101 -12.439  -3.983  1.00  8.64          C   
+ATOM    433  CB  THR A  55     -13.771 -14.847  -4.146  1.00  8.64          C   
+ATOM    434  O   THR A  55     -11.941 -12.282  -3.594  1.00  8.64          O   
+ATOM    435  CG2 THR A  55     -14.391 -15.915  -5.041  1.00  8.64          C   
+ATOM    436  OG1 THR A  55     -12.563 -15.363  -3.573  1.00  8.64          O   
+ATOM    437  N   LYS A  56     -13.303 -11.292  -4.478  1.00  8.64          N   
+ATOM    438  CA  LYS A  56     -13.121  -9.990  -3.842  1.00  8.64          C   
+ATOM    439  C   LYS A  56     -12.513 -10.138  -2.450  1.00  8.64          C   
+ATOM    440  CB  LYS A  56     -14.454  -9.244  -3.755  1.00  8.64          C   
+ATOM    441  O   LYS A  56     -13.231 -10.124  -1.449  1.00  8.64          O   
+ATOM    442  CG  LYS A  56     -15.022  -8.833  -5.105  1.00  8.64          C   
+ATOM    443  CD  LYS A  56     -16.241  -7.932  -4.948  1.00  8.64          C   
+ATOM    444  CE  LYS A  56     -16.839  -7.558  -6.298  1.00  8.64          C   
+ATOM    445  NZ  LYS A  56     -18.009  -6.643  -6.150  1.00  8.64          N   
+ATOM    446  N   GLU A  57     -11.444 -10.923  -2.365  1.00  8.64          N   
+ATOM    447  CA  GLU A  57     -10.922 -10.869  -1.003  1.00  8.64          C   
+ATOM    448  C   GLU A  57      -9.945  -9.710  -0.832  1.00  8.64          C   
+ATOM    449  CB  GLU A  57     -10.241 -12.190  -0.635  1.00  8.64          C   
+ATOM    450  O   GLU A  57      -9.129  -9.443  -1.717  1.00  8.64          O   
+ATOM    451  CG  GLU A  57     -11.101 -13.108   0.221  1.00  8.64          C   
+ATOM    452  CD  GLU A  57     -10.378 -14.373   0.656  1.00  8.64          C   
+ATOM    453  OE1 GLU A  57     -10.943 -15.149   1.461  1.00  8.64          O   
+ATOM    454  OE2 GLU A  57      -9.238 -14.590   0.190  1.00  8.64          O   
+ATOM    455  N   GLU A  58     -10.407  -8.718  -0.201  1.00  8.64          N   
+ATOM    456  CA  GLU A  58      -9.599  -7.616   0.312  1.00  8.64          C   
+ATOM    457  C   GLU A  58      -8.294  -8.124   0.918  1.00  8.64          C   
+ATOM    458  CB  GLU A  58     -10.384  -6.812   1.352  1.00  8.64          C   
+ATOM    459  O   GLU A  58      -8.299  -9.054   1.728  1.00  8.64          O   
+ATOM    460  CG  GLU A  58     -10.114  -5.315   1.303  1.00  8.64          C   
+ATOM    461  CD  GLU A  58     -10.947  -4.523   2.298  1.00  8.64          C   
+ATOM    462  OE1 GLU A  58     -10.733  -3.296   2.428  1.00  8.64          O   
+ATOM    463  OE2 GLU A  58     -11.819  -5.134   2.955  1.00  8.64          O   
+ATOM    464  N   VAL A  59      -7.183  -8.070   0.289  1.00  6.72          N   
+ATOM    465  CA  VAL A  59      -5.863  -8.557   0.675  1.00  6.72          C   
+ATOM    466  C   VAL A  59      -5.151  -7.505   1.523  1.00  6.72          C   
+ATOM    467  CB  VAL A  59      -5.006  -8.915  -0.560  1.00  6.72          C   
+ATOM    468  O   VAL A  59      -4.402  -7.842   2.442  1.00  6.72          O   
+ATOM    469  CG1 VAL A  59      -3.820  -9.790  -0.159  1.00  6.72          C   
+ATOM    470  CG2 VAL A  59      -5.860  -9.616  -1.615  1.00  6.72          C   
+ATOM    471  N   LEU A  60      -5.923  -6.877   2.559  1.00  6.72          N   
+ATOM    472  CA  LEU A  60      -5.509  -6.065   3.699  1.00  6.72          C   
+ATOM    473  C   LEU A  60      -5.287  -4.615   3.281  1.00  6.72          C   
+ATOM    474  CB  LEU A  60      -4.231  -6.631   4.324  1.00  6.72          C   
+ATOM    475  O   LEU A  60      -4.724  -4.351   2.216  1.00  6.72          O   
+ATOM    476  CG  LEU A  60      -4.398  -7.870   5.205  1.00  6.72          C   
+ATOM    477  CD1 LEU A  60      -3.064  -8.591   5.363  1.00  6.72          C   
+ATOM    478  CD2 LEU A  60      -4.969  -7.486   6.565  1.00  6.72          C   
+ATOM    479  N   PRO A  61      -6.061  -3.706   3.745  1.00  6.72          N   
+ATOM    480  CA  PRO A  61      -5.827  -2.294   3.434  1.00  6.72          C   
+ATOM    481  C   PRO A  61      -4.391  -1.859   3.717  1.00  6.72          C   
+ATOM    482  CB  PRO A  61      -6.810  -1.563   4.353  1.00  6.72          C   
+ATOM    483  O   PRO A  61      -3.782  -2.317   4.687  1.00  6.72          O   
+ATOM    484  CG  PRO A  61      -7.183  -2.571   5.392  1.00  6.72          C   
+ATOM    485  CD  PRO A  61      -6.789  -3.933   4.898  1.00  6.72          C   
+ATOM    486  N   ASN A  62      -3.671  -1.566   2.620  1.00  6.72          N   
+ATOM    487  CA  ASN A  62      -2.420  -0.834   2.785  1.00  6.72          C   
+ATOM    488  C   ASN A  62      -2.630   0.672   2.655  1.00  6.72          C   
+ATOM    489  CB  ASN A  62      -1.379  -1.315   1.772  1.00  6.72          C   
+ATOM    490  O   ASN A  62      -3.578   1.117   2.004  1.00  6.72          O   
+ATOM    491  CG  ASN A  62      -0.729  -2.622   2.178  1.00  6.72          C   
+ATOM    492  ND2 ASN A  62      -0.250  -3.376   1.195  1.00  6.72          N   
+ATOM    493  OD1 ASN A  62      -0.659  -2.953   3.364  1.00  6.72          O   
+ATOM    494  N   TYR A  63      -2.223   1.347   3.620  1.00  6.72          N   
+ATOM    495  CA  TYR A  63      -2.253   2.806   3.627  1.00  6.72          C   
+ATOM    496  C   TYR A  63      -0.969   3.381   3.043  1.00  6.72          C   
+ATOM    497  CB  TYR A  63      -2.461   3.332   5.050  1.00  6.72          C   
+ATOM    498  O   TYR A  63       0.099   2.774   3.157  1.00  6.72          O   
+ATOM    499  CG  TYR A  63      -3.732   2.841   5.700  1.00  6.72          C   
+ATOM    500  CD1 TYR A  63      -3.747   1.663   6.442  1.00  6.72          C   
+ATOM    501  CD2 TYR A  63      -4.920   3.553   5.571  1.00  6.72          C   
+ATOM    502  CE1 TYR A  63      -4.917   1.205   7.041  1.00  6.72          C   
+ATOM    503  CE2 TYR A  63      -6.095   3.105   6.166  1.00  6.72          C   
+ATOM    504  OH  TYR A  63      -7.244   1.484   7.488  1.00  6.72          O   
+ATOM    505  CZ  TYR A  63      -6.083   1.932   6.898  1.00  6.72          C   
+ATOM    506  N   VAL A  64      -1.142   4.342   2.173  1.00  4.66          N   
+ATOM    507  CA  VAL A  64      -0.000   5.090   1.658  1.00  4.66          C   
+ATOM    508  C   VAL A  64      -0.129   6.561   2.046  1.00  4.66          C   
+ATOM    509  CB  VAL A  64       0.125   4.951   0.125  1.00  4.66          C   
+ATOM    510  O   VAL A  64      -1.219   7.133   1.982  1.00  4.66          O   
+ATOM    511  CG1 VAL A  64      -1.005   5.701  -0.579  1.00  4.66          C   
+ATOM    512  CG2 VAL A  64       1.485   5.462  -0.348  1.00  4.66          C   
+ATOM    513  N   LYS A  65       0.916   7.003   2.673  1.00  6.72          N   
+ATOM    514  CA  LYS A  65       0.982   8.432   2.966  1.00  6.72          C   
+ATOM    515  C   LYS A  65       1.692   9.190   1.848  1.00  6.72          C   
+ATOM    516  CB  LYS A  65       1.693   8.674   4.298  1.00  6.72          C   
+ATOM    517  O   LYS A  65       2.804   8.830   1.455  1.00  6.72          O   
+ATOM    518  CG  LYS A  65       1.604  10.110   4.795  1.00  6.72          C   
+ATOM    519  CD  LYS A  65       2.207  10.258   6.186  1.00  6.72          C   
+ATOM    520  CE  LYS A  65       2.153  11.701   6.669  1.00  6.72          C   
+ATOM    521  NZ  LYS A  65       2.726  11.848   8.040  1.00  6.72          N   
+ATOM    522  N   VAL A  66       1.057  10.179   1.205  1.00  6.72          N   
+ATOM    523  CA  VAL A  66       1.588  11.120   0.224  1.00  6.72          C   
+ATOM    524  C   VAL A  66       1.485  12.544   0.766  1.00  6.72          C   
+ATOM    525  CB  VAL A  66       0.847  11.009  -1.127  1.00  6.72          C   
+ATOM    526  O   VAL A  66       0.389  13.105   0.851  1.00  6.72          O   
+ATOM    527  CG1 VAL A  66       1.477  11.935  -2.166  1.00  6.72          C   
+ATOM    528  CG2 VAL A  66       0.854   9.564  -1.622  1.00  6.72          C   
+ATOM    529  N   GLY A  67       2.645  13.103   1.210  1.00  6.72          N   
+ATOM    530  CA  GLY A  67       2.556  14.375   1.909  1.00  6.72          C   
+ATOM    531  C   GLY A  67       1.847  14.273   3.247  1.00  6.72          C   
+ATOM    532  O   GLY A  67       2.248  13.488   4.109  1.00  6.72          O   
+ATOM    533  N   SER A  68       0.772  15.228   3.461  1.00  6.72          N   
+ATOM    534  CA  SER A  68      -0.022  15.225   4.685  1.00  6.72          C   
+ATOM    535  C   SER A  68      -1.250  14.332   4.545  1.00  6.72          C   
+ATOM    536  CB  SER A  68      -0.453  16.647   5.048  1.00  6.72          C   
+ATOM    537  O   SER A  68      -2.061  14.234   5.469  1.00  6.72          O   
+ATOM    538  OG  SER A  68      -1.210  17.226   3.999  1.00  6.72          O   
+ATOM    539  N   ASP A  69      -1.295  13.620   3.451  1.00  6.72          N   
+ATOM    540  CA  ASP A  69      -2.507  12.844   3.203  1.00  6.72          C   
+ATOM    541  C   ASP A  69      -2.237  11.347   3.332  1.00  6.72          C   
+ATOM    542  CB  ASP A  69      -3.071  13.160   1.816  1.00  6.72          C   
+ATOM    543  O   ASP A  69      -1.146  10.877   3.002  1.00  6.72          O   
+ATOM    544  CG  ASP A  69      -3.522  14.603   1.673  1.00  6.72          C   
+ATOM    545  OD1 ASP A  69      -3.312  15.204   0.598  1.00  6.72          O   
+ATOM    546  OD2 ASP A  69      -4.090  15.144   2.646  1.00  6.72          O   
+ATOM    547  N   LEU A  70      -3.211  10.550   3.934  1.00  4.66          N   
+ATOM    548  CA  LEU A  70      -3.196   9.096   4.057  1.00  4.66          C   
+ATOM    549  C   LEU A  70      -4.202   8.459   3.105  1.00  4.66          C   
+ATOM    550  CB  LEU A  70      -3.502   8.677   5.498  1.00  4.66          C   
+ATOM    551  O   LEU A  70      -5.357   8.886   3.039  1.00  4.66          O   
+ATOM    552  CG  LEU A  70      -3.258   7.207   5.842  1.00  4.66          C   
+ATOM    553  CD1 LEU A  70      -1.767   6.890   5.788  1.00  4.66          C   
+ATOM    554  CD2 LEU A  70      -3.830   6.877   7.216  1.00  4.66          C   
+ATOM    555  N   TYR A  71      -3.655   7.568   2.260  1.00  4.66          N   
+ATOM    556  CA  TYR A  71      -4.497   6.862   1.300  1.00  4.66          C   
+ATOM    557  C   TYR A  71      -4.630   5.390   1.671  1.00  4.66          C   
+ATOM    558  CB  TYR A  71      -3.926   6.994  -0.115  1.00  4.66          C   
+ATOM    559  O   TYR A  71      -3.674   4.774   2.148  1.00  4.66          O   
+ATOM    560  CG  TYR A  71      -3.900   8.412  -0.629  1.00  4.66          C   
+ATOM    561  CD1 TYR A  71      -2.852   9.272  -0.307  1.00  4.66          C   
+ATOM    562  CD2 TYR A  71      -4.923   8.897  -1.437  1.00  4.66          C   
+ATOM    563  CE1 TYR A  71      -2.824  10.581  -0.777  1.00  4.66          C   
+ATOM    564  CE2 TYR A  71      -4.906  10.204  -1.913  1.00  4.66          C   
+ATOM    565  OH  TYR A  71      -3.832  12.332  -2.046  1.00  4.66          O   
+ATOM    566  CZ  TYR A  71      -3.854  11.037  -1.578  1.00  4.66          C   
+ATOM    567  N   ARG A  72      -5.791   4.900   1.584  1.00  4.66          N   
+ATOM    568  CA  ARG A  72      -6.044   3.465   1.655  1.00  4.66          C   
+ATOM    569  C   ARG A  72      -5.981   2.829   0.270  1.00  4.66          C   
+ATOM    570  CB  ARG A  72      -7.406   3.190   2.296  1.00  4.66          C   
+ATOM    571  O   ARG A  72      -6.604   3.321  -0.674  1.00  4.66          O   
+ATOM    572  CG  ARG A  72      -7.679   1.717   2.555  1.00  4.66          C   
+ATOM    573  CD  ARG A  72      -9.040   1.500   3.201  1.00  4.66          C   
+ATOM    574  NE  ARG A  72      -9.274   0.091   3.505  1.00  4.66          N   
+ATOM    575  NH1 ARG A  72     -11.472   0.383   4.153  1.00  4.66          N   
+ATOM    576  NH2 ARG A  72     -10.528  -1.705   4.194  1.00  4.66          N   
+ATOM    577  CZ  ARG A  72     -10.424  -0.407   3.950  1.00  4.66          C   
+ATOM    578  N   LEU A  73      -5.092   1.875   0.180  1.00  4.66          N   
+ATOM    579  CA  LEU A  73      -4.937   1.157  -1.080  1.00  4.66          C   
+ATOM    580  C   LEU A  73      -5.727  -0.147  -1.064  1.00  4.66          C   
+ATOM    581  CB  LEU A  73      -3.458   0.868  -1.354  1.00  4.66          C   
+ATOM    582  O   LEU A  73      -5.700  -0.882  -0.074  1.00  4.66          O   
+ATOM    583  CG  LEU A  73      -2.548   2.087  -1.518  1.00  4.66          C   
+ATOM    584  CD1 LEU A  73      -1.084   1.663  -1.481  1.00  4.66          C   
+ATOM    585  CD2 LEU A  73      -2.866   2.820  -2.817  1.00  4.66          C   
+ATOM    586  N   LYS A  74      -6.458  -0.297  -2.040  1.00  4.66          N   
+ATOM    587  CA  LYS A  74      -7.147  -1.567  -2.251  1.00  4.66          C   
+ATOM    588  C   LYS A  74      -6.751  -2.192  -3.586  1.00  4.66          C   
+ATOM    589  CB  LYS A  74      -8.662  -1.371  -2.193  1.00  4.66          C   
+ATOM    590  O   LYS A  74      -6.697  -1.504  -4.608  1.00  4.66          O   
+ATOM    591  CG  LYS A  74      -9.189  -1.022  -0.809  1.00  4.66          C   
+ATOM    592  CD  LYS A  74     -10.710  -0.932  -0.796  1.00  4.66          C   
+ATOM    593  CE  LYS A  74     -11.234  -0.515   0.572  1.00  4.66          C   
+ATOM    594  NZ  LYS A  74     -12.725  -0.424   0.589  1.00  4.66          N   
+ATOM    595  N   ALA A  75      -6.218  -3.399  -3.444  1.00  4.66          N   
+ATOM    596  CA  ALA A  75      -5.851  -4.111  -4.666  1.00  4.66          C   
+ATOM    597  C   ALA A  75      -6.823  -5.253  -4.948  1.00  4.66          C   
+ATOM    598  CB  ALA A  75      -4.424  -4.644  -4.562  1.00  4.66          C   
+ATOM    599  O   ALA A  75      -7.332  -5.887  -4.021  1.00  4.66          O   
+ATOM    600  N   TYR A  76      -7.207  -5.295  -6.175  1.00  6.72          N   
+ATOM    601  CA  TYR A  76      -8.028  -6.438  -6.558  1.00  6.72          C   
+ATOM    602  C   TYR A  76      -7.576  -7.011  -7.896  1.00  6.72          C   
+ATOM    603  CB  TYR A  76      -9.505  -6.039  -6.633  1.00  6.72          C   
+ATOM    604  O   TYR A  76      -6.891  -6.335  -8.668  1.00  6.72          O   
+ATOM    605  CG  TYR A  76      -9.757  -4.799  -7.457  1.00  6.72          C   
+ATOM    606  CD1 TYR A  76     -10.045  -4.889  -8.817  1.00  6.72          C   
+ATOM    607  CD2 TYR A  76      -9.707  -3.536  -6.878  1.00  6.72          C   
+ATOM    608  CE1 TYR A  76     -10.276  -3.750  -9.580  1.00  6.72          C   
+ATOM    609  CE2 TYR A  76      -9.937  -2.389  -7.631  1.00  6.72          C   
+ATOM    610  OH  TYR A  76     -10.448  -1.375  -9.730  1.00  6.72          O   
+ATOM    611  CZ  TYR A  76     -10.220  -2.506  -8.979  1.00  6.72          C   
+ATOM    612  N   ARG A  77      -7.735  -8.365  -8.035  1.00  6.72          N   
+ATOM    613  CA  ARG A  77      -7.400  -9.083  -9.261  1.00  6.72          C   
+ATOM    614  C   ARG A  77      -8.658  -9.466 -10.033  1.00  6.72          C   
+ATOM    615  CB  ARG A  77      -6.578 -10.335  -8.944  1.00  6.72          C   
+ATOM    616  O   ARG A  77      -9.624  -9.964  -9.449  1.00  6.72          O   
+ATOM    617  CG  ARG A  77      -6.025 -11.036 -10.174  1.00  6.72          C   
+ATOM    618  CD  ARG A  77      -5.161 -12.233  -9.800  1.00  6.72          C   
+ATOM    619  NE  ARG A  77      -4.366 -12.698 -10.933  1.00  6.72          N   
+ATOM    620  NH1 ARG A  77      -3.944 -14.788 -10.043  1.00  6.72          N   
+ATOM    621  NH2 ARG A  77      -3.103 -14.221 -12.098  1.00  6.72          N   
+ATOM    622  CZ  ARG A  77      -3.806 -13.901 -11.022  1.00  6.72          C   
+ATOM    623  N   GLU A  78      -8.703  -8.968 -11.357  1.00  6.72          N   
+ATOM    624  CA  GLU A  78      -9.710  -9.433 -12.306  1.00  6.72          C   
+ATOM    625  C   GLU A  78      -9.072 -10.231 -13.440  1.00  6.72          C   
+ATOM    626  CB  GLU A  78     -10.500  -8.252 -12.875  1.00  6.72          C   
+ATOM    627  O   GLU A  78      -7.847 -10.344 -13.513  1.00  6.72          O   
+ATOM    628  CG  GLU A  78     -11.352  -7.528 -11.842  1.00  6.72          C   
+ATOM    629  CD  GLU A  78     -12.234  -6.446 -12.444  1.00  6.72          C   
+ATOM    630  OE1 GLU A  78     -12.957  -5.760 -11.686  1.00  6.72          O   
+ATOM    631  OE2 GLU A  78     -12.203  -6.283 -13.684  1.00  6.72          O   
+ATOM    632  N   LYS A  79      -9.991 -10.926 -14.239  1.00  6.72          N   
+ATOM    633  CA  LYS A  79      -9.539 -11.713 -15.383  1.00  6.72          C   
+ATOM    634  C   LYS A  79      -8.611 -10.898 -16.279  1.00  6.72          C   
+ATOM    635  CB  LYS A  79     -10.735 -12.221 -16.191  1.00  6.72          C   
+ATOM    636  O   LYS A  79      -7.610 -11.415 -16.778  1.00  6.72          O   
+ATOM    637  CG  LYS A  79     -10.419 -13.415 -17.079  1.00  6.72          C   
+ATOM    638  CD  LYS A  79     -11.665 -13.928 -17.790  1.00  6.72          C   
+ATOM    639  CE  LYS A  79     -11.329 -15.033 -18.782  1.00  6.72          C   
+ATOM    640  NZ  LYS A  79     -12.556 -15.601 -19.415  1.00  6.72          N   
+ATOM    641  N   SER A  80      -8.775  -9.596 -16.232  1.00  6.72          N   
+ATOM    642  CA  SER A  80      -8.111  -8.740 -17.209  1.00  6.72          C   
+ATOM    643  C   SER A  80      -6.887  -8.057 -16.606  1.00  6.72          C   
+ATOM    644  CB  SER A  80      -9.080  -7.685 -17.745  1.00  6.72          C   
+ATOM    645  O   SER A  80      -6.072  -7.482 -17.329  1.00  6.72          O   
+ATOM    646  OG  SER A  80      -9.634  -6.926 -16.684  1.00  6.72          O   
+ATOM    647  N   GLY A  81      -6.705  -8.234 -15.324  1.00  6.72          N   
+ATOM    648  CA  GLY A  81      -5.576  -7.527 -14.740  1.00  6.72          C   
+ATOM    649  C   GLY A  81      -5.757  -7.232 -13.263  1.00  6.72          C   
+ATOM    650  O   GLY A  81      -6.659  -7.775 -12.622  1.00  6.72          O   
+ATOM    651  N   VAL A  82      -4.698  -6.651 -12.655  1.00  6.72          N   
+ATOM    652  CA  VAL A  82      -4.661  -6.238 -11.256  1.00  6.72          C   
+ATOM    653  C   VAL A  82      -4.972  -4.747 -11.149  1.00  6.72          C   
+ATOM    654  CB  VAL A  82      -3.292  -6.545 -10.609  1.00  6.72          C   
+ATOM    655  O   VAL A  82      -4.465  -3.943 -11.935  1.00  6.72          O   
+ATOM    656  CG1 VAL A  82      -3.263  -6.076  -9.156  1.00  6.72          C   
+ATOM    657  CG2 VAL A  82      -2.983  -8.039 -10.698  1.00  6.72          C   
+ATOM    658  N   TYR A  83      -5.928  -4.428 -10.292  1.00  6.72          N   
+ATOM    659  CA  TYR A  83      -6.336  -3.045 -10.073  1.00  6.72          C   
+ATOM    660  C   TYR A  83      -5.965  -2.583  -8.668  1.00  6.72          C   
+ATOM    661  CB  TYR A  83      -7.843  -2.888 -10.293  1.00  6.72          C   
+ATOM    662  O   TYR A  83      -5.976  -3.376  -7.724  1.00  6.72          O   
+ATOM    663  CG  TYR A  83      -8.298  -3.276 -11.679  1.00  6.72          C   
+ATOM    664  CD1 TYR A  83      -8.526  -4.610 -12.011  1.00  6.72          C   
+ATOM    665  CD2 TYR A  83      -8.499  -2.311 -12.660  1.00  6.72          C   
+ATOM    666  CE1 TYR A  83      -8.942  -4.973 -13.287  1.00  6.72          C   
+ATOM    667  CE2 TYR A  83      -8.916  -2.662 -13.940  1.00  6.72          C   
+ATOM    668  OH  TYR A  83      -9.548  -4.347 -15.509  1.00  6.72          O   
+ATOM    669  CZ  TYR A  83      -9.135  -3.993 -14.243  1.00  6.72          C   
+ATOM    670  N   VAL A  84      -5.503  -1.346  -8.569  1.00  4.66          N   
+ATOM    671  CA  VAL A  84      -5.269  -0.727  -7.268  1.00  4.66          C   
+ATOM    672  C   VAL A  84      -6.170   0.496  -7.109  1.00  4.66          C   
+ATOM    673  CB  VAL A  84      -3.788  -0.325  -7.089  1.00  4.66          C   
+ATOM    674  O   VAL A  84      -6.240   1.343  -8.002  1.00  4.66          O   
+ATOM    675  CG1 VAL A  84      -3.573   0.352  -5.737  1.00  4.66          C   
+ATOM    676  CG2 VAL A  84      -2.884  -1.549  -7.227  1.00  4.66          C   
+ATOM    677  N   ARG A  85      -6.913   0.488  -6.095  1.00  6.72          N   
+ATOM    678  CA  ARG A  85      -7.754   1.633  -5.763  1.00  6.72          C   
+ATOM    679  C   ARG A  85      -7.206   2.383  -4.553  1.00  6.72          C   
+ATOM    680  CB  ARG A  85      -9.192   1.183  -5.492  1.00  6.72          C   
+ATOM    681  O   ARG A  85      -6.730   1.766  -3.597  1.00  6.72          O   
+ATOM    682  CG  ARG A  85     -10.184   2.329  -5.379  1.00  6.72          C   
+ATOM    683  CD  ARG A  85     -11.596   1.828  -5.108  1.00  6.72          C   
+ATOM    684  NE  ARG A  85     -12.400   1.796  -6.326  1.00  6.72          N   
+ATOM    685  NH1 ARG A  85     -14.250   0.839  -5.327  1.00  6.72          N   
+ATOM    686  NH2 ARG A  85     -14.283   1.347  -7.562  1.00  6.72          N   
+ATOM    687  CZ  ARG A  85     -13.643   1.327  -6.402  1.00  6.72          C   
+ATOM    688  N   THR A  86      -7.071   3.732  -4.691  1.00  6.72          N   
+ATOM    689  CA  THR A  86      -6.621   4.528  -3.555  1.00  6.72          C   
+ATOM    690  C   THR A  86      -7.733   5.453  -3.068  1.00  6.72          C   
+ATOM    691  CB  THR A  86      -5.376   5.361  -3.914  1.00  6.72          C   
+ATOM    692  O   THR A  86      -8.527   5.952  -3.868  1.00  6.72          O   
+ATOM    693  CG2 THR A  86      -4.246   4.471  -4.420  1.00  6.72          C   
+ATOM    694  OG1 THR A  86      -5.719   6.306  -4.935  1.00  6.72          O   
+ATOM    695  N   ASN A  87      -7.936   5.475  -1.707  1.00  6.72          N   
+ATOM    696  CA  ASN A  87      -8.831   6.444  -1.084  1.00  6.72          C   
+ATOM    697  C   ASN A  87      -8.087   7.347  -0.105  1.00  6.72          C   
+ATOM    698  CB  ASN A  87      -9.985   5.730  -0.376  1.00  6.72          C   
+ATOM    699  O   ASN A  87      -7.297   6.868   0.711  1.00  6.72          O   
+ATOM    700  CG  ASN A  87     -10.918   5.027  -1.342  1.00  6.72          C   
+ATOM    701  ND2 ASN A  87     -11.709   4.093  -0.828  1.00  6.72          N   
+ATOM    702  OD1 ASN A  87     -10.927   5.321  -2.540  1.00  6.72          O   
+ATOM    703  N   LYS A  88      -8.092   8.633  -0.265  1.00  6.72          N   
+ATOM    704  CA  LYS A  88      -7.558   9.565   0.724  1.00  6.72          C   
+ATOM    705  C   LYS A  88      -8.305   9.448   2.049  1.00  6.72          C   
+ATOM    706  CB  LYS A  88      -7.634  11.001   0.204  1.00  6.72          C   
+ATOM    707  O   LYS A  88      -9.536   9.505   2.081  1.00  6.72          O   
+ATOM    708  CG  LYS A  88      -6.902  12.014   1.072  1.00  6.72          C   
+ATOM    709  CD  LYS A  88      -6.972  13.415   0.478  1.00  6.72          C   
+ATOM    710  CE  LYS A  88      -6.293  14.439   1.377  1.00  6.72          C   
+ATOM    711  NZ  LYS A  88      -6.372  15.816   0.806  1.00  6.72          N   
+ATOM    712  N   LEU A  89      -7.493   9.040   3.089  1.00  6.72          N   
+ATOM    713  CA  LEU A  89      -8.056   8.925   4.430  1.00  6.72          C   
+ATOM    714  C   LEU A  89      -8.211  10.298   5.074  1.00  6.72          C   
+ATOM    715  CB  LEU A  89      -7.174   8.033   5.307  1.00  6.72          C   
+ATOM    716  O   LEU A  89      -7.367  11.177   4.884  1.00  6.72          O   
+ATOM    717  CG  LEU A  89      -7.197   6.537   4.993  1.00  6.72          C   
+ATOM    718  CD1 LEU A  89      -6.028   5.834   5.676  1.00  6.72          C   
+ATOM    719  CD2 LEU A  89      -8.523   5.920   5.422  1.00  6.72          C   
+ATOM    720  N   GLY A  90      -9.340  10.708   5.578  1.00  6.72          N   
+ATOM    721  CA  GLY A  90      -9.715  11.894   6.333  1.00  6.72          C   
+ATOM    722  C   GLY A  90     -10.588  12.851   5.544  1.00  6.72          C   
+ATOM    723  O   GLY A  90     -11.001  13.892   6.061  1.00  6.72          O   
+ATOM    724  N   PHE A  91     -10.821  12.471   4.312  1.00  8.64          N   
+ATOM    725  CA  PHE A  91     -11.769  13.293   3.569  1.00  8.64          C   
+ATOM    726  C   PHE A  91     -12.999  12.482   3.179  1.00  8.64          C   
+ATOM    727  CB  PHE A  91     -11.109  13.881   2.318  1.00  8.64          C   
+ATOM    728  O   PHE A  91     -12.889  11.479   2.471  1.00  8.64          O   
+ATOM    729  CG  PHE A  91     -10.275  15.103   2.589  1.00  8.64          C   
+ATOM    730  CD1 PHE A  91      -8.918  14.989   2.865  1.00  8.64          C   
+ATOM    731  CD2 PHE A  91     -10.848  16.368   2.568  1.00  8.64          C   
+ATOM    732  CE1 PHE A  91      -8.143  16.119   3.117  1.00  8.64          C   
+ATOM    733  CE2 PHE A  91     -10.081  17.502   2.818  1.00  8.64          C   
+ATOM    734  CZ  PHE A  91      -8.729  17.376   3.093  1.00  8.64          C   
+ATOM    735  N   GLU A  92     -13.879  12.165   4.125  1.00  8.64          N   
+ATOM    736  CA  GLU A  92     -15.112  11.423   3.881  1.00  8.64          C   
+ATOM    737  C   GLU A  92     -16.103  12.251   3.067  1.00  8.64          C   
+ATOM    738  CB  GLU A  92     -15.750  10.990   5.203  1.00  8.64          C   
+ATOM    739  O   GLU A  92     -16.591  13.281   3.535  1.00  8.64          O   
+ATOM    740  CG  GLU A  92     -15.244   9.651   5.721  1.00  8.64          C   
+ATOM    741  CD  GLU A  92     -15.990   9.164   6.954  1.00  8.64          C   
+ATOM    742  OE1 GLU A  92     -15.708   8.041   7.429  1.00  8.64          O   
+ATOM    743  OE2 GLU A  92     -16.864   9.911   7.447  1.00  8.64          O   
+ATOM    744  N   ASP A  93     -15.801  12.461   1.827  1.00  8.64          N   
+ATOM    745  CA  ASP A  93     -17.029  12.844   1.137  1.00  8.64          C   
+ATOM    746  C   ASP A  93     -17.790  11.614   0.648  1.00  8.64          C   
+ATOM    747  CB  ASP A  93     -16.717  13.772  -0.039  1.00  8.64          C   
+ATOM    748  O   ASP A  93     -17.320  10.899  -0.240  1.00  8.64          O   
+ATOM    749  CG  ASP A  93     -17.958  14.419  -0.628  1.00  8.64          C   
+ATOM    750  OD1 ASP A  93     -17.828  15.359  -1.442  1.00  8.64          O   
+ATOM    751  OD2 ASP A  93     -19.076  13.986  -0.274  1.00  8.64          O   
+ATOM    752  N   PRO A  94     -18.711  11.191   1.508  1.00  8.64          N   
+ATOM    753  CA  PRO A  94     -19.501  10.003   1.175  1.00  8.64          C   
+ATOM    754  C   PRO A  94     -20.029  10.028  -0.257  1.00  8.64          C   
+ATOM    755  CB  PRO A  94     -20.652  10.050   2.183  1.00  8.64          C   
+ATOM    756  O   PRO A  94     -20.234   8.972  -0.862  1.00  8.64          O   
+ATOM    757  CG  PRO A  94     -20.438  11.316   2.948  1.00  8.64          C   
+ATOM    758  CD  PRO A  94     -19.181  11.969   2.449  1.00  8.64          C   
+ATOM    759  N   LYS A  95     -19.825  11.145  -1.002  1.00  8.64          N   
+ATOM    760  CA  LYS A  95     -20.410  11.170  -2.340  1.00  8.64          C   
+ATOM    761  C   LYS A  95     -19.342  11.416  -3.402  1.00  8.64          C   
+ATOM    762  CB  LYS A  95     -21.496  12.243  -2.431  1.00  8.64          C   
+ATOM    763  O   LYS A  95     -19.636  11.407  -4.599  1.00  8.64          O   
+ATOM    764  CG  LYS A  95     -22.740  11.936  -1.610  1.00  8.64          C   
+ATOM    765  CD  LYS A  95     -23.832  12.972  -1.841  1.00  8.64          C   
+ATOM    766  CE  LYS A  95     -25.054  12.701  -0.973  1.00  8.64          C   
+ATOM    767  NZ  LYS A  95     -26.134  13.705  -1.208  1.00  8.64          N   
+ATOM    768  N   SER A  96     -18.077  11.513  -2.983  1.00  8.64          N   
+ATOM    769  CA  SER A  96     -17.157  11.939  -4.032  1.00  8.64          C   
+ATOM    770  C   SER A  96     -16.418  10.749  -4.635  1.00  8.64          C   
+ATOM    771  CB  SER A  96     -16.149  12.950  -3.483  1.00  8.64          C   
+ATOM    772  O   SER A  96     -15.813   9.955  -3.912  1.00  8.64          O   
+ATOM    773  OG  SER A  96     -14.940  12.907  -4.222  1.00  8.64          O   
+ATOM    774  N   PHE A  97     -16.938  10.059  -5.545  1.00  8.64          N   
+ATOM    775  CA  PHE A  97     -16.265   9.188  -6.501  1.00  8.64          C   
+ATOM    776  C   PHE A  97     -14.975   9.827  -7.000  1.00  8.64          C   
+ATOM    777  CB  PHE A  97     -17.186   8.871  -7.683  1.00  8.64          C   
+ATOM    778  O   PHE A  97     -14.111   9.144  -7.554  1.00  8.64          O   
+ATOM    779  CG  PHE A  97     -18.358   7.998  -7.322  1.00  8.64          C   
+ATOM    780  CD1 PHE A  97     -19.593   8.558  -7.018  1.00  8.64          C   
+ATOM    781  CD2 PHE A  97     -18.224   6.616  -7.288  1.00  8.64          C   
+ATOM    782  CE1 PHE A  97     -20.679   7.752  -6.684  1.00  8.64          C   
+ATOM    783  CE2 PHE A  97     -19.305   5.804  -6.955  1.00  8.64          C   
+ATOM    784  CZ  PHE A  97     -20.531   6.375  -6.652  1.00  8.64          C   
+ATOM    785  N   LEU A  98     -14.602  11.045  -6.442  1.00  8.64          N   
+ATOM    786  CA  LEU A  98     -13.538  11.768  -7.129  1.00  8.64          C   
+ATOM    787  C   LEU A  98     -12.193  11.530  -6.451  1.00  8.64          C   
+ATOM    788  CB  LEU A  98     -13.845  13.267  -7.166  1.00  8.64          C   
+ATOM    789  O   LEU A  98     -11.141  11.781  -7.043  1.00  8.64          O   
+ATOM    790  CG  LEU A  98     -14.980  13.704  -8.094  1.00  8.64          C   
+ATOM    791  CD1 LEU A  98     -15.347  15.161  -7.833  1.00  8.64          C   
+ATOM    792  CD2 LEU A  98     -14.586  13.500  -9.553  1.00  8.64          C   
+ATOM    793  N   SER A  99     -12.192  10.556  -5.446  1.00  8.64          N   
+ATOM    794  CA  SER A  99     -10.815  10.410  -4.984  1.00  8.64          C   
+ATOM    795  C   SER A  99     -10.321   8.979  -5.164  1.00  8.64          C   
+ATOM    796  CB  SER A  99     -10.696  10.819  -3.515  1.00  8.64          C   
+ATOM    797  O   SER A  99      -9.273   8.607  -4.630  1.00  8.64          O   
+ATOM    798  OG  SER A  99     -11.600  10.080  -2.712  1.00  8.64          O   
+ATOM    799  N   ILE A 100     -11.121   8.337  -6.116  1.00  6.72          N   
+ATOM    800  CA  ILE A 100     -10.638   6.974  -6.304  1.00  6.72          C   
+ATOM    801  C   ILE A 100      -9.891   6.870  -7.632  1.00  6.72          C   
+ATOM    802  CB  ILE A 100     -11.796   5.953  -6.259  1.00  6.72          C   
+ATOM    803  O   ILE A 100     -10.389   7.318  -8.668  1.00  6.72          O   
+ATOM    804  CG1 ILE A 100     -12.507   6.010  -4.902  1.00  6.72          C   
+ATOM    805  CG2 ILE A 100     -11.282   4.539  -6.549  1.00  6.72          C   
+ATOM    806  CD1 ILE A 100     -13.793   5.197  -4.841  1.00  6.72          C   
+ATOM    807  N   LYS A 101      -8.620   6.701  -7.581  1.00  6.72          N   
+ATOM    808  CA  LYS A 101      -7.845   6.403  -8.782  1.00  6.72          C   
+ATOM    809  C   LYS A 101      -7.608   4.902  -8.924  1.00  6.72          C   
+ATOM    810  CB  LYS A 101      -6.507   7.144  -8.756  1.00  6.72          C   
+ATOM    811  O   LYS A 101      -7.289   4.223  -7.946  1.00  6.72          O   
+ATOM    812  CG  LYS A 101      -6.629   8.647  -8.958  1.00  6.72          C   
+ATOM    813  CD  LYS A 101      -5.263   9.304  -9.110  1.00  6.72          C   
+ATOM    814  CE  LYS A 101      -5.380  10.815  -9.257  1.00  6.72          C   
+ATOM    815  NZ  LYS A 101      -4.046  11.459  -9.443  1.00  6.72          N   
+ATOM    816  N   GLU A 102      -8.161   4.357  -9.913  1.00  8.64          N   
+ATOM    817  CA  GLU A 102      -7.946   2.952 -10.245  1.00  8.64          C   
+ATOM    818  C   GLU A 102      -6.847   2.794 -11.292  1.00  8.64          C   
+ATOM    819  CB  GLU A 102      -9.244   2.312 -10.744  1.00  8.64          C   
+ATOM    820  O   GLU A 102      -6.808   3.537 -12.275  1.00  8.64          O   
+ATOM    821  CG  GLU A 102      -9.192   0.793 -10.818  1.00  8.64          C   
+ATOM    822  CD  GLU A 102     -10.515   0.167 -11.229  1.00  8.64          C   
+ATOM    823  OE1 GLU A 102     -10.588  -0.435 -12.325  1.00  8.64          O   
+ATOM    824  OE2 GLU A 102     -11.488   0.280 -10.449  1.00  8.64          O   
+ATOM    825  N   TYR A 103      -5.920   1.999 -10.999  1.00  6.72          N   
+ATOM    826  CA  TYR A 103      -4.857   1.671 -11.943  1.00  6.72          C   
+ATOM    827  C   TYR A 103      -5.001   0.241 -12.451  1.00  6.72          C   
+ATOM    828  CB  TYR A 103      -3.483   1.857 -11.292  1.00  6.72          C   
+ATOM    829  O   TYR A 103      -5.256  -0.679 -11.670  1.00  6.72          O   
+ATOM    830  CG  TYR A 103      -3.244   3.253 -10.767  1.00  6.72          C   
+ATOM    831  CD1 TYR A 103      -3.589   3.595  -9.462  1.00  6.72          C   
+ATOM    832  CD2 TYR A 103      -2.676   4.231 -11.576  1.00  6.72          C   
+ATOM    833  CE1 TYR A 103      -3.372   4.880  -8.975  1.00  6.72          C   
+ATOM    834  CE2 TYR A 103      -2.455   5.519 -11.100  1.00  6.72          C   
+ATOM    835  OH  TYR A 103      -2.589   7.107  -9.323  1.00  6.72          O   
+ATOM    836  CZ  TYR A 103      -2.805   5.833  -9.800  1.00  6.72          C   
+ATOM    837  N   LYS A 104      -5.083  -0.004 -13.802  1.00  8.64          N   
+ATOM    838  CA  LYS A 104      -5.140  -1.339 -14.393  1.00  8.64          C   
+ATOM    839  C   LYS A 104      -3.759  -1.796 -14.852  1.00  8.64          C   
+ATOM    840  CB  LYS A 104      -6.119  -1.364 -15.568  1.00  8.64          C   
+ATOM    841  O   LYS A 104      -3.042  -1.048 -15.520  1.00  8.64          O   
+ATOM    842  CG  LYS A 104      -6.341  -2.749 -16.158  1.00  8.64          C   
+ATOM    843  CD  LYS A 104      -7.313  -2.708 -17.331  1.00  8.64          C   
+ATOM    844  CE  LYS A 104      -7.429  -4.065 -18.010  1.00  8.64          C   
+ATOM    845  NZ  LYS A 104      -8.354  -4.022 -19.181  1.00  8.64          N   
+ATOM    846  N   PHE A 105      -3.346  -2.868 -14.276  1.00  8.64          N   
+ATOM    847  CA  PHE A 105      -2.144  -3.522 -14.782  1.00  8.64          C   
+ATOM    848  C   PHE A 105      -2.504  -4.749 -15.611  1.00  8.64          C   
+ATOM    849  CB  PHE A 105      -1.221  -3.921 -13.626  1.00  8.64          C   
+ATOM    850  O   PHE A 105      -3.367  -5.537 -15.220  1.00  8.64          O   
+ATOM    851  CG  PHE A 105      -0.739  -2.756 -12.804  1.00  8.64          C   
+ATOM    852  CD1 PHE A 105      -1.429  -2.357 -11.666  1.00  8.64          C   
+ATOM    853  CD2 PHE A 105       0.405  -2.059 -13.171  1.00  8.64          C   
+ATOM    854  CE1 PHE A 105      -0.985  -1.279 -10.904  1.00  8.64          C   
+ATOM    855  CE2 PHE A 105       0.855  -0.981 -12.414  1.00  8.64          C   
+ATOM    856  CZ  PHE A 105       0.158  -0.592 -11.282  1.00  8.64          C   
+ATOM    857  N   GLY A 106      -2.172  -4.885 -16.945  1.00  8.64          N   
+ATOM    858  CA  GLY A 106      -2.470  -5.978 -17.858  1.00  8.64          C   
+ATOM    859  C   GLY A 106      -1.496  -7.136 -17.740  1.00  8.64          C   
+ATOM    860  O   GLY A 106      -0.364  -6.957 -17.287  1.00  8.64          O   
+ATOM    861  N   THR A 107      -1.964  -8.404 -17.592  1.00  8.64          N   
+ATOM    862  CA  THR A 107      -1.518  -9.786 -17.454  1.00  8.64          C   
+ATOM    863  C   THR A 107      -0.972 -10.313 -18.777  1.00  8.64          C   
+ATOM    864  CB  THR A 107      -2.662 -10.696 -16.969  1.00  8.64          C   
+ATOM    865  O   THR A 107      -0.155 -11.237 -18.794  1.00  8.64          O   
+ATOM    866  CG2 THR A 107      -2.988 -10.435 -15.502  1.00  8.64          C   
+ATOM    867  OG1 THR A 107      -3.831 -10.446 -17.758  1.00  8.64          O   
+ATOM    868  N   ARG A 108      -0.421  -9.500 -19.707  1.00  8.64          N   
+ATOM    869  CA  ARG A 108       0.415 -10.048 -20.770  1.00  8.64          C   
+ATOM    870  C   ARG A 108       0.370  -9.165 -22.012  1.00  8.64          C   
+ATOM    871  CB  ARG A 108      -0.025 -11.471 -21.121  1.00  8.64          C   
+ATOM    872  O   ARG A 108       1.162  -9.347 -22.939  1.00  8.64          O   
+ATOM    873  CG  ARG A 108       0.888 -12.553 -20.567  1.00  8.64          C   
+ATOM    874  CD  ARG A 108       0.437 -13.943 -20.992  1.00  8.64          C   
+ATOM    875  NE  ARG A 108       1.440 -14.956 -20.674  1.00  8.64          N   
+ATOM    876  NH1 ARG A 108       0.214 -16.728 -21.506  1.00  8.64          N   
+ATOM    877  NH2 ARG A 108       2.286 -17.089 -20.593  1.00  8.64          N   
+ATOM    878  CZ  ARG A 108       1.311 -16.255 -20.925  1.00  8.64          C   
+ATOM    879  N   THR A 109       0.007  -7.906 -21.921  1.00  8.64          N   
+ATOM    880  CA  THR A 109       0.199  -7.193 -23.179  1.00  8.64          C   
+ATOM    881  C   THR A 109       0.557  -5.731 -22.923  1.00  8.64          C   
+ATOM    882  CB  THR A 109      -1.060  -7.269 -24.063  1.00  8.64          C   
+ATOM    883  O   THR A 109      -0.113  -5.050 -22.143  1.00  8.64          O   
+ATOM    884  CG2 THR A 109      -1.194  -8.643 -24.711  1.00  8.64          C   
+ATOM    885  OG1 THR A 109      -2.218  -7.018 -23.257  1.00  8.64          O   
+ATOM    886  N   GLY A 110       1.725  -5.448 -22.409  1.00  8.64          N   
+ATOM    887  CA  GLY A 110       2.620  -4.305 -22.494  1.00  8.64          C   
+ATOM    888  C   GLY A 110       1.933  -3.044 -22.984  1.00  8.64          C   
+ATOM    889  O   GLY A 110       1.499  -2.976 -24.136  1.00  8.64          O   
+ATOM    890  N   GLY A 111       0.749  -2.551 -22.421  1.00  8.64          N   
+ATOM    891  CA  GLY A 111       0.179  -1.258 -22.766  1.00  8.64          C   
+ATOM    892  C   GLY A 111       1.093  -0.094 -22.431  1.00  8.64          C   
+ATOM    893  O   GLY A 111       1.993  -0.225 -21.598  1.00  8.64          O   
+ATOM    894  N   ASN A 112       1.646   0.666 -23.583  1.00  8.64          N   
+ATOM    895  CA  ASN A 112       2.351   1.904 -23.896  1.00  8.64          C   
+ATOM    896  C   ASN A 112       2.500   2.792 -22.664  1.00  8.64          C   
+ATOM    897  CB  ASN A 112       1.633   2.664 -25.014  1.00  8.64          C   
+ATOM    898  O   ASN A 112       1.528   3.028 -21.943  1.00  8.64          O   
+ATOM    899  CG  ASN A 112       1.795   2.002 -26.368  1.00  8.64          C   
+ATOM    900  ND2 ASN A 112       0.868   2.277 -27.278  1.00  8.64          N   
+ATOM    901  OD1 ASN A 112       2.746   1.248 -26.594  1.00  8.64          O   
+ATOM    902  N   PHE A 113       3.510   2.618 -21.947  1.00  8.64          N   
+ATOM    903  CA  PHE A 113       4.082   3.644 -21.083  1.00  8.64          C   
+ATOM    904  C   PHE A 113       4.194   4.972 -21.821  1.00  8.64          C   
+ATOM    905  CB  PHE A 113       5.459   3.211 -20.570  1.00  8.64          C   
+ATOM    906  O   PHE A 113       4.651   5.016 -22.966  1.00  8.64          O   
+ATOM    907  CG  PHE A 113       5.526   3.047 -19.075  1.00  8.64          C   
+ATOM    908  CD1 PHE A 113       5.224   1.827 -18.482  1.00  8.64          C   
+ATOM    909  CD2 PHE A 113       5.890   4.113 -18.264  1.00  8.64          C   
+ATOM    910  CE1 PHE A 113       5.285   1.672 -17.099  1.00  8.64          C   
+ATOM    911  CE2 PHE A 113       5.953   3.966 -16.881  1.00  8.64          C   
+ATOM    912  CZ  PHE A 113       5.649   2.745 -16.300  1.00  8.64          C   
+ATOM    913  N   THR A 114       3.305   5.791 -21.704  1.00  8.64          N   
+ATOM    914  CA  THR A 114       3.524   7.113 -22.280  1.00  8.64          C   
+ATOM    915  C   THR A 114       4.409   7.959 -21.369  1.00  8.64          C   
+ATOM    916  CB  THR A 114       2.190   7.843 -22.526  1.00  8.64          C   
+ATOM    917  O   THR A 114       4.850   9.044 -21.756  1.00  8.64          O   
+ATOM    918  CG2 THR A 114       1.348   7.113 -23.568  1.00  8.64          C   
+ATOM    919  OG1 THR A 114       1.456   7.913 -21.298  1.00  8.64          O   
+ATOM    920  N   GLY A 115       5.268   7.248 -20.677  1.00  8.64          N   
+ATOM    921  CA  GLY A 115       6.263   8.086 -20.027  1.00  8.64          C   
+ATOM    922  C   GLY A 115       7.507   7.322 -19.614  1.00  8.64          C   
+ATOM    923  O   GLY A 115       7.525   6.090 -19.647  1.00  8.64          O   
+ATOM    924  N   GLU A 116       8.641   7.657 -20.084  1.00  8.64          N   
+ATOM    925  CA  GLU A 116       9.970   7.216 -19.672  1.00  8.64          C   
+ATOM    926  C   GLU A 116      10.120   7.260 -18.154  1.00  8.64          C   
+ATOM    927  CB  GLU A 116      11.051   8.077 -20.332  1.00  8.64          C   
+ATOM    928  O   GLU A 116       9.646   8.194 -17.505  1.00  8.64          O   
+ATOM    929  CG  GLU A 116      11.400   7.645 -21.749  1.00  8.64          C   
+ATOM    930  CD  GLU A 116      12.569   8.417 -22.341  1.00  8.64          C   
+ATOM    931  OE1 GLU A 116      12.995   8.099 -23.474  1.00  8.64          O   
+ATOM    932  OE2 GLU A 116      13.062   9.347 -21.665  1.00  8.64          O   
+ATOM    933  N   LEU A 117      10.088   5.989 -17.564  1.00  8.64          N   
+ATOM    934  CA  LEU A 117      10.578   5.973 -16.190  1.00  8.64          C   
+ATOM    935  C   LEU A 117      12.036   6.415 -16.127  1.00  8.64          C   
+ATOM    936  CB  LEU A 117      10.430   4.575 -15.584  1.00  8.64          C   
+ATOM    937  O   LEU A 117      12.809   6.155 -17.053  1.00  8.64          O   
+ATOM    938  CG  LEU A 117       9.001   4.097 -15.323  1.00  8.64          C   
+ATOM    939  CD1 LEU A 117       8.989   2.601 -15.025  1.00  8.64          C   
+ATOM    940  CD2 LEU A 117       8.376   4.881 -14.175  1.00  8.64          C   
+ATOM    941  N   THR A 118      12.196   7.278 -15.327  1.00  8.64          N   
+ATOM    942  CA  THR A 118      13.590   7.626 -15.076  1.00  8.64          C   
+ATOM    943  C   THR A 118      14.353   6.432 -14.511  1.00  8.64          C   
+ATOM    944  CB  THR A 118      13.702   8.816 -14.105  1.00  8.64          C   
+ATOM    945  O   THR A 118      13.747   5.457 -14.061  1.00  8.64          O   
+ATOM    946  CG2 THR A 118      12.896  10.011 -14.604  1.00  8.64          C   
+ATOM    947  OG1 THR A 118      13.207   8.424 -12.818  1.00  8.64          O   
+ATOM    948  N   LYS A 119      15.698   6.199 -14.938  1.00  8.64          N   
+ATOM    949  CA  LYS A 119      16.574   5.167 -14.391  1.00  8.64          C   
+ATOM    950  C   LYS A 119      16.371   5.015 -12.886  1.00  8.64          C   
+ATOM    951  CB  LYS A 119      18.038   5.489 -14.693  1.00  8.64          C   
+ATOM    952  O   LYS A 119      16.303   3.897 -12.373  1.00  8.64          O   
+ATOM    953  CG  LYS A 119      18.973   4.296 -14.566  1.00  8.64          C   
+ATOM    954  CD  LYS A 119      20.389   4.646 -15.006  1.00  8.64          C   
+ATOM    955  CE  LYS A 119      21.344   3.477 -14.803  1.00  8.64          C   
+ATOM    956  NZ  LYS A 119      22.724   3.802 -15.272  1.00  8.64          N   
+ATOM    957  N   GLN A 120      16.211   6.129 -12.176  1.00  8.64          N   
+ATOM    958  CA  GLN A 120      16.025   6.126 -10.729  1.00  8.64          C   
+ATOM    959  C   GLN A 120      14.683   5.507 -10.349  1.00  8.64          C   
+ATOM    960  CB  GLN A 120      16.124   7.547 -10.171  1.00  8.64          C   
+ATOM    961  O   GLN A 120      14.600   4.729  -9.396  1.00  8.64          O   
+ATOM    962  CG  GLN A 120      17.540   7.960  -9.792  1.00  8.64          C   
+ATOM    963  CD  GLN A 120      17.891   9.357 -10.270  1.00  8.64          C   
+ATOM    964  NE2 GLN A 120      19.145   9.751 -10.077  1.00  8.64          N   
+ATOM    965  OE1 GLN A 120      17.043  10.074 -10.809  1.00  8.64          O   
+ATOM    966  N   GLU A 121      13.628   5.733 -11.076  1.00  8.64          N   
+ATOM    967  CA  GLU A 121      12.298   5.200 -10.795  1.00  8.64          C   
+ATOM    968  C   GLU A 121      12.253   3.689 -11.006  1.00  8.64          C   
+ATOM    969  CB  GLU A 121      11.248   5.885 -11.674  1.00  8.64          C   
+ATOM    970  O   GLU A 121      11.648   2.965 -10.213  1.00  8.64          O   
+ATOM    971  CG  GLU A 121      10.953   7.323 -11.272  1.00  8.64          C   
+ATOM    972  CD  GLU A 121      10.094   8.064 -12.284  1.00  8.64          C   
+ATOM    973  OE1 GLU A 121       9.364   9.002 -11.889  1.00  8.64          O   
+ATOM    974  OE2 GLU A 121      10.149   7.704 -13.481  1.00  8.64          O   
+ATOM    975  N   LEU A 122      12.979   3.340 -12.063  1.00  8.64          N   
+ATOM    976  CA  LEU A 122      13.046   1.913 -12.359  1.00  8.64          C   
+ATOM    977  C   LEU A 122      13.813   1.168 -11.272  1.00  8.64          C   
+ATOM    978  CB  LEU A 122      13.709   1.678 -13.719  1.00  8.64          C   
+ATOM    979  O   LEU A 122      13.397   0.090 -10.840  1.00  8.64          O   
+ATOM    980  CG  LEU A 122      12.936   0.805 -14.709  1.00  8.64          C   
+ATOM    981  CD1 LEU A 122      12.751   1.540 -16.032  1.00  8.64          C   
+ATOM    982  CD2 LEU A 122      13.653  -0.523 -14.925  1.00  8.64          C   
+ATOM    983  N   VAL A 123      14.840   1.780 -10.710  1.00  8.64          N   
+ATOM    984  CA  VAL A 123      15.653   1.191  -9.651  1.00  8.64          C   
+ATOM    985  C   VAL A 123      14.832   1.085  -8.368  1.00  8.64          C   
+ATOM    986  CB  VAL A 123      16.936   2.013  -9.397  1.00  8.64          C   
+ATOM    987  O   VAL A 123      14.826   0.040  -7.712  1.00  8.64          O   
+ATOM    988  CG1 VAL A 123      17.646   1.529  -8.134  1.00  8.64          C   
+ATOM    989  CG2 VAL A 123      17.870   1.931 -10.603  1.00  8.64          C   
+ATOM    990  N   TYR A 124      14.059   2.039  -8.098  1.00  8.64          N   
+ATOM    991  CA  TYR A 124      13.254   2.069  -6.881  1.00  8.64          C   
+ATOM    992  C   TYR A 124      12.121   1.051  -6.952  1.00  8.64          C   
+ATOM    993  CB  TYR A 124      12.683   3.471  -6.649  1.00  8.64          C   
+ATOM    994  O   TYR A 124      11.855   0.342  -5.979  1.00  8.64          O   
+ATOM    995  CG  TYR A 124      13.673   4.438  -6.047  1.00  8.64          C   
+ATOM    996  CD1 TYR A 124      13.975   5.640  -6.682  1.00  8.64          C   
+ATOM    997  CD2 TYR A 124      14.309   4.151  -4.844  1.00  8.64          C   
+ATOM    998  CE1 TYR A 124      14.889   6.534  -6.133  1.00  8.64          C   
+ATOM    999  CE2 TYR A 124      15.225   5.037  -4.286  1.00  8.64          C   
+ATOM   1000  OH  TYR A 124      16.413   7.105  -4.387  1.00  8.64          O   
+ATOM   1001  CZ  TYR A 124      15.507   6.224  -4.936  1.00  8.64          C   
+ATOM   1002  N   THR A 125      11.428   1.001  -8.096  1.00  6.72          N   
+ATOM   1003  CA  THR A 125      10.313   0.078  -8.276  1.00  6.72          C   
+ATOM   1004  C   THR A 125      10.789  -1.369  -8.188  1.00  6.72          C   
+ATOM   1005  CB  THR A 125       9.609   0.308  -9.626  1.00  6.72          C   
+ATOM   1006  O   THR A 125      10.169  -2.192  -7.510  1.00  6.72          O   
+ATOM   1007  CG2 THR A 125       8.382  -0.585  -9.767  1.00  6.72          C   
+ATOM   1008  OG1 THR A 125       9.202   1.679  -9.718  1.00  6.72          O   
+ATOM   1009  N   ASN A 126      11.985  -1.576  -8.827  1.00  8.64          N   
+ATOM   1010  CA  ASN A 126      12.563  -2.916  -8.803  1.00  8.64          C   
+ATOM   1011  C   ASN A 126      13.002  -3.311  -7.396  1.00  8.64          C   
+ATOM   1012  CB  ASN A 126      13.742  -3.009  -9.773  1.00  8.64          C   
+ATOM   1013  O   ASN A 126      12.771  -4.442  -6.965  1.00  8.64          O   
+ATOM   1014  CG  ASN A 126      13.310  -3.334 -11.189  1.00  8.64          C   
+ATOM   1015  ND2 ASN A 126      14.170  -3.035 -12.156  1.00  8.64          N   
+ATOM   1016  OD1 ASN A 126      12.211  -3.848 -11.413  1.00  8.64          O   
+ATOM   1017  N   GLN A 127      13.590  -2.342  -6.627  1.00  8.64          N   
+ATOM   1018  CA  GLN A 127      14.004  -2.576  -5.247  1.00  8.64          C   
+ATOM   1019  C   GLN A 127      12.798  -2.827  -4.346  1.00  8.64          C   
+ATOM   1020  CB  GLN A 127      14.814  -1.390  -4.721  1.00  8.64          C   
+ATOM   1021  O   GLN A 127      12.824  -3.725  -3.501  1.00  8.64          O   
+ATOM   1022  CG  GLN A 127      16.303  -1.478  -5.029  1.00  8.64          C   
+ATOM   1023  CD  GLN A 127      17.083  -0.291  -4.496  1.00  8.64          C   
+ATOM   1024  NE2 GLN A 127      18.405  -0.421  -4.454  1.00  8.64          N   
+ATOM   1025  OE1 GLN A 127      16.503   0.734  -4.125  1.00  8.64          O   
+ATOM   1026  N   TRP A 128      11.824  -2.167  -4.535  1.00  6.72          N   
+ATOM   1027  CA  TRP A 128      10.602  -2.286  -3.746  1.00  6.72          C   
+ATOM   1028  C   TRP A 128       9.926  -3.632  -3.989  1.00  6.72          C   
+ATOM   1029  CB  TRP A 128       9.634  -1.147  -4.077  1.00  6.72          C   
+ATOM   1030  O   TRP A 128       9.562  -4.331  -3.040  1.00  6.72          O   
+ATOM   1031  CG  TRP A 128       8.375  -1.162  -3.264  1.00  6.72          C   
+ATOM   1032  CD1 TRP A 128       8.207  -0.675  -1.997  1.00  6.72          C   
+ATOM   1033  CD2 TRP A 128       7.108  -1.696  -3.661  1.00  6.72          C   
+ATOM   1034  CE2 TRP A 128       6.216  -1.497  -2.584  1.00  6.72          C   
+ATOM   1035  CE3 TRP A 128       6.641  -2.322  -4.824  1.00  6.72          C   
+ATOM   1036  NE1 TRP A 128       6.910  -0.874  -1.583  1.00  6.72          N   
+ATOM   1037  CH2 TRP A 128       4.449  -2.515  -3.786  1.00  6.72          C   
+ATOM   1038  CZ2 TRP A 128       4.880  -1.904  -2.637  1.00  6.72          C   
+ATOM   1039  CZ3 TRP A 128       5.311  -2.726  -4.874  1.00  6.72          C   
+ATOM   1040  N   VAL A 129       9.837  -4.041  -5.286  1.00  6.72          N   
+ATOM   1041  CA  VAL A 129       9.170  -5.280  -5.670  1.00  6.72          C   
+ATOM   1042  C   VAL A 129       9.963  -6.477  -5.149  1.00  6.72          C   
+ATOM   1043  CB  VAL A 129       8.999  -5.381  -7.203  1.00  6.72          C   
+ATOM   1044  O   VAL A 129       9.389  -7.411  -4.585  1.00  6.72          O   
+ATOM   1045  CG1 VAL A 129       8.505  -6.771  -7.600  1.00  6.72          C   
+ATOM   1046  CG2 VAL A 129       8.036  -4.306  -7.703  1.00  6.72          C   
+ATOM   1047  N   ASN A 130      11.351  -6.333  -5.277  1.00  8.64          N   
+ATOM   1048  CA  ASN A 130      12.247  -7.407  -4.861  1.00  8.64          C   
+ATOM   1049  C   ASN A 130      12.259  -7.571  -3.344  1.00  8.64          C   
+ATOM   1050  CB  ASN A 130      13.664  -7.155  -5.379  1.00  8.64          C   
+ATOM   1051  O   ASN A 130      12.263  -8.695  -2.837  1.00  8.64          O   
+ATOM   1052  CG  ASN A 130      13.854  -7.617  -6.810  1.00  8.64          C   
+ATOM   1053  ND2 ASN A 130      14.863  -7.073  -7.481  1.00  8.64          N   
+ATOM   1054  OD1 ASN A 130      13.100  -8.457  -7.309  1.00  8.64          O   
+ATOM   1055  N   GLU A 131      12.069  -6.443  -2.521  1.00  8.64          N   
+ATOM   1056  CA  GLU A 131      12.094  -6.449  -1.061  1.00  8.64          C   
+ATOM   1057  C   GLU A 131      10.759  -6.913  -0.488  1.00  8.64          C   
+ATOM   1058  CB  GLU A 131      12.442  -5.058  -0.524  1.00  8.64          C   
+ATOM   1059  O   GLU A 131      10.721  -7.591   0.541  1.00  8.64          O   
+ATOM   1060  CG  GLU A 131      13.913  -4.694  -0.665  1.00  8.64          C   
+ATOM   1061  CD  GLU A 131      14.234  -3.292  -0.171  1.00  8.64          C   
+ATOM   1062  OE1 GLU A 131      15.414  -2.879  -0.244  1.00  8.64          O   
+ATOM   1063  OE2 GLU A 131      13.299  -2.603   0.293  1.00  8.64          O   
+ATOM   1064  N   ASN A 132       9.736  -6.720  -1.184  1.00  8.64          N   
+ATOM   1065  CA  ASN A 132       8.429  -6.916  -0.566  1.00  8.64          C   
+ATOM   1066  C   ASN A 132       7.786  -8.224  -1.016  1.00  8.64          C   
+ATOM   1067  CB  ASN A 132       7.506  -5.736  -0.876  1.00  8.64          C   
+ATOM   1068  O   ASN A 132       7.067  -8.865  -0.247  1.00  8.64          O   
+ATOM   1069  CG  ASN A 132       7.833  -4.505  -0.054  1.00  8.64          C   
+ATOM   1070  ND2 ASN A 132       8.463  -3.521  -0.684  1.00  8.64          N   
+ATOM   1071  OD1 ASN A 132       7.524  -4.440   1.139  1.00  8.64          O   
+ATOM   1072  N   ILE A 133       8.282  -8.675  -2.231  1.00  8.64          N   
+ATOM   1073  CA  ILE A 133       7.755  -9.943  -2.723  1.00  8.64          C   
+ATOM   1074  C   ILE A 133       8.504 -11.102  -2.068  1.00  8.64          C   
+ATOM   1075  CB  ILE A 133       7.858 -10.039  -4.261  1.00  8.64          C   
+ATOM   1076  O   ILE A 133       7.902 -12.121  -1.721  1.00  8.64          O   
+ATOM   1077  CG1 ILE A 133       6.915  -9.029  -4.924  1.00  8.64          C   
+ATOM   1078  CG2 ILE A 133       7.555 -11.464  -4.735  1.00  8.64          C   
+ATOM   1079  CD1 ILE A 133       7.015  -8.993  -6.443  1.00  8.64          C   
+ATOM   1080  N   THR A 134       9.730 -10.791  -1.686  1.00  8.64          N   
+ATOM   1081  CA  THR A 134      10.543 -11.821  -1.050  1.00  8.64          C   
+ATOM   1082  C   THR A 134      10.104 -12.041   0.394  1.00  8.64          C   
+ATOM   1083  CB  THR A 134      12.038 -11.453  -1.085  1.00  8.64          C   
+ATOM   1084  O   THR A 134      10.048 -13.179   0.865  1.00  8.64          O   
+ATOM   1085  CG2 THR A 134      12.910 -12.668  -0.785  1.00  8.64          C   
+ATOM   1086  OG1 THR A 134      12.370 -10.951  -2.386  1.00  8.64          O   
+ATOM   1087  N   LEU A 135       9.481 -11.013   1.084  1.00  8.64          N   
+ATOM   1088  CA  LEU A 135       9.061 -11.103   2.479  1.00  8.64          C   
+ATOM   1089  C   LEU A 135       7.653 -11.678   2.586  1.00  8.64          C   
+ATOM   1090  CB  LEU A 135       9.114  -9.726   3.145  1.00  8.64          C   
+ATOM   1091  O   LEU A 135       7.369 -12.474   3.484  1.00  8.64          O   
+ATOM   1092  CG  LEU A 135      10.480  -9.278   3.668  1.00  8.64          C   
+ATOM   1093  CD1 LEU A 135      10.532  -7.758   3.780  1.00  8.64          C   
+ATOM   1094  CD2 LEU A 135      10.777  -9.929   5.014  1.00  8.64          C   
+ATOM   1095  N   ALA A 136       6.896 -11.485   1.503  1.00  8.64          N   
+ATOM   1096  CA  ALA A 136       5.482 -11.826   1.637  1.00  8.64          C   
+ATOM   1097  C   ALA A 136       5.208 -13.240   1.133  1.00  8.64          C   
+ATOM   1098  CB  ALA A 136       4.618 -10.818   0.882  1.00  8.64          C   
+ATOM   1099  O   ALA A 136       4.289 -13.909   1.611  1.00  8.64          O   
+ATOM   1100  N   ASN A 137       6.194 -13.758   0.415  1.00  8.64          N   
+ATOM   1101  CA  ASN A 137       6.057 -15.090  -0.164  1.00  8.64          C   
+ATOM   1102  C   ASN A 137       6.849 -16.128   0.626  1.00  8.64          C   
+ATOM   1103  CB  ASN A 137       6.499 -15.087  -1.629  1.00  8.64          C   
+ATOM   1104  O   ASN A 137       8.055 -15.975   0.826  1.00  8.64          O   
+ATOM   1105  CG  ASN A 137       5.464 -14.473  -2.550  1.00  8.64          C   
+ATOM   1106  ND2 ASN A 137       5.908 -13.993  -3.705  1.00  8.64          N   
+ATOM   1107  OD1 ASN A 137       4.274 -14.431  -2.226  1.00  8.64          O   
+ATOM   1108  N   GLY A 138       6.587 -16.377   1.995  1.00  8.64          N   
+ATOM   1109  CA  GLY A 138       6.876 -17.550   2.803  1.00  8.64          C   
+ATOM   1110  C   GLY A 138       7.966 -18.427   2.215  1.00  8.64          C   
+ATOM   1111  O   GLY A 138       8.031 -19.623   2.504  1.00  8.64          O   
+ATOM   1112  N   TYR A 139       9.137 -17.824   1.543  1.00  8.64          N   
+ATOM   1113  CA  TYR A 139      10.214 -18.693   1.080  1.00  8.64          C   
+ATOM   1114  C   TYR A 139      11.083 -19.153   2.245  1.00  8.64          C   
+ATOM   1115  CB  TYR A 139      11.076 -17.973   0.039  1.00  8.64          C   
+ATOM   1116  O   TYR A 139      11.385 -18.370   3.149  1.00  8.64          O   
+ATOM   1117  CG  TYR A 139      10.546 -18.087  -1.370  1.00  8.64          C   
+ATOM   1118  CD1 TYR A 139       9.749 -17.085  -1.919  1.00  8.64          C   
+ATOM   1119  CD2 TYR A 139      10.841 -19.197  -2.155  1.00  8.64          C   
+ATOM   1120  CE1 TYR A 139       9.257 -17.187  -3.216  1.00  8.64          C   
+ATOM   1121  CE2 TYR A 139      10.355 -19.309  -3.454  1.00  8.64          C   
+ATOM   1122  OH  TYR A 139       9.082 -18.406  -5.260  1.00  8.64          O   
+ATOM   1123  CZ  TYR A 139       9.566 -18.300  -3.975  1.00  8.64          C   
+ATOM   1124  N   ILE A 140      10.744 -20.317   2.913  1.00  8.64          N   
+ATOM   1125  CA  ILE A 140      11.618 -21.208   3.668  1.00  8.64          C   
+ATOM   1126  C   ILE A 140      13.062 -21.031   3.204  1.00  8.64          C   
+ATOM   1127  CB  ILE A 140      11.185 -22.684   3.518  1.00  8.64          C   
+ATOM   1128  O   ILE A 140      13.364 -21.194   2.020  1.00  8.64          O   
+ATOM   1129  CG1 ILE A 140       9.748 -22.872   4.019  1.00  8.64          C   
+ATOM   1130  CG2 ILE A 140      12.150 -23.609   4.265  1.00  8.64          C   
+ATOM   1131  CD1 ILE A 140       9.252 -24.310   3.951  1.00  8.64          C   
+ATOM   1132  N   SER A 141      13.713 -20.010   3.556  1.00  8.64          N   
+ATOM   1133  CA  SER A 141      15.171 -20.025   3.497  1.00  8.64          C   
+ATOM   1134  C   SER A 141      15.734 -21.319   4.073  1.00  8.64          C   
+ATOM   1135  CB  SER A 141      15.750 -18.827   4.252  1.00  8.64          C   
+ATOM   1136  O   SER A 141      15.479 -21.652   5.233  1.00  8.64          O   
+ATOM   1137  OG  SER A 141      17.145 -18.982   4.447  1.00  8.64          O   
+ATOM   1138  N   ALA A 142      15.693 -22.473   3.364  1.00  8.64          N   
+ATOM   1139  CA  ALA A 142      16.460 -23.706   3.208  1.00  8.64          C   
+ATOM   1140  C   ALA A 142      17.958 -23.439   3.331  1.00  8.64          C   
+ATOM   1141  CB  ALA A 142      16.148 -24.360   1.864  1.00  8.64          C   
+ATOM   1142  O   ALA A 142      18.474 -22.483   2.749  1.00  8.64          O   
+ATOM   1143  N   ASP A 143      18.576 -22.902   4.585  1.00  8.64          N   
+ATOM   1144  CA  ASP A 143      19.977 -23.243   4.809  1.00  8.64          C   
+ATOM   1145  C   ASP A 143      20.646 -22.233   5.738  1.00  8.64          C   
+ATOM   1146  CB  ASP A 143      20.732 -23.315   3.480  1.00  8.64          C   
+ATOM   1147  O   ASP A 143      20.988 -21.126   5.317  1.00  8.64          O   
+ATOM   1148  CG  ASP A 143      21.865 -24.326   3.495  1.00  8.64          C   
+ATOM   1149  OD1 ASP A 143      22.444 -24.609   2.424  1.00  8.64          O   
+ATOM   1150  OD2 ASP A 143      22.180 -24.846   4.587  1.00  8.64          O   
+ATOM   1151  N   SER A 144      20.228 -21.957   7.002  1.00  8.64          N   
+ATOM   1152  CA  SER A 144      21.341 -21.510   7.832  1.00  8.64          C   
+ATOM   1153  C   SER A 144      21.253 -22.095   9.238  1.00  8.64          C   
+ATOM   1154  CB  SER A 144      21.373 -19.983   7.908  1.00  8.64          C   
+ATOM   1155  O   SER A 144      21.817 -21.541  10.183  1.00  8.64          O   
+ATOM   1156  OG  SER A 144      20.155 -19.479   8.427  1.00  8.64          O   
+ATOM   1157  N   ARG A 145      20.767 -23.335   9.468  1.00  8.64          N   
+ATOM   1158  CA  ARG A 145      20.907 -23.823  10.836  1.00  8.64          C   
+ATOM   1159  C   ARG A 145      22.363 -24.145  11.156  1.00  8.64          C   
+ATOM   1160  CB  ARG A 145      20.036 -25.062  11.058  1.00  8.64          C   
+ATOM   1161  O   ARG A 145      23.035 -24.835  10.387  1.00  8.64          O   
+ATOM   1162  CG  ARG A 145      18.542 -24.781  11.007  1.00  8.64          C   
+ATOM   1163  CD  ARG A 145      17.724 -26.058  11.140  1.00  8.64          C   
+ATOM   1164  NE  ARG A 145      17.859 -26.910   9.963  1.00  8.64          N   
+ATOM   1165  NH1 ARG A 145      16.657 -28.674  10.846  1.00  8.64          N   
+ATOM   1166  NH2 ARG A 145      17.532 -28.821   8.732  1.00  8.64          N   
+ATOM   1167  CZ  ARG A 145      17.349 -28.133   9.850  1.00  8.64          C   
+ATOM   1168  N   THR A 146      23.240 -23.194  11.377  1.00  8.64          N   
+ATOM   1169  CA  THR A 146      24.353 -23.445  12.287  1.00  8.64          C   
+ATOM   1170  C   THR A 146      23.848 -23.974  13.626  1.00  8.64          C   
+ATOM   1171  CB  THR A 146      25.186 -22.170  12.516  1.00  8.64          C   
+ATOM   1172  O   THR A 146      22.915 -23.417  14.208  1.00  8.64          O   
+ATOM   1173  CG2 THR A 146      26.113 -21.899  11.336  1.00  8.64          C   
+ATOM   1174  OG1 THR A 146      24.303 -21.054  12.683  1.00  8.64          O   
+ATOM   1175  N   VAL A 147      23.601 -25.297  13.669  1.00  8.64          N   
+ATOM   1176  CA  VAL A 147      23.604 -26.015  14.940  1.00  8.64          C   
+ATOM   1177  C   VAL A 147      25.042 -26.295  15.372  1.00  8.64          C   
+ATOM   1178  CB  VAL A 147      22.809 -27.337  14.846  1.00  8.64          C   
+ATOM   1179  O   VAL A 147      25.856 -26.768  14.575  1.00  8.64          O   
+ATOM   1180  CG1 VAL A 147      22.708 -28.004  16.217  1.00  8.64          C   
+ATOM   1181  CG2 VAL A 147      21.418 -27.082  14.269  1.00  8.64          C   
+ATOM   1182  N   ASP A 148      25.801 -25.404  15.970  1.00  8.64          N   
+ATOM   1183  CA  ASP A 148      26.582 -25.450  17.202  1.00  8.64          C   
+ATOM   1184  C   ASP A 148      27.024 -24.051  17.625  1.00  8.64          C   
+ATOM   1185  CB  ASP A 148      27.802 -26.358  17.031  1.00  8.64          C   
+ATOM   1186  O   ASP A 148      27.467 -23.256  16.793  1.00  8.64          O   
+ATOM   1187  CG  ASP A 148      27.486 -27.826  17.259  1.00  8.64          C   
+ATOM   1188  OD1 ASP A 148      28.258 -28.694  16.799  1.00  8.64          O   
+ATOM   1189  OD2 ASP A 148      26.454 -28.116  17.901  1.00  8.64          O   
+TER    1190      ASP A 148
+ENDMDL
+END
diff --git a/alphafold/alphafold/relax/utils.py b/alphafold/alphafold/relax/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..4bd4acad4e5e7f071fb0ad98e7711b4856843464
--- /dev/null
+++ b/alphafold/alphafold/relax/utils.py
@@ -0,0 +1,80 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Utils for minimization."""
+import io
+from alphafold.common import residue_constants
+from Bio import PDB
+import numpy as np
+from simtk.openmm import app as openmm_app
+from simtk.openmm.app.internal.pdbstructure import PdbStructure
+
+
+def overwrite_pdb_coordinates(pdb_str: str, pos) -> str:
+  pdb_file = io.StringIO(pdb_str)
+  structure = PdbStructure(pdb_file)
+  topology = openmm_app.PDBFile(structure).getTopology()
+  with io.StringIO() as f:
+    openmm_app.PDBFile.writeFile(topology, pos, f)
+    return f.getvalue()
+
+
+def overwrite_b_factors(pdb_str: str, bfactors: np.ndarray) -> str:
+  """Overwrites the B-factors in pdb_str with contents of bfactors array.
+
+  Args:
+    pdb_str: An input PDB string.
+    bfactors: A numpy array with shape [1, n_residues, 37]. We assume that the
+      B-factors are per residue; i.e. that the nonzero entries are identical in
+      [0, i, :].
+
+  Returns:
+    A new PDB string with the B-factors replaced.
+  """
+  if bfactors.shape[-1] != residue_constants.atom_type_num:
+    raise ValueError(
+        f'Invalid final dimension size for bfactors: {bfactors.shape[-1]}.')
+
+  parser = PDB.PDBParser(QUIET=True)
+  handle = io.StringIO(pdb_str)
+  structure = parser.get_structure('', handle)
+
+  curr_resid = ('', '', '')
+  idx = -1
+  for atom in structure.get_atoms():
+    atom_resid = atom.parent.get_id()
+    if atom_resid != curr_resid:
+      idx += 1
+      if idx >= bfactors.shape[0]:
+        raise ValueError('Index into bfactors exceeds number of residues. '
+                         'B-factors shape: {shape}, idx: {idx}.')
+    curr_resid = atom_resid
+    atom.bfactor = bfactors[idx, residue_constants.atom_order['CA']]
+
+  new_pdb = io.StringIO()
+  pdb_io = PDB.PDBIO()
+  pdb_io.set_structure(structure)
+  pdb_io.save(new_pdb)
+  return new_pdb.getvalue()
+
+
+def assert_equal_nonterminal_atom_types(
+    atom_mask: np.ndarray, ref_atom_mask: np.ndarray):
+  """Checks that pre- and post-minimized proteins have same atom set."""
+  # Ignore any terminal OXT atoms which may have been added by minimization.
+  oxt = residue_constants.atom_order['OXT']
+  no_oxt_mask = np.ones(shape=atom_mask.shape, dtype=np.bool)
+  no_oxt_mask[..., oxt] = False
+  np.testing.assert_almost_equal(ref_atom_mask[no_oxt_mask],
+                                 atom_mask[no_oxt_mask])
diff --git a/alphafold/alphafold/relax/utils_test.py b/alphafold/alphafold/relax/utils_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..190cb3109aa92972594e55e3f80a33f902199ac4
--- /dev/null
+++ b/alphafold/alphafold/relax/utils_test.py
@@ -0,0 +1,55 @@
+# Copyright 2021 DeepMind Technologies Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for utils."""
+
+import os
+
+from absl.testing import absltest
+from alphafold.common import protein
+from alphafold.relax import utils
+import numpy as np
+# Internal import (7716).
+
+
+class UtilsTest(absltest.TestCase):
+
+  def test_overwrite_b_factors(self):
+    testdir = os.path.join(
+        absltest.get_default_test_srcdir(),
+        'alphafold/relax/testdata/'
+        'multiple_disulfides_target.pdb')
+    with open(testdir) as f:
+      test_pdb = f.read()
+    n_residues = 191
+    bfactors = np.stack([np.arange(0, n_residues)] * 37, axis=-1)
+
+    output_pdb = utils.overwrite_b_factors(test_pdb, bfactors)
+
+    # Check that the atom lines are unchanged apart from the B-factors.
+    atom_lines_original = [l for l in test_pdb.split('\n') if l[:4] == ('ATOM')]
+    atom_lines_new = [l for l in output_pdb.split('\n') if l[:4] == ('ATOM')]
+    for line_original, line_new in zip(atom_lines_original, atom_lines_new):
+      self.assertEqual(line_original[:60].strip(), line_new[:60].strip())
+      self.assertEqual(line_original[66:].strip(), line_new[66:].strip())
+
+    # Check B-factors are correctly set for all atoms present.
+    as_protein = protein.from_pdb_string(output_pdb)
+    np.testing.assert_almost_equal(
+        np.where(as_protein.atom_mask > 0, as_protein.b_factors, 0),
+        np.where(as_protein.atom_mask > 0, bfactors, 0))
+
+
+if __name__ == '__main__':
+  absltest.main()
diff --git a/alphafold/requirements.txt b/alphafold/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..40c6539e7a2d6b1d8dbc52c09d6de26d0a8afaf1
--- /dev/null
+++ b/alphafold/requirements.txt
@@ -0,0 +1,12 @@
+absl-py==0.13.0
+biopython==1.79
+chex==0.0.7
+dm-haiku==0.0.4
+dm-tree==0.1.6
+docker==5.0.0
+immutabledict==2.0.0
+jax==0.2.14
+ml-collections==0.1.0
+numpy==1.19.5
+scipy==1.7.0
+tensorflow-cpu==2.5.0