You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: state_machine.rb
    path of file: ./repos/manageiq/app/models/physical_server_firmware_update_task
    
    the code of the file until where you have to start completion: module PhysicalServerFirmwareUpdateTask::StateMachine
  def run_firmware_update
    dump_obj(options, "MIQ(#{self.class.name}##{__method__}) options: ", $log, :info)
    signal :start_firmware_update
  end

  def start_firmware_update
    # Implement firmware update in subclass, user-defined values are stored in options field.
    # Affected servers can be accessed via miq_request.affected_physical_servers
    raise NotImplementedError, 'Must be implemented in subclass and signal :done_firmware_update when done'
  end

  def done_firmware_update
    update_and_notify_parent(:message => msg('done updating firmware'))
    signal :mar
    
  def start_firmware_update
    # Implement firmware update in subclass, user-defined values are stored in options field.
    # Affected servers can be accessed via miq_request.affected_physical_servers
    raise NotImplementedError, 'Must be implemented in subclass and signal :done_firmware_update when done'
  end

  def done_firmware_update
    update_and_notify_parent(:message => msg('done updating firmware'))
    signal :mark_as_completed
  end

  def mark_as_completed
    update_and_notify_parent(:state => 'finished', :message => msg('firmware update completed'))
    signal :finish
  end

  def finish
    if status != 'Error'
      _log.info("Executing firmware update task: [#{description}]... Complete")
    else
      _log.info("Executing firmware update task: [#{description}]... Errored")
    end
  end