anchor.diff:  code_change(_OldVsn, OldState, OldData, _Extra) ->
       {ok, OldState, OldData}.
   
  -%%--------------------------------------------------------------------------------
  +%%-----------------------------------------------------------------------------------------------------
   %% State transition
  -%%-------------------------------------------------------------------------------- 
  -%%                                                                lashup_event
  -%%                                                                  +------+
  -%%                                                                  |      |
  -%%  +--------------+              +----------------+              +-+--------+
  -%%  |              |              |                |              |          |
  -%%  |              | lashup_event |                | lashup event |          |
  -%%  | unconfigured +------------> |  configuring   +------------> | batching |
  -%%  |              |              |                |              |          |
  -%%  |              |              |                | <------------|          |
  -%%  |              |              |                |   timeout    |          |
  -%%  +--------------+              +----------------+              +----------+
  -%%
  -%%--------------------------------------------------------------------------------
  +%%----------------------------------------------------------------------------------------------------- 
  +%%                                                              lashup_event
  +%%                                                               +------+
  +%%                                                               |      |
  +%%  +--------------+              +-------------+ lashup event +-+------+-+               +------------+
  +%%  |              |              |             +      or      |          |               |            |
  +%%  |              | lashup_event |             |    timeout1  |          |    reapply    |            |
  +%%  | unconfigured +------------> | configuring +------------> | batching +-------------> | reapplying |
  +%%  |              |              |             | <------------+          | <-------------+            |
  +%%  |              |              |             |    timeout2  |          |  lashup event |            |
  +%%  |              |              |             |              |          |      or       |            |
  +%%  +--------------+              +-------------+              +----------+    timeout1   +------------+
  +%%
  +%%------------------------------------------------------------------------------------------------------
   
   unconfigured(info, EventContent, Data) ->
       {next_state, configuring, Data, {next_event, internal, EventContent}}.
  
positive.code:     lager:debug("Done applying configuration: ~p", [DeltaConfig]),
      NewConfig = update_config(DeltaConfig, OldConfig),
      Data1 = Data0#data{config = NewConfig},
      {next_state, batching, Data1};
  configuring(info, _EventContent, _Data) ->
      {keep_state_and_data, postpone}.
              
  batching(info, EventContent, _Data) ->
      {keep_state_and_data, {timeout, ?LISTEN_TIMEOUT, {do_configure, EventContent}}};
  batching(timeout, {do_configure, EventContent}, Data) ->
      {next_state, configuring, Data, {next_event, internal, EventContent}}.
  
  %% private API
  
  
negative.code:     ref :: reference(),
      pid :: undefined | pid(),
      config = maps:new() :: config(),
      overlaykeys = [] :: [term()],
      kill_timer :: undefined | timer:tref()
  }).
  
  