def fingerprint(self):
     """Select num_probes most useful paths, and fetch them
     from the site at url. Return an ordered list of possible versions or 
     [].
     """
     self._load_db()
     paths = wafu.pick_fingerprint_files(self.path_nodes, self.all_versions)
     self.logger.logStartFingerprint(self.url, self.app_name)
     
     self.error_page_fingerprint = wafu.identify_error_page(self.url)
     
     possible_vers = []
     for path in paths[:self.num_probes]:
         curr_vers = self.fingerprint_file(path)
         if curr_vers:
             possible_vers.append(curr_vers)
         if self._host_down_errors >= HOST_DOWN_THRESHOLD:
             break
     
     ver_set = wafu.collapse_version_possibilities(possible_vers)
     self.ver_list = list(ver_set)
     
     #if more than one possibility, try to narrow it by winnowing!
     if len(self.ver_list) > 1 and self.winnow:
         print "ver_list before winnowing:"
         for v in self.ver_list:
             print v.vstring
         print "\n"            
         self.winnow_versions(possible_vers)
     
     ver_set = wafu.collapse_version_possibilities(possible_vers)
     self.ver_list = list(ver_set)
     self.ver_list.sort()
     if len(self.ver_list) > 1:
         self.best_guess = wafu.pick_likely_version(self.ver_list)
     elif len(self.ver_list) == 1:
         self.best_guess = self.ver_list[0]
     else:
         self.best_guess = None
     self.logger.logFinishFingerprint(self.ver_list, self.best_guess)
     return self.ver_list