#########
#  ============LICENSE_START====================================================
#  org.onap.aaf
#  ===========================================================================
#  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
#  ===========================================================================
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#  ============LICENSE_END====================================================
#
cadi_protocols=TLSv1.1,TLSv1.2

aaf_locate_url=https://localhost:8095
aaf_url=https://AAF_LOCATE_URL/%C%AAF_NS.service:2.1
aaf_oauth2_introspect_url=https://AAF_LOCATE_URL/%C%AAF_NS.introspect:2.1/introspect
aaf_oauth2_token_url=https://AAF_LOCATE_URL/%C%AAF_NS.token:2.1/token
cm_url=https://AAF_LOCATE_URL/%C%AAF_NS.cm:2.1
gui_url=https://AAF_LOCATE_URL/%C%AAF_NS.gui.2.1
fs_url=https://AAF_LOCATE_URL/%C%AAF_NS.fs.2.1
