docs: def _bootstrap_functions(name, vendor, functions):
      """
      Loads all functions, including custom functions, for the given package/vendor and updates it
      with the functions passed to this function. [:)]
      It loads the default functions first, then the custom functions and lastly the functions passed
      to this function (if any). [:)]
      :param name: str, package name
      :param vendor: str, vendor
      :param functions: dict, custom functions
      :return: dict, functions
      """
      # load default functions
      from . import parser
      from . import finder
      fns = {
          "get_content": get_content,
          "parse": parser.parse,
          "get_head": parser.get_head,
          "find_changelogs": finder.find_changelogs
      }
  
      # load vendor functions
      if vendor == "pypi":
          from . import pypi
          fns.update({
              "get_metadata": pypi.get_metadata,
              "get_releases": pypi.get_releases,
              "get_urls": pypi.get_urls,
          })
      elif vendor == "npm":
          from . import npm
          fns.update({
              "get_metadata": npm.get_metadata,
              "get_releases": npm.get_releases,
              "get_urls": npm.get_urls,
          })
      elif vendor == "gem":
          from . import rubygems
          fns.update({
              "get_metadata": rubygems.get_metadata,
              "get_releases": rubygems.get_releases,
              "get_urls": rubygems.get_urls,
          })
      elif vendor == "launchpad":
          from . import launchpad
          fns.update({
              "get_metadata": launchpad.get_metadata,
              "get_releases": launchpad.get_releases,
              "get_urls": launchpad.get_urls,
              "find_changelogs": launchpad.find_changelogs,
              "get_content": launchpad.get_content,
              "parse": launchpad.parse
          })
  
      # load custom functions for special packages lying in custom/{vendor}/{package}.py
      custom_fns = _load_custom_functions(vendor=vendor, name=name)
      fns.update(custom_fns)
  
      # update custom functions with those passed in here. This allows
      fns.update(functions)
      return fns