Fully externalize the state of the state machine
Use boolean[] not BitSet for external state

Because overhead of calling BitSet.get() & BitSet.set() is massive.
Immediate propagation