anchor.diff:  unmarshal(object_path, Data, Pos, Endian) ->
       unmarshal_string(uint32, Data, Pos, Endian);
   
  +
  +unmarshal({array, {struct, [KeyType, ValueType]}}, Data, Pos, Endian) ->
  +    case unmarshal(uint32, Data, Pos, Endian) of
  +	more ->
  +	    more;
  +	{ok, Length, Rest, NewPos} ->
  +	    unmarshal_dict(KeyType, ValueType, Length, Rest, NewPos, Endian)
  +    end;
  +
   unmarshal({array, SubType}, Data, Pos, Endian) ->
       case unmarshal(uint32, Data, Pos, Endian) of
           more -> 
  
positive.code: 
  marshal(signature, Value, Pos) ->
      marshal_string(byte, Value, Pos);
  
  marshal({array, byte}=Type, Value, Pos) when is_binary(Value) ->
      marshal(Type, binary_to_list(Value), Pos);
  
negative.code:         end,
      marshal(uint32, Int, Pos);
  
  marshal(int16, Value, Pos) when Value > -32767 andalso Value =< 32767 ->
      marshal_int(2, Value, Pos);
  
  marshal(uint16, Value, Pos) when Value >= 0 andalso Value =< 65535 ->
      marshal_uint(2, Value, Pos);
  
  marshal(int32, Value, Pos) when Value >= -2147483647 andalso Value =< 2147483647->
      marshal_int(4, Value, Pos);
  
  marshal(uint32, Value, Pos) when Value >= 0 andalso Value =< 4294967295 ->
      marshal_uint(4, Value, Pos);
  
  marshal(int64, Value, Pos) ->
      marshal_int(8, Value, Pos);
  
  marshal(uint64, Value, Pos) when Value >= 0 ->
      marshal_uint(8, Value, Pos);
  
  marshal(double, Value, Pos) when is_float(Value) ->
  