<!--
 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.

-->
<project	xmlns="http://maven.apache.org/DECORATION/1.4.0"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 https://maven.apache.org/xsd/decoration-1.4.0.xsd"
			name="log4cxx">

	<publishDate	position="right" />
	<version		position="right" />

	<bannerLeft>
		<name>Logging Services</name>
		<src>images/logos/ls-logo.jpg</src>
		<href>https://logging.apache.org</href>
		<title>Open the Apache Logging homepage</title>
	</bannerLeft>

	<body>
		<links>
			<item	name="Logging Wiki"
					href="https://wiki.apache.org/logging"
			/>
			<item	name="Apache"
					href="https://www.apache.org/"
			/>
			<item	name="Logging Services"
					href="https://logging.apache.org/"
			/>
			<item	name="GitHub"
					href="https://github.com/apache/logging-log4cxx"
			/>
		</links>

		<menu	name="About"
				img="icon-home">
			<item	name="What is log4cxx?"
					href="/index.html"
			/>
			<item	name="Project Information"
					href="project-info.html"
			/>
			<item	name="Generated Reports"
					href="project-reports.html"
			/>
		</menu>

		<menu	name="Usage"
				img="icon-book">
			<item	name="How to use log4cxx?"
					href="/usage.html"
			/>
			<item	name="API Documentation"
					href="/apidocs/index.html"
			/>
			<item	name="FAQ"
					href="/faq.html"
			/>
			<item	name="Non-English Logging"
					href="/non-english-logging.html"
			/>
		</menu>

		<menu	name="Get"
				img="icon-cog">
			<item	name="Download"
					href="/download.html"
			/>
			<item	name="Changes"
					href="/changes-report.html"
			/>
			<item	name="License"
					href="/license.html"
			/>
		</menu>

		<menu	name="Community"
				img="icon-pencil">
			<item	name="Mailing Lists"
					href="/mail-lists.html"
			/>
			<item	name="Issue Tracking"
					href="/community/issue-tracking.html"
			/>
			<item	name="Wiki"
					href="https://wiki.apache.org/logging-log4cxx"
			/>
		</menu>

		<menu	name="Development"
				img="icon-pencil">
			<item	name="Repository"
					href="/source-repository.html"
			/>
			<item	name="Dependencies"
					href="dependencies.html"
			/>
			<item	name="Building"
					href="/building/index.html">
				<item	name="autotools"
						href="/building/autotools.html"
				/>
				<item	name="Apache Maven 2"
						href="/building/maven.html"
				/>
				<item	name="Microsoft vcpkg"
						href="/building/vcpkg.html"
				/>
				<item	name="CMake"
						href="/building/cmake.html"
				/>
			</item>
		</menu>

		<menu	name="Apache"
				img="icon-info-sign">
			<item	name="Home"
					href="https://www.apache.org"
			/>
			<item	name="Sponsorship"
					href="https://www.apache.org/foundation/sponsorship.html"
			/>
			<item	name="Thanks"
					href="https://www.apache.org/foundation/thanks.html"
			/>
			<item	name="Conferences"
					href="https://www.apachecon.com"
			/>
		</menu>
	</body>
</project>
