anchor.diff:  
   -define(THROW(T), throw({?MODULE, T})).
   
  +%% Key to a value in the process dictionary that determines whether or
  +%% not an unrecognized AVP setting the M-bit should be regarded as an
  +%% error or not. See is_strict/0.
  +-define(STRICT_KEY, strict).
  +
   -type parent_name()   :: atom().  %% parent = Message or AVP
   -type parent_record() :: tuple(). %%
   -type avp_name()   :: atom().
  
positive.code:                              {Reason, Avp, erlang:get_stacktrace()}),
              {Rec, Failed} = Acc,
              {[Avp|Avps], {Rec, [rc(Reason, Avp) | Failed]}}
      end.
  
  %% decode_AVP/3
  %%
  
negative.code: %% Or try to decode.
  d(Name, Avp, {Avps, Acc}) ->
      #diameter_avp{name = AvpName,
                    data = Data,
                    type = Type,
                    is_mandatory = M}
          = Avp,
  
      %% Use the process dictionary is to keep track of whether or not
      %% to ignore an M-bit on an encapsulated AVP. Not ideal, but the
      %% alternative requires widespread changes to be able to pass the
      %% value around through the entire decode. The solution here is
      %% simple in comparison, both to implement and to understand.
  
      Reset = relax(Type, M),
  
      try avp(decode, Data, AvpName) of
          V ->
  