anchor.diff:  
   handle_finalized_headers(Name, Headers, #mp{cb=undefined}=MP) ->
       MP#mp{name=Name, headers=Headers};
  -handle_finalized_headers(Name, Headers, #mp{cb=Callback, cb_data=CbData}=MP) ->
  -    Result = Callback({part, Name, Headers}, CbData),
  -    handle_part_cb(Result, Name, Headers, MP).
  +handle_finalized_headers(Name, Headers, MP) ->
  +    handle_part_cb(part_cb(Name, Headers, MP), Name, Headers, MP).
  +
  +part_cb(Name, Headers, #mp{cb=Callback, cb_data=CbData}) ->
  +    Callback({part, Name, Headers}, CbData).
   
   handle_part_cb({continue, CbData}, Name, Headers, MP) ->
       MP#mp{name=Name, headers=Headers, cb_data=CbData};
  
positive.code:     replace_last(strip_trailing_crlf(Data), MP);
  handle_last_data(_Data, #mp{headers=dropping}=MP) ->
      MP;
  handle_last_data(Data, #mp{name=Name, cb=Callback, cb_data=CbData}=MP) ->
      Stripped = strip_trailing_crlf(Data),
      Result = Callback({data, Name, Stripped}, CbData),
      handle_last_data_cb(Result, Stripped, MP).
  
  strip_trailing_crlf(Bin) ->
      N = size(Bin) - 2,
  
negative.code: 
  handle_finalized_part(Part, #mp{cb=undefined}=MP) ->
      reset_part_attrs(add_part(Part, MP));
  handle_finalized_part(Part, MP) ->
      handle_eof_cb(eof_cb(MP), Part, MP).
  
  eof_cb(#mp{cb=Callback, cb_data=CbData, name=Name}) ->
      Callback({data, Name, eof}, CbData).
  
  add_part(Part, #mp{parts=Parts}=MP) ->
      MP#mp{parts=[Part|Parts]}.
  