code: def enumerate_version(self, url, threads=10, verb='head',
              timeout=15, hide_progressbar=False, headers={}):
          
  
          files = self.vf.files_get()
          changelogs = self.vf.changelogs_get()
  
          if not hide_progressbar:
              p = ProgressBar(sys.stderr, len(files) +
                      len(changelogs), "version")
  
          hashes = {}
          futures = {}
          with ThreadPoolExecutor(max_workers=threads) as executor:
              for file_url in files:
                  futures[file_url] = executor.submit(self.enumerate_file_hash,
                          url, file_url=file_url, timeout=timeout, headers=headers)
  
              for file_url in futures:
                  if common.shutdown:
                      futures[file_url].cancel()
                      continue
  
                  try:
                      hsh = futures[file_url].result()
                      hashes[file_url] = hsh
                  except RuntimeError:
                      pass
  
                  if not hide_progressbar:
                      p.increment_progress()
  
          version = self.vf.version_get(hashes)
  
          # Narrow down using changelog, if accurate.
          if self.vf.has_changelog():
              version = self.enumerate_version_changelog(url, version, timeout, headers=headers)
  
          if not hide_progressbar:
              p.increment_progress()
              p.hide()
  
          return version, len(version) == 0
docs: Determines which version of CMS is installed at url. This is done by
          comparing file hashes against the database of hashes in
          self.version_file, which is located at dscan/plugins/<plugin_name>/versions.xml
          @param url: the url to check.
          @param threads: the number of threads to use for this scan.
          @param verb: HTTP verb to use.
          @param timeout: time, in seconds, before timing out a request.
          @param hide_progressbar: should the function hide the progressbar?
          @param headers: a dict of headers to pass to requests.get.
          @return (possible_versions, is_empty)