This package was debianized by Duncan Findlay <duncf@debian.org> on
Sat, 24 Nov 2001 18:37:39 -0500.

It was downloaded from http://www.spamassassin.org/

Upstream Authors: Justin Mason <jm@jmason.org>,
		  Craig Hughes <craig@hughes-family.org>
                  Daniel Quinlan <quinlan@pathname.com>
                  Theo van Dinter <felicity@kluge.net>
                  and others

Copyright 2000-2004 Justin Mason and others
Copyright 2004-2008 Apache Software Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

On Debian GNU/Linux systems, the complete text of the License can be
found in /usr/share/common-licenses/Apache-2.0.

You may also 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.

