code: def semvers(names):
      
      matches = [(RE_SEMVER.findall(n) or [[]])[0] for n in names]
      max_len_ints = 0
      max_len_str = 0
  
      # Get max lens for padding.
      for match in (m for m in matches if m):
          max_len_ints = len(match)  # Never changes.
          max_len_str = max(max_len_str, len(match[-1]))
      if not max_len_ints:
          return matches  # Nothing to do, all empty.
      invalid_template = [1] + [0] * (max_len_ints + max_len_str - 1)
  
      # Parse.
      exploded_semver = list()
      for match in matches:
          if not match:
              exploded_semver.append(invalid_template[:])
              continue
          version_ints = [-int(i or 0) for i in match[:-1]]
          ints_of_str = [ord(i) for i in match[-1]] + [0] * (max_len_str - len(match[-1]))
          exploded_semver.append([0] + version_ints + ints_of_str)
  
      return exploded_semver
docs: Parse versions into integers and convert non-integer meta indicators into integers with ord().
  
      Each return list item has an indicator as the first item. 0 for valid versions and 1 for invalid. Can be used to
      sort non-version names (e.g. master, feature_branch, etc) after valid versions. No sorting is done in this function
      though.
  
      Read multi_sort() docstring for reasoning behind inverted integers in version_ints variable.
  
      :param iter names: List of strings representing versions/tags/branches.
  
      :return: List of parsed versions. E.g. v1.10.0b3 -> [0, 1, 10, 0, ord('b'), ord('3')]
      :rtype: list