<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->

<Response
      xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17
        http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd">
    <Result>
    	<!-- OPTIONAL feature.
    		If this feature is INCLUDED in the product:
    			Decision = Permit
    			StatusCode = ok
    		If this feature is NOT INCLUDE in the product:
    			Decision = Indeterminate
    			StatusCode = processing-error
    	 -->
        <Decision>Indeterminate</Decision>
        <Status>
            <StatusCode
                  Value="urn:oasis:names:tc:xacml:1.0:status:processing-error"/>
        </Status>
    </Result>
</Response>
