leave it to
    the user which thread an asynchronous state machine will run in. Users
    should also be able to use the threading library of their choice</li>

    <li>support the development of arbitrarily large and complex state
    machines. Multiple developers should be able to work on the same state
    machine simultaneously</li>

    <li>allow the user to customize all resource management so that the
    library could be used for applications with hard real-time
    requirements</li>

    <li>enfor