timer: update state