anchor.diff:  -record(state, {previous_trace=[],
                   trace=[], 
                   replay=false,
  +                shrinking=false,
                   blocked_processes=[],
                   identifier=undefined}).
   
  
positive.code: handle_call({trace, Type, Message}, _From, #state{trace=Trace0}=State) ->
      %% lager:info("~p: recording trace type: ~p message: ~p", [?MODULE, Type, Message]),
      {reply, ok, State#state{trace=Trace0++[{Type, Message}]}};
  handle_call({replay, Type, Message}, From, #state{previous_trace=PreviousTrace0, replay=Replay, blocked_processes=BlockedProcesses0}=State) ->
      case Replay of 
          true ->
              %% Find next message that should arrive based on the trace.
              %% Can we process immediately?
              case can_deliver_based_on_trace({Type, Message}, PreviousTrace0, BlockedProcesses0) of 
                  true ->
                      %% Deliver as much as we can.
                      {PreviousTrace, BlockedProcesses} = trace_deliver(PreviousTrace0, BlockedProcesses0),
  
                      %% Record new trace position and new list of blocked processes.
                      {reply, ok, State#state{blocked_processes=BlockedProcesses, previous_trace=PreviousTrace}};
  
negative.code:     case ND > 0 of 
          true ->
              lager:info("~p: was able to deliver a message, trying again", [?MODULE]),
              trace_deliver_log_flush(Shrinking, T, BP);
          false ->
              lager:info("~p: flush attempt finished.", [?MODULE]),
              {T, BP}
  