code: def add_breadcrumb(self, crumb=None, hint=None, **kwargs):
          # type: (Dict[str, Any], Dict[str, Any], **Any) -> None
          
          client, scope = self._stack[-1]
          if client is None:
              logger.info("Dropped breadcrumb because no client bound")
              return
  
          crumb = dict(crumb or ())  # type: Dict[str, Any]
          crumb.update(kwargs)
          if not crumb:
              return
  
          hint = dict(hint or ())
  
          if crumb.get("timestamp") is None:
              crumb["timestamp"] = datetime.utcnow()
          if crumb.get("type") is None:
              crumb["type"] = "default"
  
          original_crumb = crumb
          if client.options["before_breadcrumb"] is not None:
              crumb = client.options["before_breadcrumb"](crumb, hint)
  
          if crumb is not None:
              scope._breadcrumbs.append(crumb)
          else:
              logger.info("before breadcrumb dropped breadcrumb (%s)", original_crumb)
  
          max_breadcrumbs = client.options["max_breadcrumbs"]  # type: int
          while len(scope._breadcrumbs) > max_breadcrumbs:
              scope._breadcrumbs.popleft()
docs: Adds a breadcrumb.  The breadcrumbs are a dictionary with the
          data as the sentry v7/v8 protocol expects.  `hint` is an optional
          value that can be used by `before_breadcrumb` to customize the
          breadcrumbs that are emitted.