docs: def CheckHashes(self, hashes, external=True):
      """Checks a list of hashes for presence in the store.
  
      Sub stores need to pass back the original HashDigest objects since they
      carry state about the original file source.
  
      Only unique hashes are checked, if there is duplication in the hashes input
      it is the caller's responsibility to maintain any necessary mappings.
  
      Args:
        hashes: A list of Hash objects to check.
        external: If true, attempt to check stores defined as EXTERNAL.
  
      Yields:
        Tuples of (RDFURN, hash object) that exist in the store.
      """
      hashes = set(hashes)
      for child in self.GetChildrenByPriority(allow_external=external):
        for urn, hash_obj in child.CheckHashes(hashes):
          yield urn, hash_obj
  
          hashes.discard(hash_obj)
  
        # Nothing to search for, we are done.
        if not hashes:
          break