code: def ExtractEvents(self, parser_mediator, registry_key, **kwargs):
      
      registry_value = registry_key.GetValueByName('ProgramsCache')
      if registry_value:
        self._ParseValueData(parser_mediator, registry_key, registry_value)
  
      registry_value = registry_key.GetValueByName('ProgramsCacheSMP')
      if registry_value:
        self._ParseValueData(parser_mediator, registry_key, registry_value)
  
      registry_value = registry_key.GetValueByName('ProgramsCacheTBP')
      if registry_value:
        self._ParseValueData(parser_mediator, registry_key, registry_value)
  
      values_dict = {}
      for registry_value in registry_key.GetValues():
        # Ignore the default value.
        if not registry_value.name or registry_value.name in (
            'ProgramsCache', 'ProgramsCacheSMP', 'ProgramsCacheTBP'):
          continue
  
        # Ignore any value that is empty or that does not contain a string.
        if not registry_value.data or not registry_value.DataIsString():
          continue
  
        values_dict[registry_value.name] = registry_value.GetDataAsObject()
  
      event_data = windows_events.WindowsRegistryEventData()
      event_data.key_path = registry_key.path
      event_data.offset = registry_key.offset
      event_data.regvalue = values_dict
  
      event = time_events.DateTimeValuesEvent(
          registry_key.last_written_time, definitions.TIME_DESCRIPTION_WRITTEN)
      parser_mediator.ProduceEventWithEventData(event, event_data)
docs: Extracts events from a Windows Registry key.
  
      Args:
        parser_mediator (ParserMediator): mediates interactions between parsers
            and other components, such as storage and dfvfs.
        registry_key (dfwinreg.WinRegistryKey): Windows Registry key.