digraph {

        start [label="A:\nNameplate\nAllocation" style="dotted"]
        {rank=same; start S0A S0B}
        start -> S0A [style="invis"]
        S0A [label="S0A:\nidle\ndisconnected" color="orange"]
        S0A -> S0B [label="connected"]
        S0B -> S0A [label="lost"]
        S0B [label="S0B:\nidle\nconnected"]
        S0A -> S1A [label="allocate(length, wordlist)" color="orange"]
        S0B -> P_allocate [label="allocate(length, wordlist)"]
        P_allocate [shape="box" label="RC.tx_allocate" color="orange"]
        P_allocate -> S1B [color="orange"]
        {rank=same; S1A P_allocate S1B}
        S0B -> S1B [style="invis"]
        S1B [label="S1B:\nallocating\nconnected" color="orange"]
        S1B -> foo [label="lost"]
        foo [style="dotted" label=""]
        foo -> S1A
        S1A [label="S1A:\nallocating\ndisconnected" color="orange"]
        S1A -> P_allocate [label="connected" color="orange"]

        S1B -> P_allocated [label="rx_allocated" color="orange"]
        P_allocated [shape="box" label="choose words\nC.allocated(nameplate,code)" color="orange"]
        P_allocated -> S2 [color="orange"]

        S2 [label="S2:\ndone" color="orange"]

}
