simpler fsm