anchor.diff:  
   
   
  --spec writable(entry(), pr:pr(), pr:pr()) -> {ok, entry(),
  -                                     NextWriteRound :: pr:pr()} |
  -                                    {dropped,
  -                                     NewerSeenRound :: pr:pr()}.
  -writable(Entry, InRound, OldWriteRound) ->
  +-spec writable(entry(), pr:pr(), pr:pr(), prbr:write_filter()) ->
  +          {ok, entry(),NextWriteRound :: pr:pr()} |
  +          {dropped, NewerSeenRound :: pr:pr()}.
  +writable(Entry, InRound, OldWriteRound, WF) ->
       LatestSeenRead = entry_r_read(Entry),
       LatestSeenWrite = entry_r_write(Entry),
       InRoundR = pr:get_r(InRound),
  
positive.code:     LatestSeenWriteId = pr:get_id(LatestSeenWrite),
      OldWriteR = pr:get_r(OldWriteRound),
      OldWriteId = pr:get_id(OldWriteRound),
      if ((InRoundR =:= LatestSeenReadR andalso InRoundId=:= LatestSeenReadId)
          orelse (InRoundR > LatestSeenReadR))
         andalso (InRoundR > LatestSeenWriteR)
         %% make sure that no write filter operations are missing in the
         %% sequence of writes
         andalso (OldWriteR =:= LatestSeenWriteR
                 andalso OldWriteId =:= LatestSeenWriteId) ->
  
             T1Entry = entry_set_r_write(Entry, InRound),
             %% prepare fast_paxos for this client:
  
negative.code:             {dropped, util:max(LatestSeenRead, LatestSeenWrite)}
      end.
  
  -spec is_partial_write(prbr:write_filter()) -> boolean().
  is_partial_write(Any) -> fun prbr:noop_write_filter/3 =:= Any.
  
  -spec get_wti_key(any())-> any().
  get_wti_key(Key) -> {Key, wti}.
  
  