anchor.diff:  
   is_allowed(ServiceId, UserInfo, AuthzConf) ->
       watts_service_authz:is_authorized(ServiceId, UserInfo, AuthzConf).
  +
  +
  +are_params_valid(Params, #{params := ParamSets})
  +  when is_map(Params) ->
  +    ParamList = maps:keys(Params),
  +    ExistsMatching = fun(ParamSet, Current) ->
  +                             Current or fulfills_paramset(ParamList, ParamSet)
  +                     end,
  +    lists:foldl(ExistsMatching, false, ParamSets);
  +are_params_valid(Params, ServiceId)
  +  when is_map(Params), is_binary(ServiceId) ->
  +    case get_info(ServiceId) of
  +        {ok, ServiceConfig} ->
  +            are_params_valid(Params, ServiceConfig);
  +        _ ->
  +            false
  +    end;
  +are_params_valid(_Params, _Service) ->
  +    false.
  +
  +
  +fulfills_paramset([], []) ->
  +    true;
  +fulfills_paramset(_, []) ->
  +    false;
  +fulfills_paramset([], List) ->
  +    OnlyNonMandatory = fun(#{mandatory := true}, _) ->
  +                               false;
  +                          (#{mandatory := false}, Cur) ->
  +                                  Cur
  +                          end,
  +    lists:foldl(OnlyNonMandatory, true, List);
  +fulfills_paramset(Params, [#{key := Key, mandatory := Mandatory} | ParamSet]) ->
  +    case { lists:member(Key, Params), Mandatory }  of
  +        {true, _} ->
  +            fulfills_paramset(lists:delete(Key, Params), ParamSet);
  +        {false, true} ->
  +            fulfills_paramset(lists:delete(Key, Params), ParamSet);
  +        {false, false} ->
  +            false
  +    end.
  +
  +
  +
   
   
   add(#{ id := ServiceId } = ServiceInfo) when is_binary(ServiceId) ->
  
positive.code: 
  
  validate_call_parameter_set(Set, Info) ->
      validate_call_parameter_set(Set, Info, [], true).
  validate_call_parameter_set([], #{params := Params} = Info, ParamSet, Result)->
      NewParams = [ParamSet | Params ],
      NewInfo = maps:put(params, NewParams, Info),
      {Result, NewInfo};
  validate_call_parameter_set([Param | T], #{id := Id} = Info, ParamSet, Current)
    when is_map(Param) ->
      RequiredKeys = [description, name, key, type],
      MissingKeys = RequiredKeys -- maps:keys(Param),
      case MissingKeys of
  
negative.code: -export([exists/1]).
  -export([is_enabled/1]).
  -export([is_allowed/2]).
  -export([are_params_valid/2]).
  -export([allows_same_state/1]).
  -export([get_credential_limit/1]).
  -export([get_queue/1]).
  