        buttonEvents.append(be)
  
      ret.buttonEvents = buttonEvents
  
      supercruise = self.CS.car_fingerprint in SUPERCRUISE_CARS
      events = self.create_common_events(ret, pcm_enable=supercruise)
  
      if not supercruise:
        # TODO: why is this only not supercruise? ignore supercruise?
        if ret.vEgo < self.CP.minEnableSpeed:
          events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
        if self.CS.park_brake:
          events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
        if ret.cruiseState.standstill:
          events.append(create_event('resumeRequired', [ET.WARNING]))
        if self.CS.pcm_acc_status == AccState.FAULTED:
          events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))
  
        # handle button presses
        for b in ret.buttonEvents:
          # do enable on both accel and decel buttons
          if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
            events.append(create_event('buttonEnable', [ET.ENABLE]))
          # do disable on button down
          if b.type == ButtonType.cancel and b.pressed:
            events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
  
      ret.events = events
  
      # copy back carState packet to CS
      self.CS.out = ret.as_reader()
 
</s> remove     alert_out = process_hud_alert(hud_alert)
    steer = alert_out

 </s> add  </s> remove     if self.car_fingerprint not in SUPERCRUISE_CARS:
      # no output if not enabled, but keep sending keepalive messages
      # treat pedals as one
      final_pedal = actuators.gas - actuators.brake
 </s> add     # no output if not enabled, but keep sending keepalive messages
    # treat pedals as one
    final_pedal = actuators.gas - actuators.brake </s> remove   def __init__(self, car_fingerprint):
    if car_fingerprint in SUPERCRUISE_CARS:
      self.STEER_MAX = 150
      self.STEER_STEP = 1              # how often we update the steer cmd
      self.STEER_DELTA_UP = 2          # 0.75s time to peak torque
      self.STEER_DELTA_DOWN = 5        # 0.3s from peak torque to zero
      self.MIN_STEER_SPEED = -1.       # can steer down to zero
    else:
      self.STEER_MAX = 300
      self.STEER_STEP = 2              # how often we update the steer cmd
      self.STEER_DELTA_UP = 7          # ~0.75s time to peak torque (255/50hz/0.75s)
      self.STEER_DELTA_DOWN = 17       # ~0.3s from peak torque to zero
      self.MIN_STEER_SPEED = 3.

 </s> add   def __init__(self):
    self.STEER_MAX = 300
    self.STEER_STEP = 2              # how often we update the steer cmd
    self.STEER_DELTA_UP = 7          # ~0.75s time to peak torque (255/50hz/0.75s)
    self.STEER_DELTA_DOWN = 17       # ~0.3s from peak torque to zero
    self.MIN_STEER_SPEED = 3. </s> remove       if self.car_fingerprint in SUPERCRUISE_CARS:
        can_sends += gmcan.create_steering_control_ct6(self.packer_pt,
          CanBus, apply_steer, CS.out.vEgo, idx, lkas_enabled)
      else:
        can_sends.append(gmcan.create_steering_control(self.packer_pt,
          CanBus.POWERTRAIN, apply_steer, idx, lkas_enabled))
 </s> add       can_sends.append(gmcan.create_steering_control(self.packer_pt,
        CanBus.POWERTRAIN, apply_steer, idx, lkas_enabled)) </s> remove def process_hud_alert(hud_alert):
  # initialize to no alert
  steer = 0
  if hud_alert == VisualAlert.steerRequired:
    steer = 1
  return steer

 </s> add 
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
        buttonEvents.append(be)
  
      ret.buttonEvents = buttonEvents
  
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
    events = self.create_common_events(ret, pcm_enable=False)

    if ret.vEgo < self.CP.minEnableSpeed:
      events.append(create_event('speedTooLow', [ET.NO_ENTRY]))
    if self.CS.park_brake:
      events.append(create_event('parkBrake', [ET.NO_ENTRY, ET.USER_DISABLE]))
    if ret.cruiseState.standstill:
      events.append(create_event('resumeRequired', [ET.WARNING]))
    if self.CS.pcm_acc_status == AccState.FAULTED:
      events.append(create_event('controlsFailed', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE]))

    # handle button presses
    for b in ret.buttonEvents:
      # do enable on both accel and decel buttons
      if b.type in [ButtonType.accelCruise, ButtonType.decelCruise] and not b.pressed:
        events.append(create_event('buttonEnable', [ET.ENABLE]))
      # do disable on button down
      if b.type == ButtonType.cancel and b.pressed:
        events.append(create_event('buttonCancel', [ET.USER_DISABLE]))
  
      ret.events = events
  
      # copy back carState packet to CS
      self.CS.out = ret.as_reader()
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 Remove Cadillac CT6 port (#1359)

* remove CT6 port

* dont need this route

* extra char

* fix carcontroller params 
selfdrive/car/gm/interface.py