code: def load(
      fp: IO[bytes],
      use_builtin_types: Optional[bool] = None,
      dict_type: Type[MutableMapping[str, Any]] = dict,
  ) -> Any:
      """Load a plist file into an object.
  
      Args:
          fp: An opened file.
          use_builtin_types: If True, binary data is deserialized to
              bytes strings. If False, it is wrapped in :py:class:`Data`
              objects. Defaults to True if not provided. Deprecated.
          dict_type: What type to use for dictionaries.
  
      Returns:
          An object (usually a dictionary) representing the top level of
          the plist file.
      """
  
      if not hasattr(fp, "read"):
          raise AttributeError(
              "'%s' object has no attribute 'read'" % type(fp).__name__
          )
      target = PlistTarget(
          use_builtin_types=use_builtin_types, dict_type=dict_type
      )
      parser = etree.XMLParser(target=target)
      result = etree.parse(fp, parser=parser)
      # lxml returns the target object directly, while ElementTree wraps
      # it as the root of an ElementTree object
      try:
          return result.getroot()
      except AttributeError:
          return result
  
imports: import collections.abc
  import re
  from typing import Any, Callable, Dict, List, Mapping, MutableMapping, Optional, Sequence, Type, Union, IO
  import warnings
  from io import BytesIO
  from datetime import datetime
  from base64 import b64encode, b64decode
  from numbers import Integral
  from types import SimpleNamespace
  from functools import singledispatch
  from fontTools.misc import etree
  from fontTools.misc.textTools import tostr
label_desc: Use image node_id 28 for calling a global function with example usage: load(fp, use_builtin_types, dict_type) and returns: result, result