anchor.diff:  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   %% private
   %%-spec unpack(binary() -> ppspp_message_type()).
  -validate_message_type(Maybe_Message_Type)
  +get_message_type(Maybe_Message_Type)
     when is_integer(Maybe_Message_Type),
          Maybe_Message_Type < ?PPSPP_MAXIMUM_MESSAGE_TYPE ->
       %% message types in the current spec version
  
positive.code: %% A failure anywhere in a message ultimately causes the entire datagram
  %% to be rejected.
  unpack(<<Maybe_Message_Type:?PPSPP_MESSAGE_SIZE, Rest/binary>>, Parsed_Messages) ->
      {ok, Type} = validate_message_type(Maybe_Message_Type),
      [{ok, Parsed_Message}, Maybe_More_Messages] = parse(Type, Rest),
      unpack(Maybe_More_Messages, [Parsed_Message | Parsed_Messages]).
  
  
negative.code:                        ?PEX_REScert -> pex_rescert
                     end,
      ?DEBUG("message: parser got valid message type ~p~n", [Message_Type]),
      Message_Type.
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %%-spec ... parse takes a msg_type, _data, and returns
  %%    {error, something} or {ok, {key, orddict}} for the unpacked message
  %%    [{Type, Parsed_Message}, Maybe_More_Messages]
  %% TODO parse should probably be unpack/2 and then drop get_message_type/1
  parse(handshake, <<Channel:?PPSPP_CHANNEL_SIZE, Maybe_Options/binary>>) ->
      {ok, Options, Maybe_Messages} = ppspp_options:unpack(Maybe_Options),
      {ok, {handshake, orddict:store(channel, Channel, Options) }, Maybe_Messages};
  