#!/bin/sh

set -e

if [ "$1" = purge ]
then
  rm -rf /var/lib/emacsen-common
fi

# Automatically added by dh_installdeb/13.11.3
dpkg-maintscript-helper rm_conffile /etc/emacs/site-start.d/00debian-vars.el 3.0.3\~ emacsen-common -- "$@"
dpkg-maintscript-helper rm_conffile /etc/emacs/site-start.el 3.0.3\~ emacsen-common -- "$@"
# End automatically added section

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     b08ac55ece292f87a4b63fc1914aaca3  usr/lib/emacsen-common/emacs-install
b4777079e48f11692a3761e593d597f8  usr/lib/emacsen-common/emacs-package-install
5c5e2ee72a1cbb730c7e9f3d45a3c130  usr/lib/emacsen-common/emacs-package-remove
c5f18b70e7a6d3e1aac0a3f18439a4c0  usr/lib/emacsen-common/emacs-remove
730ee612282581ea26f4a7a93dc965f1  usr/lib/emacsen-common/lib.pl
897316929176464ebc9ad085f31e7284  usr/lib/emacsen-common/packages/compat/emacsen-common
54e89222962dd9db5cbe2eda25c0b6df  usr/lib/emacsen-common/packages/install/emacsen-common
2b2a97ebdcf7f80b0fe511b5d71e1fa4  usr/lib/emacsen-common/packages/remove/emacsen-common
8e2d803b2cf54573e71f5928f553e99b  usr/share/doc/emacsen-common/changelog.gz
ebad92214119e838a2df442ce0c027b3  usr/share/doc/emacsen-common/copyright
753ae0e8a516b6b9187c3712262669c1  usr/share/doc/emacsen-common/debian-emacs-policy.gz
37e5cbffc578fa857c90f869007573d1  usr/share/doc/emacsen-common/sample-package-install-foo
3af629773f630787a6e8c40470ef5464  usr/share/doc/emacsen-common/sample-package-remove-foo
734d0b9f07e844a9be8d4a3e4dbfd00e  usr/share/emacsen-common/debian-startup.el
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Package: emacsen-common
Version: 3.0.5
Architecture: all
Maintainer: Rob Browning <rlb@defaultvalue.org>
Installed-Size: 55
Conflicts: emacs19, emacs20, emacs21-common, emacs22-common, emacs23-common, emacs24-common, emacs25-common, xemacs21-support (<< 21.4.24-6~)
Section: editors
Priority: optional
Description: Common facilities for all emacsen
 This package contains code that is needed by all the (x)emacs
 packages.  It will be automatically installed when needed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Package: emacsen-common
Status: install reinstreq half-installed
Priority: optional
Section: editors
Architecture: all
Version: 3.0.5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          #!/usr/bin/perl -w

use Errno;
use strict;

$ENV{'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'} = 't';

my $lib_dir = "/usr/lib/emacsen-common";
my $invoked_by_old_pkg;
my $context;
my $flavor;

require $lib_dir . "/lib.pl";

umask 0022 or die "emacs-install: can't set umask, aborting.";

sub usage
{
  my($file_handle) = @_;
  if($invoked_by_old_pkg)
  {
    print $file_handle "Usage: emacs-install FLAVOR\n";
  }
  else
  {
    print $file_handle "Usage: emacs-install (--preinst|--postinst) FLAVOR\n";
  }
}

if(scalar(@ARGV) == 1)
{
  $invoked_by_old_pkg = 1;
  $flavor = $ARGV[0];
  $context = 'postinst;'
}
elsif (scalar(@ARGV) == 2)
{
  if($ARGV[0] eq '--preinst') { $context = 'preinst'; }
  elsif($ARGV[0] eq '--postinst') { $context = 'postinst'; }
  else
  {
    usage(*STDERR{IO});
    exit(1);
  }
  $flavor = $ARGV[1];
}
else
{
  usage(*STDERR{IO});
  exit(1);
}

if($context eq 'preinst')
{
  my $f = "$::installed_flavor_state_dir/$flavor";
  unlink("$f");
  die "ERROR: cannot unlink $f: $!, " unless (unlink($f) or $!{ENOENT});
  exit(0);
}

# Must be --postinst.

my @installed_flavors = get_installed_flavors();

# Mark as safe to include in list of flavors for package setup.
ex('touch', "$::installed_flavor_state_dir/$flavor");

my @ordered_pkg_list =
    generate_add_on_install_list(get_installed_add_on_packages());

foreach my $pkg (@ordered_pkg_list)
{
  print "Install $pkg for $flavor\n";
  my $script = $lib_dir . "/packages/install/$pkg";
  my $failed;
  if(-e "$lib_dir/packages/compat/$pkg") # New-style package.
  {
    $failed = -e $script && (system($script, $flavor) != 0);
  }
  else # Old-style package.
  {
    $failed = -e $script && (system($script, $flavor, @installed_flavors) != 0);
  }
  if($failed)
  {
    print STDERR "ERROR: install script from $pkg package failed\n";
    exit(1);
  }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #!/usr/bin/perl -w

use Errno;
use strict;

$ENV{'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'} = 't';

my $lib_dir = "/usr/lib/emacsen-common";
my $invoked_by_old_pkg;
my $context;
my $pkg;

require $lib_dir . "/lib.pl";

umask 0022 or die "emacs-package-install: can't set umask, aborting.";

sub usage
{
  my($file_handle) = @_;
  if($invoked_by_old_pkg)
  {
    print $file_handle "Usage: emacs-package-install FLAVOR\n";
  }
  else
  {
    print $file_handle
        "Usage: emacs-package-install (--preinst|--postinst) FLAVOR\n";
  }
}

sub is_new_pkg
{
  my($pkg) = @_;
  return (-e  "$lib_dir/packages/compat/$pkg");
}

if(scalar(@ARGV) == 1)
{
  $invoked_by_old_pkg = 1;
  $pkg = $ARGV[0];
  $context = 'postinst';
}
elsif (scalar(@ARGV) == 2)
{
  if($ARGV[0] eq '--preinst') { $context = 'preinst'; }
  elsif($ARGV[0] eq '--postinst') { $context = 'postinst'; }
  else
  {
    usage(*STDERR{IO});
    exit(1);
  }
  $pkg = $ARGV[1];
}
else
{
  usage(*STDERR{IO});
  exit(1);
}

if($context eq 'preinst')
{
  die "ERROR: cannot unlink $::installed_package_state_dir/$pkg: $!, "
      unless (unlink("$::installed_package_state_dir/$pkg") or $!{ENOENT});
  exit(0);
}

# Must be --postinst.

validate_add_on_pkg($pkg, 'emacs-package-install', $invoked_by_old_pkg);

# Mark package as safe to attempt to setup.
ex('touch', "$::installed_package_state_dir/$pkg");

# Get all the packages $pkg depends on, dependency sorted.
my @pkgs_to_handle = generate_add_on_install_list([$pkg]);
my @installed_flavors = get_installed_flavors();

foreach my $pkg (@pkgs_to_handle)
{
  my $script = $lib_dir . "/packages/install/$pkg";

  if(is_new_pkg($pkg))
  {
    foreach my $flavor (@installed_flavors)
    {
      print "Install $pkg for $flavor\n";
      if(-e $script && (system($script, $flavor) != 0))
      {
        print STDERR "ERROR: install script from $pkg package failed\n";
        exit(1);
      }
    }
  }
  else # old pkg
  {
    print "Install $pkg for emacs\n";
    ex($script, 'emacs', @installed_flavors) if -e $script;

    foreach my $flavor (@installed_flavors)
    {
      print "Install $pkg for $flavor\n";
      if(-e $script && (system($script, $flavor, @installed_flavors) != 0))
      {
        print STDERR "ERROR: install script from $pkg package failed\n";
        exit(1);
      }
    }
  }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/usr/bin/perl -w

use Errno;
use strict;

$ENV{'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'} = 't';

my $lib_dir = "/usr/lib/emacsen-common";
my $invoked_by_old_pkg;
my $pkg;

require $lib_dir . "/lib.pl";

umask 0022 or die "emacs-remove: can't set umask, aborting.";

sub usage
{
  my($file_handle) = @_;
  if($invoked_by_old_pkg)
  {
    print $file_handle "Usage: emacs-package-remove FLAVOR\n";
  }
  else
  {
    print $file_handle "Usage: emacs-package-remove --prerm FLAVOR\n";
  }
}

if(scalar(@ARGV) == 1)
{
 $invoked_by_old_pkg = 1;
  $pkg = $ARGV[0];
}
elsif (scalar(@ARGV) == 2 && $ARGV[0] eq '--prerm')
{
  $pkg = $ARGV[1];
}
else
{
  usage(*STDERR{IO});
  exit(1);  
}

validate_add_on_pkg($pkg, 'emacs-package-remove', $invoked_by_old_pkg);

# Silence "single use" warning.
$::installed_package_state_dir = $::installed_package_state_dir;

my @installed_flavors = get_installed_flavors();
my $script = $lib_dir . "/packages/remove/$pkg";

if(!$invoked_by_old_pkg)
{
  foreach my $flavor (@installed_flavors)
  {
    print "Remove $pkg for $flavor\n";
    if(-e $script && (system($script, $flavor) != 0))
    {
      print STDERR "ERROR: remove script from $pkg package failed\n";
      exit(1);
    }
  }
}
else # $invoked_by_old_pkg
{
  print "Remove $pkg for emacs\n";
  ex($script, 'emacs', @installed_flavors) if -e $script;

  foreach my $flavor (@installed_flavors)
  {
    print "Remove $pkg for $flavor\n";
    if(-e $script && (system($script, $flavor, @installed_flavors) != 0))
    {
      print STDERR "ERROR: remove script from $pkg package failed\n";
      exit(1);
    }
  }
}

die "ERROR: cannot unlink $::installed_package_state_dir/$pkg: $!, "
    unless (unlink("$::installed_package_state_dir/$pkg") or $!{ENOENT});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     #!/usr/bin/perl -w

use Errno;
use strict;

$ENV{'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'} = 't';

my $lib_dir = "/usr/lib/emacsen-common";
my $invoked_by_old_pkg;
my $flavor;

require $lib_dir . "/lib.pl";

umask 0022 or die "emacs-remove: can't set umask, aborting.";

sub usage
{
  my($file_handle) = @_;
  if($invoked_by_old_pkg)
  {
    print $file_handle "Usage: emacs-remove FLAVOR\n";
  }
  else
  {
    print $file_handle "Usage: emacs-remove --prerm FLAVOR\n";
  }
}

if(scalar(@ARGV) == 1)
{
  $invoked_by_old_pkg = 1;
  $flavor = $ARGV[0];
}
elsif(scalar(@ARGV) == 2 && $ARGV[0] eq '--prerm')
{
  $flavor = $ARGV[1];
}
else
{
  usage(*STDERR{IO});
  exit(1);
}

my @ordered_pkg_list =
    reverse
    generate_add_on_install_list(get_installed_add_on_packages());

my @installed_flavors = get_installed_flavors();

foreach my $pkg (@ordered_pkg_list)
{
  print "Remove $pkg for $flavor\n";
  my $script = $lib_dir . "/packages/remove/$pkg";
  my $failed;
  if(-e "$lib_dir/packages/compat/$pkg") # New-style package.
  {
    $failed = -e $script && (system($script, $flavor) != 0);
  }
  else # Old-style package.
  {
    $failed = -e $script && (system($script, $flavor, @installed_flavors) != 0);
  }
  if($failed)
  {
    print STDERR "ERROR: remove script from $pkg package failed\n";
    exit(1);
  }
}

# Silence "single use" warning.
$::installed_flavor_state_dir = $::installed_flavor_state_dir;

die "ERROR: cannot unlink $::installed_flavor_state_dir/$flavor: $!, "
    unless (unlink("$::installed_flavor_state_dir/$flavor") or $!{ENOENT});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #!/usr/bin/perl -w

use strict;
use Cwd;

# depends on: dpkg, tsort, perl

my $lib_dir = "/usr/lib/emacsen-common";
my $var_dir = "/var/lib/emacsen-common";

$::installed_package_state_dir = "${var_dir}/state/package/installed";
$::installed_flavor_state_dir = "${var_dir}/state/flavor/installed";

sub ex
{
  my(@cmd) = @_;
  if(system(@cmd) != 0)
  {
    die join(" ", @cmd) . " failed";
  }
}

sub glob_in_dir
{
  my ($dir, $pattern) = @_;
  my $oldir = getcwd;
  chdir($dir) or die "chdir $dir: $!";
  my @files = glob("*[!~]");
  chdir($oldir);
  return \@files;
}

sub validate_add_on_pkg
{
  my ($pkg, $script, $old_invocation_style) = @_;
  if($old_invocation_style)
  {
    if(-e "$lib_dir/packages/compat/$pkg")
    {
      print STDERR "ERROR: $pkg is broken - called $script as an old-style add-on, but has compat file.\n";
      #exit(1);
    }
  }
  else # New invocation style.
  {
    unless(-e "$lib_dir/packages/compat/$pkg")
    {
      print STDERR "ERROR: $pkg is broken - called $script as a new-style add-on, but has no compat file.\n";
      #exit(1);
    }
  }
}

sub get_installed_add_on_packages
{
  # Return all of the old format packages, plus all of the new-format
  # packages that are ready (i.e. have a state/installed file).  In
  # this case ready means ready for compilation.
  my $all_pkgs = glob_in_dir("$lib_dir/packages/install", '*[!~]');
  my $new_format_pkgs = glob_in_dir("$lib_dir/packages/compat", '*[!~]');
  my %ready_pkgs = map { $_ => 1 } @$all_pkgs;
  for my $p (@$new_format_pkgs)
  {
    delete $ready_pkgs{$p} unless (-e "$::installed_package_state_dir/$p");
  }
  my @result = keys %ready_pkgs;
  return \@result;
}

sub get_installed_flavors
{
  my $flavors = glob_in_dir($::installed_flavor_state_dir, '*[!~]');
  return @$flavors;
}

sub get_package_status
{
  my($pkg) = @_;
  my $status = `dpkg --status $pkg`;
  die 'emacsen-common: dpkg invocation failed' if($? != 0);
  $status =~ s/\n\s+//gmo; # handle any continuation lines...
  return $status;
}

sub filter_depends
{
  my($depends_string, $installed_add_ons) = @_;

  # Filter out all the "noise" (version number dependencies, etc)
  # and handle or deps too, i.e. "Depends: foo, bar | baz" 
  my @relevant_depends = split(/[,|]/, $depends_string);
  @relevant_depends = map { /\s*(\S+)/o; $1; } @relevant_depends;

  # Filter out all non-add-on packages.
  @relevant_depends = grep {
    my $candidate = $_;
    grep { $_ eq $candidate } @$installed_add_ons;
  } @relevant_depends;
  
  return @relevant_depends;
}

sub generate_relevant_tsort_dependencies_internals
{
  my($pkglist, $installed_add_ons, $progress_hash) = @_;

  # print "GRD: " . join(" ", @$pkglist) . "\n";
  
  my $pkg = shift @$pkglist;

  if(!$pkg || $$progress_hash{$pkg}) {
    return ();
  } else {
    my $status = get_package_status($pkg);
    $status =~ /^Depends:\s+(.*)/mo;
    my $depends = $1; $depends = "" if ! $depends;
    my @relevant_depends = filter_depends($depends, $installed_add_ons);
    my $newpkglist = [@$pkglist, @relevant_depends];

    $$progress_hash{$pkg} = 1;

    # pkg is in twice so we don't have to worry about package with no
    # relevant dependencies.  tsort can't handle that.
    my @tsort_strings = "$pkg $pkg\n"; 
    map { push @tsort_strings, "$_ $pkg\n"; } @relevant_depends;
    
    return (@tsort_strings,
            generate_relevant_tsort_dependencies_internals($newpkglist,
                                                           $installed_add_ons,
                                                           $progress_hash));
  }
}

sub generate_relevant_tsort_dependencies
{
  my($pkglist, $installed_add_ons, $progress_hash) = @_;
  # Make a copy because we're going to mangle it.
  my @listcopy = @$pkglist;
  shift @_;
  return(generate_relevant_tsort_dependencies_internals(\@listcopy, @_));
}


sub reorder_add_on_packages
{
  my($pkglist, $installed_add_ons) = @_;
  my @depends = generate_relevant_tsort_dependencies($pkglist,
                                                     $installed_add_ons,
                                                     {});
  my $pid = open(TSORT, "-|");
  die "Couldn't fork for tsort: $!" unless defined($pid);

  # What a strange idiom...
  if($pid == 0) {
    my $sub_pid = open(IN, "|-");
    die "Couldn't sub-fork for tsort: $!" unless defined($sub_pid);
    if($sub_pid == 0) {
      exec 'tsort' or die "Couldn't run tsort: $!";
    }
    print IN @depends;
    exit 0;
  }
  my @ordered_pkgs = <TSORT>;
  chomp @ordered_pkgs;
  return @ordered_pkgs
}

sub generate_add_on_install_list
{
  my($packages_to_sort) = @_;
  my @sorted_pkgs = reorder_add_on_packages($packages_to_sort,
                                            get_installed_add_on_packages());
  return(@sorted_pkgs);
}

# Test code
# my @input_packages = <STDIN>;
# my @result = generate_add_on_install_list(@input_packages);
# print "  " . join("\n  ", @result);

# To make require happy...
1;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              #!/bin/sh

set -e

flavor="$1"

echo "emacsen-common: Handling install of emacsen flavor $flavor"

rm -f \
   "/usr/share/$flavor/site-lisp/debian-startup.el" \
   "/usr/share/$flavor/site-lisp/debian-startup.elc"

# Create symlinks to the .el files (see section 5E in debian-emacs polcy).
(cd "/usr/share/$flavor/site-lisp"
 ln -s ../../emacsen-common/debian-startup.el .)

"$flavor" --no-init-file --no-site-file -batch -f batch-byte-compile \
          "/usr/share/$flavor/site-lisp/debian-startup.el"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       #!/bin/sh

set -e

flavor="$1"

echo "emacsen-common: Handling removal of emacsen flavor $flavor"

rm -f \
   "/usr/share/$flavor/site-lisp/debian-startup.el" \
   "/usr/share/$flavor/site-lisp/debian-startup.elc"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               To08-Dnhe0Wj:vd;@^ĪvU_+_gLylQcZE#Vre_JܬQ
'bF7Zir'
[[-Ђp;a+8l1܎GE~>bB_`:9A$F 3bo{zhA6|U;^!5;p,[(EI$3!1
V}DX߹u`,3hQ;ѻ .R[=8BuJ|uK6zZÕ˯	x.ݖm_ ZՀc`!c]0T71j%	}كEuOBWWfT
 :m'%ŗ5Xh,9yyq<A@\ĕw"Q*O., ZTųL
L|գOK٥\[@zD8:$qb`iu jX׌H[7FY|ՁKv%PzB B9rn}Q4_tn	ݚG]laDfFdkrp)M2C~=ڐ1T&hN1rWKDEƤ%9`0[)kzP\֕诽-ɧx* wTa                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  This package was created by Rob Browning <rlb@defaultvalue.org> on Sun,
18 Jan 1998 13:36:35 -0600

The source for this package was created by Robert Browning with some
code borrowed from the previous Debian emacs 19 package.  Unless
otherwise noted, the contents are Copyright (C) Rob Browning
<rlb@defaultvalue.org>, 1998-2014, 2017-2018, 2022, and all of the
code is covered under the terms of the GPL.  See the file
/usr/share/common-licenses/GPL for more information.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Zi#_A(3vz8gm5Mh`_Ҭw6c5Y^ץ+=׋[ƴ2Кtt&DMoM*_\V&3ɵ'_*.1_+oX6lkkQȻ'{j*qz⏟}J۲\wl}:}q4g/E<~Wp:izژڮH]VX٪{ҵ}wI4rƧ=I2K	gm;&RNVi5̒JhWm6PL[:`=ݮCӥm
Sg3Н.Vl9u13:.}cru<ͬX{hwcmTHBtѶS:[޽UMm{&6Sn\Fld3ٛ"t-\u?vu'XהUdlYuh}ut W)g%`,A-]]v*m\a2.cۛJeJALؽvѶgKV"6y(v}kʫhvz
RUZX|@ANA+#E(ϺQ o8!)H^l:rmꚍݗn_xM^
ݽ6rڅ
ѴfHy ,'tFNA5VLaw9=ge^Mud.I:W7YTHE{"0gFGd:^a=bRRrVmk^oƑ{$X^r	;Z	25l3ZG 
ظ}a9^)9YDdZKL]";(m3j|18t1V@bi~쐴<%9zCT}&ox3HD|W>R^BhKXPRdI3G S(vpm
2~Hq!jH{Na,C#-YY#GA\i"&%~#t(ZAhoGo~s}"-3K'dߴ0~`%}	"־i\+f-sI#(<x3vO>j3Xkj_-G5	MF/SΒ#C{Bf
1Sr)x`
>hs9%vLlWQɗY]rI%Z) pk5*m4LET,F'@6Iĕ*
DETI~1uz8"헟!Do\ezjw Gjb56I{
r&L$D_ D	+A0KbGzF3K&֡L8>u\(a19фT`[>:Ǚ
%ur0",N
~][%s#
K}"Ae+({4#jw7%?|}݌!d_g@Q)eǠHs~gsmeojt'
"t.#<)k+Qu
Bc@3`>wW!qȿIo%:4 ߡ;nQqE<z636uLU6R9ǪrrWv#ހ$<ĥP5peз2uO1uZuF+kɊ&deR#($_M5(F*BŵdkJjg	RI ҟO9w\Nc<NA=;B8~	Ayx(TՄg1$(d()6 n
D Q|_tef5pps>UG5HWsFz}0;G w4 ~]bNXXZe/ؖ]Ȧ$-	QH1Q*eFQꆉC!؝FT$/{&{
DH(?Ԍt܇(<s='I=tTCD~8P2MӐttCj,*I:a(@̓P
/Dm2}xt> 
Ɉ!
Y9_3V;rI銊cuB-JJ#U+ݷ!?cwV}3XOsBζÜ!3Wgtab/#Qn:OVoeI΂;)  [`w'׮g ffmsɛ
".h7jF~l2g\s2>IQGFS]^\hi?t8ax1@65_hz 'dPѰ1ef>Z_=*kj+RBeUGo]NZȱa궤?NH3-SRA}.^ix-M?hu{m*XUXR8$Ki4G2т!iWtL&nGirjLjIo5&#LGJ{FIA9Ox~:<
H^2
7z|Q-­`F#R?5kcro1m ".>
̈́+nN^h

~/ mA%8ql-*8iYQW||k5nYk]6Owyί49KL;*+]ĵ\CFrbgRPr8p/TR@U\:˯S3F\a%z<ع٧wA/jt
ӷA8RچG_aLw',טe89pļIu-HN1,,]F1ixTQnIQ!@{j*_n-*OBHhIjt5(:GA7ɍHʣBZE>\i$w|W" mb].^
ك3bLU͗7ͻ~'T)&T
u7r s\A7g(ؔ*bm(5`v4ԸKi
~4tҥFPo痴|ulDW%PvH)@*^GyC3Z#7VuT>L9$+;)-v\B9"L)42HgE3?EmNY,~Oq2^wxtIn_<ΙF.}|~D=9ԯ(/wz{*	~dBI'GJ(m,tP]e	K?\]*4E5:&C%<z	WA>6K'I@C@h#㻬L-exmdQ^n&^99j2#Mѯi$NAf
=*P:R9cx/[
?`.*s|`@KMVwtYÆU~%
Yc^gGCY$TDi6.Jo&xz/턕A[H&]#;ɘ"FƯ|7BGtPH |H
[V;4y̓Fj94Bs.7tAIћ
_Del(yڢ/aqyAZ4AiLl>d";DE)T_.[ysTPyUs.f
1/X#/C1F[q.m>}4Cs44 G<s%#N)_?(s  /Ѭ<V,f>.                                                                                                                                                                                                                                       #!/bin/sh
# /usr/lib/emacsen-common/packages/install/foo
# [ Sample only -- this script hasn't been tested, so be careful. ]
set -e

flavor="$1"
echo "install/foo: Handling install of emacsen flavor $flavor"

byte_compile_options='-batch -f batch-byte-compile'
elc_dir="/usr/share/$flavor/site-lisp/foo/"

mkdir -p "$elc_dir"

# Create symlinks to the .el files (see debian-emacs-polcy).  This
# makes complation easy, and allows find-function and find-library to
# work properly.
(cd "$elc_dir" && cp -s ../../../foo/*.el .)

# Byte compile them
(cd "$elc_dir"
 set +e
 "$flavor" $byte_compile_options *.el > install.log 2>&1
 if test $? -ne 0
 then
   cat install.log
   exit 1
 fi
 set -e
 gzip -9v install.log)

exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #!/bin/sh
# /usr/lib/emacsen-common/packages/remove/foo
# [ Sample only -- this script hasn't been tested, so be careful. ]
set -e

flavor="$1"
elc_dir="/usr/share/$flavor/site-lisp/foo"

echo "remove/foo: Handling removal of emacsen flavor $flavor"

(cd "$elc_dir" && rm -f *.elc *.el install.log install.log.gz)

if test -e "$elc_dir"
then
    rmdir --ignore-fail-on-non-empty "$elc_dir"
fi

exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ;;; debian-startup.el --- Debian specific emacsen startup code.

;; Copyright (C) 1998-2017 Rob Browning

;; Maintainer: Rob Browning <rlb@defaultvalue.org>
;; Keywords: debian

;; This file is part of the debian release of GNU Emacs, and will
;; be contributed to the FSF after testing. It is released under the same
;; terms, namely the GPL v2 or later.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;; This file contains startup code needed by all the various flavors
;; of Emacs for a Debian system.


(defun debian-pkg-add-load-path-item (item)
  "Takes a path item (a string) and adds it to load path in the
correct position for an add-on package, before the emacs system
directories, but after the /usr/local/ directories.  After modifying
load-path, returns the new load-path."
  (let ((pos 0)
        (last-local-pos nil)
        (lp-rest load-path))
    
    ;; Find the last /usr/local/ element.
    (while (not (null lp-rest))
      (if (and (not (null (car lp-rest)))
               (string-match "^/usr/local" (car lp-rest)))
          (setq last-local-pos pos))
      (setq pos (+ pos 1))
      (setq lp-rest (cdr lp-rest)))

    (if (not last-local-pos)
        (error "No /usr/local/ prefixed paths in load-path"))

    (let ((result '())
          (pos 0)
          (remainder load-path))
      (while (consp remainder)
        (setq result (cons (car remainder) result))
        (setq remainder (cdr remainder))
        (if (= pos last-local-pos)
            (setq result (cons item result)))
        (setq pos (+ pos 1)))
      (setq load-path (nreverse result))
      load-path)))

(defun debian-unique-strings (strings) 
  "Takes a list of strings and returns the list with *adjacent*
duplicates removed."
  (let ((result '()))
    (while (consp strings)
      (if (not (string= (car strings) (car (cdr strings))))
          (setq result (cons (car strings) result)))
      (setq strings (cdr strings)))
    (nreverse result)))

(defun debian-run-directories (&rest dirs)
  "Load each file of the form XXfilename.el or XXfilename.elc in any
of the dirs, where XX must be a number.  The files will be run in
alphabetical order.  If a file appears in more than one of the dirs,
then the earlier dir takes precedence, and a .elc file always
supercedes a .el file of the same name."

  (let* ((paths (mapcar 'copy-sequence dirs)) ; Ensure we have unique objects.

         ;; Get a list of all the files in all the specified
         ;; directories that match the pattern.
         (files
          (apply 'append 
                 (mapcar 
                  (lambda (dir) 
                    (directory-files dir nil "^[0-9][0-9].*\\.elc?$" t))
                  paths)))

         ;; Now strip the directory portion, remove any .el or .elc
         ;; extension.
         (stripped-names
          (mapcar (lambda (file) 
                    (if (string-match "\\.el$" file)
                        (substring file 0 -3)
                      (if (string-match "\\.elc$" file)
                          (substring file 0 -4)
                        file)))
                  (mapcar 
                   (lambda (file) (file-name-nondirectory file))
                   files)))
         
         ;; Finally sort them, and delete duplicates
         (base-names (debian-unique-strings (sort stripped-names 'string<))))

    (setq load-path (append paths load-path)) ; Prefix paths temporarily.
    ;; Now load the files.  "load" will make sure we get the byte
    ;; compiled one first, if any, and will respect load-path's
    ;; ordering.
    (mapc
     (lambda (file)
       (condition-case err
           (load file nil)
         (error (message "Error while loading %s: %s"
                         file (error-message-string err)))))
     base-names)
    ;; Remove the paths we inserted, and only those paths.
    (dolist (item paths)
      (setq load-path (remq item load-path)))))

(defun debian-startup (flavor)
  (debian-run-directories (format "/etc/%s/site-start.d" (symbol-name flavor))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             /.
/usr
/usr/lib
/usr/lib/emacsen-common
/usr/lib/emacsen-common/emacs-install
/usr/lib/emacsen-common/emacs-package-install
/usr/lib/emacsen-common/emacs-package-remove
/usr/lib/emacsen-common/emacs-remove
/usr/lib/emacsen-common/lib.pl
/usr/lib/emacsen-common/packages
/usr/lib/emacsen-common/packages/compat
/usr/lib/emacsen-common/packages/compat/emacsen-common
/usr/lib/emacsen-common/packages/install
/usr/lib/emacsen-common/packages/install/emacsen-common
/usr/lib/emacsen-common/packages/remove
/usr/lib/emacsen-common/packages/remove/emacsen-common
/usr/share
/usr/share/doc
/usr/share/doc/emacsen-common
/usr/share/doc/emacsen-common/changelog.gz
/usr/share/doc/emacsen-common/copyright
/usr/share/doc/emacsen-common/debian-emacs-policy.gz
/usr/share/doc/emacsen-common/sample-package-install-foo
/usr/share/doc/emacsen-common/sample-package-remove-foo
/usr/share/emacsen-common
/usr/share/emacsen-common/debian-startup.el
/var
/var/lib
/var/lib/emacsen-common
/var/lib/emacsen-common/state
/var/lib/emacsen-common/state/flavor
/var/lib/emacsen-common/state/flavor/installed
/var/lib/emacsen-common/state/package
/var/lib/emacsen-common/state/package/installed
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Package: emacsen-common
Status: install reinstreq unpacked
Priority: optional
Section: editors
Installed-Size: 55
Maintainer: Rob Browning <rlb@defaultvalue.org>
Architecture: all
Version: 3.0.5
Conflicts: emacs19, emacs20, emacs21-common, emacs22-common, emacs23-common, emacs24-common, emacs25-common, xemacs21-support (<< 21.4.24-6~)
Description: Common facilities for all emacsen
 This package contains code that is needed by all the (x)emacs
 packages.  It will be automatically installed when needed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Package: emacsen-common
Status: install ok unpacked
Priority: optional
Section: editors
Installed-Size: 55
Maintainer: Rob Browning <rlb@defaultvalue.org>
Architecture: all
Version: 3.0.5
Conflicts: emacs19, emacs20, emacs21-common, emacs22-common, emacs23-common, emacs24-common, emacs25-common, xemacs21-support (<< 21.4.24-6~)
Description: Common facilities for all emacsen
 This package contains code that is needed by all the (x)emacs
 packages.  It will be automatically installed when needed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #! /bin/sh
# postinst script for dictionaries-common

set -e

# Sourcing debconf confmodule
. /usr/share/debconf/confmodule

case "$1" in
  configure)
  # This will remove /usr/share/pspell/region-to-spelling.map diversion by
  # dictionaries-common package and associated stuff if present
    rm -f /var/cache/dictionaries-common/region-to-spelling.map

  # This next handles a bug in some dpkg versions not removing
  # the symlink properly when upgrading
    if [ -L /usr/share/pspell/region-to-spelling.map ]; then
      RTS_DEST=`readlink /usr/share/pspell/region-to-spelling.map`
      if [ "$RTS_DEST" = "/var/cache/dictionaries-common/region-to-spelling.map" ]; then
	rm -f /usr/share/pspell/region-to-spelling.map
      fi
    fi

  # Removing the diversion if it still exists. trued just in case it does not,
  # since grep returns error breaking postinst because of set -e otherwise.
    DC_DIVERT=`dpkg-divert --list dictionaries-common | grep region-to-spelling.map` || true
    if [ "$DC_DIVERT" ]; then
      dpkg-divert --package  dictionaries-common --remove --rename \
	--divert /usr/share/pspell/region-to-spelling.map.orig \
	/usr/share/pspell/region-to-spelling.map
    fi

    # We no longer create the /usr/dict symlink

    # This will check for obsolete /etc/dictionary link
    if [ -L /etc/dictionary ]; then
      db_get dictionaries-common/old_wordlist_link
      if [ "$RET" = "true" ]; then
	rm /etc/dictionary
      fi
    fi

    # Ensure that automatic generation of files is done, such that we always
    # start with a sane environment.
    update-dictcommon-aspell
    update-dictcommon-hunspell
    # For wordlists and ispell dicts a non-await trigger will be enabled
    # to have most things delayed to the end of package installation.
    update-default-wordlist
    update-default-ispell

    # Remove ancient /etc/openoffice/dictionary.lst if present
    if [ -f "/etc/openoffice/dictionary.lst" ]; then
      echo "Removing obsolete \"/etc/openoffice/dictionary.lst\"" >&2
      rm -f "/etc/openoffice/dictionary.lst" "/etc/openoffice/dictionary.lst~" "/etc/openoffice/dictionary.lst.old"
      rmdir --ignore-fail-on-non-empty "/etc/openoffice"
    fi

    # Remove obsolete jed startup file
    if [ -f /etc/jed-init.d/50dictionaries-common.sl ] ; then
      echo "Removing obsolete /etc/jed-init.d/50dictionaries-common.sl" >&2
      rm -f /etc/jed-init.d/50dictionaries-common.sl
    fi

    # That made this dir not be removed by dpkg. Remove it if exists, is non
    # empty, and jed-common is not installed
    if [ -d /etc/jed-init.d ] && [ ! -e /etc/jed-init.d/00debian.sl ]; then
      rmdir --ignore-fail-on-non-empty /etc/jed-init.d
    fi

    # ---------------- 8< ----------------------------------------------------
    # Remove obsolete dictionaries-common.reconfiguring. This problem only
    # lasted for two days and, so this should go away long before releasing lenny
    if [ -f /var/cache/dictionaries-common/postinst.reconfiguring ] ; then
      echo "Removing obsolete /var/cache/dictionaries-common/postinst.reconfiguring" >&2
      rm -f /var/cache/dictionaries-common/postinst.reconfiguring
    fi
    # ---------------- 8< ----------------------------------------------------

    # Remove obsolete aspell-equivs file
    if [ -f /var/cache/dictionaries-common/emacsen-aspell-equivs.el ] ; then
      echo "Removing obsolete /var/cache/dictionaries-common/emacsen-aspell-equivs.el" >&2
      rm -f /var/cache/dictionaries-common/emacsen-aspell-equivs.el
    fi

    ;;
  triggered)
    [ -z "$DICT_COMMON_DEBUG" ] || echo "Triggers list: \"$2\"" >&2
    for trigger in $2; do
      [ -z "$DICT_COMMON_DEBUG" ] || echo "Running trigger \"$trigger\"" >&2
      case $trigger in
	aspell-autobuildhash)
	  aspell-autobuildhash --triggered
	  ;;
	ispell-autobuildhash)
	  ispell-autobuildhash --triggered
	  ;;
	update-default-ispell)
	  update-default-ispell --triggered
	  ;;
	update-default-wordlist)
	  update-default-wordlist --triggered
	  ;;
	/usr/share/hunspell)
	  update-dictcommon-hunspell
	  ;;
	*)
	  echo "Unsupported trigger \"$trigger\"" >&2
      esac
    done
    ;;
  abort-upgrade|abort-remove|abort-deconfigure)
    ;;

  *)
    echo "postinst called with unknown argument \`$1'" >&2
    exit 0
    ;;
esac

# Automatically added by dh_installemacsen/13.11.4
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
	if [ -e /var/lib/emacsen-common/state/package/installed/emacsen-common -a -x /usr/lib/emacsen-common/emacs-package-install ] ; then
		/usr/lib/emacsen-common/emacs-package-install --postinst dictionaries-common
	fi
fi
# End automatically added section


exit 0

# Local Variables:
#  sh-basic-offset: 2
#  sh-indentation: 2
# End:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          /etc/emacs/site-start.d/50dictionaries-common.el
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               #! /bin/sh
# preinst script for dictionaries-common

set -e

case "$1" in install|upgrade)
    # This will clean up the alternatives for ispell-dictionary.hash
    # set by the pre-Policy ispell dictionary packages
    # A /var/lib/dpkg/alternatives/ispell-dictionary.hash file is sometimes left
    # if alternative was set to manual mode. Setting it to --auto ensures removal.
    # Doing also for wordlists just in case.
    ALTSDIR="/var/lib/dpkg/alternatives"
    ALTERNATIVES="ispell-dictionary.hash dictionary"
    for alternative in $ALTERNATIVES; do
      if [ -e "$ALTSDIR/$alternative" ]; then
	echo " Removing obsolete alternative '$alternative'" >&2
	DICTS=`LANG=C update-alternatives --display $alternative \
          | grep priority | cut -f1 -d" "`
	for i in $DICTS ; do
	  update-alternatives --remove $alternative $i
	done
	update-alternatives --auto $alternative || true
      fi
    done
    # Once wamerican is the only standard dict package and it does not
    # depend on dictionaries-common it will provide an own
    # /usr/share/dict/words pointing to american wordlist. This must be
    # diverted if dictionaries-common system is used
    dpkg-divert --package dictionaries-common \
      --divert /usr/share/dict/words.pre-dictionaries-common  \
      --rename /usr/share/dict/words
    ;;
esac

# Automatically added by dh_installemacsen/13.11.4
if ( [ "$1" = "install" ] || [ "$1" = "upgrade" ] ) \
	&& [ -e /var/lib/emacsen-common/state/package/installed/emacsen-common -a -x /usr/lib/emacsen-common/emacs-package-install ]
then
	/usr/lib/emacsen-common/emacs-package-install --preinst dictionaries-common
fi
# End automatically added section


# Local Variables:
#  sh-basic-offset: 2
#  sh-indentation: 2
# End:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #! /bin/sh
# prerm script for dictionaries-common
# Written by Rafael Laboissiere <rafael@debian.org> on
# Mon Oct 18 16:17:08 CEST 1999

set -e

case "$1" in
  remove|deconfigure)
    rm -f /etc/dictionaries-common/ispell-default
    for i in /etc/dictionaries-common/default.aff \
      /etc/dictionaries-common/default.hash \
      /etc/dictionaries-common/words \
      /usr/lib/ispell/default.aff \
      /usr/lib/ispell/default.hash \
      /usr/share/dict/words; do
      if [ -L "$i" ]; then
	rm -f "$i"
      elif [ -e "$i" ]; then
	echo "dictionaries-common.prerm: leaving behind non-symlink \"$i\"" >&2
      fi
    done
    rm -f /var/cache/dictionaries-common/*
    if [ -L /usr/dict ]; then
      rm /usr/dict
    fi
    ;;

  upgrade) ;;

  *)
    echo "prerm called with unknown argument \`$1'" >&2
    exit 0
esac

# Automatically added by dh_installemacsen/13.11.4
if [ -e /var/lib/emacsen-common/state/package/installed/emacsen-common -a -x /usr/lib/emacsen-common/emacs-package-remove ] ; then
	/usr/lib/emacsen-common/emacs-package-remove --prerm dictionaries-common
fi
# End automatically added section


exit 0

# Local Variables:
#  sh-basic-offset: 2
#  sh-indentation: 2
# End:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            # Triggers for dictionaries-common
interest-noawait /usr/share/hunspell
interest-noawait aspell-autobuildhash
interest-noawait ispell-autobuildhash
interest-noawait update-default-ispell
interest-noawait update-default-wordlist
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #! /bin/sh
# postrm script for dictionaries-common

set -e

# Once wamerican is the only standard dict package and it does not
# depend on dictionaries-common it will provide an own
# /usr/share/dict/words pointing to american wordlist. This was
# diverted if dictionaries-common is used. We need to remove that
# diversion if dictionaries-common is removed
if [ "$1" = "remove" ]; then
  dpkg-divert --package dictionaries-common \
    --rename --remove /usr/share/dict/words
fi

#  Make sure /etc/openoffice myspell stuff is removed on purge

if [ "$1" = "purge" ]; then
  rm -f /etc/openoffice/dictionary.lst /etc/openoffice/dictionary.lst.old
fi

# Automatically added by dh_installdebconf/13.11.4
if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; then
	. /usr/share/debconf/confmodule
	db_purge
fi
# End automatically added section


exit 0

# Local Variables:
#  sh-basic-offset: 2
#  sh-indentation: 2
# End:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 6341ec43e55b2fce52600d5bfc6b9649  usr/bin/ispell-wrapper
1b8241323bd1458a89feaf8f0bfcd948  usr/bin/select-default-iwrap
897316929176464ebc9ad085f31e7284  usr/lib/emacsen-common/packages/compat/dictionaries-common
3b41e2abe0e9c863e63d6735fa3e6228  usr/lib/emacsen-common/packages/install/dictionaries-common
327e99e6f535c8c13565a7b67be68166  usr/lib/emacsen-common/packages/remove/dictionaries-common
a5d42ec393d3345d7849e164478335d4  usr/lib/ispell/README.select-ispell
2e77798db0b342eaab19cd4df9df15c1  usr/sbin/aspell-autobuildhash
5e761d1adf2d4e4cacb4007798aee6d1  usr/sbin/ispell-autobuildhash
a0532b8bf66bfd6ca333edaa7848fbeb  usr/sbin/remove-default-ispell
5ed0a0001545f41a747324243440c4e7  usr/sbin/remove-default-wordlist
e9a3b99e31482c0ea6aab7b218b9b8fe  usr/sbin/select-default-ispell
d8ea2dd25c2758bc3998f95192099671  usr/sbin/select-default-wordlist
1c42770800d484d48ccc01157d1cebe6  usr/sbin/update-default-ispell
fada50e15f07765043acf4b86521b3e6  usr/sbin/update-default-wordlist
239aba9cb68e81577bd2f1015c35ebb8  usr/sbin/update-dictcommon-aspell
84697d5e41a33d7a548c6178a467b2ec  usr/sbin/update-dictcommon-hunspell
d7520ffb64c87ca4cf1d2313d70dd6ce  usr/share/dict/README.select-wordlist
9666ba4bcc0d1c0d4e6dbd6b72715f29  usr/share/dictionaries-common/dc-debconf-default-value.pl
00e81b141fa6a209213ce30d611111a0  usr/share/dictionaries-common/dc-debconf-select.pl
d41d8cd98f00b204e9800998ecf8427e  usr/share/dictionaries-common/elanguages
cae4996865efd19d59e1ad1ab11d45b7  usr/share/dictionaries-common/mutt-ispell-init
d41d8cd98f00b204e9800998ecf8427e  usr/share/dictionaries-common/site-elisp/.nosearch
269a3cf802fcb6ee5f2783ed8e49692d  usr/share/dictionaries-common/site-elisp/debian-ispell.el
3f046755ef92f9240f6575ea85ccf68d  usr/share/dictionaries-common/site-elisp/flyspell.el
001d5a32ba9e1e09df7af57e1af052cf  usr/share/dictionaries-common/site-elisp/ispell.el
7409fe35ba662309decfecc061383118  usr/share/doc/dictionaries-common/NEWS.Debian.gz
75bcf34bb062b4e916c908177f2c97ef  usr/share/doc/dictionaries-common/README.Debian.gz
aad45d215e73ff5b4ca702a902b703a9  usr/share/doc/dictionaries-common/README.dictionary.lst
52a51471b2649f606cf2cf458e972bea  usr/share/doc/dictionaries-common/README.emacs.gz
f9a3d61becabfde241176544fafe92c5  usr/share/doc/dictionaries-common/README.jed-support
5d43b84b85b40738ae26fdb242211eed  usr/share/doc/dictionaries-common/README.problems
cc79fd6cd567edc9da684b8e4dc69308  usr/share/doc/dictionaries-common/README.source
1e5a06b8b0fedf5e73e8a58db2b5f06d  usr/share/doc/dictionaries-common/changelog.gz
85631dd00d0e42f956a8823012d7fb02  usr/share/doc/dictionaries-common/copyright
54781ab596a45188a48b5db3c4e55306  usr/share/doc/dictionaries-common/dictionaries-common.checklist.gz
499797c6899e2e4791e888fc48b59a76  usr/share/lintian/overrides/dictionaries-common
32898dfaafdba7a1f4f1d5bf6ef38ab2  usr/share/man/man1/ispell-wrapper.1.gz
a43cbf26882ca58859085a3fa34a6fe1  usr/share/man/man1/select-default-iwrap.1.gz
0d9cf3f54559f4ffd838b96bd2a227e8  usr/share/man/man3/Debian::DictionariesCommon.3pm.gz
c95b8acbf03dbee333a5db689c51ccc7  usr/share/man/man8/aspell-autobuildhash.8.gz
11c2ac2e80f238e3bdc35344c10f2818  usr/share/man/man8/ispell-autobuildhash.8.gz
1b8e65eb757d1eec35a9a867b3e458b7  usr/share/man/man8/remove-default-ispell.8.gz
2aebcb94490d33a16171073e2624fcf4  usr/share/man/man8/remove-default-wordlist.8.gz
eeaf4a7f0b4224d0a85341f84f178cc0  usr/share/man/man8/select-default-ispell.8.gz
7eaad093d95960206ff2736e9ee4c4be  usr/share/man/man8/select-default-wordlist.8.gz
d3a2c21c35fcb44167ae54248e3bd66f  usr/share/man/man8/update-default-ispell.8.gz
ec36394f3de1819f3a6af980a07f8517  usr/share/man/man8/update-default-wordlist.8.gz
9525945a8995cf25be15751818055035  usr/share/man/man8/update-dictcommon-aspell.8.gz
ba7de8511d10f11510849a040112911a  usr/share/man/man8/update-dictcommon-hunspell.8.gz
7bee29ba502c11cd7b1098e3a42493b4  usr/share/perl5/Debian/DictionariesCommon.pm
a4a101317463a0f64cbf9163b65ff994  var/lib/aspell/README
c803c2de3f3ae503c1136eb97748925b  var/lib/ispell/README
                               #!/usr/bin/perl -w
# -------------------------------------------------------------------------
# dictionaries-common.config-header:
#   Some stuff will be appended to make dictionaries-common.config:
#   - dc-debconf-default-value.pl
#   - dc-debconf-select.pl
#   - dictionaries-common.config-footer
# -------------------------------------------------------------------------

use strict;
use Debconf::Client::ConfModule q(:all);

version ('2.0');

if ( -l "/etc/dictionary" ) {
  input ("medium","dictionaries-common/old_wordlist_link");
}

# Unregistering some no longer used debconf questions.

unregister("dictionaries-common/languages");
unregister("dictionaries-common/move_old_usr_dict");
unregister("dictionaries-common/remove_old_usr_dict_link");
unregister("shared/packages-ispell");
unregister("shared/packages-wordlist");

go();

# ------------------------------------------------------------------------
# Local Variables:
# perl-indent-level: 2
# coding: iso-8859-1
# End:
# ----------------------------------------------------------------------------
# dc-debconf-default-value.pl:
#  Dealing with default value selection. Functions and definitions.
# ----------------------------------------------------------------------------

# Trying to find a reasonable guess for default ispell dictionary and wordlist
# from the debian-installer settings, envvars or pre-policy symlinks and the
# list of ispell dictionaries and wordlists to be installed

my $dcscript     = "/usr/share/dictionaries-common/dc-debconf-select.pl";
my $debug        = "yes" if exists $ENV{'DICT_COMMON_DEBUG'};

# Suffixes for different variants. They must be declared here.
my @suffixes     = ("",
		    "-insane",
		    "-huge",
		    "-large",
		    "-medium",
		    "-small",
		    "-gut");
my %equivs       = ("bg"      => "bulgarian",
		    "ca"      => "catalan",
		    "cs"      => "czech",
		    "da"      => "danish",
		    "de"      => "ngerman",
		    "de:1"    => "ogerman",
		    "de_CH"   => "swiss",
		    "en_US"   => "american",
		    "en_US:1" => "miscfiles",
		    "en_CA"   => "canadian",
		    "en_CA:1" => "american",
		    "en_GB"   => "british",
		    "en_AU"   => "british",
		    "eo"      => "esperanto",
		    "es"      => "spanish",
		    "fi"      => "finnish",
		    "fo"      => "faroese",
		    "fr"      => "french",
		    "ga"      => "irish",
		    "gd"      => "gaelic",
		    "gl"      => "galician-minimos",
		    "gv"      => "manx",
		    "hu"      => "hungarian",
		    "it"      => "italian",
		    "lt"      => "lithuanian",
		    "nb"      => "norwegian->bokma",    # Match bokmal and bokmaal
		    "nl"      => "dutch",
		    "nn"      => "norwegian->nynorsk",
		    "pl"      => "polish",
		    "pt"      => "portuguese",
		    "pt_BR"   => "brazilian",
		    "ru"      => "russian",
		    "sv"      => "swedish",
		    "tl"      => "tagalog",
		    "uk"      => "ukrainian");
my %alternatives   = ("ispell"   => "ispell-dictionary.hash",
		      "wordlist" => "dictionary");

# -------------------------------------------------------------
sub dc_debugprint(){
# -------------------------------------------------------------
# Show info if in debug mode
# -------------------------------------------------------------
  print STDERR "@_" if $debug;
}

# -------------------------------------------------------------
sub dc_set (){
# -------------------------------------------------------------
# Set debconf value unless already set
# -------------------------------------------------------------
  my $guessed   = shift;
  my $question  = $guessed->{'question'};
  my $value     = $guessed->{'guess'};
  my $priority  = $guessed->{'priority'};

  my ($errorcode, $oldvalue) = get($question);

  $oldvalue = "unset" unless $oldvalue;

  if ( $errorcode or $oldvalue eq "unset" ){
    &dc_debugprint(" dict-common::dc_set: $question: errorcode: $errorcode; priority: $priority\n" .
		   "   Old:[$oldvalue] --> New:[$value]\n");
    set("$question","$value");
  } elsif ( $oldvalue eq $value ) {
    print STDERR " dict-common::dc_set: $question is already set to
      [$oldvalue]. Preserving it.\n";
  } else {
    print STDERR " dict-common::dc_set: Warning: $question is already set to
      [$oldvalue].
      Not setting to [$value]\n";
  }

  if ( $debug ){                 # --- Check if question value is actually set
    ($errorcode, $oldvalue) = get($question);
    if ( $errorcode ){
      print STDERR " dict-common::dc_set: $question reading failed with $errorcode\n";
    } elsif ( $oldvalue) {
      print STDERR " dict-common::dc_set: $question is set to [$oldvalue]\n";
    } else {
      print STDERR " dict-common::dc_set: $question value is void, bad thing\n";
    }
  }
}

# -------------------------------------------------------------
sub dc_extractlangname (){
# -------------------------------------------------------------
# Look if a dict matching $langkey in %equivs is to be installed
# and return the preferred language name if so.
# -------------------------------------------------------------
  my $langkey             = shift;
  my $classinfo           = shift;
  my $classprefix         = $classinfo->{'prefix'};
  my $debconf_vals        = $classinfo->{'languages'};
  my $debconf_defaultvals = $classinfo->{'default_langs'};
  my @thevalues           = ();
  my $thestring;
  my $thepackage;
  my $thevariant;
  my $pkgfullname;

  if ( defined $equivs{$langkey} ){
    ($thepackage,$thevariant) = split ("->",$equivs{$langkey});
    foreach my $suffix ( @suffixes ){
      if ( $thepackage eq "miscfiles" ){
	$pkgfullname = "$thepackage$suffix";
      } else {
	$pkgfullname = "$classprefix$thepackage$suffix";
      }
      &dc_debugprint(" dc_extractlangname: Trying package $pkgfullname\n");
      if ( defined $debconf_vals->{"$pkgfullname"} ){
	if ( defined $debconf_defaultvals->{"$pkgfullname"} ){
	  $thestring = $debconf_defaultvals->{"$pkgfullname"};
	} else {
	  $thestring = $debconf_vals->{"$pkgfullname"};
	}
	@thevalues = sort split (/\s*,\s*/,$thestring);
	if ( $thevariant ){
	  @thevalues = grep {/$thevariant/i} @thevalues;
	}
	@thevalues = sort {
	  # Sort tex variants last
	  $a =~ m/tex/i <=> $b =~ m/tex/i
	    || $a cmp $b } @thevalues;
	if ( scalar @thevalues >= 1 ){
	  return "$thevalues[0]";
	} else {
	  return;
	}
      }
    }
  }
}

# -------------------------------------------------------------
sub dc_guesslang (){
# -------------------------------------------------------------
# Try different combinations of $language and $country and possible
# fallbacks in case dc_extractlangname() does not find a good guess
# -------------------------------------------------------------
  my $classinfo   = shift;
  my $language    = shift;
  my $country     = shift;
  my $class       = $classinfo->{'class'};
  my $classprefix = $classinfo->{'prefix'};
  my $msgprefix   = "dc_guesslang";
  my $priority    = "medium";
  my $guessed;

  &dc_debugprint(" $msgprefix: Looking for langkey matches [$class,$classprefix,$language,$country].\n");
  if ( $guessed = &dc_extractlangname("$language" . "_" . uc($country),$classinfo)
       || &dc_extractlangname("$language" . "_" . uc("$country") . ":1",$classinfo)
       || &dc_extractlangname("$language",$classinfo)
       || &dc_extractlangname("$language:1",$classinfo)
    ){
    $priority = "low";
  } else {
    my @sorted_keys = sort {
      # Sort keys matching ^$language_ first
      $b =~ m/^$language(\_|:|$)/ cmp $a =~ m/^$language(\_|:|$)/
	# Then american english
	|| $b =~ m/^en\_US/ cmp $a =~ m/^en\_US/
	# Then any english variant
	|| $b =~ m/^en\_/ cmp $a =~ m/^en\_/
	# Then anything else alphabetically
	|| $a cmp $b
    } keys %equivs;
    &dc_debugprint(" dc_guesslang: Trying an alternative for $class from keys:\n  "
		   . join(', ',@sorted_keys) . "\n");
    foreach ( @sorted_keys ){
      last if ( $guessed = &dc_extractlangname($_, $classinfo) );
    }
  }
  return { 'guess'    => $guessed,
	   'priority' => $priority,
	   'class'    => $class
  } if $guessed;
}

# -------------------------------------------------------------
sub dc_guess_langkey_for_link(){
# -------------------------------------------------------------
# Try guessing langkey after (woody or older) former symlink
# -------------------------------------------------------------
  my $class          = shift;
  my $link           = "/etc/alternatives/$alternatives{$class}";
  my %reverse_equivs = ();
  my $prefix;
  my $guess;
  my $language;

  return unless ( -l $link );

  if ( $guess = readlink($link) ){
    &dc_debugprint("dictionaries-common.config: Found pre-policy link $link->$guess.");

    $guess =~ s/\.hash$//;
    $guess =~ s/^.*\///;
    $guess =~ s/(\-\.)(small|medium|large)$//;
    $guess =~ s/\-english$//;

    $guess = "norwegian->bokma"   if ($guess =~ m/^bokm.*l$/);
    $guess = "norwegian->nynorsk" if ($guess eq "nynorsk");
    $guess = "ogerman"            if ($guess eq "german");
    $guess = "miscfiles"          if ($guess eq "web2");
    $guess = "danish"             if ($guess eq "dansk");
    $guess = "french"             if ($guess eq "francais");
    $guess = "swedish"            if ($guess eq "svenska");

    &dc_debugprint("dictionaries-common.config: pre-policy link target fine tuned to $guess.\n");

    # Build reverse equivs
    foreach ( keys %equivs ){
      $reverse_equivs{$equivs{$_}} = $_;
    }

    # Check for a match and return langkey if found
    if ( exists $reverse_equivs{$guess} ){
      return $reverse_equivs{$guess};
    } else {
      &dc_debugprint("dictionaries-common.config: No match found for pre-policy symlink $link.\n");
    }
  }
}

# -------------------------------------------------------------
sub dc_manual_alternative (){
# -------------------------------------------------------------
# Check if woody (or older) alternative exists and is set to manual
# -------------------------------------------------------------
  my $class  = shift;
  my $file   = "/var/lib/dpkg/alternatives/$alternatives{$class}";
  my $status;

  if ( -r $file ){
    open(FILE,"< $file") or return;
    $status = <FILE>;
    close FILE;
    $status = "" unless $status;
    chomp $status;
    return "Manual (previous alternative setting)" if ( $status eq "manual" );
  }
}

# -------------------------------------------------------------
sub dc_parse_classinfo (){
# -------------------------------------------------------------
# Gather info for (to be) installed packages for class
# debconf info:
#   $classinfo->{'languages'}:     pkg -> languages provided by package
#   $classinfo->{'default_langs'}: pkg -> default language for package
# Other info
#   $classinfo->{'class'}:         Class
#   $classinfo->{'classprefix'}:   Class prefix
# -------------------------------------------------------------
  my $class = shift;
  return unless $class;
  my $question = "shared/packages-$class";
  my ($errorcode,$pkgowners) = metaget ($question, "owners");
  return if $errorcode;

  my %debconf_vals = ();
  my %debconf_defaultvals = ();
  my %classprefix = ( 'ispell' => "i", "wordlist" => "w" );

  foreach my $pkg ( split (/\s*,\s*/,$pkgowners) ){
    $debconf_vals{$pkg} = get ("$pkg/languages");
    my ($errorcode,$pkgdefaults) = get ("$pkg/defaults");
    $debconf_defaultvals{$pkg} = $pkgdefaults unless $errorcode;
  }

  return {
    'class'         => $class,
    'prefix'        => $classprefix{$class},
    'languages'     => \%debconf_vals,
    'default_langs' => \%debconf_defaultvals
  } if %debconf_vals;
}

# -----------------------------------------------------------------
sub dc_guess_language_country_strings (){
# -----------------------------------------------------------------
# Try guessing $language $country pairs
# -----------------------------------------------------------------
  my $class       = shift;

  my $di_language = "debian-installer/language";
  my $di_country  = "debian-installer/country";
  my $msgstring   = "dict-common.config->dc_guess_language_country_strings";

  my $language;
  my $country;
  my $errorcode;

  # First check if we are upgrading from ancient pre-policy setup with
  # symlinks set through alternatives and try guessing a langkey
  if ( $language = &dc_guess_langkey_for_link($class) ){
    &dc_debugprint("$msgstring: Guessed langkey $language from ancient pre-policy symlink.\n");
  } else {
    # If system is already installed use /etc/default/locale contents.
    # Otherwise try looking at debian-installer/language
    if ( -e "/etc/default/locale" ){
      $language = $ENV{'LANG'} if exists $ENV{'LANG'};
    }
    if ( $language ){
      &dc_debugprint("$msgstring: LANG=$language is to be used.\n") if $language;
    } else {
      ($errorcode,$language) = get($di_language);
      $language = '' if $errorcode;
      &dc_debugprint("$msgstring: Debconf gives language \"$language\"\n") if $language;
    }
  }

  # Try hard to get a value if nothing was found
  $language = $language ||
    $ENV{'LANG'} ||
    $ENV{'LC_MESSAGES'} ||
    $ENV{'LC_ALL'} ||
    '';

  # Get proper $language $country pairs if $language is available.
  if ( $language ){
    if ( $language eq "C" or $language eq "POSIX" ){
      &dc_debugprint("$msgstring: Using language \"en\" instead of\"$language\"\n");
      $language = "en";
    } else {
      # Deal with de_DE:de_DE@euro:de:en_GB.UTF-8:en like entries
      $language = ( split(":",$language) )[0];
      $language =~ s/[\.@].*$//;                # Remove variant and charset
      ($language,$country) = split("_",$language);
    }
    if ( not $country ){
      ($errorcode,$country) = get($di_country);
      if ( $errorcode or not $country ){
	$country = "unset";
      }
    }

    # Make sure there is no leading/trailing whitespace.
    $language =~ s/^\s+//;
    $language =~ s/\s+$//;
    $country  =~ s/^\s+//;
    $country  =~ s/\s+$//;

  } else {
    &dc_debugprint("$msgstring: No language candidate found. Defaulting to \"en_UNSET\"\n");
    $language = "en";
    $country  = "UNSET";
  }
  return $language, $country;
}

# -----------------------------------------------------------------
sub dc_set_default_value_for_class (){
# -----------------------------------------------------------------
# Try guessing a reasonable default value for given class after
# $language $country pair and set it if found.
# -----------------------------------------------------------------
  my $class       = shift;
  my $msgprefix   = "dc_set_default_value_for_class";
  my $question    = "dictionaries-common/default-$class";
  my $oldlink     = "/etc/alternatives/$alternatives{$class}";
  my $guessed;

  if ( my $classinfo = &dc_parse_classinfo($class) ){
    # Ancient symlinks may be different for different classes,
    my ( $language, $country ) = &dc_guess_language_country_strings($class);

    # First try something reasonably close to the lang +country pair
    if ( $guessed = &dc_guesslang($classinfo,$language,$country) ){
      &dc_debugprint(" $msgprefix: Guessed value ->($class,$language,$country,$guessed->{'guess'},$guessed->{'priority'})\n");
    } else {
      # Signal an error. This should never happen, thus the critical priority.
      &dc_debugprint(" $msgprefix: No good or bad guess found for ($class,$language,$country)\n");
      return;
    }

    # Actually set the value if found
    if ( $guessed ) {
      $guessed->{'question'} = $question;
      &dc_set($guessed);
    }
  } else {
    &dc_debugprint("$msgprefix: No elements found for $class\n");
  }
  return $guessed;
}

1;

# -----------------------------------------------------------------
# Local Variables:
# perl-indent-level: 2
# coding: utf-8
# End:
# ---------------------------------------------------------------------------
# dc-debconf-select.pl:
#  This file will be added to end of dictionaries-common.config-base
#  to make dictionaries-common.config, as well as installed under
#  /usr/share/dictionaries-common for single ispell dicts/wordlists use
# ---------------------------------------------------------------------------

use strict;

sub dico_get_packages (){
  # Get list of packages sharing the question
  my $class    = shift;
  my $question = "shared/packages-$class";
  my @pkglist  = ();

  my ($errorcode,$packages) = metaget ($question, "owners");
  @pkglist = split (/\s*,\s*/, $packages) unless $errorcode;
  return \@pkglist;
}

sub dico_parse_languages (){
  # Get a hash reference of package -> list of (e)languages provided by package
  my $class    = shift;
  my $variant  = shift;
  my $packages = shift;
  my %tmphash  = ();

  die "No variant (languages|elanguages) string supplied\n" unless $variant;

  $packages = &dico_get_packages($class) unless $packages;

  foreach my $pkg ( @$packages ){
    my ($errorcode, $entry ) = metaget("$pkg/$variant", "default");
    unless ( $errorcode ){
      $entry =~ s/^\s+//;
      $entry =~ s/\s+$//;
      $tmphash{$pkg} = $entry;
    }
  }
  return \%tmphash;
}

sub dico_get_all_choices (){
  # Get $choices and $echoices parallel lists sorted after $echoices and formatted for debconf
  my $class       = shift;
  my $languages   = shift;
  my $debug       = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
  my %mappinghash = ();
  my $debug_prefix = "[$class,dico_get_all_choices]";

  $languages   = &dico_parse_languages($class,"languages") unless $languages;

  my $elanguages  = &dico_parse_languages($class,"elanguages",[ keys %$languages ]);

  if ( $debug ){
    print STDERR "-------- $debug_prefix start --------\n";
    my $langlist  = join(', ',sort keys %{$languages});
    my $elanglist = join(', ',sort keys %{$elanguages});
    print STDERR " * Packages with languages: $langlist\n"  if $debug;
    print STDERR " * Packages with elanguages: $elanglist\n" if $debug;
  }

  foreach my $pkg ( keys %$languages ){
    my @langs  = split(/\s*,\s*/, $languages->{$pkg});
    my @elangs = @langs;
    if ( exists $elanguages->{$pkg} ){
      my @tmp = split(/\s*,\s*/, $elanguages->{$pkg});
      if ( $debug ){
	print STDERR " langs: $#langs, "  . join(', ',@langs)  . "\n";
	print STDERR " tmp:   $#tmp, "    . join(', ',@tmp)    . "\n";
      }
      @elangs = @tmp if ( $#langs == $#tmp );
    }
    foreach my $index ( 0 .. $#langs ){
      $mappinghash{$langs[$index]} = $elangs[$index];
    }
  }
  my $echoices = join(', ', sort {lc($a) cmp lc($b)} values %mappinghash);
  my $choices  = join(', ',
		      sort {lc($mappinghash{$a}) cmp lc($mappinghash{$b})}
		      keys %mappinghash);
  if ( $debug ){
    print STDERR " * Choices:\n   [$choices]\n";
    print STDERR " * Echoices:\n   [$echoices]\n";
    print STDERR "-------- $debug_prefix end --------\n";
  }
  return $choices, $echoices;
}

# ---------------------------------------------------------------------------
sub dico_get_default_value (){
# ---------------------------------------------------------------------------
# debconf-is-not-a-registry:
# ---------------------------------------------------------------------------
  my $class             = shift;
  my $newchoices        = shift;
  my $question          = "dictionaries-common/default-$class";
  my $cachedir          = "/var/cache/dictionaries-common";
  my $sys_default_dir   = "$cachedir";
  my $debug             = 1 if defined $ENV{'DICT_COMMON_DEBUG'};
  my $debug_prefix      = "[$class,dico_get_default_value]";
  my %sys_default_files = ( 'ispell'   => "$sys_default_dir/ispell-default",
			    'wordlist' => "$sys_default_dir/wordlist-default");

  my $sys_default_value;
  my $sys_default_file  = $sys_default_files{$class};
  # Get current value in system default file if available
  if ( -f $sys_default_file ){
    open ( my $SYS_DEFAULT_FILE, "<$sys_default_file" );
    while (<$SYS_DEFAULT_FILE>){
      next if m/^\s*\#/;
      next if m/^\s*$/;
      chomp;
      s/^\s+//;
      s/\s+$//;
      $sys_default_value = $_;
      last;
    }
    close $SYS_DEFAULT_FILE;
  }

  my $debconf_default_value = get ($question);
  # If valid and different from debconf value, use it as new value
  if ( $sys_default_value && $sys_default_value ne $debconf_default_value ) {
    if ( defined $newchoices->{$sys_default_value} ){
      set($question,$sys_default_value);
      my $debconf_default_value_txt = $debconf_default_value ? $debconf_default_value : "";
      print STDERR
	"$debug_prefix: dictionaries-common warning:\n" .
	  " debconf question \"$question\" value did not match that in \"$sys_default_file\"\n" .
	    " Changing debconf value \"$debconf_default_value_txt\" to \"$sys_default_value\"\n";
      return $sys_default_value;
    } elsif ( $debconf_default_value ) {
      if ( $debug ){
	print STDERR
	  "$debug_prefix: dictionaries-common warning:\n" .
	    " \"$sys_default_value\" in \"$sys_default_file\" seems not available.\n" .
	      " Will set to debconf value \"$debconf_default_value\" in trigger. Be patient.\n";
      } elsif ( defined $ENV{DPKG_MAINTSCRIPT_NAME}
		&& $ENV{DPKG_MAINTSCRIPT_NAME} eq "config") {
	print STDERR
	  " \"$sys_default_value\" in \"$sys_default_file\" seems not available.\n" .
	    " Will set to debconf value \"$debconf_default_value\" in trigger. Be patient.\n";
      }
      return $debconf_default_value;
    }
  } else {
    return $debconf_default_value;
  }
}

sub dc_debconf_select (){
  my $classinfo   = shift;
  my $debug       = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
  my $reconfigure = 1 if exists $ENV{'DEBCONF_RECONFIGURE'};
  my $echoices;
  my %title       = ('ispell'   => "Dictionaries-common: Ispell dictionary",
		     'wordlist' => "Dictionaries-common: Wordlist dictionary"
    );

  my $class;
  my $priority;
  my $is_dcconfig;

  # If $classinfo is a hash reference, function is called from dictionaries-common.config
  if ( ref($classinfo) eq 'HASH' ){
    $class       = $classinfo->{'class'};
    $priority    = $classinfo->{'priority'} if ( defined $classinfo->{'priority'} );
    $is_dcconfig = 1;
  } else {
    # Otherwise is called from ispell dictionary/wordlist config
    $class = $classinfo;
  }

  my $packages     = &dico_get_packages($class);
  return unless $packages;

  my $question     = "dictionaries-common/default-$class";
  my $flagdir      = "/var/cache/dictionaries-common";
  my $newflag      = "$flagdir/flag-$class-new";
  my $debug_prefix = "[$class,dc_debconf_select]";
  my $langscript   = "/usr/share/dictionaries-common/dc-debconf-default-value.pl";

  print STDERR "----- $debug_prefix start -----------\n" if $debug;

  # Get new base list of provided languages
  my %newchoices  = ();
  my $languages = &dico_parse_languages($class,"languages",$packages);
  foreach my $pkg ( keys %$languages ) {
    foreach my $lang ( split(/\s*,\s*/, $languages->{$pkg}) ){
      $newchoices{$lang}++;
    }
  }
  my $choices = join (', ', sort {lc($a) cmp lc($b)} keys %newchoices);

  # Get old list of provided languages
  my @oldchoices  = split(/\s*,\s*/,metaget ($question, "choices-c"));
  pop @oldchoices;            # Remove the manual entry
  my $oldchoices = join (', ', sort {lc($a) cmp lc($b)} @oldchoices);

  # If dictionaries-common is already installed (-r $langscript),
  # there are elements for this class to be installed (%newchoices)
  # and there were none before (! $oldchoices), means that we are installing
  # for the first time elements in this class, with dictionaries-common
  # already installed. Try getting a reasonable default value
  if ( -r $langscript && %newchoices && ! $oldchoices ){
    print STDERR "$debug_prefix: Configuring class \"$class\" for the first time\n\n" if $debug;
    # If called from dictionaries-common.config we already have
    # $langscript, and probably more recent. Including it here will cause
    # some warnings about subroutine re-definitions and even errors.
    require $langscript unless $is_dcconfig;
    my $guessed = &dc_set_default_value_for_class($class);
    $priority = $guessed->{'priority'} if ( defined $guessed->{'priority'} );
  }

  # Get default ispell dictionary / wordlist.
  my $curval = &dico_get_default_value($class,\%newchoices);

  # Will be given a value if current value is wrong, undef otherwise
  my $wrong_curval;

  # Try harder to have a good default if current value is empty, but %newchoices not.
  unless ( $curval ){
    if ( -r $langscript && %newchoices ){
      print STDERR "$debug_prefix: Possible values, but unset \"$question\". Trying harder to get a default value.\n";
      # As above, if called from dictionaries-common.config we already have
      # $langscript, and probably more recent. Including it here will cause
      # some warnings about subroutine re-definitions and even errors.
      require $langscript unless $is_dcconfig;
      my $guessed = &dc_set_default_value_for_class($class);
      $priority = $guessed->{'priority'} if ( defined $guessed->{'priority'} );
      $curval = get ($question);
      print STDERR "$debug_prefix: \"$question\" set to \"$curval\". Can be changed with select-default-$class.\n";
    }
  }

  if ( scalar %newchoices ) {
    # If $priority is set &dc_set_default_value_for_class found something.
    # This will usually be as much "medium", so honour it.
    unless ( $priority ){
      if ( $curval && ( $curval =~ /^Manual.*/ or defined $newchoices{$curval} ) ){
	# Use priority "medium" if current value is in the new list or mode is set to manual.
	$priority = "medium";
      } else {
	# Otherwise we either have a wrong value with no associated entry
	# or a void value with elements installed (and thus possible values).
	# This is an *error* that needs to be signalled and acted upon.
	# For this reason priority must be higher than the standard one.
	# We leave it as "high" instead of "critical" so question can be
	# overriden in special cases until underlying bug is fixed.
	$priority = "high";
	if ( $curval ){
	  $wrong_curval = $curval;
	  print STDERR "$debug_prefix error: \"$curval\" does not correspond to any package.\n";
	} else {
	  $wrong_curval = "Question unset";
	  print STDERR "$debug_prefix error: \"$question\" unset but $class elements installed.\n";
	}
      }
    }
  } else {
    $priority = "low";
    print STDERR "$debug_prefix info: No elements in given class.\n" if $debug;
  }

  if ( $debug or $wrong_curval ){
    my $curval_txt = $wrong_curval || $curval;
    print STDERR "$debug_prefix:
 * Class: $class, Priority: $priority
 * Question: \"$question\", Previous or guessed value: \"$curval_txt\"
 * New choices: [$choices]
 * Old choices: [$oldchoices]\n";
  }

  # May ask question if there is no match
  if ( scalar %newchoices ) {
    if ( $choices ne $oldchoices) {
      fset ($question, "seen", "false");
      # Let future processes in this apt run know that a new $class element is to be installed
      if ( -d $flagdir ) {
	open (my $FLAG, "> $newflag")
	  or die "Could not open $newflag for write. Aborting ...\n";
	print $FLAG "1\n";
	close $FLAG;
      }
    }
    my ( $errorcode, $seen ) = fget($question, "seen");
    if ( $seen eq "false" or $reconfigure ){
      ($choices, $echoices ) = &dico_get_all_choices($class,$languages);
      subst ($question, "choices", $choices);
      subst ($question, "echoices", $echoices);
    }
    input ($priority, $question);
    title ($title{$class});
    go ();
    subst ($question, "echoices", $choices); # Be backwards consistent
  }

  # If called from dictionaries-common.config, check actual values in debug mode
  if ( $debug && $is_dcconfig ){
    print STDERR " * Checking really set values for $question:\n";
    print STDERR "   - Choices-C string: " . metaget ($question, "choices-c") . "\n";
    print STDERR "   - Really set value: " . get ($question) . "\n";
  }
  print STDERR "----- $debug_prefix end -----------\n" if $debug;
}

# Local Variables:
# perl-indent-level: 2
# End:

1;
# --------------------------------------------------------------------------
# dictionaries-common.config-footer:
#  Specific final stuff to be run from dictionaries-common.config
# --------------------------------------------------------------------------

&dc_debugprint("\ndictionaries-common: (re)configuring ...\n");

# Prompting the questions if required
if ( not -e $dcscript ){            # First dictionaries-common installation
  foreach my $class ("ispell","wordlist"){
    &dc_debugprint("\n- dictionaries-common.config: Initial configuration for class \"$class\".\n\n");
    # This returns $class and $priority (along with here unused $guess)
    my $classinfo = &dc_set_default_value_for_class($class);
    if ( $classinfo ){
      &dc_debconf_select($classinfo);
      # This might have been pre-seeded and question not asked.
      # Make sure question is tagged as seen in this case
      fset ("dictionaries-common/default-$class", "seen", "true");
      go();
    } else {
      &dc_debconf_select($class);
    }
  }
} else {                              # Reconfiguring or upgrading
  foreach my $class ("ispell","wordlist"){
    &dc_debconf_select({'class' => $class});
  }
}

&dc_debugprint("\ndictionaries-common: (re)configuring ...Done.\n\n");

# Local Variables:
# mode: perl
# perl-indent-level: 2
# coding: iso-8859-1
# End:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Package: dictionaries-common
Version: 1.29.5
Architecture: all
Maintainer: Agustin Martin Domingo <agmartin@debian.org>
Installed-Size: 717
Depends: debconf (>= 0.5) | debconf-2.0, libtext-iconv-perl, emacsen-common
Suggests: ispell | aspell | hunspell, wordlist
Breaks: myspell-ca (<= 0.6-10), myspell-cs-cz (<= 20040229-5), myspell-de-de-oldspell (<= 1:2-27), myspell-eu-es (<= 0.4.20081029-4), myspell-fi (<= 0.7-17.3), myspell-gl-es (<= 2.2a-8), myspell-ku (<= 0.20.0-1.1), myspell-nl (<= 1:2.0-1), myspell-nr (<< 20070206-4ubuntu1), myspell-ns (<< 20070206-4ubuntu1), myspell-sl (<< 1.0-3ubuntu1), myspell-ss (<< 20070206-4ubuntu1), myspell-tn (<< 20070206-4ubuntu1), myspell-ts (<< 20070207-4ubuntu1), myspell-ve (<< 20070206-3ubuntu1), myspell-xh (<< 20070206-4ubuntu1), myspell-zu (<< 20070207-5ubuntu1), openoffice.org-thesaurus-it (<< 2.0.7.gh.deb1-1.1ubuntu3)
Replaces: openoffice.org-updatedicts
Provides: openoffice.org-updatedicts
Section: text
Priority: optional
Multi-Arch: foreign
Homepage: https://salsa.debian.org/debian/dictionaries-common
Description: spelling dictionaries - common utilities
 This package provides utilities shared between all wordlists and spelling
 dictionaries for Ispell, Aspell, or MySpell/Hunspell. It also includes
 support infrastructure for software using them (such as JED and Mutt),
 and some patched spell-checking Lisp files for better Emacs integration.
 .
 More information about the availability of these dictionaries and their
 naming conventions is available in the README.Debian file.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Package: dictionaries-common
Status: install reinstreq half-installed
Priority: optional
Section: text
Architecture: all
Multi-Arch: foreign
Version: 1.29.5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   /usr/share/dict/words
/usr/share/dict/words.pre-dictionaries-common
dictionaries-common
/usr/bin/fc-cache
/usr/bin/fc-cache.distrib
pkgsel
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/sh.distrib.1.gz
dash
/sbin/start-stop-daemon
/sbin/start-stop-daemon.REAL
:
/bin/sh
/bin/sh.distrib
dash
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ;; File: startup.el.in
;; Description: Emacsen startup for dictionaries-common in Debian
;; Authors: Rafael Laboissière <rafael@debian.org>
;;          Agustin Martin     <agmartin@debian.org>
;; Created on: Fri Oct 22 09:48:21 CEST 1999

(let ((skip-emacs-flavors-list '(emacs19
				 emacs20
				 emacs21
				 emacs22
				 emacs-snapshot))
      (debian-dict-entries "/var/cache/dictionaries-common/emacsen-ispell-dicts.el"))
  (if (member debian-emacs-flavor skip-emacs-flavors-list)
      (message "Skipping dictionaries-common setup for %s" debian-emacs-flavor)

    (debian-pkg-add-load-path-item
     (concat "/usr/share/"
	     (symbol-name debian-emacs-flavor)
	     "/site-lisp/dictionaries-common"))

    (autoload 'flyspell-word "flyspell" nil t)
    (autoload 'flyspell-mode "flyspell" nil t)
    (autoload 'flyspell-prog-mode "flyspell" nil t)

    ;; Load Debian emacsen cache file, with entries for installed dictionaries
    ;; This might result in a call to debian-ispell, so do this only if
    ;;  a) It exists, that is, package is not removed.
    ;;  b) Not in installations under dpkg control, otherwise we might get some
    ;;     bogus errors on installation because of #132355 and friends.
    (if (file-exists-p
	 (concat "/usr/share/"
		 (symbol-name debian-emacs-flavor)
		 "/site-lisp/dictionaries-common/debian-ispell.el"))
	(if (getenv "DPKG_RUNNING_VERSION")
	    (message "Info: Skip debian-el loading if run under dpkg control.")
	  (let ((coding-system-for-read 'raw-text)) ;; Read these as data streams
	    (load "debian-ispell" t)
	    (load debian-dict-entries t)))
      (message "Info: Package dictionaries-common removed but not purged."))))

;;; Previous code for loading ispell.el and refreshing spell-checking
;;; pulldown menus has been removed from this file since it should no
;;; longer be needed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(:all);
use Getopt::Long;
Getopt::Long::Configure("pass_through","no_auto_abbrev");

# Autoflush output buffers
$|=1;

my $class        = "ispell";
my $dictionaries = loaddb ($class);
my $emacsen;
my $regexp;
my $dryrun;

# -------------------------------------------------
sub isoconv {
# -------------------------------------------------
# Function to convert ISO-8859-1 (latin1) accented characters to
# non-accented one.  Of course, this only works for west European
# languages.  We might try to find a more general solution based on
# the current locale character set.
# -------------------------------------------------
  my $s = shift;
  $s =~ y{A-Z}
         {a-zaeiouyaeiouyaeiouaeiouaeiouaeiouaeiouaeiosuyacdnoacnoaeoaeo};
  return $s;
}

# -------------------------------------------------
sub try_emacsen () {
# -------------------------------------------------
# Function to try getting $lang after emacsen name
# -------------------------------------------------
  my $emacsen = shift;
  return unless $emacsen;
  my %available_emacsen = ();
  foreach my $lang (keys %$dictionaries) {
    my $language = $dictionaries->{$lang};
    my $hashname = $language->{"hash-name"};
    my $emacsenname = exists $language->{"emacsen-name"} ?
      $language->{"emacsen-name"} : $hashname;
    return $lang if ( lc($emacsen) eq lc($emacsenname) );
    $available_emacsen{$emacsenname}++;
  }
  die "$0: \"$emacsen\" does not match any available emacs dict value:\n  "
    . join("\n  ", sort keys %available_emacsen) . "\n";
}

# -------------------------------------------------
sub try_regexp () {
# -------------------------------------------------
# Function to try getting $lang after $regexp
# -------------------------------------------------
  my $regexp = shift;
  return unless $regexp;
  my $guess;
  my %regexp_matches    = ();

  $regexp = isoconv ($regexp);
  foreach my $key ( keys %$dictionaries ) {
    $_ = isoconv ( $key );
    if ( /$regexp/ ) {
      $regexp_matches{$key}++;
      $guess = $key;
    }
  }

  die "$0: No installed language matched `$regexp'\n" unless $guess;

  if ( scalar keys %regexp_matches == 1) {
    return $guess;
  } else {
    die ("$0: More than one installed languages matched `$regexp':\n  "
	 . join ("\n  ", sort keys %regexp_matches) . "\n");
  }
}

# --------------------------------------------------------------------
# Now the main program
# --------------------------------------------------------------------

GetOptions ('emacs=s'    => \$emacsen,
	    'language=s' => \$regexp,
	    'dry-run'    => \$dryrun);

die " ispell-wrapper is a wrapper to ispell, but ispell is not installed.\n"
  unless ( -x "/usr/bin/ispell" );

$regexp = $ENV{ISPELLDEFAULT} unless $regexp;

$regexp =~ s/([^\\]|^)(\(|\))/$1\\$2/g if $regexp;   # Make sure () are escaped

# In the POD section below there is an extensive description on the
# priority order for determining the ispell language.
my $lang = &try_emacsen($emacsen)
  ||  &try_regexp ($regexp)
  ||  &getuserdefault ()
  ||  &dico_getsysdefault ("ispell");

print STDERR " Warning: --language=$regexp will be overriden by
          --emacs=$emacsen setting\n\n"
  if ( defined $lang && $regexp && $emacsen );

my $ispell_wrapper_args = "";
$ispell_wrapper_args = dico_get_spellchecker_params($class,$dictionaries->{$lang})
  if ( $lang && defined $dictionaries->{$lang});

# Ignore $lang results if -d is explicitly set from commandline

foreach ( @ARGV ) {
  if ( /^\-d/ ){
    $ispell_wrapper_args = "";
    last;
  }
}

my $cli_opts = join(' ',@ARGV);

print STDERR "Warning: \'$lang\' values overriden with \'$cli_opts\'\n"
  if ( not $ispell_wrapper_args && defined $lang );

my $command_to_run = "ispell $ispell_wrapper_args $cli_opts";

if ( $dryrun ){
  print "--\n$command_to_run\n--\n";
} else {
  exec $command_to_run;
}

# Local Variables:
# perl-indent-level: 2
# End:

__END__

=head1 NAME

B<ispell-wrapper> - smart wrapper for ispell

=head1 SYNOPSIS

 ispell-wrapper [--emacs=name] [--language=regexp] [--dry-run] [ispell options] file

   Options (all long only options):
    --emacs=name           Set the language to use by emacs dict name
    --language=regexp      Set the language to use by name
    --dry-run              Only show what would have done

=head1 DESCRIPTION

B<ispell-wrapper> is a wrapper script for ispell intended to be used
in a Debian system in conjunction with the infrastructure introduced by
the dictionaries-common package. Option --dry-run will show the string
to be run without doing anything else.

It automatically sets the B<-d>, B<-w>, and B<-T> options to ispell as a
function of the chosen language.  Of course, this only works for dictionary
packages that comply with the above mentioned Policy.

Here is how the language is defined (in order of priority):

=over

=item 1)

By matching the emacs dict name given in --emacs option to the name of
one of the emacs dicts names provided by installed languages in the
system. This match must be exact (although is case insensitive).
Note that this will override any value given in the --language option.

=item 2)

By matching the regexp given in option --language to the list of
installed languages in the system.

=item 3)

By matching the regexp stored in the environment variable
ISPELLDEFAULT to the list of installed languages in the system.

=item 4)

By using the value stored in the user-specific file ~/.ispell-default
(use select-default-iwrap(1) to set it).

=item 5)

By using the value stored in the site-wide file
/etc/dictionaries-common/ispell-default (use select-default-ispell(8)
as superuser to set it).

=back

Note: regexp matches are case-insensitive and the ISO-8859-1 special
characters are transformed into their ASCII equivalents.  German
ess-zet is equivalent to the character "s" and the ae ligature to the
character "e".

=head1 EXAMPLE

Let us say that the following dictionaries are installed in the system
(as appearing in the Debconf question at installation time):

    castellano (Spanish TeX mode)
    castellano8 (Spanish 8 bit)
    portuguE<ecirc>s (European Portuguese)
    portuguE<ecirc>s brasileiro (Brazilian Portuguese)

Choosing the regexp (either in the --language option or in the
environment variable ISPELLDEFAULT) to be "span" will yield an error,
since two languages will match ("castellano" and "castellano8").
However, if the regexp is "span.*8", the language "castellano8
(Spanish 8 bit)" will be chosen.

=head1 ENVIRONMENT

=over

=item ISPELLDEFAULT

Regexp that matches the name of the default language to use, if no
--language option is given.

=back


=head1 FILES

=over

=item $HOME/.ispell-default

Contains the name of the language to use, if no --language option is
given or if the ISPELLDEFAULT environment variable is not set.  This
is a user-specific choice.

=item /etc/dictionaries-common/ispell-default

Name of the language to use when everything above is not set. This is
a system-wide setting.

=back


=head1 SEE ALSO

select-default-ispell(8), select-default-iwrap(1)

=head1 AUTHORS

Rafael Laboissiere

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          #!/usr/bin/perl -w

use Debian::DictionariesCommon q(setuserdefault);

setuserdefault ();

__END__


=head1 NAME

B<select-default-iwrap> - Selects the user default ispell dictionary for use
with ispell-wrapper

=head1 SYNOPSIS

 select-default-iwrap

=head1 DESCRIPTION

Selects the user default ispell dictionary for use
with ispell-wrapper, putting the selected value
in F<~/.ispell-default>.

=head1 SEE ALSO

ispell-wrapper(1)

=head1 AUTHORS

Rafael Laboissiere

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              #!/bin/sh
#
# emacsen install script for the Debian GNU/Linux
# dictionaries-common package
#
# Written by Rafael Laboissiere <rafael@debian.org> and
# Agustin Martin <agmartin@debian.org>
#
# Some things taken from Dirk Eddelbuettel script for the octave package.
# lpath.el trick is stolen from Davide Salvetti's auctex package
# --------------------------------------------------------------

set -e

# Canadian spelling ;-)
flavour=$1

package=dictionaries-common
files_base="debian-ispell.el"
files="$files_base ispell.el flyspell.el"
source=/usr/share/dictionaries-common/site-elisp
destination=/usr/share/${flavour}/site-lisp/${package}

case "$flavour" in
    xemacs*)
	flags="-no-site-file"
	;;
    emacs19|emacs20|emacs21|emacs22|emacs23|emacs-snapshot*)
	# Do not byte-compile anything for above emacsen flavours
	echo "install/${package}: Skipping byte-compilation for $flavour"
	exit 0
	;;
    emacs*)
	flags="--no-site-file"
	emacs_version=$($flavour -no-site-file --version | head -n 1 | sed 's/^.* Emacs //' )
	if dpkg --compare-versions ${emacs_version} ge "24.5"; then
	    files=${files_base}
	fi
	;;
    *)
	echo install/${package}: Ignoring emacsen flavour [${flavour}]
	exit 0
	;;
esac

if [ -e "${destination}/done" ]; then
    echo "install/${package}: Already byte-compiled for ${flavour}. Skipping ..."
else
    echo install/${package}: Byte-compiling for emacsen flavour ${flavour}

    # Make sure destination directory is available
    install -m 0755 -d ${destination}

    # Make sure current dir is in the load path
    cat << EOF > ${destination}/path.el
(setq load-path (cons "." load-path) byte-compile-warnings nil)
EOF

    flags="${flags} -q -batch -l path.el -f batch-byte-compile"
    ( # Go to the .elc dir, set sources symlinks, byte compile files and remove temp .el files from the .elc dir
	cd ${destination}
	touch .nosearch
	for i in $files; do
	    ln -sf $source/$i
	done
	${flavour} ${flags} ${files}
	rm path.el
	touch done
    )
fi

exit 0;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #!/bin/sh
#
# emacsen remove script for the Debian GNU/Linux
# dictionaries-common package
#
# Written by Rafael Laboissiere <rafael@debian.org> and
# Agustin Martin <agmartin@debian.org> based on
# Dirk Eddelbuettel <edd@debian.org> script for the octave package.
# -----------------------------------------------------------------

set -e

# Canadian spelling ;-)
flavour=$1

package=dictionaries-common
destination=/usr/share/${flavour}/site-lisp/${package}

if [ -d $destination ]; then
    echo remove/${package}: Purging byte-compiled files for flavour ${flavour}
    rm -f ${destination}/*.elc ${destination}/*.el ${destination}/done ${destination}/.nosearch
    rmdir --ignore-fail-on-non-empty ${destination}
fi

exit 0;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Please use 'select-default-ispell' superuser script
to change your selection.

Note that you will need to run that script and select
the 'manual' option if you want to play with symlinks
yourself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #!/usr/bin/perl -w
#
#  script for aspell hash autorebuild in Debian systems
#
# Copyright 2004-2022 Agustin Martin Domingo <agmartin@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
# -------------------------------------------------------------------------

use strict;

my $debug;
my $dry_run;
my $force;
my $triggered;
my $usrlibdir   = "/usr/lib/aspell";
my $usrsharedir = "/usr/share/aspell";
my $varlibdir   = "/var/lib/aspell";
my $compatdir   = "$varlibdir";
my $datadir     = "$usrlibdir";             # The data dir
my $program     = "aspell-autobuildhash";

sub usage {
  print STDERR "\nUsage:\taspell-autobuildhash [options]\n"
    . "\n"
    . "Options:\n"
    . "\t--debug         Show debugging info about aspell-autobuildhash\n"
    . "\t                internal work. Will also enable aspell affix validation.\n"
    . "\t--dry-run       Show what would be done, but do nothing real.\n"
    . "\t--force         Do the job regardless of versions comparisons.\n"
    . "\t--triggered     Tell the script that is run in the triggers stage.\n";
}

sub debugprint {
  print STDERR "@_\n" if $debug;
}

sub mymessage{
  my $lang     = shift;
  my $message  = join(" ",@_);
  my $question = "dictionaries-common/ispell-autobuildhash-message";

  subst($question,"xxpell","aspell");
  subst($question,"XXpell","Aspell");
  subst($question,"hashfile","$lang");
  subst($question,"errormsg","$message");
  fset ($question,"seen","false");
  title("dictionaries-common: Running aspell-autobuildhash");
  input("critical",$question);
  go ();
}

sub myerror {
  mymessage @_;
  exit 1;
}

# ---------------------------------------------------------------------
#      Handle autorebuilding
# ---------------------------------------------------------------------

sub autorebuild {
  my $lang            = shift ||                         # The dictionary name
    myerror("aspell-autobuildhash","No argument passed to function autorebuild");
  my $old_remove_data = shift;
  my $aspell_compat   = shift;                           # aspell compat file
  my $langsfile       = "$usrsharedir/$lang.contents";   # The subdicts file
  my $options         = " --per-conf=/dev/null ";        # Make sure no personal conf is used at all
  my %new_remove_data = ();
  my @sublangs        = ();

  $options     .= " --dont-validate-affixes " unless $debug;

  myerror "$program: aspell data dir $datadir does not exist" unless ( -d $datadir );

  # Import registered removal data.
  foreach my $entry ( keys %{$old_remove_data} ){
    $new_remove_data{$entry}++;
    $new_remove_data{'fake-remove'}{$entry}++;
  }

  # Check if there is a contents file for this compat name
  if ( -e $langsfile ){
    open (my $LANGSFILE, "< $langsfile") || die "Could not open $langsfile for reading";
    @sublangs = <$LANGSFILE>;
    close $LANGSFILE;
  } else {
    push @sublangs, $lang;
  }
  chomp @sublangs;

  foreach ( @sublangs ){
    next if m/^\s*$/;
    next if m/^\s*\#/;
    s/^\s+//;
    s/\s+$//;

    my $sublang = $_;
    my $base    = "$usrsharedir/$sublang";     # The wordlist basename
    my $hash    = "$varlibdir/$sublang.rws";   # The hash file
    my $link    = "$usrlibdir/$sublang.rws";   # The link to the hash file
    my $msg     = '';
    my $unpack  = '';
    my $show_aspell_compat = $debug ?  " (compat: $aspell_compat)" : "";

    print STDERR "aspell-autobuildhash: processing: $lang [$sublang]$show_aspell_compat.\n";

    if ( -e "$base.mwl.gz" ){
      $unpack = "zcat $base.mwl.gz";
    } elsif ( -e "$base.wl.gz") {
      $unpack = "zcat $base.wl.gz";
    } elsif ( -e "$base.cwl.gz") {
      $unpack = "zcat $base.cwl.gz | precat";
    } else {
      mymessage($lang,"$program: Could not find any of $base.{mwl,wl,cwl}.gz");
      return;
    }

    #$unpack = "$unpack | aspell clean strict";
    my $command = "$unpack | aspell $options --local-data-dir=$datadir --lang=$lang create master $hash";
    if ( $dry_run ){
      print STDERR "$command\n";
      $new_remove_data{'fake-remove'}{"$hash"}++;
      $new_remove_data{'fake-remove'}{"$link"}++;
    } else {
      debugprint(" - command: $command");
      if ( system ("$command") == 0 ){
	$new_remove_data{'remove'}{$hash}++;
	if ( -w  "$usrlibdir" ){
	  symlink($hash,$link) unless -e $link;
	} else {
	  print STDERR "$program warning: Non writable \"$usrlibdir\". Not setting symlink";
	}
	if ( -l "$link" ){
	  # Make sure link is recorded
	  $new_remove_data{'remove'}{"$link"}++;
	}
      } else {
	$msg = "$program: Could not build the hash file for $sublang" ;
      }
    }

    if ( $msg ){                 # Do not break postinst if hash cannot be built
      mymessage ($lang,$msg);    # Just inform about that
      return;
    }
  }
  $new_remove_data{'status'} = "ok";
  return \%new_remove_data;
}

# ---------------------------------------------------------------------
#                   Get aspell compat version
# ---------------------------------------------------------------------

sub get_aspell_compat {
  my $aspell_compat;
  my $aspellcompatfile = "/usr/share/aspell/aspell.compat";

  if ( -e $aspellcompatfile ){
    open (my $COMPAT,"$aspellcompatfile");
    chomp ( $aspell_compat = <$COMPAT> );
    close $COMPAT;
  }
  return $aspell_compat;
}

# ---------------------------------------------------------------------
#                        The main program
# ---------------------------------------------------------------------

use Debian::DictionariesCommon qw(dico_checkroot dico_activate_trigger);
use Getopt::Long;

# Options processing
GetOptions ('debug'     => \$debug,
	    'dry-run'   => \$dry_run,
	    'force'     => \$force,
	    'triggered' => \$triggered
) or usage();

# Check if we are root
dico_checkroot() unless $dry_run;

# Honour 'DICT_COMMON_DEBUG' environment variable.
unless ( $debug ){
  $debug++ if defined $ENV{'DICT_COMMON_DEBUG'};
}

my %old_remove_data = ();
my $aspell_compat   = get_aspell_compat();

unless ( $triggered or $force ) {
  exit if dico_activate_trigger("aspell-autobuildhash");
}

$force++ unless $aspell_compat;

if ( system("command -v aspell >/dev/null" ) == 0 ){
  foreach my $compat ( <$compatdir/*.compat> ){
    my $lang =  $compat;
    $lang    =~ s/\.compat$//;
    $lang    =~ s/.*\///;

    # Parse compat file
    open (my $COMPAT,"$compat");
    my $lang_compat =  <$COMPAT>;
    close $COMPAT;
    chomp $lang_compat if $lang_compat;
    $lang_compat = 0 unless $lang_compat;

    # Parse dict remove file if available
    my $remove_file     = "$varlibdir/$lang.remove";
    my %old_remove_data = ();
    if ( -e "$remove_file" ){
      open (my $REMOVE,"$remove_file");
      while (<$REMOVE>){
        chomp;
        next if m/^\s*$/;
        s/^\s+//;
        s/\s+$//;
        if ( -e "$_" ){
          $old_remove_data{$_}++;
        } else {
          debugprint "$program: \"$_\" in $remove_file not found. Upgrading info.";
        }
      }
      close $REMOVE;
    }

    #
    if ( $force || $aspell_compat ne $lang_compat ){
      print STDERR "--\n" if ( $debug or $dry_run );
      debugprint "$lang => compat: \"$compat\", aspell_compat: [$aspell_compat]; lang_compat: [$lang_compat]";
      my $new_remove_data = autorebuild($lang,\%old_remove_data,$aspell_compat);
      if ( defined $new_remove_data->{'status'} ){
	my $newcompat = $aspell_compat || 0;
	if ( $dry_run ){
	  print STDERR "$newcompat > $compat\n";
	  print STDERR "Remove: \n", join("\n",sort keys %{$new_remove_data->{'fake-remove'}}) ,"\n";
	} else {
	  # Update compat file
	  open (my $COMPAT,">","$compat");
	  print $COMPAT "$newcompat\n";
	  close $COMPAT;
	  debugprint "Updated $compat to $newcompat";
	  # Update remove file
	  open (my $REMOVE,">","$remove_file")
	    or die "$program: Could not open \"$remove_file\" for write.";
	  print $REMOVE join("\n",sort keys %{$new_remove_data->{'remove'}}),"\n";
	  close $REMOVE;
	}
      } else {
	debugprint " *=* $compat not updated because of an error";
      }
    }
  }
} else {
  debugprint "$program:  aspell is not installed. Doing nothing";
}

__END__

=head1 NAME

B<aspell-autobuildhash> - Autobuilding aspell hash files for some dicts

=head1 SYNOPSIS

 aspell-autobuildhash [--force]

   Options:
    --debug      Show extra info about aspell-autobuildhash internal
                 work. Will also enable aspell affix validation.
    --dry-run    Show what would be done, but do nothing real.
    --force      Rebuild the hash file for all dicts providing a
                 compat file skipping the test.
    --triggered  Tell the script that is run in the triggers stage.

=head1 DESCRIPTION

B<aspell-autobuildhash> is a script that will manage aspell hash files
autobuild, intended to be called from the dictionaries-common tools.
Depending on the aspell
compatibility level and on the compatibility level used for the hash file
if present, will decide whether it must be rebuilt or not. This script will
only work on aspell packages prepared to use it, it will do nothing for other
aspell dict packages.

=head1 OPTIONS

 --debug      Show some extra information about aspell-autobuildhash
              internal work. Will also enable aspell affix validation.
 --dry-run    Show what would be done, but do nothing real.
 --force      Rebuild the hash file for all dicts providing a compat
              file regardless of the compatibility levels found.
 --triggered  Tell the script that is run in the triggers stage. When
              run under dpkg control, do not try to set the
              'aspell-autobuildhash' trigger, but run real
              B<aspell-autobuildhash> code. When not run under dpkg
              control, real code will always be run and '--triggered'
              option has no real effect.

=head1 PACKAGE MAINTAINERS

To use this system, B<aspell-autobuildhash> expects a F<$lang.compat> file
in F</var/lib/aspell> (I<$lang> stands for the lang basename with variant
if any, e.g. I<$lang> is something like I<gl-minimos> or I<en>))
containing aspell compatibility version for last successful build
or "0" or en empty file if hash is to be rebuild, as is for dictionary
installation and upgrades.

When upgrading B<aspell>, script will check if version in I<$lang.compat>
is different from I<aspell.compat> and rebuild if so, updating
I<$lang.compat> with the new value.

Wordlists should previously be compressed either with gzip
(and their extensions set as F<.mwl.gz> or F<.wl.gz>) or preferably
first with aspell prezip and then gzipped (with F<.cwl.gz> extension).
This applies both for plain wordlists and munched wordlists
(in the ispell way) if you use affix compression.

If your package will provide a single hash, install prezipped+gzipped
wordlist as F</usr/share/aspell/$lang.cwl.gz> or, if prezip is not used,
as F</usr/share/aspell/$lang.mwl.gz>.

If your package will provide more than one aspell hash for the same $lang,
you will need to place each compressed wordlist as e.g.
F</usr/share/aspell/$subdict.cwl.gz>, and the common F<$lang.compat> as
above. Then create a F</usr/share/aspell/$lang.contents> file with the
base names of the subdicts, one in a line. For English that will contain,
amongst other possible lines

 en-common
 en-variant_0
 en-variant_1
 en-variant_2
 en_CA-w_accents-only

No need to use this file if a single hash is being created.

Dictionaries-common scripts will call internally this script and create a
single hash file at F</var/lib/ispell/$lang.rws>, or hash files at
F</var/lib/ispell/$subdict.rws>. You must set a symlink to that
files from F</usr/lib/aspell/$lang.rws> or
F</usr/lib/aspell/$subdict.rws> as appropriate.

Aspell dictionary packages using this script must make sure that
I<$lang.compat> is reset on every new install/upgrade, so hash is rebuilt.
They must also make sure that I<$lang.compat> and all of
F</var/lib/aspell/$lang.rws> or F</var/lib/aspell/$subdict.rws>
are removed on package removal.

As of version C<1.10>, B<installdeb-aspell> script will understand
C<'auto-compat'> and C<'auto-contents'> fields in F<$dict.info-aspell>
file to help with this by adding needed debhelper snippets.
Put in that entry the base name(s) of your compat and contents file(s)
and carefully check resulting maintainer scripts after build.

Note that you are no longer suggested to ship empty files at
any of F</var/lib/aspell/$lang.compat>, F</var/lib/aspell/$lang.rws>
or F</var/lib/aspell/$subdict.rws>, but explicitly create/update them
on install and explicitly remove them on removal.

B<aspell> maintainer should also call this script from package postinst.
When comparing versions it will get the aspell version from file
F</usr/share/aspell/aspell.compat>.

=head1 AUTHORS

Agustin Martin <agmartin@debian.org>

=head1 COPYRIGHT

Copyright (C) 2004-2013 Agustin Martin <agmartin@debian.org>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #!/usr/bin/perl -w
#
#  script for ispell hash autorebuild in Debian systems
#
# Copyright 2003-2022 Agustin Martin Domingo <agmartin@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
# ------------------------------------------------------------------

use strict;
use Debian::DictionariesCommon qw(dico_checkroot dico_activate_trigger);
use Getopt::Long;

my $debug;
my $dry_run;
my $force;
my $triggered;
my $program      = "ispell-autobuildhash";
my $varlibdir    = "/var/lib/ispell";
my $compatdir    = "/var/lib/ispell";
my $usrlibdir    = "/usr/lib/ispell";
my $usrsharedir  = "/usr/share/ispell";

# Set tmpdir base, honouring TMPDIR. Real tmpdir is set after options parsing.
my $tmpdir_base  = $ENV{'TMPDIR'} || '/tmp';
my $tmpdir;

# ---------------------------------------------------------------------
sub usage {
# ---------------------------------------------------------------------
  print STDERR "\nUsage:\tispell-autobuildhash [options]\n"
    . "\n"
    . "Options:\n"
    . "\t--debug         Show ispell-autobuildhash debugging information.\n"
    . "\t--dry-run       Show what would be done, but do nothing real.\n"
    . "\t--force         Do the job regardless of versions comparisons.\n"
    . "\t--triggered     Tell the script that is run in the triggers stage.\n";
}

# ---------------------------------------------------------------------
sub debugprint {
# ---------------------------------------------------------------------
  print STDERR "@_\n" if $debug;
}

# ---------------------------------------------------------------------
sub mymessage{
# ---------------------------------------------------------------------
  my $dict     = shift;
  my $message  = join(" ",@_);
  my $question = "dictionaries-common/ispell-autobuildhash-message";

  subst($question,"xxpell","ispell");
  subst($question,"XXpell","Ispell");
  subst($question,"hashfile",$dict);
  subst($question,"errormsg",$message);
  fset ($question,"seen","false");
  title("dictionaries-common: Running ispell-autobuildhash");
  input("critical",$question);
  go ();
}

sub old_myerror {
  my $dict = shift;
  print "
** Error: @_

This error was caused by package providing hash $dict, although it
can be made evident during other package postinst. Please complain
to the maintainer of package providing hash $dict. In the meantime
you might need to remove package providing $dict.hash\n";
  &auto_clean;
  exit 1;
}

# ---------------------------------------------------------------------
sub myerror {
# ---------------------------------------------------------------------
  my $dict = shift;
  mymessage $dict,@_;
}

# ---------------------------------------------------------------------
sub auto_clean {
# ---------------------------------------------------------------------
  if ( -d $tmpdir ){
    unlink <$tmpdir/*>;
    rmdir $tmpdir;
  }
}

# ---------------------------------------------------------------------
#      Handle autorebuilding
# ---------------------------------------------------------------------

sub autorebuild {
  my $dict            = shift;                       # The dictionary name
  my $old_remove_data = shift;
  my $ispell_compat   = shift;                       # ispell compat version
  my $zmwl            = "$usrsharedir/$dict.mwl.gz"; # the compressed munched wordlist
  my $aff             = "$usrlibdir/$dict.aff";      # the aff file
  my $hash            = "$varlibdir/$dict.hash";     # the hash file
  my $link            = "$usrlibdir/$dict.hash";     # the link to the hash
  my $desc            = "$usrlibdir/$dict.desc";     # the .desc file
  my %new_remove_data = ();
  my $show_ispell_compat = $debug ? " (compat: $ispell_compat)" : "";

  die "$program: No argument passed to function autorebuild.\n" unless $dict;

  print STDERR "ispell-autobuildhash: Processing \'$dict\' dict$show_ispell_compat.\n";

  foreach my $entry ( keys %{$old_remove_data} ){
    $new_remove_data{'remove'}{$entry}++;
    $new_remove_data{'fake-remove'}{$entry}++;
  }

  my $tempfile = "$tmpdir/$dict.mwl";
  if ( -e $aff ){
    if ( -e $zmwl ){
      # ispell does not accept this from a pipe. Need explicit files.
      my $gzip_cmd  = "gzip -dc $zmwl > $tempfile";
      my $build_cmd = "buildhash -s $tempfile $aff $hash";
      if ( $dry_run ) {
	print STDERR "$gzip_cmd\n";
	print STDERR "$build_cmd\n";
	$new_remove_data{'fake-remove'}{"$hash"}++;
	$new_remove_data{'fake-remove'}{"$link"}++;
      } else {
	debugprint("$gzip_cmd");
	system ("$gzip_cmd") == 0
	  or myerror($dict,"Could not gunzip the munched wordlist for $dict");
	debugprint("$build_cmd");
	if ( system ("$build_cmd") == 0 ){
	  $new_remove_data{'remove'}{$hash}++;
	  if ( -w  "$usrlibdir" ){
	    symlink($hash,$link) unless -e $link;
	  } else {
	    print STDERR "$program warning: Non writable \"$usrlibdir\". Not setting symlink";
	  }
	  if ( -l "$link" ){
	    # Make sure link is recorded
	    $new_remove_data{'remove'}{"$link"}++;
	  }
	} else {
	  myerror($dict,"Could not build the hash file for $dict") ;
	}
      }
    } elsif ( -e $desc ) {
      if ( -x "/usr/sbin/update-ispell-hash" ) {
	my $cmd = "update-ispell-hash -d $dict > /dev/null";
	if ( $dry_run ) {
	  print STDERR "$cmd\n";
	  $new_remove_data{'fake-remove'}{$hash}++;
	  $new_remove_data{'fake-remove'}{"$link"}++;
	} else {
	  debugprint("$cmd");
	  if ( system ("$cmd") == 0 ){
	    if ( -w  "$usrlibdir" ){
	      symlink($hash,$link) unless -e $link;
	    } else {
	      print STDERR "$program warning: Non writable \"$usrlibdir\". Not setting symlink";
	    }
	    if ( -l "$link" ){
	      # Make sure link is recorded
	      $new_remove_data{'remove'}{"$link"}++;
	    }
	  } else {
	    myerror($dict,"Problems running update-ispell-hash for $dict");
	  }
	}
	debugprint "Found and run update-ispell-hash";
      } elsif ( -x "/usr/sbin/update-ipolish-hash" ) {
	my $cmd = "update-ipolish-hash -d $dict > /dev/null";
	if ( $dry_run ) {
	  print STDERR "$cmd\n";
	  $new_remove_data{'fake-remove'}{$hash}++;
	  $new_remove_data{'fake-remove'}{"$link"}++;
	} else {
	  debugprint("$cmd");
	  if ( system ("$cmd") == 0 ){
	    $new_remove_data{'remove'}{$hash}++;
	    if ( -w  "$usrlibdir" ){
	      symlink($hash,$link) unless -e $link;
	    } else {
	      print STDERR "$program warning: Non writable \"$usrlibdir\". Not setting symlink";
	    }
	    if ( -l "$link" ){
	      # Make sure link is recorded
	      $new_remove_data{'remove'}{"$link"}++;
	    }
	  } else {
	    myerror($dict,"Problems running update-ipolish-hash for $dict");
	  }
	}
	debugprint "Found and run update-ipolish-hash";
      } else {
	myerror($dict,"Could not find any of update-ispell-hash, update-ipolish-hash");
      }
    } else {
      myerror($dict,"Could not find $zmwl");
    }
  } else {
    myerror $dict,"Could not find affix file $aff";
  }
  $new_remove_data{'status'} = "ok";
  return \%new_remove_data;
}

# ---------------------------------------------------------------------
#                   Get ispell compat version
# ---------------------------------------------------------------------

sub get_ispell_compat {
  my $ispell_compat;
  my $ispellcompatfile = "/usr/share/ispell/ispell.compat";

  if ( -e $ispellcompatfile ){
    open (my $COMPAT,"$ispellcompatfile");
    chomp ( $ispell_compat = <$COMPAT> );
    close $COMPAT;
  } elsif ( system("command -v ispell >/dev/null") == 0 ){
    $ispell_compat = (split(" ",`ispell -v | head -n 1`))[4];
  }

  return $ispell_compat;
}

# ---------------------------------------------------------------------
#                        The main program
# ---------------------------------------------------------------------

# Options processing
GetOptions ('debug'     => \$debug,
	    'dry-run'   => \$dry_run,
	    'force'     => \$force,
	    'triggered' => \$triggered
  ) or usage();

# Check if we are root
dico_checkroot() unless $dry_run;

# Honour 'DICT_COMMON_DEBUG' environment variable.
unless ( $debug ){
  $debug++ if defined $ENV{'DICT_COMMON_DEBUG'};
}

unless ( $triggered or $force ){
  exit if dico_activate_trigger("ispell-autobuildhash");
}

# Prepare temporary directory
$tmpdir = `mktemp -d "$tmpdir_base/ispell-auto.XXXXXXXXXX"`
      or die "ispell-autobuildhash: Cannot make temporary directory under \"$tmpdir_base\". Aborting ...\n";
chomp $tmpdir;

$SIG{INT}     = \&auto_clean;
$SIG{KILL}    = \&auto_clean;
$SIG{TERM}    = \&auto_clean;
$SIG{__DIE__} = \&auto_clean;

print STDERR "$program: Using temporary directory \"$tmpdir\"\n"
  if $debug;

if ( my $ispell_compat = get_ispell_compat() ){
  foreach my $dict ( <$compatdir/*.compat> ){
    my $dict_compat     = "forced";
    my %old_remove_data = ();

    $dict =~ s/\.compat$//;
    $dict =~ s/.*\///;

    my $remove_file     = "$varlibdir/$dict.remove";

    # Parse dict compat file if available.
    unless ( $force ) {
      open (my $COMPAT,"$compatdir/$dict.compat");
      $dict_compat = <$COMPAT>;
      close $COMPAT;
      chomp $dict_compat if $dict_compat;
      $dict_compat = 0 unless $dict_compat;
    }

    # Parse dict remove file if available
    if ( -e "$remove_file" ){
      open (my $REMOVE,"$remove_file");
      while (<$REMOVE>){
	chomp;
	next if m/^\s*$/;
	s/^\s+//;
	s/\s+$//;
	if ( -e "$_" ){
	  $old_remove_data{$_}++;
	} else {
	  debugprint "$program: \"$_\" in $remove_file not found. Upgrading info.";
	}
      }
      close $REMOVE;
    }

    if ($force || $ispell_compat ne $dict_compat) {
      print STDERR "--\n" if ( $debug or $dry_run );
      debugprint "$dict => ispell_compat: [$ispell_compat]; dict_compat: [$dict_compat]";

      my $new_remove_data = autorebuild("$dict",\%old_remove_data,$ispell_compat);
      if ( defined $new_remove_data->{'status'} ) {
	if ( $dry_run ){
	  print STDERR "$ispell_compat > $compatdir/$dict.compat\n";
	  print STDERR "Remove: \n", join("\n",sort keys %{$new_remove_data->{'fake-remove'}}) ,"\n";
	} else {
	  # Update compat file
	  open (my $COMPAT,">","$compatdir/$dict.compat");
	  print $COMPAT "$ispell_compat\n";
	  close $COMPAT;
	  debugprint "Updated $compatdir/$dict.compat to $ispell_compat";
	  # Update remove file
	  open (my $REMOVE,">","$remove_file")
	    or die "$program: Could not open \"$remove_file\" for write.";
	  print $REMOVE join("\n",sort keys %{$new_remove_data->{'remove'}}),"\n";
	  close $REMOVE;
	}
      } else {
	debugprint " --- $program: $compatdir/$dict.compat not updated because of an error";
      }
    }
  }
} else {
  debugprint "$program: no ispell compat info. ispell may not be installed. Aborting ...\n";
}

&auto_clean unless $debug;

__END__

=head1 NAME

B<ispell-autobuildhash> - Autobuilding the ispell hash file for some dicts

=head1 SYNOPSIS

 ispell-autobuildhash [--force]

   Options:
    --debug      Show some extra ispell-autobuildhash information.
    --dry-run    Show what would be done, but do nothing real.
    --force      Rebuild the hash file for all dicts providing a
                 compat file skipping the test.
    --triggered  Tell the script that is run in the triggers stage.

=head1 DESCRIPTION

B<ispell-autobuildhash> is a script that will manage ispell hash files
autobuild, intended to be called from the dictionaries-common tools.
Depending on the ispell
compatibility level and on the compatibility level used for the hash file
if present, will decide whether it must be rebuilt or not. This script will
only work on ispell packages prepared to use it, it will do nothing for other
ispell dict packages.

=head1 OPTIONS

 --debug      Show some extra ispell-autobuildhash information.
 --dry-run    Show what would be done, but do nothing real.
 --force      Rebuild the hash file for all dicts providing a compat
              file regardless of the compatibility levels found.
 --triggered  Tell the script that is run in the triggers stage. When
              run under dpkg control, do not try to set the
              'ispell-autobuildhash' trigger, but run real
              B<ispell-autobuildhash> code. When not run under dpkg
              control, real code will always be run and '--triggered'
              option has no real effect.

=head1 PACKAGE MAINTAINERS

To use this system, B<ispell-autobuildhash> expects a F<$dict.compat> file
in F</var/lib/ispell> (I<$dict> stands for the hash or affix file basename)
containing ispell major or compatibility version for last successful build
or "0" or en empty file if hash is to be rebuild, as is for dictionary
installation and upgrades.

When upgrading B<ispell>, script will check if version in I<$dict.compat>
is different from I<ispell.compat> and rebuild if so, updating
I<$dict.compat> with the new value. The particular way things are done depends
on whether your dict has a single source or a multiple source like ipolish has.

The most common case is having a single source. In this case you must put
the F<$dict.aff> file at F</usr/lib/ispell/$dict.aff> as usual and the munched
wordlist compressed with gzip at F</usr/share/ispell/$dict.mwl.gz>.

This script supports the way ipolish allows selection of subdictionaries
to be put in the hash file. It will detect the presence of  the main
language .desc file and call update-ipolish-hash as appropriate.

Although this script looks for the existence of a update-ispell-hash script
with supposedly similar functionality to update-ipolish-hash, this latter
does not really exists, although it might be added at some time to ispell or
to the dictionaries-common system, if enough demand is found.

If your package provides more than one ispell dictionary you will need to
do the steps above for each dictionary.

Dictionaries-common scripts will call internally this script and create a
hash file at F</var/lib/ispell/$dict.hash>. You must set a symlink to that
file from F</usr/lib/ispell/$dict.hash>.

Ispell dictionary packages using this script must make sure that
I<$dict.compat> is reset on every new install/upgrade, so hash is rebuilt.
They must also make sure that I<$dict.compat> and F</var/lib/ispell/$dict.hash>
are removed on package removal

As of version C<1.10>, B<installdeb-ispell> script will understand
C<'auto-compat'> field in F<$dict.info-ispell> file to help with this by
adding needed debhelper snippets. Put in that entry the base name(s) of
your compat file(s) and check resulting maintainer scripts after build.

Note that you are no longer suggested to ship empty files at
F</var/lib/ispell/$dict.compat> and F</var/lib/ispell/$dict.hash> to help
with reset/removal of those files, but explicitly create/update them on
install and explicitly remove them on removal.

B<ispell> maintainer should also call this script from package postinst.
When comparing versions it will get the ispell version from file
F</usr/share/ispell/ispell.compat>, or if it does not exists, from the
upstream version as given in the first line of 'B<ispell -vv> output.

=head1 AUTHOR

Agustin Martin <agmartin@debian.org>

=head1 COPYRIGHT

Copyright (C) 2003-2013 Agustin Martin <agmartin@debian.org>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(dico_checkroot);
use Debconf::Client::ConfModule q(:all);

dico_checkroot ();

die "Usage: $0 package-name\n" if (scalar @ARGV != 1);

version ('2.0');

my $class    = "ispell";
my $question = "dictionaries-common/default-$class";
my $script   = "/usr/share/dictionaries-common/dc-debconf-select.pl";
my $program  = "remove-default-$class";
my $debug    = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
my $newflag  = "/var/cache/dictionaries-common/flag-$class-new";
my %title    = ('ispell'   => "Dictionaries-common: Ispell dictionary",
		'wordlist' => "Dictionaries-common: Wordlist dictionary"
		);

my ($errorcode, $value) = get $question;

if ($errorcode == 0) {
  require $script;

  my $pkg          = $ARGV[0];
  my $languages    = &dico_parse_languages($class,"languages");
  my @newchoices   = ();
  my %langsinpkg   = ();

  # Get list of languages provided by package being removed. Check
  # first if package is already removed, some packages using cdbs
  # call this script twice, the second with package already removed
  if ( exists $languages->{$pkg} ){
    foreach ( split (/\s*,\s*/, $languages->{$pkg}) ){
      $langsinpkg{$_}++;
    }
    # Update $languages removing $pkg entry
    delete $languages->{$pkg};

    # Update question variables with new values
    my ($choices, $echoices ) = &dico_get_all_choices($class,$languages);
    subst ($question, "choices", $choices);
    subst ($question, "echoices", $echoices);

    # Ask with new values if current value is being removed and langs are left
    if ( %$languages && exists $langsinpkg{$value} ) {
      fset  ($question, "seen", "false");
      input ("critical", $question);
      title ($title{$class});
      go ();
    }
  }
}

# If $newflag exists, we are removing an IDWP in the same run another IDWP of the same
# class is to be installed. If the to-be-installed IDWP is the new selection update-default-
# -$class will fail because the new IDWP is not yet unpacked. Since in this case update-
# -default-$class will be run in new IDWP postinst, we do not it here and so avoid problems.
if ( -f $newflag ) {
  print STDERR "$program: $newflag exists, defer update-default-$class run\n" if $debug;
} else {
  system "update-default-$class";
}

# Local Variables:
#  perl-indent-level: 2
# End:

__END__

=head1 NAME

remove-default-ispell - remove default ispell dictionary

=head1 SYNOPSIS

 remove-default-ispell <package>

=head1 DESCRIPTION

WARNING: Not to be used from the command line unless you know very well what you are doing.

When called from package postrm, this program will take care of removing the entries
associated to a ispell package from the dictionaries-common database
and call for the new selection if it was the default one.

=head1 SEE ALSO

The dictionaries-common policy document

=head1 AUTHORS

Rafael Laboissiere

=cut

#  LocalWords:  ispell wordlist
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(dico_checkroot);
use Debconf::Client::ConfModule q(:all);

dico_checkroot ();

die "Usage: $0 package-name\n" if (scalar @ARGV != 1);

version ('2.0');

my $class    = "wordlist";
my $question = "dictionaries-common/default-$class";
my $script   = "/usr/share/dictionaries-common/dc-debconf-select.pl";
my $program  = "remove-default-$class";
my $debug    = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
my $newflag  = "/var/cache/dictionaries-common/flag-$class-new";
my %title    = ('ispell'   => "Dictionaries-common: Ispell dictionary",
		'wordlist' => "Dictionaries-common: Wordlist dictionary"
		);

my ($errorcode, $value) = get $question;

if ($errorcode == 0) {
  require $script;

  my $pkg          = $ARGV[0];
  my $languages    = &dico_parse_languages($class,"languages");
  my @newchoices   = ();
  my %langsinpkg   = ();

  # Get list of languages provided by package being removed. Check
  # first if package is already removed, some packages using cdbs
  # call this script twice, the second with package already removed
  if ( exists $languages->{$pkg} ){
    foreach ( split (/\s*,\s*/, $languages->{$pkg}) ){
      $langsinpkg{$_}++;
    }
    # Update $languages removing $pkg entry
    delete $languages->{$pkg};

    # Update question variables with new values
    my ($choices, $echoices ) = &dico_get_all_choices($class,$languages);
    subst ($question, "choices", $choices);
    subst ($question, "echoices", $echoices);

    # Ask with new values if current value is being removed and langs are left
    if ( %$languages && exists $langsinpkg{$value} ) {
      fset  ($question, "seen", "false");
      input ("critical", $question);
      title ($title{$class});
      go ();
    }
  }
}

# If $newflag exists, we are removing an IDWP in the same run another IDWP of the same
# class is to be installed. If the to-be-installed IDWP is the new selection update-default-
# -$class will fail because the new IDWP is not yet unpacked. Since in this case update-
# -default-$class will be run in new IDWP postinst, we do not it here and so avoid problems.
if ( -f $newflag ) {
  print STDERR "$program: $newflag exists, defer update-default-$class run\n" if $debug;
} else {
  system "update-default-$class";
}

# Local Variables:
#  perl-indent-level: 2
# End:

__END__

=head1 NAME

remove-default-wordlist - remove default wordlist

=head1 SYNOPSIS

 remove-default-wordlist <package>

=head1 DESCRIPTION

WARNING: Not to be used from the command line unless you know very well what you are doing.

When called from package postrm, this program will take care of removing the entries
associated to a wordlist package from the dictionaries-common database
and call for the new selection if it was the default one.

=head1 SEE ALSO

The dictionaries-common policy document

=head1 AUTHORS

Rafael Laboissiere

=cut

#  LocalWords:  ispell wordlist
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(:all);
use Debconf::Client::ConfModule q(:all);

dico_checkroot ();

version ('2.0');

my $class    = "ispell";
my $program  = "select-default-$class";
my $question = "dictionaries-common/default-$class";
my $script   = "/usr/share/dictionaries-common/dc-debconf-select.pl";

sub dico_force_question (){
  # Force asking question for given \%languages, or for all if not given
  my $class     = shift;
  my $languages = shift;
  my $question  = "dictionaries-common/default-$class";
  my %title     = ('ispell'   => "Dictionaries-common: Ispell dictionary",
		   'wordlist' => "Dictionaries-common: Wordlist dictionary"
		   );

  # If no explict $languages is given, ask for all, and return if none present
  $languages    = &dico_parse_languages($class,"languages") unless $languages;
  return unless %$languages;

  my ($choices, $echoices ) = &dico_get_all_choices($class,$languages);
  fset  ($question, "seen", "false");
  subst ($question, "choices", $choices);
  subst ($question, "echoices", $echoices);
  input ("critical", $question);
  title ($title{$class});
  go ();
}

updatedb ($class);
my $dictionaries = loaddb ($class);

my $forced_default_regexp;
foreach my $option ( @ARGV ){
  if ( $option =~ s/--set-default=// ){
    $forced_default_regexp = $option;
  } elsif ( $option eq "--debug") {
    dico_debug;
  } elsif ( $option eq "--show-choices") {
    print STDERR join("\n",sort keys %$dictionaries), "\n";
    exit;
  }
}

if ( %$dictionaries ) {
  if ( $forced_default_regexp ){
    if ( my $forced_value = dico_find_matching_choice($dictionaries,$forced_default_regexp) ){
      set($question,$forced_value);
    } else {
      die "$program: No (unique) match for \"$forced_default_regexp\". Aborting ...\n";
    }
  } else {
    if (get $question) {
      require $script;
      &dico_force_question($class);
    }
  }
}

system "update-default-$class";

# Local Variables:
#  perl-indent-level: 2
# End:

__END__

=head1 NAME

    select-default-ispell - select default ispell dictionary

=head1 SYNOPSIS

 select-default-ispell [options]

  Options (all long only options):
    --set-default='regexp' Try 'regexp' to get a single match and set
                           it as default. Fail otherwise.
    --show-choices         Show available choices to STDERR and exit.
    --debug                Enable debug mode

=head1 DESCRIPTION

This program is responsible for selecting default
ispell dictionary.

If B<--show-choices> is used will just output a list of available
choices to STDERR and exit.
STDOUT cannot be used, this program loads B<debconf> and B<debconf>
captures STDOUT.

If B<--set-default> is used, program will try to get a single regexp
match from available choices, failing if not.
Will try case dependent match first, then case independent.

If B<--set-default> is not used this program will make debconf always
ask the shared question about the default ispell
dictionary to be used in your system according to the
installed ones.

In both cases, will do the appropriate settings if needed.

Calls internally B<update-default-ispell>.

=head1 SEE ALSO

The dictionaries-common policy document

=head1 AUTHORS

Rafael Laboissiere,
Agustin Martin

=cut



#  LocalWords:  ispell wordlist
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(:all);
use Debconf::Client::ConfModule q(:all);

dico_checkroot ();

version ('2.0');

my $class    = "wordlist";
my $program  = "select-default-$class";
my $question = "dictionaries-common/default-$class";
my $script   = "/usr/share/dictionaries-common/dc-debconf-select.pl";

sub dico_force_question (){
  # Force asking question for given \%languages, or for all if not given
  my $class     = shift;
  my $languages = shift;
  my $question  = "dictionaries-common/default-$class";
  my %title     = ('ispell'   => "Dictionaries-common: Ispell dictionary",
		   'wordlist' => "Dictionaries-common: Wordlist dictionary"
		   );

  # If no explict $languages is given, ask for all, and return if none present
  $languages    = &dico_parse_languages($class,"languages") unless $languages;
  return unless %$languages;

  my ($choices, $echoices ) = &dico_get_all_choices($class,$languages);
  fset  ($question, "seen", "false");
  subst ($question, "choices", $choices);
  subst ($question, "echoices", $echoices);
  input ("critical", $question);
  title ($title{$class});
  go ();
}

updatedb ($class);
my $dictionaries = loaddb ($class);

my $forced_default_regexp;
foreach my $option ( @ARGV ){
  if ( $option =~ s/--set-default=// ){
    $forced_default_regexp = $option;
  } elsif ( $option eq "--debug") {
    dico_debug;
  } elsif ( $option eq "--show-choices") {
    print STDERR join("\n",sort keys %$dictionaries), "\n";
    exit;
  }
}

if ( %$dictionaries ) {
  if ( $forced_default_regexp ){
    if ( my $forced_value = dico_find_matching_choice($dictionaries,$forced_default_regexp) ){
      set($question,$forced_value);
    } else {
      die "$program: No (unique) match for \"$forced_default_regexp\". Aborting ...\n";
    }
  } else {
    if (get $question) {
      require $script;
      &dico_force_question($class);
    }
  }
}

system "update-default-$class";

# Local Variables:
#  perl-indent-level: 2
# End:

__END__

=head1 NAME

    select-default-wordlist - select default wordlist

=head1 SYNOPSIS

 select-default-wordlist [options]

  Options (all long only options):
    --set-default='regexp' Try 'regexp' to get a single match and set
                           it as default. Fail otherwise.
    --show-choices         Show available choices to STDERR and exit.
    --debug                Enable debug mode

=head1 DESCRIPTION

This program is responsible for selecting default
wordlist.

If B<--show-choices> is used will just output a list of available
choices to STDERR and exit.
STDOUT cannot be used, this program loads B<debconf> and B<debconf>
captures STDOUT.

If B<--set-default> is used, program will try to get a single regexp
match from available choices, failing if not.
Will try case dependent match first, then case independent.

If B<--set-default> is not used this program will make debconf always
ask the shared question about the default wordlist to be used in your system according to the
installed ones.

In both cases, will do the appropriate settings if needed.

Calls internally B<update-default-wordlist>.

=head1 SEE ALSO

The dictionaries-common policy document

=head1 AUTHORS

Rafael Laboissiere,
Agustin Martin

=cut



#  LocalWords:  ispell wordlist
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(:all);
use Debconf::Client::ConfModule q(:all);

dico_checkroot ();

my $triggered;
my $skip_symlinks_setting;
my $class   = "ispell";
my $program = "update-default-$class";
my $debug   = 1 if defined $ENV{'DICT_COMMON_DEBUG'};

# Parse options
foreach my $option ( @ARGV ){
  if ( $option eq "--skip-symlinks" ){
    # Do not try to set symlinks at $linkdir.
    $skip_symlinks_setting++;
  } elsif ( $option eq "--rebuild" ){
    # info is always rebuilt, so this option is not needed.
    # It is preserved as a no-op for old maintainer scripts.
  } elsif ( $option eq "--triggered" ){
    # Do not try to enable update-default-$class} trigger but run the script.
    $triggered++;
  } else {
    die "update-default-$class: Bad option \"$option\". Aborting..."
  }
}

version ('2.0');

updatedb ($class);
my $dictionaries = loaddb ($class);

# Preprocess default symlinks
dico_preprocess_default_symlinks ($class,$dictionaries);

# Enable trigger if needed. Exit cleanly on success.
unless ( $triggered ){
  exit if dico_activate_trigger("update-default-$class");
}

my $manual;
my $question  = "dictionaries-common/default-$class";
my $iquestion = "dictionaries-common/invalid_debconf_value";
my $debconf_dbase_corruption_question = "dictionaries-common/debconf_database_corruption";
my $newflag   = "/var/cache/dictionaries-common/flag-$class-new";

# This flag is intended for remove-default-$class. If we are here we do not
# need it any longer, so we reset for future apt runs by cleaning it.
if ( -f $newflag ){
  print STDERR "$program: Removing $newflag\n" if $debug;
  unlink $newflag
    or print STDERR " $program: Warning: could not remove $newflag\n";
}

my ($ret, $value)  = get ($question);
if ( $ret == 0 && $value ){
  # Question has a value
  if ( $value =~ m/^Manual.*/i ){
    # Question is set to manual mode
    print STDERR "$program: Manual mode for \"$class\"\n" if $debug;
    $manual++;
  } elsif ( not %$dictionaries ) {
    # Question has a value, but no manual mode and no class elements available. Unset value.
    print STDERR "$program: No Manual mode and no $class elements. $question unset.\n" if $debug;
    $value = "";
    set($question,$value);
    $manual++;
  } else {
    # Normal case, question has a value and is set to one of the installed class elements.
    print STDERR "$program: Default is set to \"$value\" for \"$class\"\n" if $debug;
  }
} elsif ( not %$dictionaries ) {
  # Question is empty. No default nor class elements available. Proceed as for manual.
  print STDERR "$program: No \"$class\" elements left.\n" if $debug;
  $manual++;
} else { # Question is empty, but $class elements are installed.

  # This seems to be debconf database corruption. Warn loudly about it.
  my %class_pkgs = ();
  foreach my $lang ( keys %{$dictionaries} ){
    if ( defined $dictionaries->{$lang}->{'package'} ){
      $class_pkgs{$dictionaries->{$lang}->{'package'}}++;
    }
  }
  my $class_packages = join (', ',sort keys %class_pkgs);

  subst($debconf_dbase_corruption_question,"class_packages",$class_packages);
  subst($debconf_dbase_corruption_question,"question",$question);
  fset ($debconf_dbase_corruption_question,"seen","false");
  input("high",$debconf_dbase_corruption_question);
  title ("dictionaries-common: ispell dictionaries");
  go ();

  # Try harder to get a value after default file
  my $dico_sysdefault = dico_getsysdefault($class);
  if ( defined $dico_sysdefault ){ # Not undef. Can be an empty or non-empty string.
    if ( $dico_sysdefault ){ # True: Non-empty string and not 0
      if ( defined $dictionaries->{$dico_sysdefault} ){
	$value = $dico_sysdefault;
	set($question,$value);
	print STDERR "$program: Missing value for \"$question\" question. Using \"$value\"\n";
      }
    } else { # False: The empty string or 0
      $value = "Manual symlinks setting (Forced after default file)";
      set($question,$value);
      $manual++;
    }
  }
}

unless ( $manual ){
  # Handle invalid debconf values
  if ( not exists $dictionaries->{$value} ){
    # This can happen because either an invalid debconf value or a
    # void value due to debconf database corruption. Try after stored
    # values to stay in the safe side.
    my @available_keys = sort {lc $a cmp lc $b} keys %$dictionaries;
    my $choices    = join (', ', sort {lc $a cmp lc $b} @available_keys);
    print STDERR "$program: Trying to get a default value from \"$choices\"\n";
    my $forced_key = $available_keys[0] ||
      die "$program: Selected ispell dictionary" .
	" \"$value\" \n" .
	"does not correspond to any installed package in the system\n" .
	"and no alternative ispell dictionary could be selected.\n";

    # Warn about what might have happened if not debconf database corruption
    if ( $value ){
      subst($iquestion,"value",$value);
      fset ($iquestion,"seen","false");
      input("high",$iquestion);
    }

    # Prepare a selection box to get a default.
    subst ($question, "choices", $choices);  # Put sane values in debconf choices field
    subst ($question, "echoices", $choices); # Put sane values in debconf echoices field
    set ($question, $forced_key);            # Set debconf value to a sane one
    fset ($question,"seen","false");
    input ("critical", $question);
    title ("dictionaries-common: ispell dictionaries");
    go ();
    ($ret, $value) = get ($question);
    die "\n Could not get a valid value for debconf question:\n" .
      "$question\n"
      if ( $ret != 0 ); # This should never be reached

    # Set manual flag if needed to avoid later symlinking
    $manual++ if ( $value =~ m/^Manual.*/i );
  }
}

# Set default value for ispell dictionaries and wordlists
if ( $manual ){
  dico_setsysdefault ($class,"");
} else {
  dico_setsysdefault ($class,$value);
}

# This here is only for ispell, not wordlist
my $emacsen_default      = "nil";
my $cache_dir            = "/var/cache/dictionaries-common";
my $emacsen_default_file = "$cache_dir/emacsen-ispell-default.el";
my $ispell_dicts_list    = "$cache_dir/ispell-dicts-list.txt";

unless ( $manual ){

  # Get ispell default dict for emacsen
  if ( exists $dictionaries->{$value}{"emacs-display"}
       and lc($dictionaries->{$value}{"emacs-display"}) eq "no" ){
    $emacsen_default = "nil";
  } elsif ( exists $dictionaries->{$value}{"emacsen-name"} ){
    $emacsen_default = "\"" . $dictionaries->{$value}{"emacsen-name"} . "\"";
  } elsif( exists $dictionaries->{$value}{"hash-name"} ){
    $emacsen_default = "\"" . $dictionaries->{$value}{"hash-name"} . "\"";
  }
}

# Printing a plain list with installed ispell dictionaries,
open (IDICTS,"> $ispell_dicts_list") ||
  die "Could not open $ispell_dicts_list for writing\n";
print IDICTS ""; # Make sure this is void if no dictionaries available.
foreach ( sort keys %{$dictionaries} ){
  print IDICTS "$_\n";
}
close (IDICTS);

# Printing the default ispell dictionary under emacs
open (EMISDEFAULT,"> $emacsen_default_file");
print EMISDEFAULT ";; File automatically generated by update-default-ispell
;;
;; Do not manually edit!! Use select-default-ispell script instead

(set-variable \'debian-ispell-dictionary $emacsen_default)\n";
close EMISDEFAULT;

# Autobuild hashes and emacsen/jed/squirrelmail stuff where appropriate.
print STDERR "update-default-$class: Calling ispell-autobuildhash\n" if $debug;
system ("ispell-autobuildhash --triggered") == 0
  or die "$program: Error running ispell-autobuildhash\n";

build_emacsen_support ();
build_jed_support ();
build_squirrelmail_support ();

# Clean orphaned remove files and its contents.
dico_clean_orphaned_removefiles($class,$dictionaries);
# -- End of specific ispell support 

# Set default symlink(s) and complain if not possible.
# For ispell dictionaries using auto-buildhash this should not be done
# from dictionaries-common postinst, but from ispell dictionaries postinst.
# Otherwise this is called before hashes are autobuild and will fail.
# d-c.postinst will call update-default-ispell with --skip-symlinks option.
unless ( $skip_symlinks_setting or $manual ) {
 dico_set_default_symlink($class,$value);
}

# Local Variables:
#  perl-indent-level: 2
# End:

__END__

=head1 NAME

update-default-ispell - update default ispell dictionary

=head1 SYNOPSIS

 update-default-ispell [--skip-symlinks] [--triggered]

=head1 DESCRIPTION

WARNING: Not to be used from the command line unless you know very well what you are doing.

This program is intended to be called from ispell dictionary package postinst,
from B<select-default-ispell> or
from dictionaries-common postinst.

When called under dpkg control with the B<--trigger> option the
script is run normally, otherwise the dictionaries-common
B<update-default-ispell> trigger is enabled
for later run.

With the B<--skip-symlinks> option the symlinks setting is skipped.
This is needed for B<update-default-ispell> when called from
dictionaries-common postinst, since autobuilt hashes may not yet
be available.

When run normally (from the command line or with B<--trigger>)
this script rebuilds the info at
F</var/cache/dictionaries-common/ispell.db>
after files under F</var/lib/dictionaries-common/ispell>,
reads the system default from the debconf database and
unless disabled, set default symlinks in F</etc/dictionaries-common>
pointing to the appropriate files in
F</usr/lib/ispell/>.

For ispell this script also updates the system-wide setting
F</etc/dictionaries-common/ispell-default> and the emacsen,
jed, and SquirrelMail support after known info.

=head1 OPTIONS

 --skip-symlinks  Do not try to set symlinks at /etc/dictionaries-common dir.
 --triggered      Run all the code instead of trying to enable
                  update-default-ispell trigger

=head1 SEE ALSO

The dictionaries-common policy document

=head1 AUTHORS

Rafael Laboissiere,
Agustin Martin Domingo

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(:all);
use Debconf::Client::ConfModule q(:all);

dico_checkroot ();

my $triggered;
my $skip_symlinks_setting;
my $class   = "wordlist";
my $program = "update-default-$class";
my $debug   = 1 if defined $ENV{'DICT_COMMON_DEBUG'};

# Parse options
foreach my $option ( @ARGV ){
  if ( $option eq "--skip-symlinks" ){
    # Do not try to set symlinks at $linkdir.
    $skip_symlinks_setting++;
  } elsif ( $option eq "--rebuild" ){
    # info is always rebuilt, so this option is not needed.
    # It is preserved as a no-op for old maintainer scripts.
  } elsif ( $option eq "--triggered" ){
    # Do not try to enable update-default-$class} trigger but run the script.
    $triggered++;
  } else {
    die "update-default-$class: Bad option \"$option\". Aborting..."
  }
}

version ('2.0');

updatedb ($class);
my $dictionaries = loaddb ($class);

# Preprocess default symlinks
dico_preprocess_default_symlinks ($class,$dictionaries);

# Enable trigger if needed. Exit cleanly on success.
unless ( $triggered ){
  exit if dico_activate_trigger("update-default-$class");
}

my $manual;
my $question  = "dictionaries-common/default-$class";
my $iquestion = "dictionaries-common/invalid_debconf_value";
my $debconf_dbase_corruption_question = "dictionaries-common/debconf_database_corruption";
my $newflag   = "/var/cache/dictionaries-common/flag-$class-new";

# This flag is intended for remove-default-$class. If we are here we do not
# need it any longer, so we reset for future apt runs by cleaning it.
if ( -f $newflag ){
  print STDERR "$program: Removing $newflag\n" if $debug;
  unlink $newflag
    or print STDERR " $program: Warning: could not remove $newflag\n";
}

my ($ret, $value)  = get ($question);
if ( $ret == 0 && $value ){
  # Question has a value
  if ( $value =~ m/^Manual.*/i ){
    # Question is set to manual mode
    print STDERR "$program: Manual mode for \"$class\"\n" if $debug;
    $manual++;
  } elsif ( not %$dictionaries ) {
    # Question has a value, but no manual mode and no class elements available. Unset value.
    print STDERR "$program: No Manual mode and no $class elements. $question unset.\n" if $debug;
    $value = "";
    set($question,$value);
    $manual++;
  } else {
    # Normal case, question has a value and is set to one of the installed class elements.
    print STDERR "$program: Default is set to \"$value\" for \"$class\"\n" if $debug;
  }
} elsif ( not %$dictionaries ) {
  # Question is empty. No default nor class elements available. Proceed as for manual.
  print STDERR "$program: No \"$class\" elements left.\n" if $debug;
  $manual++;
} else { # Question is empty, but $class elements are installed.

  # This seems to be debconf database corruption. Warn loudly about it.
  my %class_pkgs = ();
  foreach my $lang ( keys %{$dictionaries} ){
    if ( defined $dictionaries->{$lang}->{'package'} ){
      $class_pkgs{$dictionaries->{$lang}->{'package'}}++;
    }
  }
  my $class_packages = join (', ',sort keys %class_pkgs);

  subst($debconf_dbase_corruption_question,"class_packages",$class_packages);
  subst($debconf_dbase_corruption_question,"question",$question);
  fset ($debconf_dbase_corruption_question,"seen","false");
  input("high",$debconf_dbase_corruption_question);
  title ("dictionaries-common: wordlists");
  go ();

  # Try harder to get a value after default file
  my $dico_sysdefault = dico_getsysdefault($class);
  if ( defined $dico_sysdefault ){ # Not undef. Can be an empty or non-empty string.
    if ( $dico_sysdefault ){ # True: Non-empty string and not 0
      if ( defined $dictionaries->{$dico_sysdefault} ){
	$value = $dico_sysdefault;
	set($question,$value);
	print STDERR "$program: Missing value for \"$question\" question. Using \"$value\"\n";
      }
    } else { # False: The empty string or 0
      $value = "Manual symlinks setting (Forced after default file)";
      set($question,$value);
      $manual++;
    }
  }
}

unless ( $manual ){
  # Handle invalid debconf values
  if ( not exists $dictionaries->{$value} ){
    # This can happen because either an invalid debconf value or a
    # void value due to debconf database corruption. Try after stored
    # values to stay in the safe side.
    my @available_keys = sort {lc $a cmp lc $b} keys %$dictionaries;
    my $choices    = join (', ', sort {lc $a cmp lc $b} @available_keys);
    print STDERR "$program: Trying to get a default value from \"$choices\"\n";
    my $forced_key = $available_keys[0] ||
      die "$program: Selected wordlist" .
	" \"$value\" \n" .
	"does not correspond to any installed package in the system\n" .
	"and no alternative wordlist could be selected.\n";

    # Warn about what might have happened if not debconf database corruption
    if ( $value ){
      subst($iquestion,"value",$value);
      fset ($iquestion,"seen","false");
      input("high",$iquestion);
    }

    # Prepare a selection box to get a default.
    subst ($question, "choices", $choices);  # Put sane values in debconf choices field
    subst ($question, "echoices", $choices); # Put sane values in debconf echoices field
    set ($question, $forced_key);            # Set debconf value to a sane one
    fset ($question,"seen","false");
    input ("critical", $question);
    title ("dictionaries-common: wordlists");
    go ();
    ($ret, $value) = get ($question);
    die "\n Could not get a valid value for debconf question:\n" .
      "$question\n"
      if ( $ret != 0 ); # This should never be reached

    # Set manual flag if needed to avoid later symlinking
    $manual++ if ( $value =~ m/^Manual.*/i );
  }
}

# Set default value for ispell dictionaries and wordlists
if ( $manual ){
  dico_setsysdefault ($class,"");
} else {
  dico_setsysdefault ($class,$value);
}

#

# Set default symlink(s) and complain if not possible.
# For ispell dictionaries using auto-buildhash this should not be done
# from dictionaries-common postinst, but from ispell dictionaries postinst.
# Otherwise this is called before hashes are autobuild and will fail.
# d-c.postinst will call update-default-ispell with --skip-symlinks option.
unless ( $skip_symlinks_setting or $manual ) {
 dico_set_default_symlink($class,$value);
}

# Local Variables:
#  perl-indent-level: 2
# End:

__END__

=head1 NAME

update-default-wordlist - update default wordlist

=head1 SYNOPSIS

 update-default-wordlist [--skip-symlinks] [--triggered]

=head1 DESCRIPTION

WARNING: Not to be used from the command line unless you know very well what you are doing.

This program is intended to be called from wordlist package postinst,
from B<select-default-wordlist> or
from dictionaries-common postinst.

When called under dpkg control with the B<--trigger> option the
script is run normally, otherwise the dictionaries-common
B<update-default-wordlist> trigger is enabled
for later run.

With the B<--skip-symlinks> option the symlinks setting is skipped.


When run normally (from the command line or with B<--trigger>)
this script rebuilds the info at
F</var/cache/dictionaries-common/wordlist.db>
after files under F</var/lib/dictionaries-common/wordlist>,
reads the system default from the debconf database and
unless disabled, set default symlinks in F</etc/dictionaries-common>
pointing to the appropriate files in
F</usr/share/dict/>.



=head1 OPTIONS

 --skip-symlinks  Do not try to set symlinks at /etc/dictionaries-common dir.
 --triggered      Run all the code instead of trying to enable
                  update-default-wordlist trigger

=head1 SEE ALSO

The dictionaries-common policy document

=head1 AUTHORS

Rafael Laboissiere,
Agustin Martin Domingo

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(:all);

dico_checkroot ();

my $cachedir   = "/var/cache/dictionaries-common";
my $class      = "aspell";
my %locales    = ();

updatedb ($class);
build_emacsen_support ();
build_squirrelmail_support ();
# 
build_jed_support ();

# Clean orphaned remove files and its contents.
my $dictionaries = loaddb ($class);
dico_clean_orphaned_removefiles($class,$dictionaries);

system ("aspell-autobuildhash") == 0
    or die "Error running aspell-autobuildhash\n";
#

__END__

=head1 NAME

update-dictcommon-aspell - rebuild aspell database and emacsen stuff

=head1 SYNOPSIS

 update-dictcommon-aspell

=head1 DESCRIPTION

WARNING: Not to be used from the command line unless you know very well what you are doing.

This script, when called from aspell dict package postinst or postrm will
rebuild aspell database as well as squirrelmail, jed and emacsen stuff.

=head1 SEE ALSO

The dictionaries-common policy

=head1 AUTHORS

Rafael Laboissiere,
Agustin Martin

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/usr/bin/perl -w

use strict;
use Debian::DictionariesCommon q(:all);

dico_checkroot ();

my $cachedir   = "/var/cache/dictionaries-common";
my $class      = "hunspell";
my %locales    = ();

updatedb ($class);
build_emacsen_support ();
build_squirrelmail_support ();
# 

__END__

=head1 NAME

update-dictcommon-hunspell - rebuild hunspell database and emacsen stuff

=head1 SYNOPSIS

 update-dictcommon-hunspell

=head1 DESCRIPTION

WARNING: Not to be used from the command line unless you know very well what you are doing.

This script, when called from hunspell dict package postinst or postrm will
rebuild hunspell database as well as squirrelmail and emacsen stuff.

=head1 SEE ALSO

The dictionaries-common policy

=head1 AUTHORS

Rafael Laboissiere,
Agustin Martin

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Please use 'select-default-wordlist' superuser script
to change your selection.

Note that you will need to run that script and select
the 'manual' option if you want to play with symlinks
yourself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         # ----------------------------------------------------------------------------
# dc-debconf-default-value.pl:
#  Dealing with default value selection. Functions and definitions.
# ----------------------------------------------------------------------------

# Trying to find a reasonable guess for default ispell dictionary and wordlist
# from the debian-installer settings, envvars or pre-policy symlinks and the
# list of ispell dictionaries and wordlists to be installed

my $dcscript     = "/usr/share/dictionaries-common/dc-debconf-select.pl";
my $debug        = "yes" if exists $ENV{'DICT_COMMON_DEBUG'};

# Suffixes for different variants. They must be declared here.
my @suffixes     = ("",
		    "-insane",
		    "-huge",
		    "-large",
		    "-medium",
		    "-small",
		    "-gut");
my %equivs       = ("bg"      => "bulgarian",
		    "ca"      => "catalan",
		    "cs"      => "czech",
		    "da"      => "danish",
		    "de"      => "ngerman",
		    "de:1"    => "ogerman",
		    "de_CH"   => "swiss",
		    "en_US"   => "american",
		    "en_US:1" => "miscfiles",
		    "en_CA"   => "canadian",
		    "en_CA:1" => "american",
		    "en_GB"   => "british",
		    "en_AU"   => "british",
		    "eo"      => "esperanto",
		    "es"      => "spanish",
		    "fi"      => "finnish",
		    "fo"      => "faroese",
		    "fr"      => "french",
		    "ga"      => "irish",
		    "gd"      => "gaelic",
		    "gl"      => "galician-minimos",
		    "gv"      => "manx",
		    "hu"      => "hungarian",
		    "it"      => "italian",
		    "lt"      => "lithuanian",
		    "nb"      => "norwegian->bokma",    # Match bokmal and bokmaal
		    "nl"      => "dutch",
		    "nn"      => "norwegian->nynorsk",
		    "pl"      => "polish",
		    "pt"      => "portuguese",
		    "pt_BR"   => "brazilian",
		    "ru"      => "russian",
		    "sv"      => "swedish",
		    "tl"      => "tagalog",
		    "uk"      => "ukrainian");
my %alternatives   = ("ispell"   => "ispell-dictionary.hash",
		      "wordlist" => "dictionary");

# -------------------------------------------------------------
sub dc_debugprint(){
# -------------------------------------------------------------
# Show info if in debug mode
# -------------------------------------------------------------
  print STDERR "@_" if $debug;
}

# -------------------------------------------------------------
sub dc_set (){
# -------------------------------------------------------------
# Set debconf value unless already set
# -------------------------------------------------------------
  my $guessed   = shift;
  my $question  = $guessed->{'question'};
  my $value     = $guessed->{'guess'};
  my $priority  = $guessed->{'priority'};

  my ($errorcode, $oldvalue) = get($question);

  $oldvalue = "unset" unless $oldvalue;

  if ( $errorcode or $oldvalue eq "unset" ){
    &dc_debugprint(" dict-common::dc_set: $question: errorcode: $errorcode; priority: $priority\n" .
		   "   Old:[$oldvalue] --> New:[$value]\n");
    set("$question","$value");
  } elsif ( $oldvalue eq $value ) {
    print STDERR " dict-common::dc_set: $question is already set to
      [$oldvalue]. Preserving it.\n";
  } else {
    print STDERR " dict-common::dc_set: Warning: $question is already set to
      [$oldvalue].
      Not setting to [$value]\n";
  }

  if ( $debug ){                 # --- Check if question value is actually set
    ($errorcode, $oldvalue) = get($question);
    if ( $errorcode ){
      print STDERR " dict-common::dc_set: $question reading failed with $errorcode\n";
    } elsif ( $oldvalue) {
      print STDERR " dict-common::dc_set: $question is set to [$oldvalue]\n";
    } else {
      print STDERR " dict-common::dc_set: $question value is void, bad thing\n";
    }
  }
}

# -------------------------------------------------------------
sub dc_extractlangname (){
# -------------------------------------------------------------
# Look if a dict matching $langkey in %equivs is to be installed
# and return the preferred language name if so.
# -------------------------------------------------------------
  my $langkey             = shift;
  my $classinfo           = shift;
  my $classprefix         = $classinfo->{'prefix'};
  my $debconf_vals        = $classinfo->{'languages'};
  my $debconf_defaultvals = $classinfo->{'default_langs'};
  my @thevalues           = ();
  my $thestring;
  my $thepackage;
  my $thevariant;
  my $pkgfullname;

  if ( defined $equivs{$langkey} ){
    ($thepackage,$thevariant) = split ("->",$equivs{$langkey});
    foreach my $suffix ( @suffixes ){
      if ( $thepackage eq "miscfiles" ){
	$pkgfullname = "$thepackage$suffix";
      } else {
	$pkgfullname = "$classprefix$thepackage$suffix";
      }
      &dc_debugprint(" dc_extractlangname: Trying package $pkgfullname\n");
      if ( defined $debconf_vals->{"$pkgfullname"} ){
	if ( defined $debconf_defaultvals->{"$pkgfullname"} ){
	  $thestring = $debconf_defaultvals->{"$pkgfullname"};
	} else {
	  $thestring = $debconf_vals->{"$pkgfullname"};
	}
	@thevalues = sort split (/\s*,\s*/,$thestring);
	if ( $thevariant ){
	  @thevalues = grep {/$thevariant/i} @thevalues;
	}
	@thevalues = sort {
	  # Sort tex variants last
	  $a =~ m/tex/i <=> $b =~ m/tex/i
	    || $a cmp $b } @thevalues;
	if ( scalar @thevalues >= 1 ){
	  return "$thevalues[0]";
	} else {
	  return;
	}
      }
    }
  }
}

# -------------------------------------------------------------
sub dc_guesslang (){
# -------------------------------------------------------------
# Try different combinations of $language and $country and possible
# fallbacks in case dc_extractlangname() does not find a good guess
# -------------------------------------------------------------
  my $classinfo   = shift;
  my $language    = shift;
  my $country     = shift;
  my $class       = $classinfo->{'class'};
  my $classprefix = $classinfo->{'prefix'};
  my $msgprefix   = "dc_guesslang";
  my $priority    = "medium";
  my $guessed;

  &dc_debugprint(" $msgprefix: Looking for langkey matches [$class,$classprefix,$language,$country].\n");
  if ( $guessed = &dc_extractlangname("$language" . "_" . uc($country),$classinfo)
       || &dc_extractlangname("$language" . "_" . uc("$country") . ":1",$classinfo)
       || &dc_extractlangname("$language",$classinfo)
       || &dc_extractlangname("$language:1",$classinfo)
    ){
    $priority = "low";
  } else {
    my @sorted_keys = sort {
      # Sort keys matching ^$language_ first
      $b =~ m/^$language(\_|:|$)/ cmp $a =~ m/^$language(\_|:|$)/
	# Then american english
	|| $b =~ m/^en\_US/ cmp $a =~ m/^en\_US/
	# Then any english variant
	|| $b =~ m/^en\_/ cmp $a =~ m/^en\_/
	# Then anything else alphabetically
	|| $a cmp $b
    } keys %equivs;
    &dc_debugprint(" dc_guesslang: Trying an alternative for $class from keys:\n  "
		   . join(', ',@sorted_keys) . "\n");
    foreach ( @sorted_keys ){
      last if ( $guessed = &dc_extractlangname($_, $classinfo) );
    }
  }
  return { 'guess'    => $guessed,
	   'priority' => $priority,
	   'class'    => $class
  } if $guessed;
}

# -------------------------------------------------------------
sub dc_guess_langkey_for_link(){
# -------------------------------------------------------------
# Try guessing langkey after (woody or older) former symlink
# -------------------------------------------------------------
  my $class          = shift;
  my $link           = "/etc/alternatives/$alternatives{$class}";
  my %reverse_equivs = ();
  my $prefix;
  my $guess;
  my $language;

  return unless ( -l $link );

  if ( $guess = readlink($link) ){
    &dc_debugprint("dictionaries-common.config: Found pre-policy link $link->$guess.");

    $guess =~ s/\.hash$//;
    $guess =~ s/^.*\///;
    $guess =~ s/(\-\.)(small|medium|large)$//;
    $guess =~ s/\-english$//;

    $guess = "norwegian->bokma"   if ($guess =~ m/^bokm.*l$/);
    $guess = "norwegian->nynorsk" if ($guess eq "nynorsk");
    $guess = "ogerman"            if ($guess eq "german");
    $guess = "miscfiles"          if ($guess eq "web2");
    $guess = "danish"             if ($guess eq "dansk");
    $guess = "french"             if ($guess eq "francais");
    $guess = "swedish"            if ($guess eq "svenska");

    &dc_debugprint("dictionaries-common.config: pre-policy link target fine tuned to $guess.\n");

    # Build reverse equivs
    foreach ( keys %equivs ){
      $reverse_equivs{$equivs{$_}} = $_;
    }

    # Check for a match and return langkey if found
    if ( exists $reverse_equivs{$guess} ){
      return $reverse_equivs{$guess};
    } else {
      &dc_debugprint("dictionaries-common.config: No match found for pre-policy symlink $link.\n");
    }
  }
}

# -------------------------------------------------------------
sub dc_manual_alternative (){
# -------------------------------------------------------------
# Check if woody (or older) alternative exists and is set to manual
# -------------------------------------------------------------
  my $class  = shift;
  my $file   = "/var/lib/dpkg/alternatives/$alternatives{$class}";
  my $status;

  if ( -r $file ){
    open(FILE,"< $file") or return;
    $status = <FILE>;
    close FILE;
    $status = "" unless $status;
    chomp $status;
    return "Manual (previous alternative setting)" if ( $status eq "manual" );
  }
}

# -------------------------------------------------------------
sub dc_parse_classinfo (){
# -------------------------------------------------------------
# Gather info for (to be) installed packages for class
# debconf info:
#   $classinfo->{'languages'}:     pkg -> languages provided by package
#   $classinfo->{'default_langs'}: pkg -> default language for package
# Other info
#   $classinfo->{'class'}:         Class
#   $classinfo->{'classprefix'}:   Class prefix
# -------------------------------------------------------------
  my $class = shift;
  return unless $class;
  my $question = "shared/packages-$class";
  my ($errorcode,$pkgowners) = metaget ($question, "owners");
  return if $errorcode;

  my %debconf_vals = ();
  my %debconf_defaultvals = ();
  my %classprefix = ( 'ispell' => "i", "wordlist" => "w" );

  foreach my $pkg ( split (/\s*,\s*/,$pkgowners) ){
    $debconf_vals{$pkg} = get ("$pkg/languages");
    my ($errorcode,$pkgdefaults) = get ("$pkg/defaults");
    $debconf_defaultvals{$pkg} = $pkgdefaults unless $errorcode;
  }

  return {
    'class'         => $class,
    'prefix'        => $classprefix{$class},
    'languages'     => \%debconf_vals,
    'default_langs' => \%debconf_defaultvals
  } if %debconf_vals;
}

# -----------------------------------------------------------------
sub dc_guess_language_country_strings (){
# -----------------------------------------------------------------
# Try guessing $language $country pairs
# -----------------------------------------------------------------
  my $class       = shift;

  my $di_language = "debian-installer/language";
  my $di_country  = "debian-installer/country";
  my $msgstring   = "dict-common.config->dc_guess_language_country_strings";

  my $language;
  my $country;
  my $errorcode;

  # First check if we are upgrading from ancient pre-policy setup with
  # symlinks set through alternatives and try guessing a langkey
  if ( $language = &dc_guess_langkey_for_link($class) ){
    &dc_debugprint("$msgstring: Guessed langkey $language from ancient pre-policy symlink.\n");
  } else {
    # If system is already installed use /etc/default/locale contents.
    # Otherwise try looking at debian-installer/language
    if ( -e "/etc/default/locale" ){
      $language = $ENV{'LANG'} if exists $ENV{'LANG'};
    }
    if ( $language ){
      &dc_debugprint("$msgstring: LANG=$language is to be used.\n") if $language;
    } else {
      ($errorcode,$language) = get($di_language);
      $language = '' if $errorcode;
      &dc_debugprint("$msgstring: Debconf gives language \"$language\"\n") if $language;
    }
  }

  # Try hard to get a value if nothing was found
  $language = $language ||
    $ENV{'LANG'} ||
    $ENV{'LC_MESSAGES'} ||
    $ENV{'LC_ALL'} ||
    '';

  # Get proper $language $country pairs if $language is available.
  if ( $language ){
    if ( $language eq "C" or $language eq "POSIX" ){
      &dc_debugprint("$msgstring: Using language \"en\" instead of\"$language\"\n");
      $language = "en";
    } else {
      # Deal with de_DE:de_DE@euro:de:en_GB.UTF-8:en like entries
      $language = ( split(":",$language) )[0];
      $language =~ s/[\.@].*$//;                # Remove variant and charset
      ($language,$country) = split("_",$language);
    }
    if ( not $country ){
      ($errorcode,$country) = get($di_country);
      if ( $errorcode or not $country ){
	$country = "unset";
      }
    }

    # Make sure there is no leading/trailing whitespace.
    $language =~ s/^\s+//;
    $language =~ s/\s+$//;
    $country  =~ s/^\s+//;
    $country  =~ s/\s+$//;

  } else {
    &dc_debugprint("$msgstring: No language candidate found. Defaulting to \"en_UNSET\"\n");
    $language = "en";
    $country  = "UNSET";
  }
  return $language, $country;
}

# -----------------------------------------------------------------
sub dc_set_default_value_for_class (){
# -----------------------------------------------------------------
# Try guessing a reasonable default value for given class after
# $language $country pair and set it if found.
# -----------------------------------------------------------------
  my $class       = shift;
  my $msgprefix   = "dc_set_default_value_for_class";
  my $question    = "dictionaries-common/default-$class";
  my $oldlink     = "/etc/alternatives/$alternatives{$class}";
  my $guessed;

  if ( my $classinfo = &dc_parse_classinfo($class) ){
    # Ancient symlinks may be different for different classes,
    my ( $language, $country ) = &dc_guess_language_country_strings($class);

    # First try something reasonably close to the lang +country pair
    if ( $guessed = &dc_guesslang($classinfo,$language,$country) ){
      &dc_debugprint(" $msgprefix: Guessed value ->($class,$language,$country,$guessed->{'guess'},$guessed->{'priority'})\n");
    } else {
      # Signal an error. This should never happen, thus the critical priority.
      &dc_debugprint(" $msgprefix: No good or bad guess found for ($class,$language,$country)\n");
      return;
    }

    # Actually set the value if found
    if ( $guessed ) {
      $guessed->{'question'} = $question;
      &dc_set($guessed);
    }
  } else {
    &dc_debugprint("$msgprefix: No elements found for $class\n");
  }
  return $guessed;
}

1;

# -----------------------------------------------------------------
# Local Variables:
# perl-indent-level: 2
# coding: utf-8
# End:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           # ---------------------------------------------------------------------------
# dc-debconf-select.pl:
#  This file will be added to end of dictionaries-common.config-base
#  to make dictionaries-common.config, as well as installed under
#  /usr/share/dictionaries-common for single ispell dicts/wordlists use
# ---------------------------------------------------------------------------

use strict;

sub dico_get_packages (){
  # Get list of packages sharing the question
  my $class    = shift;
  my $question = "shared/packages-$class";
  my @pkglist  = ();

  my ($errorcode,$packages) = metaget ($question, "owners");
  @pkglist = split (/\s*,\s*/, $packages) unless $errorcode;
  return \@pkglist;
}

sub dico_parse_languages (){
  # Get a hash reference of package -> list of (e)languages provided by package
  my $class    = shift;
  my $variant  = shift;
  my $packages = shift;
  my %tmphash  = ();

  die "No variant (languages|elanguages) string supplied\n" unless $variant;

  $packages = &dico_get_packages($class) unless $packages;

  foreach my $pkg ( @$packages ){
    my ($errorcode, $entry ) = metaget("$pkg/$variant", "default");
    unless ( $errorcode ){
      $entry =~ s/^\s+//;
      $entry =~ s/\s+$//;
      $tmphash{$pkg} = $entry;
    }
  }
  return \%tmphash;
}

sub dico_get_all_choices (){
  # Get $choices and $echoices parallel lists sorted after $echoices and formatted for debconf
  my $class       = shift;
  my $languages   = shift;
  my $debug       = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
  my %mappinghash = ();
  my $debug_prefix = "[$class,dico_get_all_choices]";

  $languages   = &dico_parse_languages($class,"languages") unless $languages;

  my $elanguages  = &dico_parse_languages($class,"elanguages",[ keys %$languages ]);

  if ( $debug ){
    print STDERR "-------- $debug_prefix start --------\n";
    my $langlist  = join(', ',sort keys %{$languages});
    my $elanglist = join(', ',sort keys %{$elanguages});
    print STDERR " * Packages with languages: $langlist\n"  if $debug;
    print STDERR " * Packages with elanguages: $elanglist\n" if $debug;
  }

  foreach my $pkg ( keys %$languages ){
    my @langs  = split(/\s*,\s*/, $languages->{$pkg});
    my @elangs = @langs;
    if ( exists $elanguages->{$pkg} ){
      my @tmp = split(/\s*,\s*/, $elanguages->{$pkg});
      if ( $debug ){
	print STDERR " langs: $#langs, "  . join(', ',@langs)  . "\n";
	print STDERR " tmp:   $#tmp, "    . join(', ',@tmp)    . "\n";
      }
      @elangs = @tmp if ( $#langs == $#tmp );
    }
    foreach my $index ( 0 .. $#langs ){
      $mappinghash{$langs[$index]} = $elangs[$index];
    }
  }
  my $echoices = join(', ', sort {lc($a) cmp lc($b)} values %mappinghash);
  my $choices  = join(', ',
		      sort {lc($mappinghash{$a}) cmp lc($mappinghash{$b})}
		      keys %mappinghash);
  if ( $debug ){
    print STDERR " * Choices:\n   [$choices]\n";
    print STDERR " * Echoices:\n   [$echoices]\n";
    print STDERR "-------- $debug_prefix end --------\n";
  }
  return $choices, $echoices;
}

# ---------------------------------------------------------------------------
sub dico_get_default_value (){
# ---------------------------------------------------------------------------
# debconf-is-not-a-registry:
# ---------------------------------------------------------------------------
  my $class             = shift;
  my $newchoices        = shift;
  my $question          = "dictionaries-common/default-$class";
  my $cachedir          = "/var/cache/dictionaries-common";
  my $sys_default_dir   = "$cachedir";
  my $debug             = 1 if defined $ENV{'DICT_COMMON_DEBUG'};
  my $debug_prefix      = "[$class,dico_get_default_value]";
  my %sys_default_files = ( 'ispell'   => "$sys_default_dir/ispell-default",
			    'wordlist' => "$sys_default_dir/wordlist-default");

  my $sys_default_value;
  my $sys_default_file  = $sys_default_files{$class};
  # Get current value in system default file if available
  if ( -f $sys_default_file ){
    open ( my $SYS_DEFAULT_FILE, "<$sys_default_file" );
    while (<$SYS_DEFAULT_FILE>){
      next if m/^\s*\#/;
      next if m/^\s*$/;
      chomp;
      s/^\s+//;
      s/\s+$//;
      $sys_default_value = $_;
      last;
    }
    close $SYS_DEFAULT_FILE;
  }

  my $debconf_default_value = get ($question);
  # If valid and different from debconf value, use it as new value
  if ( $sys_default_value && $sys_default_value ne $debconf_default_value ) {
    if ( defined $newchoices->{$sys_default_value} ){
      set($question,$sys_default_value);
      my $debconf_default_value_txt = $debconf_default_value ? $debconf_default_value : "";
      print STDERR
	"$debug_prefix: dictionaries-common warning:\n" .
	  " debconf question \"$question\" value did not match that in \"$sys_default_file\"\n" .
	    " Changing debconf value \"$debconf_default_value_txt\" to \"$sys_default_value\"\n";
      return $sys_default_value;
    } elsif ( $debconf_default_value ) {
      if ( $debug ){
	print STDERR
	  "$debug_prefix: dictionaries-common warning:\n" .
	    " \"$sys_default_value\" in \"$sys_default_file\" seems not available.\n" .
	      " Will set to debconf value \"$debconf_default_value\" in trigger. Be patient.\n";
      } elsif ( defined $ENV{DPKG_MAINTSCRIPT_NAME}
		&& $ENV{DPKG_MAINTSCRIPT_NAME} eq "config") {
	print STDERR
	  " \"$sys_default_value\" in \"$sys_default_file\" seems not available.\n" .
	    " Will set to debconf value \"$debconf_default_value\" in trigger. Be patient.\n";
      }
      return $debconf_default_value;
    }
  } else {
    return $debconf_default_value;
  }
}

sub dc_debconf_select (){
  my $classinfo   = shift;
  my $debug       = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
  my $reconfigure = 1 if exists $ENV{'DEBCONF_RECONFIGURE'};
  my $echoices;
  my %title       = ('ispell'   => "Dictionaries-common: Ispell dictionary",
		     'wordlist' => "Dictionaries-common: Wordlist dictionary"
    );

  my $class;
  my $priority;
  my $is_dcconfig;

  # If $classinfo is a hash reference, function is called from dictionaries-common.config
  if ( ref($classinfo) eq 'HASH' ){
    $class       = $classinfo->{'class'};
    $priority    = $classinfo->{'priority'} if ( defined $classinfo->{'priority'} );
    $is_dcconfig = 1;
  } else {
    # Otherwise is called from ispell dictionary/wordlist config
    $class = $classinfo;
  }

  my $packages     = &dico_get_packages($class);
  return unless $packages;

  my $question     = "dictionaries-common/default-$class";
  my $flagdir      = "/var/cache/dictionaries-common";
  my $newflag      = "$flagdir/flag-$class-new";
  my $debug_prefix = "[$class,dc_debconf_select]";
  my $langscript   = "/usr/share/dictionaries-common/dc-debconf-default-value.pl";

  print STDERR "----- $debug_prefix start -----------\n" if $debug;

  # Get new base list of provided languages
  my %newchoices  = ();
  my $languages = &dico_parse_languages($class,"languages",$packages);
  foreach my $pkg ( keys %$languages ) {
    foreach my $lang ( split(/\s*,\s*/, $languages->{$pkg}) ){
      $newchoices{$lang}++;
    }
  }
  my $choices = join (', ', sort {lc($a) cmp lc($b)} keys %newchoices);

  # Get old list of provided languages
  my @oldchoices  = split(/\s*,\s*/,metaget ($question, "choices-c"));
  pop @oldchoices;            # Remove the manual entry
  my $oldchoices = join (', ', sort {lc($a) cmp lc($b)} @oldchoices);

  # If dictionaries-common is already installed (-r $langscript),
  # there are elements for this class to be installed (%newchoices)
  # and there were none before (! $oldchoices), means that we are installing
  # for the first time elements in this class, with dictionaries-common
  # already installed. Try getting a reasonable default value
  if ( -r $langscript && %newchoices && ! $oldchoices ){
    print STDERR "$debug_prefix: Configuring class \"$class\" for the first time\n\n" if $debug;
    # If called from dictionaries-common.config we already have
    # $langscript, and probably more recent. Including it here will cause
    # some warnings about subroutine re-definitions and even errors.
    require $langscript unless $is_dcconfig;
    my $guessed = &dc_set_default_value_for_class($class);
    $priority = $guessed->{'priority'} if ( defined $guessed->{'priority'} );
  }

  # Get default ispell dictionary / wordlist.
  my $curval = &dico_get_default_value($class,\%newchoices);

  # Will be given a value if current value is wrong, undef otherwise
  my $wrong_curval;

  # Try harder to have a good default if current value is empty, but %newchoices not.
  unless ( $curval ){
    if ( -r $langscript && %newchoices ){
      print STDERR "$debug_prefix: Possible values, but unset \"$question\". Trying harder to get a default value.\n";
      # As above, if called from dictionaries-common.config we already have
      # $langscript, and probably more recent. Including it here will cause
      # some warnings about subroutine re-definitions and even errors.
      require $langscript unless $is_dcconfig;
      my $guessed = &dc_set_default_value_for_class($class);
      $priority = $guessed->{'priority'} if ( defined $guessed->{'priority'} );
      $curval = get ($question);
      print STDERR "$debug_prefix: \"$question\" set to \"$curval\". Can be changed with select-default-$class.\n";
    }
  }

  if ( scalar %newchoices ) {
    # If $priority is set &dc_set_default_value_for_class found something.
    # This will usually be as much "medium", so honour it.
    unless ( $priority ){
      if ( $curval && ( $curval =~ /^Manual.*/ or defined $newchoices{$curval} ) ){
	# Use priority "medium" if current value is in the new list or mode is set to manual.
	$priority = "medium";
      } else {
	# Otherwise we either have a wrong value with no associated entry
	# or a void value with elements installed (and thus possible values).
	# This is an *error* that needs to be signalled and acted upon.
	# For this reason priority must be higher than the standard one.
	# We leave it as "high" instead of "critical" so question can be
	# overriden in special cases until underlying bug is fixed.
	$priority = "high";
	if ( $curval ){
	  $wrong_curval = $curval;
	  print STDERR "$debug_prefix error: \"$curval\" does not correspond to any package.\n";
	} else {
	  $wrong_curval = "Question unset";
	  print STDERR "$debug_prefix error: \"$question\" unset but $class elements installed.\n";
	}
      }
    }
  } else {
    $priority = "low";
    print STDERR "$debug_prefix info: No elements in given class.\n" if $debug;
  }

  if ( $debug or $wrong_curval ){
    my $curval_txt = $wrong_curval || $curval;
    print STDERR "$debug_prefix:
 * Class: $class, Priority: $priority
 * Question: \"$question\", Previous or guessed value: \"$curval_txt\"
 * New choices: [$choices]
 * Old choices: [$oldchoices]\n";
  }

  # May ask question if there is no match
  if ( scalar %newchoices ) {
    if ( $choices ne $oldchoices) {
      fset ($question, "seen", "false");
      # Let future processes in this apt run know that a new $class element is to be installed
      if ( -d $flagdir ) {
	open (my $FLAG, "> $newflag")
	  or die "Could not open $newflag for write. Aborting ...\n";
	print $FLAG "1\n";
	close $FLAG;
      }
    }
    my ( $errorcode, $seen ) = fget($question, "seen");
    if ( $seen eq "false" or $reconfigure ){
      ($choices, $echoices ) = &dico_get_all_choices($class,$languages);
      subst ($question, "choices", $choices);
      subst ($question, "echoices", $echoices);
    }
    input ($priority, $question);
    title ($title{$class});
    go ();
    subst ($question, "echoices", $choices); # Be backwards consistent
  }

  # If called from dictionaries-common.config, check actual values in debug mode
  if ( $debug && $is_dcconfig ){
    print STDERR " * Checking really set values for $question:\n";
    print STDERR "   - Choices-C string: " . metaget ($question, "choices-c") . "\n";
    print STDERR "   - Really set value: " . get ($question) . "\n";
  }
  print STDERR "----- $debug_prefix end -----------\n" if $debug;
}

# Local Variables:
# perl-indent-level: 2
# End:

1;
                                                                                                                              # File: ispell-init    -*- muttrc -*-
# Description: Mutt initialization for dictionaries-common support
# Author: Rafael Laboissière <rafael@debian.org>
# Created on: Fri Nov 16 18:24:36 CET 2001
# Copyright (C) 2001-2009  Rafael Laboissiere
# ------------------------------------------------------------------
# This file is part of the Debian dictionaries-common package.
# Released under the terms of the GNU GPL (version 2 or later).
# No warranty.

# Usage:
#  Just put 'source /path/to/this/file/mutt-ispell-init' in ~/.muttrc.
#  The `I' key will call the ispell-select script, which uses
#  iselect to interectively choose the ispell dictionary for
#  subsequent spell checkings.  If iselect is not intalled in the system,
#  a fallback rudimentary interface is used.
#
#  Unsetting the wait_key configuration variable is recommended, since
#  a shell-escape function is called.

macro generic I "<shell-escape>/usr/bin/select-default-iwrap\n" \
      "Select the default ispell dictionary for use with ispell-wrapper"

set ispell = "/usr/bin/ispell-wrapper"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;; File: debian-ispell.el
;; -----------------------------------------------------------------------
;; Description: Emacsen support for Debian package dictionaries-common
;; Authors: Rafael Laboissière <rafael@debian.org>
;;          Agustin Martin     <agmartin@debian.org>
;; Created on: Tue Oct 26 10:16:12 CEST 1999
;; -----------------------------------------------------------------------

(defcustom debian-dict-common-debug nil
  "A lot of debugging info will be shown if non nil."
  :type 'boolean
  :group 'ispell)

(defvar debian-ispell-only-dictionary-alist nil
  "Alist of Debian installed ispell dicts and properties.
Its value will be used to set `ispell-dictionary-alist' after
ispell.el is loaded when ispell is in use.
Do not change this variable directly. It is autogenerated
from data supplied by ispell dictionaries maintainers.")

(defvar debian-aspell-only-dictionary-alist nil
  "Alist of Debian installed aspell dicts and properties.
Its value will be used to set `ispell-dictionary-alist' after
ispell.el is loaded when aspell is in use.
Do not change this variable directly. It is autogenerated
from data supplied by aspell dictionaries maintainers.")

(defvar debian-hunspell-only-dictionary-alist nil
  "Alist of Debian installed hunspell dicts and properties.
Its value will be used to set `ispell-dictionary-alist' after
ispell.el is loaded when hunspell is in use.
Do not change this variable directly. It is autogenerated
from data supplied by hunspell dictionaries maintainers.")

(defvar debian-ispell-valid-dictionary-list nil
  "List of registered ispell, aspell or hunspell dicts.
Will be used to set the dictionaries pop-up menu.")

;; To be used in ispell.el
(or (boundp 'ispell-base-dicts-override-alist)
    (defvar ispell-base-dicts-override-alist nil
      "List of overrides for `ispell-dictionary-alist', with same
format.  It will be set in `debian-ispell-initialize-dicts-alist'
function to `debian-ispell-only-dictionary-alist',
`debian-aspell-only-dictionary-alist' or
`debian-hunspell-only-dictionary-alist' depending on the
spellchecker, containing a list of registered ispell, aspell or
hunspell dicts.
Will be used to set the dictionaries pop-up menu.
This alist will not override the auto-detected values (e.g. if a recent
aspell is used along with Emacs)."))

;; Defined in ispell.el, but needed here to avoid byte-compilation warning.
(defcustom ispell-local-dictionary nil
  "If non-nil, the dictionary to be used for Ispell commands in this buffer.
The value must be a string dictionary name,
or nil, which means use the global setting in `ispell-dictionary'.
Dictionary names are defined in `ispell-local-dictionary-alist'
and `ispell-dictionary-alist'.

Setting `ispell-local-dictionary' to a value has the same effect as
calling \\[ispell-change-dictionary] with that value.  This variable
is automatically set when defined in the file with either
`ispell-dictionary-keyword' or the Local Variable syntax."
  :type '(choice string
		 (const :tag "default" nil))
  :group 'ispell)

;; XEmacs does not have `declare-function'
(or (featurep 'xemacs)
    (declare-function ispell-set-spellchecker-params ispell ()))

(defun debian-ispell-add-dictionary-entry (entry &optional name)
  "Obsolete function!!. Entries in ~/.emacs must be adapted to
modify `ispell-local-dictionary-alist'"
  (message "`debian-ispell-add-dictionary-entry': Obsolete function!!.
Entries in ~/.emacs must be adapted to modify `ispell-local-dictionary-alist'.
See dictionaries-common README.emacs")
  )

;;; ----------------------------------------------------------------------
;;;  Handle ispell.el load at startup
;;; ----------------------------------------------------------------------

(defun debian-ispell-build-startup-menu (mylist)
;;; ----------------------------------------------------------------------
;;; Extracted from ispell.el, by Ken Stevens, part of GNU emacs.
;;; Original code released under the GNU GPL license
;;; ----------------------------------------------------------------------
  "Build startup menu, trying to not explicitely load ispell.el"
  (let ((dicts (reverse mylist)))
    (setq ispell-menu-map (make-sparse-keymap "Spell"))
    ;; Define commands in menu in opposite order you want them to appear.

    ;; Add the dictionaries to the bottom of the list.
    (dolist (name dicts)
      (if (string-equal "default" name)
	  (define-key ispell-menu-map (vector 'default)
	    (cons "Select Default Dict"
		  (cons "Dictionary for which Ispell was configured"
			(list 'lambda () '(interactive)
			      (list
			       'ispell-change-dictionary "default")))))
	(define-key ispell-menu-map (vector (intern name))
	  (cons (concat "Select " (capitalize name) " Dict")
		(list 'lambda () '(interactive)
		      (list 'ispell-change-dictionary name)))))))
  ;; -- [ispell-change-dictionary]
  (define-key ispell-menu-map [ispell-change-dictionary]
    '(menu-item "Change Dictionary..." ispell-change-dictionary
   		:help "Supply explicit dictionary file name"))
  ;; -- [ispell-kill-ispell]
  (define-key ispell-menu-map [ispell-kill-ispell]
    '(menu-item "Kill Process"
		(lambda () (interactive) (ispell-kill-ispell nil 'clear))
		:enable (and (boundp 'ispell-process) ispell-process
			     (eq (ispell-process-status) 'run))
		:visible (featurep 'ispell)
		:help "Terminate Ispell subprocess"))
  ;; -- [ispell-pdict-save]
  (define-key ispell-menu-map [ispell-pdict-save]
    '(menu-item "Save Dictionary"
		(lambda () (interactive) (ispell-pdict-save t t))
		:visible (featurep 'ispell)
		:help "Save personal dictionary"))
  ;; -- [ispell-customize]
  (define-key ispell-menu-map [ispell-customize]
    '(menu-item "Customize..."
		(lambda () (interactive) (customize-group 'ispell))
		:help "Customize spell checking options"))
  ;; -- [ispell-help]
  (define-key ispell-menu-map [ispell-help]
    ;; use (x-popup-menu last-nonmenu-event(list "" ispell-help-list)) ?
    '(menu-item "Help"
		(lambda () (interactive) (describe-function 'ispell-help))
		:help "Show standard Ispell keybindings and commands"))
  ;; -- [flyspell-mode]
  (define-key ispell-menu-map [flyspell-mode]
    '(menu-item "Automatic spell checking (Flyspell)"
		flyspell-mode
		:help "Check spelling while you edit the text"
		:button (:toggle . (and (boundp 'flyspell-mode)
					flyspell-mode))))
  ;; -- [ispell-complete-word]
  (define-key ispell-menu-map [ispell-complete-word]
    '(menu-item "Complete Word" ispell-complete-word
		:help "Complete word at cursor using dictionary"))
  ;; -- [ispell-complete-word-interior-frag]
  (define-key ispell-menu-map [ispell-complete-word-interior-frag]
    '(menu-item "Complete Word Fragment" ispell-complete-word-interior-frag
		:help "Complete word fragment at cursor"))
  ;; -- [ispell-continue]
  (define-key ispell-menu-map [ispell-continue]
    '(menu-item "Continue Spell-Checking" ispell-continue
		:enable (and (boundp 'ispell-region-end)
			     (marker-position ispell-region-end)
			     (equal (marker-buffer ispell-region-end)
				    (current-buffer)))
		:visible (featurep 'ispell)
		:help "Continue spell checking last region"))
  ;; -- [ispell-word]
  (define-key ispell-menu-map [ispell-word]
    '(menu-item "Spell-Check Word" ispell-word
		:help "Spell-check word at cursor"))
  ;; -- [ispell-comments-and-strings]
  (define-key ispell-menu-map [ispell-comments-and-strings]
    '(menu-item "Spell-Check Comments" ispell-comments-and-strings
		:help "Spell-check only comments and strings"))
  ;; -- [ispell-region]
  (define-key ispell-menu-map [ispell-region]
    '(menu-item "Spell-Check Region" ispell-region
		:enable mark-active
		:help "Spell-check text in marked region"))
  ;; --  [ispell-message]
  (define-key ispell-menu-map [ispell-message]
    '(menu-item "Spell-Check Message" ispell-message
		:visible (eq major-mode 'mail-mode)
		:help "Skip headers and included message text"))
  ;; -- [ispell-buffer]
  (define-key ispell-menu-map [ispell-buffer]
    '(menu-item "Spell-Check Buffer" ispell-buffer
		:help "Check spelling of selected buffer"))
  ;;(put 'ispell-region 'menu-enable 'mark-active)
  (fset 'ispell-menu-map (symbol-value 'ispell-menu-map))

  (if (and (featurep 'xemacs)
   	   (featurep 'menubar)
   	   ;;(null ispell-menu-xemacs)
   	   (not (and (boundp 'infodock-version) infodock-version)))
      (let ((dicts mylist)
   	    (current-menubar (or current-menubar default-menubar))
   	    (menu
   	     '(["Help"		(describe-function 'ispell-help) t]
   	       ;;["Help"		(popup-menu ispell-help-list)	t]
   	       ["Check Message"       ispell-message (eq major-mode 'mail-mode)]
   	       ["Check Buffer"	      ispell-buffer			    t]
   	       ["Check Comments"      ispell-comments-and-strings	    t]
   	       ["Check Word"	      ispell-word			    t]
   	       ["Check Region"	      ispell-region  (or (not zmacs-regions) (mark))]
   	       ["Continue Check"      ispell-continue	      (featurep 'ispell)]
	       ["Complete Word Frag"  ispell-complete-word-interior-frag   t]
  	       ["Complete Word"       ispell-complete-word		    t]
   	       ["Kill Process"	      (ispell-kill-ispell nil 'clear) (featurep 'ispell)]
   	       ["Customize..."	      (customize-group 'ispell)	    t]
   	       ;; flyspell-mode may not be bound...
   	       ["flyspell"	      flyspell-mode
   		:style toggle
   		:selected (and (boundp 'flyspell-mode)
   			       flyspell-mode)
   		:active (boundp 'flyspell-mode)]
   	       "-"
   	       ["Save Personal Dict"  (ispell-pdict-save t t) (featurep 'ispell)]
   	       ["Change Dictionary"   ispell-change-dictionary	t])))
   	(if (null dicts)
   	    (setq dicts (cons "default" nil)))
   	(dolist (name dicts)
   	  (setq menu (append menu
   			     (list
   			      (vector
   			       (concat "Select " (capitalize name))
   			       (list 'ispell-change-dictionary name)
   			       t)))))
   	(setq ispell-menu-xemacs menu)
   	(if current-menubar
   	    (progn
   	      (if (car (find-menu-item current-menubar '("Cmds")))
   		  (progn
   		    ;; XEmacs 21.2
   		    (delete-menu-item '("Cmds" "Spell-Check"))
   		    (add-menu '("Cmds") "Spell-Check" ispell-menu-xemacs))
   		;; previous
   		(delete-menu-item '("Edit" "Spell")) ; in case already defined
   		(add-menu '("Edit") "Spell" ispell-menu-xemacs))))))
  )

(defun debian-ispell-set-startup-menu (&optional force)
  "Make sure ispell startup menu is ready after startup.
To be run at `after-init-hook' or at any time if FORCE is given."
  ;; I know let* is cleaner, but this helps debugging
  (let (really-aspell
	really-hunspell
	debian-valid-dictionary-list
	dicts-list)

    ;; Check for spellchecker engine
    (or (setq really-aspell
	      (if (boundp 'ispell-really-aspell)
		  ispell-really-aspell
		(and (boundp 'ispell-program-name)
		     (string-match "aspell" ispell-program-name)
		     t)))
	(setq really-hunspell
	      (if (boundp 'ispell-really-hunspell)
		  ispell-really-hunspell
		(and (boundp 'ispell-program-name)
		     (string-match "hunspell" ispell-program-name)
		     t))))

    ;; Get list of registered for given spellchecker
    (setq debian-valid-dictionary-list
	  (if really-aspell
	      (mapcar 'car debian-aspell-only-dictionary-alist)
	    (if really-hunspell
		(mapcar 'car debian-hunspell-only-dictionary-alist)
	      (mapcar 'car debian-ispell-only-dictionary-alist))))

    ;; Get full list of dicts to be displayed in the menu
    (setq dicts-list
	  (if (boundp 'ispell-local-dictionary-alist)
	      (append (mapcar 'car ispell-local-dictionary-alist)
		      debian-valid-dictionary-list)
	    debian-valid-dictionary-list))

    (if (and (featurep 'ispell)
	     (not force))
	nil
      (when (fboundp 'debian-ispell-build-startup-menu)
	(debian-ispell-build-startup-menu dicts-list)
	;; (fmakunbound 'debian-ispell-build-startup-menu)
	))))

;; Make sure updated Debian menu is available after emacs is started
(add-hook 'after-init-hook 'debian-ispell-set-startup-menu)

;; Make sure updated Debian menu is not overriden by ispell.el one
(eval-after-load "ispell" '(debian-ispell-set-startup-menu))

;;; -----------------------------------------------------------------------
;;;  Guess default ispell dictionary under emacs and make ispell.el use it
;;; -----------------------------------------------------------------------

(defvar debian-ispell-dictionary
  nil
  "The name of the ispell dictionary that will become the default after
loading of ispell.el.")

;; ---------------------------------------------------------------------------
;; Load the file containing the default value for debian-ispell-dictionary
;; ---------------------------------------------------------------------------

(if (file-exists-p "/var/cache/dictionaries-common/emacsen-ispell-default.el")
    (load "/var/cache/dictionaries-common/emacsen-ispell-default.el"))

;;; ----------------

(defvar debian-aspell-dictionary
  nil
  "The name of the aspell dictionary that will become the default after
loading of ispell.el.")

(defvar debian-hunspell-dictionary
  nil
  "The name of the hunspell dictionary that will become the default after
loading of ispell.el.")

(defvar debian-aspell-equivs-alist
  '((nil . nil))
  "Alist of equivalences between locales and aspell dictionaries,
used internally by the debian ispell.el initialization scheme.
Do not change this variable directly. It is autogenerated
from data supplied by aspell dictionaries maintainers.")

(defvar debian-hunspell-equivs-alist
  '((nil . nil))
  "Alist of equivalences between locales and hunspell dictionaries,
used internally by the debian ispell.el initialization scheme.
Do not change this variable directly. It is autogenerated
from data supplied by hunspell dictionaries maintainers.")

;; ---------------------------------------------------------------------------
;; Guess emacsen entry for aspell and hunspell after locale provided by aspell
;; or after environment variables LC_ALL and LANG for hunspell
;; Intended to be called from /var/cache/emacsen-ispell-dicts.el
;; to set debian-{a,huns}spell-dictionary if possible
;; ---------------------------------------------------------------------------

(defun debian-ispell-try-lang-equiv (langstring equivs-alist)
  "Try finding a LANGSTRING match in EQUIVS-ALIST.
EQUIVS-ALIST is an assoc list of locales vs dict names."
  (let ((prefixes  '("" "1:"))
	(suffixes  '("^" "@" "." "_"))
	(langmatch '(nil nil)))

    (if langstring
	(catch 'tag
	  (dolist (lang (split-string langstring ":"))
	    (dolist (suffix suffixes)
	      (dolist (prefix prefixes)
		(if (setq langmatch
			  (cdr (assoc (concat prefix
					      (car (split-string lang suffix)))
				      equivs-alist)))
		    (throw 'tag (car langmatch))))))))))


(defun debian-ispell-get-aspell-default ()
  "Get default dictionary for aspell.
Ask aspell about the default dictionary it will use, and
try finding a match for it in `debian-aspell-equivs-alist'
alist provided by registered dicts."
  (let ((lang (condition-case ()
		  (with-temp-buffer
		    (call-process "aspell" nil t nil "config" "lang")
		    (car (split-string (buffer-string))))
		(error nil))))

    (debian-ispell-try-lang-equiv lang debian-aspell-equivs-alist)))

(defun debian-ispell-get-hunspell-default ()
  "Get default dictionary for hunspell under XEmacs.
Look at the `debian-aspell-equivs-alist' alist provided by registered
dicts to try finding a match for \"LC_ALL\" or \"LANG\".
Emacs will rely on hunspell dicts auto-detection."
  (if (featurep 'xemacs)
      (or (debian-ispell-try-lang-equiv (getenv "LC_ALL") debian-hunspell-equivs-alist)
	  (debian-ispell-try-lang-equiv (getenv "LANG")   debian-hunspell-equivs-alist))))

;; ---------------------------------------------------------------------------
;; Make sure otherchars are read as chars in proper encoding. ispell.el may
;; change later casechars and not-casechars to 'utf8 and we need to do this.
;; This function will be called from (debian-ispell-initialize-dicts-alist),
;; run from 'ispell-initialize-spellchecker-hook. We cannot do the filtering
;; from this file, on startup it is read before dictionaries alists.
;; ---------------------------------------------------------------------------
(defun debian-ispell-preprocess-dicts-alist (dicts-alist)
  (let (tmp-dicts-alist)
    (dolist (adict dicts-alist)
      (add-to-list 'tmp-dicts-alist
		   (list
		    (nth 0 adict)  ; dict name
		    (nth 1 adict)  ; casechars
		    (nth 2 adict)  ; not-casechars
		    (decode-coding-string (nth 3 adict) (nth 7 adict)) ; otherchars
		    (nth 4 adict)  ; many-otherchars-p
		    (nth 5 adict)  ; ispell-args
		    (nth 6 adict)  ; extended-character-mode
		    (nth 7 adict))))
    tmp-dicts-alist))

;; ---------------------------------------------------------------------------
;; Make sure the correct installed dicts alist is used for each spellchecker
;; This hook will be run after each change in `ispell-program-name'
;; ---------------------------------------------------------------------------

(defun debian-ispell-initialize-dicts-alist ()
  (let ((really-aspell
	 (or (and (boundp 'ispell-really-aspell)
		  ispell-really-aspell)
	     nil))

	(really-hunspell
	 (or (and (boundp 'ispell-really-hunspell)
		  ispell-really-hunspell)
	     nil)))

    (when debian-dict-common-debug
      (message "- (debian-ispell-initialize-dicts-alist) from (ispell-set-spellchecker-params) hook:
   ispell-program-name: %s
   DID:%s, DAD:%s, DHD: %s, RA:%s, RH: %s, ILD: %s, ID: %s"
	       ispell-program-name
	       debian-ispell-dictionary
	       debian-aspell-dictionary
	       debian-hunspell-dictionary
	       really-aspell
	       really-hunspell
	       ispell-local-dictionary
	       ispell-dictionary))

    (setq ispell-base-dicts-override-alist
	  (debian-ispell-preprocess-dicts-alist
	   (if really-aspell
	       debian-aspell-only-dictionary-alist
	     (if really-hunspell
		 debian-hunspell-only-dictionary-alist
	       debian-ispell-only-dictionary-alist))))
    (setq debian-ispell-valid-dictionary-list
	  (mapcar 'car ispell-base-dicts-override-alist))
    (debian-ispell-set-startup-menu 'force)))

(add-hook 'ispell-initialize-spellchecker-hook 'debian-ispell-initialize-dicts-alist)

;; ---------------------------------------------------------------------------
;; Set `ispell-dictionary' to Debian default dict for given
;; spellchecker, unless it has already been customized or set in any
;; other way.
;; This function is added to `after-init-hook', so it is evaluated
;; right after init files loading with actual `ispell-program-name',
;; but before ispell.el.
;; ---------------------------------------------------------------------------
(defun debian-ispell-set-default-dictionary ()
  "Set ispell default to the debconf selected one if ispell-program-name is
ispell or, when ispell-program-name is aspell, to the value guessed after
LANG if any."
  (let* ((really-aspell
	  (if (boundp 'ispell-really-aspell)
	      ispell-really-aspell
	    (and (boundp 'ispell-program-name)
		 (string-match "aspell" ispell-program-name)
		 t)))
	 (really-hunspell
	  (if (boundp 'ispell-really-hunspell)
	      ispell-really-hunspell
	    (and (boundp 'ispell-program-name)
		 (string-match "hunspell" ispell-program-name)
		 t)))
	 (default-dictionary
	   (if really-aspell
	       debian-aspell-dictionary
	     (if really-hunspell
		debian-hunspell-dictionary
	       debian-ispell-dictionary))))

    ;; Set `ispell-dictionary' if still unbound. This will be done after
    ;; init files load, with real `ispell-program-name'
    (or ispell-dictionary
	(customize-set-variable 'ispell-dictionary default-dictionary))

    ;; The debugging output if required
    (if debian-dict-common-debug
	(message "- (debian-ispell-set-default-dictionary ):
   DID:%s, DAD:%s, DHD: %s, RA:%s, RH: %s, DD:%s, ID:%s, IPN:%s"
		 debian-ispell-dictionary
		 debian-aspell-dictionary
		 debian-hunspell-dictionary
		 really-aspell
		 really-hunspell
		 default-dictionary
		 ispell-dictionary
		 ispell-program-name))
    )) ;; let and defun ends
(add-hook 'after-init-hook 'debian-ispell-set-default-dictionary)

;; ---------------------------------------------------------------------------
;; Make sure patched ispell.el is first in the loadpath if not already there
;; ---------------------------------------------------------------------------

(when (fboundp 'debian-pkg-add-load-path-item)
  (let ((mypath (concat "/usr/share/"
			(symbol-name debian-emacs-flavor)
			"/site-lisp/dictionaries-common")))
    (unless (member mypath load-path)
      (debian-pkg-add-load-path-item mypath))))

;; --------------------------------------------------------------------------
;; Set ispell-program-name consistently for all emacsen flavours. Prefer
;; aspell over ispell as has been for some time in FSF Emacs. Leave hunspell
;; as last option, hunspell support for -a is still too buggy.
;; --------------------------------------------------------------------------

(defcustom ispell-program-name
  (if (executable-find "aspell")
      "aspell"
    (if (executable-find "ispell")
	"ispell"
      (if (executable-find "hunspell")
	  "hunspell"
	"ispell")))
  "Program invoked by \\[ispell-word] and \\[ispell-region] commands."
  :type 'string
  :set (lambda (symbol value)
         (set-default symbol value)
         (if (featurep 'ispell)
             (ispell-set-spellchecker-params)))
  :group 'ispell)


(defcustom ispell-dictionary nil
  "Default dictionary to use if `ispell-local-dictionary' is nil."
  :type '(choice string
		 (const :tag "default" nil))
  :group 'ispell)

;;; -----------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             mN0E+cQPHj$xVò|=HH4jιm)y΍i/9[s̅6/0_٭V-и}C: H8l;a\d/L2csb!~
YO2'ɑyb>r!pBæ2o
{f=bj^fD^ҌTu'^i媫^$St/^3SGJ:μ\L:8.C^,+6T'5
n݃xдՕA*׎74\A|>;~ۂuם|z0A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Xn0
ގd4í"&YtӦ
D0D<
kz(iqdK8+UƵ5kIUϯ~yetԩ^muҵQNDH!dFѴ[Y9kCy׹:mm=ZF!a흯	1V7̴(^H8Au.n}uFwE%(^M˞߂c2,;,@ǡnT0eWA7"%]sWGgQӇH4V"Ty/e3);H(^5ڛRtߙrG{=d"ԃ2Vm^Ѧ
6DXۃͽ	Ȳ#!=S|ruS [}ekęFÆ'\-Z!z|H -GݔfYPZ6;맗7k\D-Rq*3f^`M)$U5"ڡ^Wtaj@	X8ɣt}<586 w`,[('=vx5.e&OkwVAR<kW6ٙ	5]:E/Ttl1ES%a5Z`YrL$!{3n;J ~FE,8 A+HL?gT9At6[HF:ѧVJ.Ł5JUexu[2-/{-z<Ƃ87 &Įп 'M8aTx I[:9HZG??ƻ}&׋~
zУ]Pz
T3^%MyPCodJl!?^LQ<(~W-qkQkbiHWRt"nNWqRӟcQic& i\pnP坶5z.0IeXBjtxdꪐ~	Ñ	HPƐ0
Hw`rnc,kQE,]hZg?s[@h
1.cM<Tɲzx
Q<tZdHv^_Z<iτofnjHfQ&$9]l2T3n6:bgZRVɨT6G,2R|܅},t6%Eg"6bfKg>C;b8X?23°1AnlLqg)j,!ST">T? h$0TfV;gd3FN4f`%sb]h{HsV,1[LZyGKs虗wG:	}gD|_fuI6c6D1[aZts`
ȭ^
×^X*ZkrtUX:LvDfIüzsFV<fĖwצE LK02 <,4zw_xis@Pov>#+=:_w7;GA b<?3<0vwsݹ~[gau8SX_(=MpRs,MvNU>*Iklꋻ[0 'sQexbM|; ɩcmoZU蓶}%3\pǦfU0[^PlȕmQEf^:(g|)5M0I:ǔWų||
䧗 xI?CN
]o%y߉B+;>(\7*A1_$kra	tE}2luCM>}iͶh-Ɉ/.^Dx#wgj^<<!r4Jw`J[3$ܦ
DBJ<~\in`q@)Vxs"/Q*|:j}\
7+7ׯoֿ~}&1H(C$)ȅ,gݵ:muJ>N!gۅMr=鉵yFiGA7D̪NOGc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                "/etc/openoffice/dictionary.lst" is not used at all in
OpenOffice.org >=3. No need to try getting that file or
recreating it in that case, is useless and will be removed.

"/etc/openoffice/dictionary.lst" is only needed if you are
using OpenOffice.org <3. Remember, otherwise it will be
removed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             YiSrwWTǇU$N!0 ``\Z \jRTl5GOׯ0э5Yi.~\ouXvJPۢXB*y?ϵ)hV*-fx_44iD%Oo|ku6-[m+t0&VLhB38f~\)ޘ.}cUcS[іս6]Ü4Κ-	6k/2(:w
dogi5Vn\vU|_7eS_҇,&7A84V
8eYjL밆uRzk6\vI⦯<=a̲嶵4vM1)	ڷ$ N4Vx*{l w2
b]l "Bo2{a_gB@ֶ
-Rб뮢]ޒ;{(HX]yוlBm9'p˻*jݪbcuVV	EIX1Pn,ZI"+t@;綱f/kǞaIbuDNl,)5s@w6W(IWk8[?
#E%)2l&mOĆk,=LI%59a#7djCi[?9nJ8Ka@A
K`ʖo`|R76^7\c2S1Khk[NzաEHʑ``admK 	/9!ܖ\ {= M8"خBQ|_e%&D͢@+K,nw)Ϋx"NTU6lۛf(>	`O%},lŔ\ݗ-,ܹUjl['Ƶ.'R`xցr
3+5˫|ݪK9>i3	']dO8m׍VkN.uڅ֗w\ n7T*h
JhIEǯ[;S!ԗ6+8_{h' rRⲘAJNSX)i+waksM+'AO_8"6R_q1GX1Sy>pw%bwtX{lBs)O4#q뱸?<~	2VEsvjЀ \{!*`y"kaQ|LO%s9J6=#2MȎ_%kSeYp\(E
TK@cdL b^giYWG8"h\ _WT_M[*@ &me%9V]x$~Q0v\Ӥ'Jr)+f,%Vp:׈XNnt%iQl)yiI;D]%ifC	 |+3VTAq*,-KHBl8Yo`ɂ!Kº'#ƗFER>\<J4Շ&ovLTy_;opC6eݵy*($܁ۦ鶴ҭUX(l%15йBebBAiXڶO2q/щd]ٔ`HDZ ǖfrµEr UL!gLm md݇'Iy+Cjc/#r`I]oٗa0uBB?J54qPxQItQZ\R.v՜pcƠV'Y\B]T("k&mQij*:ӱ+
ϐ7h QX
eHڦ>}Fғj{?>yr @ngݠ#4b<_Xc`*n|sHɹm?kdti}!z n鄸Y.]PBn\(96AI.Fht|W=۳g(F6Y`dkO[dJT
i㖄h44j"Ui/
Ԅ܂
YnC ~cB1]M-,"#Bpİݹb.}
ajm1z|;W`O^Ǚk*a} Yo4Lddg&'I~'x?'ny*o*Wl|6ѓ$]avхd8<} -{㲁p4Aؓ,LXFESpjNO}P=MP{fRշ@yn7˺p#jSY2^LѼ"֣d'}Hݫʲ;ŏXQx2i=+R=B\%kRJUtÎWר)L7q.=%^rñtiEf4GZ).NV#Qwkb\sp+;A [*x,dx}ƍYRw^R@.ppfsfzM-$p
A^ 
5l~CǿXF1#ls`6qŕ(V:IjsGz{Tne	e_)믜{w>e2XƇ8kґԞK}+3]ٕ1	Xh.G]nEס
bj/-$#Ez)'	rrݺZtS+ՍLOKj~v 6"`` >H?qAFazzfqٔف]]
+J>	߲¿2lkCYҷ;1&۷XBGbD^?.| a&7]xޫ+c<='t%uNd	/5TDm< xL⫁v&{G[F8:I73JңNW:jw&"+
Z1t;+PNֳ'%oi$<Fw0hV\?`&[٬4~H?|tpg8!o<lm_cuD<N骣ǿktxZyY,|\u>ɉ>99ɇc,|PNzAoWMh8;,XC"Fp( 0\ YmwӛPZ҅TF	Y͙5J<b"/1Nyw"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     JED Support in dictionaries-common
----------------------------------

***** NEWS *****
A new improved jed interface to ispell has been included in package
jed-extra (not officially released yet), which is compatible with
dictionaries-common.  For those reasons the jed support in
dictionaries-common has been removed.  The text below is not completely
accurate and must be changed in the future.
****************

The JED support provided by the dictionaries-common package improves
the native Ispell support in the jed package by adding a new
interactive S-Lang command `ispell_change_dictionary'.  This function
allows the user to change the Ispell dictionary that will be used in
subsequent calls to the `ispell' command (normally bound to `M-$') and
will do completion using the list of Ispell dictionaries that are
currently installed in the system.

To set the default dictionary for all JED sessions put the line

    Ispell_Dictionary = "language";

in the ~/.jedrc file.  The available list of dictionaries is obtained
by launching jed and typing:

    [M-x] ispell_change_dictionary [ENTER] [TAB]

The default value of the Ispell_Dictionary variable is "default".

 -- Rafael Laboissiere <rafael@debian.org>, Mon,  Sun Apr 28 15:19:20 CEST 2002
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        # -*- readme-debian -*-

Debugging hints (Known problems below)
======================================

Enable debugging
----------------

To enable debug messages from dictionaries-common,

  export DICT_COMMON_DEBUG=1

To enable debug messages from debconf,

  export DEBCONF_DEBUG=developer

This last is very noisy, enable only if really needed. See
debconf-devel(7) for more info about debconf debugging.

Debugging dictionaries-common first configuration from debian-installer
-----------------------------------------------------------------------
If you want to debug dictionaries-common behavior during its first
pre-configuration when running debian-installer, you need to run
debian-installer in expert mode. Open a shell and near the top of

   /var/lib/dpkg/info/pkgsel.postinst

add

   export DICT_COMMON_DEBUG=1

This way, you should get debugging info in the syslog for the
installation.

Some known problems
===================

debconf question asked on every upgrade
---------------------------------------
If every time you upgrade any wordlist or ispell dictionary are asked
about preferred language (and not only at most the first time you
installed it) there is a problem, because that is not what current
code should do.

This has been noticed to happen due to debconf database corruption
(e,g, #335612). Please read below section "Debconf database
corruption".

Problems installing or removing a wordlist/ispell dictionary
----------------------------------------------
Something like
---
# dpkg --purge wbritish
(Reading database ... 111027 files and directories currently installed.)
Removing wbritish ...
Can't call method "choices" on an undefined value at /usr/share/perl5/Debconf/Question.pm line 85, <GEN0> line 4.
dpkg: error processing wbritish (--purge):
 subprocess post-removal script returned error exit status 29
Errors were encountered while processing:
 wbritish
---
may also be related to debconf type 1 db corruption (see
#198297). Please read below section "Debconf database corruption".

Debconf database corruption
---------------------------
Some of the problems listed above are caused by some sort of debconf
database corruption.

In most old cases (See #198297, #224400, #247849, #255193,
#282587, #284287, #297534 and #335612) that corruption has been
related to a nearly full /var partition. This most frequent cause
for this should have been fixed in debconf 1.5.0 (See #198297). From
its changelog,

 * Notice and error out on write errors (such as ENOSPC) when saving
   databases. Should help with a lot of database corruption bugs.

but seems that other still unknown reasons may be flying around.

Please take a look at those bug reports to check whether your problem is
actually the same, and see if you can provide more information about
the problem before proceeding further.

If your problem seems related to debconf database corruption, be it of
above kind or not, the suggested fix is, quoting Joey Hess message in
#198297 bug page

> By purging and reinstalling the package, you only fixed the entries for
> that package. I suggest you run /usr/share/debconf/fix_db.pl as root,
> which will delete all the orphaned questions. You may end up having to
> repeat your answers to some debconf questions during future upgrades,
> but that's a small price to pay for a consistent debconf database.

After running /usr/share/debconf/fix_db.pl as root, please look which
templates were affected,

$ diff -u /var/cache/debconf/config.dat{-old,}    | grep ^[+-]Name
$ diff -u /var/cache/debconf/templates.dat{-old,} | grep ^[+-]Name

Your debconf database should be now in a consistent state and packages
configuration should succeed.

Regarding ispell dictionaries and wordlists, you may still need to run
'dpkg-reconfigure dictionaries-common' as root to make sure defaults
are correct.

 -- Agustin Martin Domingo <agmartin@debian.org>, Tue, 26 Apr 2011 12:51:13 +0200

 LocalWords:  debian debconf usr alioth org wordlists wordlist debhelper http
 LocalWords:  iamerican wspanish miscfiles xemacs wbritish var html dpkg ispell
         This package uses quilt to manage all modifications to ispell.el and
flyspell.el snapshots from FSF emacs bzr repo. See

  /usr/share/doc/quilt/README.source

to get more information on how to use it.

 -- Agustin Martin Domingo <agmartin@debian.org>, Mon, 14 Nov 2011 17:06:11 +0100
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Z۸=-;ݑc<{f3IE'NM%&,
)y-{$%sĆ'x}qr5RU\KaL7q\#VBz.lR-=cҢbo6_xk(SZ0y#Xѣabʊ6,4kUl=Mn~*PV}NY!e^ͱX
`ْe5/i0ksJ|S^I,ʵEQL؋<gT'J&2cܰԦa&AҾJk1Ohe%$>16ٳQ|^%k5*Մ]WxE_Ɍ5'+!
XI`.
ek?))˅(ڃ c 1N"0f8Cj%,JsfL-~@)&;*Y%ngĲ<Aܿ>e"#]LRƻOឌ/9+d%=LUά=ÍT|!g{L)LU.
s'X}C|>/VEZ~boTTKNQ2z>6%Yḱ6pI4给P&D`Y͔.V1PLdXddޱ6PF	*(=?;:4(Ԃ?C~ܒR֚Q`5/IgϙVR!"4٥0e֗Uau#hi
>D30D\[,{0P
-k2CV[:H8xOt^L\%gEk(yQZ]
?7+h^k{+nke,fY)sgV'$MhQ_z8
x%D`.w[ʓoAEsy.}D
@uVJbLVAX,#V@*aAʲV#d'= 7>F,pzL˺1#6yo&Xa]t&Ҟ6``WdS*+ĸKU.08gZgIngçt`u4d\`7ZB(
?tdM(nV3؊'N~xomP @ߐ!Vn5T.r6;oD?r*tgIPEc ɆX@
Ɏpp+vkFeFͅ]أW+Q`-U
F||8mQV
U@oyzS6Bp;UVd9]JF+.{"t:fӝ*2.ƣK`×.J%
9+O--c[ոN{k 9ok&^6OpYE[JIzvVN:TFu̗%DجDFfcV<CQJ"@£ ]Pؼ[b9geSڟj>ׂ|3]7n3vd
#=M
bl0g0̞j3^,j:Wq]ʃC=*0ۥ	bI0}Y}@}u1\?Nm'dM;;cMݔo|a Bmq׃?:@-z,$@Xf;|{ҭ8Eg'G]G*p Xr&]]٣&X;(銗V%9rJCmtJS0B lfr*٬C0٣ƮUAĠ:ڻ*p
@Ș q--O%+YS:e%E,lhב<n^/ɰ(/r#ΚzKI,Q	Xm{BT3Y<M=a0/g0wΕrI5S+[]DE.m)kǦZ-ĬK yR\ùb'{-،˂
I>FhDJooDAEe@*5y՗)%Ct.	rc*Zb++sydɐv)iX`|!.	~\,RNK`A9Bfz{R`__ry+'|隳VOV4~Mὥ/&cB}}MVxKl(@$yre}.&Ij>-0ʴR fGmQ4Iwk(=$RGH{P繫6r0saf\T1rUj,<dcC9.v!0AЄ4Z#S.C[jFՑn"3z+T1qD&6dS!\zDw3Ϯu+D0߭t)
jMAfAi;]VJ:m'zyn%+I\[4JONpGqCI;,ͨeˊ/M[.=EbrꣳDD<M3߫ߜso6TP) ZF)a{drߩ;96Nʶ\+VDضT@*6*ef]oe*6nQ׮|@)3|w%Y҆mn۠vˉХo.
릭KF^wٲmh,~72pe~B3aŴOaxwI>	(ĵZJ'/TemP:ȿvuHFwI6OO4Nb<~]rڅ3Ess:|juf/Km&gYTM㘖ŉA
;ŚQ(m	qBQֺvvIٓS	sytP*p|E v
M{P
\ʨT5]FRD38>HG͂~>=܅z)sn0k8F,Ox
ǯP`̛[pP02!b;e+"M'^7W8O}fY'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   # -*- coding: utf-8 -*-
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: dictionaries-common
Source: https://salsa.debian.org/debian/dictionaries-common.git

Files: *
Copyright: 1999-2008 Rafael Laboissiere <rafael@debian.org>
           2001-2023 Agustín Martín Domingo <agmartin@debian.org>
           2003-2016 René Engelhard <rene@debian.org>
           2022-2023 Soren Stoutner <soren@stoutner.com>
License: GPL-2+

Files: support/emacsen/ispell.el
Copyright: 1994, 1995, 1997-2015 Free Software Foundation, Inc.
	   Original author: Ken Stevens <k.stevens@ieee.org>
License: GPL-3+

Files: support/emacsen/flyspell.el
Copyright: 1998, 2000-2015 Free Software Foundation, Inc.
	   Original author: Manuel Serrano <Manuel.Serrano@sophia.inria.fr>
License: GPL-3+

License: GPL-2+
 On Debian systems, the complete text of the GNU General
 Public License can be found in `/usr/share/common-licenses/GPL-2'.

License: GPL-3+
 On Debian systems, the complete text of the GNU General
 Public License can be found in `/usr/share/common-licenses/GPL-3'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              X]oܶ}m^·h^hS4hp%.aTH뽆=3$%m3gfT*hkm[k~>st(ߕgWGB4^MͭrZʗ|m>r~+ݼyT|ߩy)VQ"8^+Gr]op_eP]w|Gl7ʈZ;QY	^H6f+.2J6NTNA-~6xre$.{7WNw)JZ{V8Ij#$h®XVVF9\Gep~ǎGq>HKY)'yv+k(~&vJW1>;A!κ V։ך]5ZzVM2
3u5P+`d^f*jnY"<)ve_'
Pn9FZ&@k5uVW.~>+	_?_QaZ 42uvN#Yh27S^kG
˅1ZW{γx\EyRlkkj#kBF	'pɷ[280,"`ReOhWνө{{jZlF|笔ݦcԒ7gAm-/BsͶ|P-lx
n}AT"rycT,^TnA.QT\:Yeg`N.1Fz2 "6*	9Hor^AbpΟ΢(vסwmSj3RK3d|?wvv)k~|V7,W!'	/wY5V6,DO+ '[i'xi;I 2&n	Q짨mշ Y2C$A\
V+K&yyA@ʳT Uد zmgbBzVmrcGX~fgpjzvJi9:: VЄߗ߈M@H_s yPZrXtYYF8EQW?1Ob(0혃P~>A1UFǍQyŹ:M܎KKAvt_fw2L@
|EcmIa=\Η̿oR6B}M	=)C"XxMu#$z(6WPzc}T$۾	K'\+YSVE8=neɊbW	"Ӕ$0,9K0Gf| Oe;r1jrmډ1*X*pm<O1Jۅ]?+cT?(j~3l:fNoTA7T(*=޿LxxFڮo'/}2gf4RBByMG} z}۟#	@^(F
&nu&>ѼOP*0cT>]d8r\ cJՓR~L-A)ɖ˃N=3gUP}Kj\$^cч~E񁟹G{Lj^[40	LIv<H"9ﺳ
b B;>;s^ͬ8OC
q
>n25䩆3Ϥ61+YLa^NZ?]o(o<:Q)0MDK@پak:>4uB!V+	g>mvanmJ;d3gy)ø%)_avη F˥t;[p1[֣ugG.a^`13:-S^F&Sb{m6OqFkYfjOdЭʠy:[{őT.gn֘XzCh)hڵZ	J;d&zmnٞcHn7]4[iaNlĩ>}&k1|bS:{F2SqhK_ƶB n^((F6i(Nc(N&4qh4MGpKvjŋ"A4!H܌q`F̵Ӝ o/_y_(3)1!sx)S~"6jgZv_%<N_ggZL]ovrLz:O#E]EӪ@%\\\F.Hm߈XpZhVC:@m`:=Bq>TՇh7l!Ilhu}d餩6U~qA_(                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         dictionaries-common: debconf-is-not-a-registry [*]
# This diverts wamerican words file. Required and agreed with maintainer.
dictionaries-common: diversion-for-unknown-file usr/share/dict/words [*]
# This is used, but not here and not in the usual way.
dictionaries-common: unused-debconf-template dictionaries-common/debconf_database_corruption [*]
# This is used, but not here and not in the usual way.
dictionaries-common: unused-debconf-template dictionaries-common/default-ispell [*]
# This is used, but not here and not in the usual way.
dictionaries-common: unused-debconf-template dictionaries-common/default-wordlist [*]
# This is used, but not here and not in the usual way.
dictionaries-common: unused-debconf-template dictionaries-common/invalid_debconf_value [*]
# This is used, but not here and not in the usual way.
dictionaries-common: unused-debconf-template dictionaries-common/ispell-autobuildhash-message [*]
# This is used, but not here and not in the usual way.
dictionaries-common: unused-debconf-template dictionaries-common/selecting_ispell_wordlist_default [*]
# This README is a placeholder containing dir specific info
dictionaries-common: package-contains-documentation-outside-usr-share-doc [var/lib/?spell/README]
# This should also work with XEmacs (and has some specific requirements)
dictionaries-common: emacsen-common-without-dh-elpa
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Y[SH~ׯ8Dv"̐ZB*.L.[QҖ۶&ZQK8f;ݒ,ryHݧxE"4D.'4^PM_ri$i;o;ſ4E2لLxc}78D(%|%3*TZLh!)S%y!S*y׫1z&gaBw2Cr)wiNg/Wڭ/IO&\dmHpV1L(D#\S&u50uL{DVC0Yx'LE2f?&Bwp80(
VcOP$A4QX\ Y<_mo2DI@m@4a;jrLFt)LNU&ivcaİ%g.O)/K0[t`JT>x77a>?.yF~L8wn޹tSםv=7NB.wpL%rHC]Gn|ykopSu+D}tG[Dkpzuڛ+W8x2%cKS	!mzIuT*eF@4Z9fG!bFM3ӌjz	TTj3vc͌N?;!S5=)Cv{;H2.JD~"pp4YƮg;#ۋͥ)/GXlb^ҶOC"2N揧szJ*2^ٜ)b%T f*Ui3)0i*">EDS)jީTE
Bbsצs3y4Ut	xv~l<}vrn\<_X2i*;羟[XPNNz|nSoNZϿRV\TdVWv=hwwD߭R_=Cm9""#6ge4;db^S应d&a W;N5'Q*b3+o,ߒ?ZһwZ+^w?n5jֈ=JamJQJ6qo.l.v8,2.Gݽ/mGMbIwq\nvե?0 {5fv>pcb|[:jk0
֚P/;hdԮiMklm:=x|^yz+& da#AĵtDʜ{ '-uo?1x޲A:4iCs~uKD=5_"YyWr.74m, Nvw^ketZ8pǽ67J]`+	n+zǗ{%|gЭpH}S h+
9;tZgaeU刿ΔI?aJ(X1
bk+RFyEUdq(uixۧji	N3HzH(E]lm|ܞ/m Uߚj"̖/䌌$}7~\Xo)C]^.mzN m=AFWa"K_)&K<bWeIӜ^
i)$K Ed0O̬:QAsQTА.hE	u*,2i9UL^z8.L1h[wd,}XHfqI;Y`iѐJM̽iIg
AӲ :ED
}lhr⡙^y/c	rK
L,J6ZfQh_6 ^I`x;Zځȟ>Ooxauiް/'hfͼ'j.%Mv^"1iN,zL3DqyqNS|Ҕ2F)|N_es&gDe%|~8tukMZf,At0f-k"F 9Jpe`LjïOFH[\-N)=C%)CV
ŨsSRPPEa]HVJ9aZ;j*%[t`<hFD`bg-2ҍ00	ۿRI#`zV89<ޅ&H]QE%bylQ|Ɨ0apгgs9]~$+V
ƙ,qQE#K<ކzL5Ff^0BfM}[e7%'܅J؋ pO3y孯6x`[+Ƭd*.&]*paQD;!1Dm3mvK?<Gv<m,LZ\ҷͣ^}gD4qeCcW~̤qNõ|jlxwaBQ9Q?Ni`8
|U~,BŴDGjly(wfnŞ`O	Sg4<[oN_/U޼mҰEV2\wap?Uo8CyCABj_"6	+q{sPVs&yE5JE97l߃9Zf/!RŬ)ߡ	ٗZ>9F",(ܸe|6WJo$-;yTu<C.[޿%Zpjdhs}Xo[GAt}skvzgfnbt6,Րb\k^
n^n7<w 9!g-
`J*kw%$JL*e8\7jpm񧭳aZ5t5s\}9αxȔAjsfF1Mz`.KOuܻ~kok"vML)Dm}Q~N/G#]kԶWiK͆՛7b*N$:D醫U/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              WmsHί#lK a_9޵2UNLj<袷]οI on]Eygưϳ(7e"2lC9?'B:1j)r/g
n򏦙8'R3_?a81A&TJc1Z/eHkIsj$c2aKiLJQ!S
PX3z+^H+~@57ǆIM7
C-wS
	KbJ v-E"L(KD)!\+G^XY⅋ [Nk[IS%Gc`!{jY[K7S@N/ycwXf{AQ{2wP;r]!eKH7J$#+,[}h$L Q#-L"=VHa->^*V˖4y[u24Wn+^jkv[GvqQB%dn6"` M%`t^AZv2/NA.,|ۦp\'Gdv͗1Yp؆2i6))miovKz`C\WXWi5E5-rӹ%kU)'KEǐD-8ZJP:Uj 0T8tX'#TVʤ%)7.*{!q8+v(EL.e_i)LNLY*(K+`bT
T$gt*O?_r8&WK(ORt&̥@W$4eTgq}!Ԙ
O7E0c*U$,Q8FLiR31L(QW2R1K<J_\\t]ʦ,1gvΚ 2_uqayv>[["_.5#]*UY{U;H
1iYkug4}7[V8DFR$sw鬒}-[a$KK?͝D2YI!_XoWוL<qHdW#!5w 'E@2seuVnf/h۞=eٴ[X'~u≞ߝqs-:?<]ثfLi~<op#Xn=fcզ^svw4͠=nn~}_-6a-GxFN*Ej}#-G0FЇ#?ـa,BFa8
+)(ō|d!HMc)H
vڑ|Z~U^;JZ{J 4lײ[
zʾeW:]UaU4vh;|2Pa&nzdq2
=- |Q2#yp_aGoJ+xOsUXQdSi+
'%+^nf%Iurǯ}R{^lgd;lu=([?j0IF['054sl$SI{{4^_Z=K
ٍp9'>47*JUzZUv+ fdy)/ጉ!	=~|?=ߧ9pps?'dB^QZ='暆8:*)˓x3O3+ZlTܟpoaY

ruEX	72.eޭN4eF,(ܑp9^S}ݰ9Ҷu\!D['`KP)kj,qs<"T0l[gX&?NikuI[Cl=j8܍'X{c6(~.펟:Foe{g>Կ>yjgn[l׷wς]c/M=<r@=.g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         YSH[
XFl210*ɱ5IR֠+jĻd}bMYwDi"#L4e!tI <<h7Lɿ4Dԥ$"X/M?
ӕ4JdE%GRv*#(WK{2,Y45և1c?LP?L~cÌ<JCg5![CBTBHɔTD*8Rs\lԏ&$wZA&Lh\{Lx9ԄQښ@zr~Li Z%N4[,D@.("3xNRiCnUHTҋSI1nܙ-~$%<(=oO#Eq6x5ӫX~6//,%W*N{ftLkfSc%:rk}lvB!dn@6"`M%` w$~1Ce^-+<a@F}a??&kX3n~m׫¤\̮Vf0{}f-n^7dHꌾ|32EYQΔ#I
~Q_dyi҄n(z:ƦhkB:\5G&S8q/PdN>BW~#AHGȕiʡWh=J]xNQ
4
y2LE~jb//Naw9q*d<Y̩@"W4vR,3u1.SyHSf.,ҟ>)j'1RbFQ2tMRJi_aܱxz~#}rrn/M<_u4i&;mg=&&?ur[\[;r˿)4]U^*S8Y3::G4z3|Q.^DΥH*Y9
1*.H3U^N$d1bT8([Џ.*ỵp9jL/w
ղNOzycZa{?Wp{iTVMYm:d>A?׾9*;G]k{E۰q4c8o{3F]3~ײCn9OBcƵ[NtPvKs5f\yڕ#>.nG++s)
}D@|I1ӻ]4J۴=
1";+Jn'xe{hPS癸(zBzvk:G1^YCl8|ZPgBn~o*dv!z!Сwz݃67JVdK
+ýR
>s}fTXqdqR i+ԇ:KW{"`8MK3~7wy=Yu, J0aDZ0
[\*rlNp/^|xi='Q/.$#Rj1I,ƈ(Ei\1R.Oe'4+/+%cYy\QQQQӏ/'~h!z {:me0>=4"5*=2
:[1W<S@߆F*:t]1V9hxGK3Ս<RfVR@|tAͷ7gƩ":>TɄF6[۰;NmSѿ޾
G.tGa~>,kXA$~\M'x(G^nڝQd*Ao 4}E	u%JAWTR&.(n
` OFUW6Jռ<	Pg3_߿0蚩mW9ě	3M~mk
>Rޕ&!uƀZGs}dsUqg
Gʓ$N
pCpK<txh˲UU9xN&K[#C:O	)a%F}[xʩXAx4
|A
[~ii$3P*v|	Pd0Pcd맨	c' b{otJڬD=HSKwȃX: .gnJS*Cՙr>u<kۻZ	w鱬ssKzl}"BUcϖOMr1;p> PʏV&s9-ʂ9m/X \5\MK0|̆Gт	qQ@XџM6tAQ%8ʪ~fU34E/:cK;75q+e,*kSD
Z][Jv2*C	_Xd#@nhҀud%/SNݗ4JlaQ׊2:vgtŴGgg=zs/V{+T3/q/]Et='`bJi^OcȺ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Zys6붑KaguLǎ5c;I;e@"(q+)En>HQfcxx	ĸ,XLFZUrY(_L"_DCUgAq=WL|"˕:ӏJ\e(ߪY:3%ګJJLZ(QWg}UB+u)za"*BXcA!N9nW	zX_Rt4w\Ŀ!68ɄNc𵐹*E.Zhu|	t<L{*"F5
L썄j/K4@Y{/{RD*(tC|
Ei:ٿ͐HD:ĉs)BMVEΘUJRx2}_1zcF}0[AeLIZ,>-xW -*,'K]`\xV.[ޢf-OF8n\7!f̑fk{I=|Xv>wsVsBTU|ݑV5do^]nE4*??J YMBVPJEfS=vQDo"Fy9YeHP.ۍT7gm?;j<SAS£H2-
>
p&WyNg;,"NW,)-h˩V3
u-buL|2FUe~b'Ϡׁe$6aXt&UZYYPpLϠD0cn2
AUPSCWYXeRGΉI.31<lOز'C>!ώ:Mų͚௖E,&c^y7^hho[{gb#'oN"l5\l*z	hՉ+g31t`Rߜ<EuL9S22WdhXJ)=.9f2/ҟ+sV;J1%Qdb3:[ś%uX,`YQ[hak{qQ<tqg?
="вjӔHVJj|\\tOSSnQ8衎}uiy){k82wZM.oauwtZ (qiǍQ^ÆEm/CSQ21-WQsP[PvQ0 øN)1+>MPV U1ʞ{0Ih_Q;A;8&g֧E4z`k!mΞĳ7\~V]cV;RC3[MTaĩN
N'СFiF
*\iE)	CvFgc%ٸ>;fyUD)u/u߇6,?y>qTJ:hp[U_QBiiT
Qfyey.OFZ}2VxN3U>Z׋T3<hoGb]oi	kyq!;meNm)9#####kͣɏ)78}7~sɋgsqsLAox6w莾u0*]Qy"(E`${Aqk9_3L|6uI"F3D'<"OgeḼR	@<sTy=|Z@W&OA|nqC3ʖW/&WF܉nb:^L CÙq _M˹鐮xL9$Hm{aLdd1mhBNscA~K1T|2Y-d|eӜ	ZiIn==bN8Xdȥby0ͺ`UM24V%,3MeI0MhsLƾ$&Yf>|nhC\2Fvzur9~m<5ܶ\%E
ڠt~V)DӤ0LPӃbbdEDMx2$ݤF@C1!濵N_!F[Vss1"k,(n^$8wf/p~Ih^J|XdrvC(F	4Y#SlcScq5_nEf#xW r:Dcs|.(oODpkh]H|4ϑ(bƭyK*ޡrai΅4Zu UUsFvO*DDЋᛙw"wKSC)>?l)w`L֐AߠUAƯ.'??/ǓW=+;M`k]P}y'#̱p1	2Go훴\שNT"Cؾ`Q(rPP wAQxj0	T`O%8d.&fb;p]>iQ3zP"VCy`ޓ8e1l
dUT	44ba
AQdsܤ9lHa74[sm-Hmf1[
$06lCxUN7\pnP7KX	Nr]2RzWɸZQ,'EA-8h,ôԨ+SP#fN6*)DD9z%*roLVm /E^;A`jX@BX
	DXyM:\ eEZ9E"gf<Je]mfhX@萎iAjjK>	N"ꥱI5}>^7&ֵtgT\XKۆnM:E65)Ԝ:GQ؏ɭ˦
M|ˮC
c42ԏکlȔN`[S
ύ/m>m4]*G3dBzSj]%:vʉb]-oI$h;Ch6F`{ٹY
6juT!OZ\lv2zףT.zvKQ6ܗl(%ƁhMVfCV)=,ٱ2Ӥ@k"64{>u!s?GtC72cGYQ6et0p&6Ir<`&6gӻڌg]14LXO*A	m۪Q6ަpAipU'vl+A|1VxtH
Ȫr>{*sIo	5k51۸nZZ4`}$7VĻ 6eT@A"_o|E#}oJ5jk!}n1(<!;'PѠ\`nINSm!p?G喃0oBq~Y(}mkHa?rGJ4׺09F/P6,=U{ݥvrȥf:
gaAs
s'Eb~TkN"C?na59]q8qFl6'ʱQ
"Vo+?7XUNpOEUM2/eN? Dq|9y}6Ihth08z@|(<dS䰘{\!CA߱${z؛?Ȕ}HF_9Ҽq]xz 푸( "DniG/?*9=1qe@ Ε*:1[q;nvhSl TO.%                                                                                                                                                                                                                                                                         ZisF_1$i!yKQlWh+d; )1 efg :l%͹{^CޖTe2e\
l%γLŞ;]^FI+:EⲔi @䅒,V<鸁 w`QΥDfRq/SV=?`Q(J\O<Jiq]nF^y*f~"Ja)w4į9qsFP$:K B/U!B:Ʊ,pV
X번ҹvw}q1GK͢Jg@ZZHءSh6ϽjIdBAVُUVfh(7vo$ǕPQ	s)"MZD_)U0+Hw3](ZCGO9
@#p)Y |4[ Y\çϡ^>T!8N-oGx~˭U	y:MЀ,A;u޺^uOUGQl]ci"?!hAr/7r69lm5`o9oUm*h 6ڌŨťfa#ʱe^kcԤ8/a%bNZwxjetsFkɏta~0dD| 㐫YIr@,D*
2=cQc^vBI𒆺iPKL^	
y'3`R5D,6>'8ώ Y(*4<{U$BM+yJkʪ2JڅqH$8L%J3bM! 2Yfʂv rrp:59'	9&(NĐU>aʮxL89`K?{6Oc6CdorQֳgMrq!9o͝z~,߇XUq~K+}_'b0;HI"'JsQY+
7%"1\

vG15J JlVl;WiNzm?/`xn {l;]?PnX}3zh7mG^%u4?;g<xຠ]PuoѰ<iSAf3d8m)o
Q}{ϧܳ͆4fs>sb'}òQX7^QکW+ҨlCmt~H8㮅&i0!ʥ3bbF`cMo0f}w7e:?ӥEͬb&<y8Kh$qpu+MɎ⨖
ãQ°,4iPfFLz{4E-42w0|8un
QF7i1[)Sj&I	9HccT6QbRM`($Jl|i>m$gH6(
?s0^Gõ60䊳FɊ@!/J68/zMj<}>ѷ봃ˁP}u3Ȅl>â؊FzmN/V4Y@_̫i͘4sl_BAQn(NWTOW۫oN'b[Nkbk<w=#w'ueUbo.]&w7rUWC݆d4S>T]fҕHP
%_ܷ_%ܺ-0H(!֛Ns^_9UQ,P	:OP-F)x= tAS$?9;^(OݘEC<x|^t}6>Ԝ9{ށ	Y57EFRC.ttsNE6nDXuAНUԪ6̸M5\(hm$Du2bL%gIF]IfB}>G_qEj=/GP@/A#fF 
N}_^Lϯgo6U=M`8
0NsHZ*ke%1&0I-I$i}r$le_4нDh(]-hCkxLX
1
@@	^`<+]5@b,W*"K A(zIJj,ϵّq4T\3-[O
Ɇ*)4bjH!S2GO\JG#A~=hxŅV%ͷO#O>ޫ^E0+O%\ٔFvbgJ@>M>n 3w(fIoȪ0DՊO&/~/nY++]L}YĦv_aM&*e f,VOҤj\Ȝ0dt&adzWFa<Lw	#ظ@^TV,<b
$affZk24yػqؼ'~|^ |
:3E70vBļ ̡W	X7[Z!yDZg;%霳փ-JnRƕm7"eaj?!@s0CģқL@%&%%QcLQk!j)$O2h:_R:f"eWLScRWeu0ڎqv<>I4&U
$ "uR8=۔mNnbw;7^gJ]yVlS(j֮:ƎF& :*hmf'
׉e:hqaܾ
X[Lԝ#%E5sI\.j-βuPҲ
e9aT`BGIDB|wT7n -Q3&+EpZZ*gKr$䒠~Q)+ʳ:Uʄsl	ihƖ/63}Kd%MElTqń4]\3TJ9>im#)"e*dC z%k	M/MJpUG`Q:F}&eлKSLVk/0$mHU"A$Pi~DI"u)C/VB%P1v>.BޏѐS%&s	Tun(.8k3F8Ε^ߊ
QE9F*f<EƌKA.ڂSt~
8C ogVlT6wؙZ#Mrʅ:)925|(@uJ0r6Ys:TӥiV~]Vi@6ȁմ
[S#?*K&&\	̥byk1zWmLVK[pVAqMdC>'֮>6RzsA)מ;vIC%oDMu[NaTF_7MP4J%a߳}fa^MȕTX⩜'{{$S7+
ó./O6	|ev{p돇]ט
XIPTP
 MޗdAD_´#' $CIy)ˤ'ozz(^1<xc"_Y ӌ^_pvBB\Z!	I".1k-|,5uk\y}M?#                                                                                                                                                                                                                                                                                                                                                                            XmSH_\""lp&$Wb,mzF,X&/{*L==XNy"]kH"M4w"C>&'~ÃnrKLDH=JR)i _Ӳ<I y/S*D:h%Q$Y1g^/51ղ,u?e܏h)))5Cˊf8C
#Gn$z-D*L"Rő"}ə*Kh,"gc@C3}p-yB-q<ҌS뵫vcMP g~Li`fN",:}Evwq&?CD`\8
e1[j5RũU̱w)yKg	}0ax6HQ->^*VtqRr:;LRAq:siKY2zn"$RiA7"` L%`p$~A!:NԱ.OAF8?&]|c7pin7))c:,<#CK	!i
zxh
2JDQ$Vɨ8Z/*fiҜn(zQԐƮko
>A;
\5jg&]Ppѧ=4KœIF4drg6:ewR`	** K,Q-SPP,ߞ;7p͌8O*{BLQ+IR)6ICys;1nS9LU{d}H)s4Nb
8xjF2GuORJ/p|aܱxzq3}~rv7^lh6~Ef!eܳqNok%*>@
X''m8:/Ygk߬qVo&liey
%\l5#T8ϸh"<¿g41XD*Y%f1bT(b_\V3qOQ!93{C
r\8D_`;;7;~Yw;}vcK^oKګ-a
YJvk|h5&DOwx]];Gv=k8S_sx[3vo߶C}޷to0?}\@7Nu:*hk0&F;t@շB]<\y~eX%Th#tB
J_IuV`Qאui_hO8+UzfSfi+(CÙbc ٹIn8|^PgyC~o*dvf!w]6Ujχ|`Qaŕ@Vu2J74ްN7N_u󦙌gxu)560DmV]z
Wuŭ-7f:݃$Wi*~CN\IGTM$od"4,)z3 6ɦxq/挎&}?b};};|ws?4χWwh2^]x.;ibе5>/b<r339bzZmN&7\Ri4a)8;e"E_^!73z
$$Kj_
ۭTR:&c*-*w|]"]0_ߌ'IK=nlW=Io~sy
VY`'gzvky=ztc0d<≧߆z)ۍP Gs1B
MVgVx-z1Pn<n}?ݢ,5$ D@1SO] 'P˺SvK(T{+Z8d!\"Sdbt`H[ѯxE֬*@Ƒ
4<]zIΰlYԋb&0+Mvc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               XSHEsl@䊰:/U\\v4u=6~_cD=uOҰP#`MsTҥٚ&{|NDthS@ҁqxviKI*E8Z>~:+i eL,j!#ZIrDTddd	º1rG)tcD~%FH(r!r}ސ$,aBeJy*,Xew\|3: PPs)LE4g\K{8+ƒ)U&(^ܸ`OE=̷̩?_[Ag
wp]pw.8
.1[+|!SũU̱w)y+g	}aRWsJU=E\`8KM7̥f/4L4;ӭ{n"$R6"` L`p$~I!zv3.OX c#pBk' +w߅Dk6Đ&nCnQp{ҘfGǐs|{2 "Mk)jiUTe9"!u2fG-qC^4kGZƨTUjȁPqc͕`Zc3.(Ewȸpѧ=4KꏰŕIF,rer6zeR`)Y1ˤS,MsL~YJ"}De19o<r"P`3eZIؑYGRPq'E\<Pm*"?" e
Ì#eCHp3.xLʖ9zbRzAՇ`KՎv8ӋcA7%xUڔ54fs϶sێ^yUF|NNm89/gkdm8I7#l8
)U{3C8k::X#T:ϸh~y\HBm)[wNk"<	ypty
1*M[]/.3qOQ!ٞ!9)gY=?W~0lli{U:lV%B9=|h6DOw\pOwU؋˾fN~qmJmssooߐ
槯Kh\a_{v/rMz𳵎N:eh}#-0n.W<C~ê4ccJ}DQ@|XII+ͻ
*-J'xe{*PWoL\s=i:lϲ{5jʶe:׶A6P<Иv7fv1f!<CıVX}̘6'1]
9Xq(Z JFް5	iZ_\˦ΗZ:}w޴,ln;S:Qh8g.x1mŭ-7*݃$7Wu@5qj!n.$#ʲI4(E&iYV9R-/2g@͒MߩfQ̑U_M]/~:Hw<OQv~.7WM]k`ya47k|Pyk_EwY{xkrpalX'x{ݟ0Bf+њBD^'YDNrC3ǩ@"`R>ݨIe/cE*N dTnRGV)?d:T*^f~EWG1`%hzv;܍o6W">o:S
J(^xi8U`|)#kfWFVx,1Pxm2|?٢Ƭ,$ D,1S/]D{ye[!#,v|,6`1-r14;+V6,B2+HUHUF#^MoůY$|gݤW	6|wys,[	<0YQ<                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              X[sJ~WM6;[qT91e(<H#Zh$vHa*鞾w4ݤAš|G2ȤK5Mb䭈ȴ&C0&iKI*E8>>
ӕ4M,odU%GRk$9"22ʕ$s2bG*!彆"y̙#懔ɯY2~h$9$(rs}Mސ$!k)Rd2,
p,]+Wz~_,2VK+?4/ALy4g\KPNƚ J|w٬	
iFn/yɎ]_,Bc(4P$~܅ _q\bpzԦkNRҋSIc7{L[ʽ$&A[ƞќ8[}][+?[׈KE(}otMްFJ[uzV=kXD
Ѝ<ap$~!Zv2/N s{LF}8?&^!6uv84i67!!cm2xovKCRt{[d5A5)#I
qQq_Tyi҂n(zQԐƮ[ho
@;
Sc3)EwP\׽RGʯ$#2M9 9hwh)NT\IhؚbvvQZfU		EzI\xBe\
)j%IcG*&iVq%yT<fT(Ezy@cRE5JbF2uORJϩpUb,OOt/NO{-Ӧ_YHcv	l;蹝5Z^]v:YG{qV	[g9¥CE/~?Zڡ2e^wLӷ
Eoȹ)\N9U ]|щu{MDNrw!L'w"hDyUފ~vQ
Dk'=k~8)Gl[-+l|\/=:;##ŎXU<JvkQy[:@_pK^سaNi~$o-P3VC~LrF;Oָ6ö0vKsf\uO;@շϤC}^Cx^@	z_s
ь.}{BWo}ͲkF'6ڕX>kn.3q̕`/CvkF1#Y*p:lYv;
]PV[cBNF?8lCɊlk|_jg^9)P#Rn6	iZ]\:{UOF3]ֺ
_6(D]V]z
Wuŭ-7f:݃$moƋC+rBr>&6@LbFF,OΑr{ls<ٖL\N;`̨Bnhÿxuftt9κgYw<./4^{صе+%Teѡ,O#n\e9#J\';57pI;њB<',#=j0H<^PaFv9n}$ŃBJ$^yvDQ.D(Ȃ&p~V$Sb"URmAak*'vCe3"F:Y'x.0Hj]0`VI*)ys+iZ+,c]g,J
MggkguVǊbո6gz<Fd1[b#~+"V./m< ddXc{ol{כ]_M	C3"(qy'%10|bPeuX@5ȉ#C}Y[&X?d5:a,]?ɭ"Ew3ǿ87G(q"1~跿*cceT<WV=VR6
!;SC;=HqK.l1vFS<eZc.!
-@GRfD4Gqi#%I$P<I}ac'vvtC1ҿ@'yH呲1fF#\Nuͭu038gW׏fZxBt	?J2`CDo1pQD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  XisJίC& #L9~ϩG0.S.C(H-D[Ԓ	39 ,Qs}16,E;"6LE&]Zl:vON^L:z:$thv[/2"u)I<˧ѧef	LHW2$GDFFd^_C0ߣLN"LSc[0+#ꇔɯY2o$U|h9r&dkHHCȵp2RH8G`.+=?URD^ߧjIS-`%WU	 J|vn	
i 7<dO.q/We!x@Tb,?GR.e1-)[Tzq*i~%JбAkEiy=
L`u,lE_/YJvg}T7;^}+1l}[
EIو7ܑֱyqzwutcwqC2gCn؄1I]nvf0{sfX[ZݑiȐ46FQKŢ(D_`TG.qC^d",cdN5@hjZ/N|aEFxqd9rC18UY\d9 YA"W)^~`c/=ZI]xNQ
4
y2ME~jb32K_9`+8O2{,J M+I;R)VICyS:BP<)3kb\E
X )^UbƹQ]s:\:#,;OOt/OO6\M_MlvfS;kc2lk!*:@
X]8@,烵sn8HMYҮ"m'Pq2`x08oQߎ_vK\|ngi}|PuyMDROrw)L'w\i\DyTފ̈́~rQ)ϓwd)uؘ~$۳O^WN8˟nwϴp{YTVjk41o?^srO|U]{֠{Eװqa$o7-3FSʇgeUΙtwи6îqPvGs
f:զ#g\!>W<߁	zsXnV4.]0bwG5]i5d<4GVڕ-[}Ҡn3q5ϵqo@a{C HJv֧J6>[V͎Bi~o*d)BVCĩ
Pb&j00K)s+&I8P`zo$iTI0N%Wދf0M J0QDZG0
5F9ˊ[K6n'tIڭƋC&^Z/n5	z|LJՓD=FD(Ory9bclxW.+-c̤B.Ψ(㿸ulr9gyt6cP/þuǮe_1>.eyW*=5h>
bMSRi4c%P'D:Hwn!4jN/%<g~3z=hS͎ny:N dM*,f|su=
[^jl>ƉεO 2]%FxQ{R
nmSȞ!
=Zu>ZT-@(п|X	!TeTRWlvY:!Vm4Mnn5\ȗDEBt&[Mf|zf';ᗩAI`[Qgymrf^=Rn>] ^cokV\;I1Esv;ЗsWlWMUX@4Ɖ#ҭ~s[d5kVC^LkG!U[,^~\wBsb&M~k?U++lד\^4	]ZB}ͪZR+hxaE`.-
_X bUAr(HRH%%s59&1Tt{Vҕnq|<h#s#L'.T
,bk2AW笧!ālR[/nzFxBt	J2hAD_Qڑ3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        XisHίxl"xƩ!>T91ec+TZ2a7߾:>2a(Gr4.$y0\B2hi1[>pDi(iw,_"DQICyO$R{iVI[-eL+I
%ɚNXSNJzqG1:\1l#巼c9X$|48r@odmHpJ"psQX8Ċ.֕' UBYDi*C
n%6SϡՒ'rܔzۚJ?@^RٯEˁ&Wۛ`̷veH;;q, E BP
	-)_LI&iA{+_jF
R A0[%?Hq/>,V*ȗt+%=`
ӱsk}k8KôSQhzq.[p!	rt0`
9ҠzNܳΏ@Fd;?!{X|np%Z7jܤmFW[#=2xd3Kw5VxHۄ|i2DQN+RI
vQ _FYтn(zL:ƪ[hm;S
ϞIg!;(\xRGo$cΒy2J=?Xጇ+閩 S3LA_Ƨ&j"nYک?1<
/}r"SuR0K0EYJX$
yZC!tOG16	@Udps!,h83ʔ9sbQvF:W[ggGG&XM_&CN8S'b0j&}Fp;O;sg4̱e.̥MEZ/AezOmh{@7_J;~B;ELt36gm4&2[db^S媒[H'ĸ4'Q~b;=Yfk3R!ށ9~tT-{/o-j϶=+iUª)ZFK{{{0h~Џyun95QǞ
5+EMg`<c{v}7lqos	vz*lk0oD&Z;kCgTv?J<?eQdX&ܣ+k霉#ܣ㬰ѓFp!Mk/8XhOr;3XA=M34͕èF/"GNoF1Ĥ7>vՎؑVǕJ6A{^.e(81^%;m	k3ã>7|aXIM9)5^Kkfq7ɲr6q~}}gR?0-~@Xۚ0
JJyEUfv0Mi<5ڣzN;lHfhQڋlb3}^iĘ03iC-sZU322<28_|:HOQd|}j]\Yhwg>]^ʊ}VEg?
>l1H=Wb6u{^T
w%}327W/qU_L ]9uߎߜv;EtL4sT*9&KTP:D.afz{9Mfu5Kqc>9c :
F}.'ю.y$wr:;L'o)n-88}|_!YhernTqF	q&Q%z̐Xt@t#p_!,	\$*:vh.2qĹDwUeGMJ7S
b:zFSҔ_~AAns, /$,{V ti:p/,Hooz0_&@ÿVz Upm'fiR258J*̈́XJ6{Xݝ{Gȓy R12luاU=U랡ŪlI&,}$\[a2Rr8 Rn˛#|6t!?;ÃN`T9pEш9\'h^̅=Mw^/؆ưn̋`SD6>fR RR!Nv<]j["TI *d@x8 MFU2t`yvxo5ȧiu\[sSmlIR;)x3~$G{,Uf՘M.oKB]a{#TL2OqXl;~89!t]7>fJBt!IT iwLop%ƿ$lI'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Xis_ѡ) A)YrJX"-;exKC`@"e8y=8ò\aigQ 2e"2|M9< B7}b_ҞmV4Dġ8"P-IH(Q)-ZʐVlj$c2`KiLƛ{5y2u3grt/9(߳fte.,fM$4t!_OdkHHSk)ag2,a,
SVtNAdttV+w/qp	.{|p2VC.ڍ5At3D9~ˣL{>xeux@z6T:ŉc{<uPRL%Vn{|{[	zmanO!Qx5SX+/[o,!I+SNֽf-5݌5+ՇxJn"$BՂlDJrbxXa8?ϻ;fp4Ā
Zs<9 Vf/_@M8!Lzv5ٛ3g<2?M#@H\*eE9MmKJ*Sv!8!7Z׵>",#dJ5@`(ZoN|cEZxrd%)'."ݠ"q8;r@(DL"Fǘw{<4穴R)Wq-S1PP@$w,ԟ{\W.QuK4EId4eTgq)]Pe*"='i
"WIXm1L+JaB
T.Sp'g*GGnwol3WaSW,1kYV19@XGGm8@_XGkg4ܬqV
c6ܥ\E.^w^uMap@_~<~v-.3)C;+a~qyKt|QUyEwsg!L;w\i\DyTފ̈́~u^)ϓ2kL嚛WL'A1sc/ü1̽o[[^o1{]*MD(jMל<C=.pC*9ثfNian)-
)cs7͊ghzjg?<9\@3?PV't
f:ҵNʑk}3.nGg+7l1,4c#gaG]:g&LFO8Z+tVڦ*HVڑNʆ-*PGos=h%MY,1R+ےtRⓊ4evrCcZTb75BOc-(h00!K)fFIM)*IU{z;J匿^]Owm3YrXQj?J0~DZۖ04slvp[_{TMnޙoj5!z|@iZO"D<-6*F^yIZlVO8"ȣjO?Xǟi?NNFSlb>OgtSszqpO}41|k[0zIH\q^#%fT{Õ'Ss"k
zH{׫yͨN	-ڗV;h5-WQ $Kb=
?/&ݹ>V6[kzK΋w^x~-э.x9Y0<9_'6ϭ
5WO?B'qǟz5Fo;
,bĢل8RnޑNLZ%v4D{a&:%/V+Ng#8>L^K[{t](4jY5WOU"#+BOKEɘ{愜nEG~ճ0=|j'^FI708M"~M<<ya*RchD5JJ%IRL2@t&i*B (<MK$r{*i@sQ3/-7cW09P[e]_p*ߛVOKEYZ9<!"g2/Ujښ($,g%acd8'B+/,
I?]"}XFW*gU"
Q@to2)JzP<1*̺.RaQ4#O>/ӦMOOit1zT<)|={]lqv~uȌpOi/M=k|:;h                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     XsF_^V`#+o`LaWQR,w{#	0==[nED"<kZXf">4NkӑeQG JCIaem$/2Lh>>-˗4I	,LJ*j)cZIDlT(Ixł9dWjYnƼ~ G`~DyN-++unoI>t_9r&doHhJ"rQX8Ċ./A_<ⅲܽi*Cj<JSג/ԲǄ&,@
PsO
>HrA|KeCY*4Ł4(OyN_-S'U±B׊
R -Β9Ik,΅U/i%7Ji>e?0pW}WE
I݈aV#
JquyzTt_v1)8?!^&6&;Cnۛ1,>g##s	!m
o
2ZDQΕ'RI
qQq _Vͳ$GPiRu!"KǍ]|v#B9g&]Ppo=4KŗH%14eq!6:ۣep *fJze+ jݲ> ͪOo3vN^Rd
N
Vs)P4K<Y%E9S:3ݦ")bs^4GB1kc@Șp3C]l1([qFuPՎw8ų~7}b)`ш]v=]7 V驳ˎ?P-o&lyiUFGA&ףK閗ȅ1N8u $2Gtb^S媲煿';nq4nnfAgYD-q}>c؅qApNYaݑyi/w,eUƪr(F}	=m0|݇m;>&]ŝ3*M-]+gz_5z_!~dk3O_9q'fy|/61ɰ[O'ep$[j˰JѼ	;ߥ3RBz7B/7G4X%يoo6e2*2ܹvk3Ҙ]L:umG8M|3P&+]o0٥
8b98d'L`ZPv*-+B6' @}Q꽁A7oKD7u/wu3YYS6YG

fz+LVU+nnٸ,Yws5^q޽_j61)52Jg|Zl:G*rAs$,ݖTc[i+#s^~7gtd4ytpt_u<OQl0=7FLWWt%}{N94Mm9WXPyo_WF"{ʃ9^7>Wbuק.47aJa(>2W?[U?OR%oV6]K(]STbsMdլB*HL(JFS҂YNus;&C/Hųn/RA#Kfgh<p_rx?*.9xg|xf90JbyjC15pظZ
=O0qkĘ,HsOF-v=Fi*'DdSU~"@	#<W{|qr9
&\Na9k<㛥PxY6;1x\a
ܘ1q#.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         XSHϹ ":U<\y\v4u,zd2ɲa]e<r/$y0\\2iQ⟜\,:QJ:-mƹ}fRDPh_iYqJ`AfZUR$uR'b#BIF#(('KdyPP˲4S1=l
#嗼er|lY_Iw>$y!IJ*BdeFy&bX+W1|,"rw;I 5y(ALE<g\KP}&
5aIwnrkF~RE}-wY0_[B
Qx0iHsA('R9YIZ&)> dڵJсAK Y2kNq/>K`saq3r;MRAqiُ0L;5\e:{zn"$RmA7"@#
JquyzTtw:vt`AFsmr؟[!Kn5;ǐ&v
mAp{22{˒s|u;2r6 Ҧ hjHD;ʹD*I!U2*pˊYD4#-T.5@d鸱[N|fCF-x8̤.2]oMRYG/$c͒28krݧep̠*Jze+ jݲ> ͪӏ3vF^Rd
J
Vs!P4K<Y%E9S:1ݦ")bsV4CB1H1	 UdLp8)ءī.V{̸0ʖ9{bQvA=݇
w8ų^7}b)W`ѐ]v=]7~m N[+Qсf| g$~	gy¥CE/:FGzAJ閗ȅ19U $2Gtb^Sjm'
.L/Ow2hDy2dG:l?;7/ GCmcfݵè%[z[v픲ƪr(F}	7'z`.'܅;e{|`Lc.;;'E)3*M-{];g/k5ͨk<}_F:`_jeba
dZ}{$ep$[am QIyv4#K,n=w	B_ktҴcg6ڗ<N0f#{hٔZx2֌7XƘlkvfYUm;nYhh盁J5YA={Y.m(tqha%;asւ1*^I%>)P#R%~w^'dYur?uowm3YYSjV`ڬ=[ua&K\*	l^tӬ[_C䶚d>&j !QQ:l|9F/V53 1馌's5`8NqsFGFGGO?Xhߏsl8noo7prI/QP9ia-*اbB/NKR*TT0%+0~Ho7xEmͪy	7vH}^%QĮ(bJzܚAS
%uvHxJxZpu0onGtMx-w^*Y;;fֆÍcfx<0<ݧzћ%P2=($<War! KOH?l
/F 1?`f&A`LJD9V9!x/\J->:Q˭ϩ5};Ho6aJۻgawb&T(q9}clĭԱ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   #!/usr/bin/perl

package Debian::DictionariesCommon;

use strict;
use base qw(Exporter);
use Text::Iconv;

# List all exported symbols here.
our @EXPORT_OK = qw(parseinfo updatedb loaddb
		    dico_checkroot
		    dico_debug
		    dico_debugprint
		    dico_get_spellchecker_params
		    getlibdir
                    dico_getsysdefault dico_setsysdefault
		    getuserdefault setuserdefault
		    dico_find_matching_choice
		    build_emacsen_support
		    build_jed_support
		    build_squirrelmail_support
		    dico_activate_trigger
		    dico_clean_orphaned_removefiles
		    dico_preprocess_default_symlinks
                    dico_set_default_symlink
		    );
# Import :all to get everything.
our %EXPORT_TAGS = (all => [@EXPORT_OK]);

my $infodir             = "/var/lib/dictionaries-common";
my $cachedir            = "/var/cache/dictionaries-common";
my $emacsensupport      = "emacsen-ispell-dicts.el";
my $jedsupport          = "jed-ispell-dicts.sl";
my $squirrelmailsupport = "sqspell.php";
my $debug               = 1 if ( defined $ENV{'DICT_COMMON_DEBUG'} );

# Directories and files to store default values
my $sys_etc_dir         = "/etc/dictionaries-common";
my $sys_default_dir     = "$cachedir";
my $hunspelldir         = "/usr/share/hunspell";
my $ispelldefault       = "ispell-default";
my $userdefault         = ( defined $ENV{HOME} ) ? "$ENV{HOME}/.$ispelldefault" : undef;
my %sys_default_file    = ("ispell"   => "$sys_default_dir/ispell-default",
			   "wordlist" => "$sys_default_dir/wordlist-default");

# ------------------------------------------------------------------
sub dico_checkroot {
# ------------------------------------------------------------------
# Check if we are root
# ------------------------------------------------------------------
  return if ($> == 0 or ($^O eq 'interix' and $> == 197108));
  die "$0: You must run this as root.\n";
}

# -------------------------------------------------------------
sub dico_debug {
# -------------------------------------------------------------
# Enable debug mode
# -------------------------------------------------------------
  $debug++;
  $ENV{'DICT_COMMON_DEBUG'}++;
}

# -------------------------------------------------------------
sub dico_debugprint {
# -------------------------------------------------------------
# Show info if in debug mode
# -------------------------------------------------------------
  print STDERR "@_\n" if $debug;
}

# ------------------------------------------------------------------
sub getlibdir {
# ------------------------------------------------------------------
# Get location for dict-common info snippets
# ------------------------------------------------------------------
  my $class = shift;
  return "$infodir/$class";
}

# ------------------------------------------------------------------
sub mydie {
# ------------------------------------------------------------------
# A wrapper to die with some local flavor.
# ------------------------------------------------------------------
  my $routine = shift;
  my $errmsg = shift;
  die __PACKAGE__, "($routine):E: $errmsg";
}

# ------------------------------------------------------------------
sub parseinfo {
# ------------------------------------------------------------------
# Parse given dict-common info file
# ------------------------------------------------------------------
  my $file = shift;
  local $/ = "";    # IRS is global, we need 'local' here, not 'my'
  open (DICT, "< $file");
  my %dictionaries =
    map {
      s/^([^:]+):/lc ($1) . ":"/meg;  # Lower case field names
      my %hash = /^([^:]+):\s*((?<!\n)[^\n]+)\s*$/mg;
      map { delete $hash{$_} if ($hash{$_} =~ /^\s+$/) } keys %hash;
      mydie ('parseinfo',
	     qq{Record in file $file does not have a "Language" entry})
	if not exists $hash{language};
      mydie ('parseinfo',
	     qq{Record in file $file does not have a "Hash-Name" entry})
	if not exists $hash{"hash-name"};
      my $lang = delete $hash{language};
      ($lang, \%hash);
    } <DICT>;
  return \%dictionaries;
}

# ------------------------------------------------------------------
sub dico_dumpdb {
# ------------------------------------------------------------------
# Save %dictionaries in Data::Dumper like format. This function
# should be enough for the limited needs of dictionaries-common
# ------------------------------------------------------------------
  my $class        = shift;
  my $dictionaries = shift;
  my @fullarray    = ();
  my @dictarray    = ();
  my $output       = "$cachedir/$class.db";
  my $dictentries  = '';
  my $thevalue     = '';

  foreach my $thedict ( sort keys %{$dictionaries}){
    $dictentries = $dictionaries->{$thedict};
    @dictarray   = ();
    foreach my $thekey ( sort keys %{$dictentries}){
      $thevalue = $dictentries->{$thekey};
      # Make sure \ and ' are escaped in keyvals
      $thevalue =~ s/(\\|\')/\\$1/g;
      push (@dictarray,"     \'$thekey\' => \'$thevalue\'");
    }
    # Make sure \ and ' are escaped in dict names
    $thedict =~ s/(\\|\')/\\$1/g;
    push (@fullarray,
	  "  \'$thedict\' => \{\n" . join(",\n",@dictarray) . "\n  \}");
  }

  mkdir $cachedir unless (-d $cachedir);

  open (DB,"> $output");
  print DB generate_comment("### ") . "\n";
  print DB "package Debian::DictionariesCommon::dbfile;\n\n";
  print DB "%dictionaries = (\n";
  print DB join (",\n",@fullarray);
  print DB "\n);\n\n1;\n";
  close DB;
}

# ------------------------------------------------------------------
sub dico_get_spellchecker_params {
# ------------------------------------------------------------------
# dico_get_spellchecker_params($class,\%language)
#  Get right params for $class (currently unused) and $language
# ------------------------------------------------------------------
  my $class       = shift;
  my $language    = shift;
  my $d_option    = "";
  my $w_option    = "";
  my $T_option    = "";
  my $ispell_args = "";

  $d_option = "-d $language->{'hash-name'}"
      if exists $language->{'hash-name'};
  $w_option = "-w $language->{'additionalchars'}"
      if exists $language->{'additionalchars'};

  if ( exists $language->{'extended-character-mode'} ){
    $T_option =  $language->{'extended-character-mode'};
    $T_option =~ s/^~//; # Strip leading ~ from Extended-Character-Mode.
    $T_option =  '-T ' . $T_option;
  }

  if ( exists $language->{'ispell-args'} ){
    $ispell_args = $language->{'ispell-args'};
    foreach ( split('\s+',$ispell_args) ) {
      # No d_option if already in $ispell_args
      $d_option = "" if /^\-d/;
    }
  }
  return "$d_option $w_option $T_option $ispell_args";
}

# ------------------------------------------------------------------
sub updatedb {
# ------------------------------------------------------------------
# Parse info files for the given class and update class database
# ------------------------------------------------------------------
  my $class        = shift;
  my %dictionaries = ();

  foreach my $file (<$infodir/$class/*>) {
    next if $file =~ m/.*~$/;                 # Ignore ~ backup files
    my %dicts = %{ parseinfo ("$file") };

    # Add package name to all entries
    my $file_basename = $file;
    $file_basename =~ s/^$infodir\/$class\///;
    $dicts{$_}{'package'} = $file_basename foreach ( keys %dicts );

    %dictionaries = (%dictionaries, %dicts);
  }

  # Merge auto-detected and declared hunspell info.
  if ( "$class" eq "hunspell" ){
    %dictionaries = %{
      dc_merge_installed_hunspell_dicts
	($hunspelldir,\%dictionaries) };
  }

  &dico_dumpdb($class,\%dictionaries);
}

# ------------------------------------------------------------------
sub loaddb {
# ------------------------------------------------------------------
# Load class database
# ------------------------------------------------------------------
  my $class  = shift;
  my $dbfile = "$cachedir/$class.db";

  if (-e $dbfile) {
    do $dbfile;
  }
  return \%Debian::DictionariesCommon::dbfile::dictionaries;
}

# ------------------------------------------------------------------
sub getdefault {
# ------------------------------------------------------------------
# Read default value from specified file. Comments and empty lines are ignored.
# ------------------------------------------------------------------
  my $file = shift;
  my $lang = "";

  if (-f $file) {
    open( my $FILE,"< $file")
      or die "Dictionaries-common::getdefault: Could not open $file for read. Aborting ...\n";
    while (<$FILE>){
      next if m/^\s*\#/;
      next if m/^\s*$/;
      $lang = $_;
      last;
    }
    close $FILE;
    return $lang;
  }
  return;
}

# ------------------------------------------------------------------
sub getuserdefault {
# ------------------------------------------------------------------
# Get user default from user's default file
# ------------------------------------------------------------------
  die "Dictionaries-common::getuserdefault: Could not set \$userdefault. Aborting ...\n"
    unless $userdefault;
  getdefault ($userdefault);
}

# ------------------------------------------------------------------
sub dico_getsysdefault {
# ------------------------------------------------------------------
# Get system default value for given class
# ------------------------------------------------------------------
  my $class = shift;
  getdefault ($sys_default_file{$class});
}

# ------------------------------------------------------------------
sub dico_setsysdefault {
# ------------------------------------------------------------------
# Set system default value for given class
# ------------------------------------------------------------------
  my $class = shift;
  my $value = shift;

  my $default_file       = "$sys_default_file{$class}";
  my $old_ispell_default = "$sys_etc_dir/$ispelldefault";

  if ( "$value" ){
    open (DEFAULT, "> $default_file");
    print DEFAULT $value;
    close DEFAULT;

    # Set symlink from old to new location for squirrelmail benefit.
    if ( $class eq "ispell" ){
      unlink "$old_ispell_default";
      symlink "$default_file", "$old_ispell_default";
    }
  } else {
    unlink "$default_file" if ( -e "$default_file" );

    # squirrelmail expects an empty file if no ispell dicts are installed.
    if ( $class eq "ispell" ){
      # Remove $old_ispell_default. Could be a symlink and target be written.
      unlink "$old_ispell_default"; #
      open (DEFAULT, "> $old_ispell_default");
      print DEFAULT "";
      close DEFAULT;
    }
  }
}

# ------------------------------------------------------------------
sub setuserdefault {
# ------------------------------------------------------------------
# Write user's default value to user's default file
# ------------------------------------------------------------------
  my $default      = getuserdefault ();
  my $dictionaries = loaddb ("ispell");
  my %languages    = ();
  my %elanguages   = ();

  foreach my $language ( sort keys %$dictionaries ){
    my $entry     = $dictionaries->{$language};
    my $elanguage = $language;
    if ( defined $entry->{'elanguage'} ){
      $elanguage = $entry->{'elanguage'};
    }
    $languages{$elanguage} = $language;
    $elanguages{$language} = $elanguage;
  }

  unless  ( %languages ) {
    warn "Sorry, no ispell dictionary is installed in your system.\n";
    return;
  }

  my @choices = sort keys %languages;

  my $initial = -1;
  if ( defined $default ) {
    my $default = $elanguages{$default};
    for ( my $i = 0; $i < scalar @choices; $i++ ) {
      if ( $default eq $choices[$i] ) {
	$initial = $i;
	last;
      }
    }
  }

  open (TTY, "/dev/tty");
  while (1) {
    $| = 1;
    print
      "\nSelect your personal ispell dictionary for use with ispell-wrapper\n\n";
    for ( my $i = 0; $i < scalar @choices; $i++ ) {
      print "  " . ($i == $initial ? "*" : " ")
	     . " [" . ($i+1) . "] $choices[$i]\n";
    }
    print qq(\nSelect number or "q" for quit)
      . ($initial != -1 ? " (* is the current default): " : ": ");
    my $sel = <TTY>;
    chomp $sel;
    last if $sel eq "q";
    if ($sel < 1 or $sel > scalar @choices) {
      print qq{\nInvalid choice "$sel".\n\n};
      next;
    }
    else {
      $sel--;
      open (DEFAULT, "> $userdefault");
      print DEFAULT $languages{$choices[$sel]};
      close DEFAULT;
      last;
    }
  }
  close TTY;
}

# ------------------------------------------------------------------
sub generate_comment {
# ------------------------------------------------------------------
# Generate a standard comment string with given prefix
# ------------------------------------------------------------------
  my $commstr = shift;
  my $comment = "This file is part of the dictionaries-common package.
It has been automatically generated.
DO NOT EDIT!";
  $comment =~ s{^}{$commstr}mg;
  return "$comment\n";
}

# ------------------------------------------------------------------
sub dico_find_matching_choice {
# ------------------------------------------------------------------
# Try a single regexp match from given class choices
# ------------------------------------------------------------------
  my $dictionaries = shift;
  my $regexp       = shift;

  my @found_matches = grep {/$regexp/} keys %$dictionaries;
  unless (@found_matches ) {
    dico_debugprint "Try harder with case-independent match";
    @found_matches = grep {/$regexp/i} keys %$dictionaries;
  }

  if ( scalar @found_matches eq 1 ){
    return $found_matches[0];
  } else {
    my $dict_list = join("\n",sort keys %$dictionaries);
    if ( @found_matches ){
      dico_debugprint "Multiple matches for \"$regexp\":\n"
        . join("\n",sort  @found_matches);
    } else {
      dico_debugprint "No matches found for \"$regexp\". Available dicts:\n$dict_list";
    }
    return;
  }
}

# ------------------------------------------------------------------
sub dc_merge_installed_hunspell_dicts {
# ------------------------------------------------------------------
# Parse installed hunspell dicts for hunspell-info like stuff and
# merge it with declared list.
# ------------------------------------------------------------------
  my $hunspelldir = shift;
  my $main_dicts  = shift;

  # Do nothing if no hunspell dicts are installed
  return {} unless ( -d $hunspelldir);

  $main_dicts = {} unless $main_dicts;

  my @hunspell_aff = <$hunspelldir/*.aff>;
  my $parsed_dicts = {};
  my $locales_info = {};
  my $emacs_equivs = {
    "cs_CZ" => "czech",
    "da_DK" => "dansk",
    "de_DE" => "german8",
    "en_GB" => "british",
    "en_US" => "american",
    "eo"    => "esperanto",
    "es"    => "castellano8",
    "es_ES" => "castellano8",
    "fi_FI" => "finnish",
    "fr_FR" => "francais",
    "he_IL" => "hebrew",
    "it_IT" => "italiano",
    "nl_NL" => "nederlands",
    "nn_NO" => "norsk",
    "pl_PL" => "polish",
    "pt_BR" => "brasileiro",
    "pt_PT" => "portugues",
    "ru_RU" => "russian",
    "sk_SK" => "slovak",
    "sl_SI" => "slovenian",
    "sv_SE" => "svenska"
  };
  # Function to get value for key in hunspell aff file
  my $parse_value = sub {
    my $string = shift;
    my $file   = shift;

    my $value = ( grep(/^\s*$string/,@{$file}) )[0];
    if ( defined $value ){
      chomp $value;
      $value =~ s/\s+$//;
      $value =~ s/^\s*$string\s*//;
    }
    return $value;
  };
  # Extract aff basename in a way that does not need anything
  # outside perl-base (File::Basename is in perl-modules).
  my $aff_basename = sub {
    my $path = shift;
    my $base =  (split( /\/|\\/, $path))[-1];
    $base =~ s/.aff$//;
    return $base;
  };

  dico_debugprint "--< Debian/DictionariesCommon.pm: Start dc_merge_installed_hunspell_dicts function";

  foreach my $aff ( @hunspell_aff ){
    my $info = {};

    chomp $aff;

    if ( -l "$aff" && ! -e "$aff" ){
      print STDERR "dmihd: Skipping broken symlink \"$aff\"\n";
      next;
    }

    my $lang = &$aff_basename($aff);
    $info->{'hash-name'}    = $lang;
    $info->{'emacsen-name'} = $lang;

    open my $fh, '<:raw', $aff
	or die "dmihd: Could not open \"$aff\" for read. Aborting.\n";
    my @aff_contents = <$fh>;
    close $fh;

    my $coding = &$parse_value("SET",\@aff_contents);
    if ( defined $coding ){
      if ( $coding =~ m/^iso\d.*/i ){
	# Emacs uses iso- for iso coding systems.
	$coding =~ s/^iso/iso-/i;
      }
      $info->{'coding-system'} = lc($coding);
    }

    my $wordchars = &$parse_value("WORDCHARS",\@aff_contents);
    if ( defined $wordchars ){
      $info->{'otherchars'} = "[$wordchars]";
    }

    my $allchars = &$parse_value("TRY",\@aff_contents);
    if ( defined $allchars ){
      my $nonasciichars   =  $allchars;
      $nonasciichars      =~ s/[[:ascii:]]//g;
      $info->{'additionalchars'} = $nonasciichars;
      my @tmp2 = map { "\\" . sprintf("%o", ord($_)) } split('',$nonasciichars);
      my $octal_nonascii =
	  join('',
	       map { "\\" . sprintf("%o", ord($_)) } split('',$nonasciichars)
	  );
      $info->{'casechars'}     = "[a-zA-Z$octal_nonascii]";
      $info->{'not-casechars'} = "[^a-zA-Z$octal_nonascii]";
      # $info->{'allchars'} =  $allchars;
    }
    $info->{'package'} = "auto-detect";

    if ( -l $aff ){
      if ( my $target = readlink ($aff) ) {
	chomp $target;
	$target = &$aff_basename($target);
	$locales_info->{$target}->{$lang}++;
      };
    } else {
      $parsed_dicts->{$lang} = $info;
      $locales_info->{$lang}->{$lang}++;
    }
  }

  foreach my $lang ( keys %$parsed_dicts ){
    if ( defined $locales_info->{$lang} ){
      $parsed_dicts->{$lang}->{'hunspell-locales'} =
	  join(', ', sort keys %{$locales_info->{$lang}});
    }
  }

  # Add aliases for classical emacsen dict names
  foreach my $lang ( keys %$parsed_dicts ){
    if ( defined $emacs_equivs->{$lang} ){
      $parsed_dicts->{$lang}->{'emacsen-name'} = $emacs_equivs->{$lang};
    }
  }

  my %main_dicts_emacsen;
  my %main_dicts_hashes;
  # Get a list of emacsen and hash names declared in hunspell-info files.
  foreach my $lang ( keys %$main_dicts ){
    my $lang_entries = $main_dicts->{$lang};
    $main_dicts_emacsen{$lang_entries->{'emacsen-name'}}++
	if ( defined $lang_entries->{'emacsen-name'} );
    $main_dicts_hashes{$lang_entries->{'hash-name'}}++
	unless ( $lang_entries->{'emacsen-name'} eq "english_american" );
  }
  # Show some debugging code
  dico_debugprint "main-dicts: ". join(', ',sort keys %$main_dicts);
  dico_debugprint "emacsen-names:" . join(', ',sort keys %main_dicts_emacsen);
  dico_debugprint "hash-names:" . join(', ',sort keys %main_dicts_hashes);
  dico_debugprint "parsed-dicts-before: " .  join(', ',sort keys %$parsed_dicts);

  # Remove parsed entries redundant with a declared dict.
  foreach my $lang ( keys %$parsed_dicts ){
    if ( defined $main_dicts_emacsen{$parsed_dicts->{$lang}->{'emacsen-name'}}
	 ||
	 defined $main_dicts_hashes{$parsed_dicts->{$lang}->{'hash-name'}}
      ){
      # Parsed dict matches emacsen or hash name of a declared dict.
      delete $parsed_dicts->{$lang};
    } else {
      my %lang_locales = ();
      if ( defined $parsed_dicts->{$lang}->{'hunspell-locales'} ){
	map { $lang_locales{$_}++ }
	split ('\s*,\s*',$parsed_dicts->{$lang}->{'hunspell-locales'});
      }
      # A parsed dict locale matches hash name of a declared dict.
      foreach my $locale ( keys %lang_locales ){
	if ( defined $main_dicts_hashes{$locale} ){
	  delete $parsed_dicts->{$lang};
	  last;
	}
      }
    }
  }
  dico_debugprint "parsed-dicts-cleaned: ", join(', ',sort keys %$parsed_dicts);

  # Merge parsed dicts with declared main dicts (preferred)
  foreach my $lang ( keys %$main_dicts ){
    $parsed_dicts->{$lang} = $main_dicts->{$lang};
  }
  dico_debugprint "output-hunspell-dicts: ", join(', ',sort keys %$parsed_dicts), "\n>--";

  return $parsed_dicts;
}

# ------------------------------------------------------------------
sub build_emacsen_support {
# ------------------------------------------------------------------
# Put info from dicts info files into emacsen-ispell-dicts.el
# ------------------------------------------------------------------
  my $elisp          = '';
  my @classes        = ("aspell","hunspell","ispell");
  my %entries        = ();
  my %class_locales  = ();

  foreach my $class ( @classes ){
    my $dictionaries = loaddb ($class);

    foreach my $k (keys %$dictionaries) {
      my $lang = $dictionaries->{$k};

      next if (exists $lang->{'emacs-display'}
	       && $lang->{'emacs-display'} eq "no");

      my $hashname = $lang->{"hash-name"};
      my $casechars = exists $lang->{casechars} ?
	  $lang->{casechars} : "[a-zA-Z]";
      my $notcasechars = exists $lang->{"not-casechars"} ?
	  $lang->{"not-casechars"} : "[^a-zA-Z]";
      my $otherchars = exists $lang->{otherchars} ?
	  $lang->{otherchars} : "[']";
      my $manyothercharsp = exists $lang->{"many-otherchars"} ?
	  ($lang->{"many-otherchars"} eq "yes" ? "t" : "nil") : "nil";
      my $ispellargs = exists $lang->{"ispell-args"} ?
	  $lang->{"ispell-args"} : "-d $hashname";
      my $extendedcharactermode = exists $lang->{"extended-character-mode"} ?
	  ('"' . $lang->{"extended-character-mode"} . '"') : "nil";
      my $codingsystem  = exists $lang->{"coding-system"} ?
	  lc($lang->{"coding-system"}) : "nil";
      my $emacsen_name  = defined $lang->{"emacsen-name"} ?
	  $lang->{"emacsen-name"} : $hashname;
      my $emacsen_names = defined $lang->{"emacsen-names"} ?
	  $lang->{"emacsen-names"} : $emacsen_name;

      # Explicitly add " -d $hashname" to $ispellargs if not already there.
      # Note that this must check for "-dxx", "-d xx", "-C -d xx", "-C -dxx" like matches
      if ( $ispellargs !~ m/( |^)-d/ ){
	dico_debugprint(" - $class-emacsen: Adding \" -d $hashname\" to \"$ispellargs\"");
	$ispellargs .= " -d $hashname";
      }

      # Escape double quotes in otherchars unless already escaped
      $otherchars =~ s/\"/\\"/ unless $otherchars =~ /\\"/;

      foreach my $emacsenname ( split(',\s*',$emacsen_names) ){
	$entries{$class}{$emacsenname} = $entries{'all'}{$emacsenname} =
	  ['"' . $emacsenname  . '"',
	   '"' . $casechars    . '"',
	   '"' . $notcasechars . '"',
	   '"' . $otherchars   . '"',
	   $manyothercharsp,
	   '("' . join ('" "', split (/\s+/,$ispellargs)) . '")',
	   $extendedcharactermode,
	   $codingsystem];

	if ( $class eq "aspell" && exists $lang->{"aspell-locales"} ){
	  foreach ( split(/\s*,\s*/,$lang->{"aspell-locales"}) ){
	    $class_locales{"aspell"}{$_} = $emacsenname;
	  }
	} elsif ( $class eq "hunspell" && exists $lang->{"hunspell-locales"} ){
	  foreach ( split(/\s*,\s*/,$lang->{"hunspell-locales"}) ){
	    $class_locales{"hunspell"}{$_} = $emacsenname;
	  }
	}
      }
    }
  }

  # Write alists of ispell, hunspell and aspell only installed dicts and their properties

  foreach my $class ( @classes ) {
    my @class_dicts = reverse sort keys %{ $entries{$class} };
    if ( scalar @class_dicts ){
      $elisp .= "\n;; Adding $class dicts\n\n";
      foreach ( @class_dicts ){
	my $mystring = join ("\n     ",@{ $entries{$class}{$_} });
	$elisp .= "(add-to-list \'debian-$class-only-dictionary-alist\n  \'($mystring))\n";
      }
      $elisp .= "\n";
    }
  }

  # Write a list of locales associated to each emacsen name

  foreach my $class ("aspell", "hunspell"){
    my $tmp_locales = $class_locales{$class};
    if ( defined $tmp_locales && scalar %$tmp_locales ){
      $elisp .= "\n\n;; An alist that will try to map $class locales to emacsen names";
      $elisp .= "\n\n(setq debian-$class-equivs-alist \'(\n";
      foreach ( sort keys %$tmp_locales ){
	$elisp .= "     (\"$_\" \"$tmp_locales->{$_}\")\n";
      }
      $elisp .= "))\n";

      # Obtain here debian-aspell-dictionary, after debian-aspell-equivs-alist
      # is loaded

      $elisp .="
;; Get default value for debian-$class-dictionary. Will be used if
;; spellchecker is $class and ispell-local-dictionary is not set.
;; We need to get it here, after debian-$class-equivs-alist is loaded

(setq debian-$class-dictionary (debian-ispell-get-$class-default))\n\n";
   } else {
      $elisp .= "\n\n;; No emacsen-$class-equivs entries were found\n";
   }}

  open (ELISP, "> $cachedir/$emacsensupport")
      or die "Cannot open emacsen cache file";
  print ELISP generate_comment (";;; ");
  print ELISP $elisp;
  close ELISP;
}

# ------------------------------------------------------------------
sub build_jed_support {
# ------------------------------------------------------------------
# Put info from dicts info files into jed-ispell-dicts.sl
# ------------------------------------------------------------------

  my @classes = ("aspell","ispell");
  my $slang   = generate_comment ("%%% ");

  ## The S-Lang code generated below will be wrapped in preprocessor
  ## ifexists constructs, insuring that the $jedsupport file will
  ## always evaluate correctly.

  foreach my $class ( @classes ){
    my %class_slang    = ();
    my %class_slang_u8 = ();
    if ( my $dictionaries = loaddb ($class) ){
      foreach my $k (sort keys %$dictionaries) {
	my $lang = $dictionaries->{$k};
	next if (exists $lang->{'jed-display'}
		 && $lang->{'jed-display'} eq "no");

	my $hashname = $lang->{"hash-name"};
	my $additionalchars = exists $lang->{additionalchars} ?
	    $lang->{additionalchars} : "";
	my $otherchars = exists $lang->{otherchars} ?
	    $lang->{otherchars} : "'";
	my $emacsenname = exists $lang->{"emacsen-name"} ?
	    $lang->{"emacsen-name"} : $hashname;
	my $extendedcharmode = exists $lang->{"extended-character-mode"} ?
	    $lang->{"extended-character-mode"} : "";
	my $ispellargs = exists $lang->{"ispell-args"} ?
	    $lang->{"ispell-args"} : "";
	my $codingsystem = exists $lang->{"coding-system"} ?
	    $lang->{"coding-system"} : "l1";

	# Strip enclosing [] from $otherchars
	$otherchars =~ s/^\[//;
	$otherchars =~ s/\]$//;
	# Convert chars in octal \xxx representation to the character
	$otherchars =~ s/\\([0-3][0-7][0-7])/chr(oct($1))/ge;
	$additionalchars =~ s/\\([0-3][0-7][0-7])/chr(oct($1))/ge;

	$class_slang{$emacsenname} =
	    "  $class" . "_add_dictionary (\n"
	    . "    \"$emacsenname\",\n"
	    . "    \"$hashname\",\n"
	    . "    \"$additionalchars\",\n"
	    . "    \"$otherchars\",\n"
	    . ($class eq "ispell" ? "    \"$extendedcharmode\",\n" : "")
	    . "    \"$ispellargs\");";
	if ( $class eq "aspell" ){
	  my $converter = Text::Iconv->new ($codingsystem, "utf8");
	  my $additionalchars_utf = $converter->convert ($additionalchars);
	  my $otherchars_utf = $converter->convert ($otherchars);
	  $class_slang_u8{$emacsenname} =
	      qq{    aspell_add_dictionary (
      "$emacsenname",
      "$hashname",
      "$additionalchars_utf",
      "$otherchars_utf",
      "$ispellargs");};
	} # if $class ..
      } # foreach $k ..
    } # if loaddb ..
    if ( scalar keys %class_slang ){
      $slang .= "\n\#ifexists $class" . "_add_dictionary\n";
      if ( $class eq "aspell" ){
	$slang .= "  if (_slang_utf8_ok) {\n"
	    . join("\n",sort values %class_slang_u8)
	    . "\n  } else {\n"
	    . join("\n",sort values %class_slang)
	    . "\n  }";
      } else {
	$slang .= join("\n",sort values %class_slang);
      }
      $slang .= "\n\#endif\n";
    }
  } # foreach $class
  open (SLANG, "> $cachedir/$jedsupport")
      or die "Cannot open jed cache file";
  print SLANG $slang;
  close SLANG;
}

# ------------------------------------------------------------------
sub build_squirrelmail_support {
# ------------------------------------------------------------------
# Build support file for squirrelmail with a list of available
# dictionaries and associated spellchecker calls, in php format.
# ------------------------------------------------------------------
  my @classes      = ("aspell","ispell","hunspell");
  my $php          = "<?php\n";
  my @dictlist     = ();

  $php .= generate_comment ("### ");
  $php .= "\$SQSPELL_APP = array (\n";

  foreach my $class (@classes) {
    my $dictionaries = loaddb ($class);
    foreach ( keys %$dictionaries ){
      next if m/.*[^a-z]tex[^a-z]/i;            # Discard tex variants
      my $lang = $dictionaries->{$_};
      my $squirrelname;
      if ( defined $lang->{"squirrelmail"} ){
	next if ( lc($lang->{"squirrelmail"}) eq "no" );
	$squirrelname = $lang->{"squirrelmail"};
      } else {
	next unless m/^(.*)\((.+)\)$/;
	$squirrelname = $2;
      }
      my $spellchecker_params =
	&dico_get_spellchecker_params($class,$lang);
      push @dictlist, qq {  '$squirrelname ($class)' => '$class -a $spellchecker_params'};
    }
  }

  $php .= join(",\n", sort @dictlist);
  $php .= "\n);\n";

  open (PHP, "> $cachedir/$squirrelmailsupport")
      or die "Cannot open SquirrelMail cache file";
  print PHP $php;
  close PHP;
}

# ------------------------------------------------------------------
sub dico_activate_trigger {
# ------------------------------------------------------------------
# Try activating provided trigger if run under dpkg control.
# Return true in success, nil otherwise.
# ------------------------------------------------------------------
  my $trigger       = shift;
  my $options       = shift;
  my $await_trigger = defined $options->{'trigger-await'} ? "" : " --no-await ";

  die "DictionariesCommon::dico_activate_trigger: No trigger provided. Aborting ...\n" unless $trigger;

  if ( defined $ENV{'DPKG_RUNNING_VERSION'} &&
       system("type dpkg-trigger >/dev/null 2>&1 && dpkg-trigger $await_trigger $trigger") == 0 ){
    dico_debugprint("DictionariesCommon::dico_activate_trigger: Enabled trigger \"$trigger\" [$await_trigger]");
    return 1;
  }
  return;
}

# ------------------------------------------------------------------
sub dico_clean_orphaned_removefiles {
# ------------------------------------------------------------------
# Clean orphaned remove files and their contents.
#
#  dico_clean_orphaned_removefiles($class,$dictionaries)
# ------------------------------------------------------------------
  my $class        = shift;
  die "DictionariesCommon::dico_preprocess_default_symlinks: No class passed"
    unless $class;
  my $dictionaries = shift;
  die "DictionariesCommon::dico_preprocess_default_symlinks: No dictionaries passed"
    unless $dictionaries;
  my $program      = "update-default-$class";
  my $varlibdir    = "/var/lib/$class";

  return unless ( $class eq "aspell" or $class eq "ispell" );

  foreach my $remove_file (<$varlibdir/*.remove>){
    my $dict        = $remove_file;
    $dict           =~ s/\.remove$//;
    $dict           =~ s/.*\///;
    my $compat_file = "$varlibdir/$dict.compat";

    # Remove orphaned remove files and its contents if no matching .compat file is found
    unless ( -e "$compat_file" ){
      open (my $REMOVE,"$remove_file");
      while (<$REMOVE>){
	chomp;
	next if m/^\s*$/;
	if ( -e "$_"
	     && m:^(/usr/lib|/var/lib): ){
	  unlink "$_";
	  print STDERR "$program: Removing \"$_\".\n";
	}
      }
      close $REMOVE;
      unlink "$remove_file";
      print STDERR "$program: Removing remove file \"$remove_file\".\n";
    }
  }

  # Remove $varlibdir directory if empty and not owned
  if ( -d "$varlibdir" ){
    unless ( scalar <"$varlibdir/*"> ){
      if ( system("dpkg-query -S $varlibdir  > /dev/null 2>&1") == 0 ){
	dico_debugprint("$program: Empty \"$varlibdir\" is owned by some package.");
      } elsif ( scalar %$dictionaries ){
	print STDERR "$program: Empty and unowned \"$varlibdir\", but \"$class\" elements installed.\n";
      } else {
	rmdir "$varlibdir";
	print STDERR "$program: Removing unowned and empty \"$varlibdir\" directory.\n";
      }
    }
  }
}

# ------------------------------------------------------------------
sub dico_preprocess_default_symlinks {
# ------------------------------------------------------------------
# Set default symlinks at $libdir if needed. Remove default symlinks
# at $libdir and $etcdir unless they are not dangling
#
# dico_preprocess_default_symlinks ($class,$dictionaries)
  # ------------------------------------------------------------------
  my $class        = shift;
  die "DictionariesCommon::dico_preprocess_default_symlinks: No class passed"
    unless $class;
  my $dictionaries = shift;
  die "DictionariesCommon::dico_preprocess_default_symlinks: No dictionaries passed"
    unless $dictionaries;
  my $program      = "installdeb-$class";


  my $linkdir = "/etc/dictionaries-common";
  my $libdir  = { 'ispell'   => "/usr/lib/ispell",
		  'wordlist' => "/usr/share/dict"};
  my $links   = {'ispell'    => ["default.hash", "default.aff"],
		 'wordlist'  => ["words"]};

  if ( %{$dictionaries} ){
    foreach my $link ( @{$links->{$class}} ){
      my $link_from = "$libdir->{$class}/$link";
      unless ( -e "$link_from" ){
	if ( -w "$libdir->{$class}" ){
	  print STDERR "Symlinking $link_from to $linkdir/$link\n"
	    if $debug;
	  symlink "$linkdir/$link","$link_from";
	} else {
	  print STDERR "$program:Warning: Non writable \"$libdir->{$class}\" dir. Read-only filesystem?\n";
	}
      }
    }
  } else {
    foreach my $link ( @{$links->{$class}} ){
      my $default_etc_link = "$linkdir/$link";
      my $default_usr_link = "$libdir->{$class}/$link";

      foreach my $default_link ( "$default_etc_link","$default_usr_link"){
	if ( -l "$default_link" ){
	  if ( -e readlink "$default_link" ){ # Non-dangling symlink
	    print STDERR "$program: Leaving non dangling symlink behind: \"$default_link\"\n";
	  } else {
	    if ( -w "$libdir->{$class}" ){
	      dico_debugprint("No $class elements. Remove $default_link.");
	      unlink "$default_link"
	    } else {
	      print STDERR "$program:Warning: Non writable \"$libdir->{$class}\" dir. Read-only filesystem?\n";
	    }
	  }
	} elsif ( -e "$default_link" ){
	  print STDERR "Leaving non symlink \"$default_link\" behind.\n"
	}
      }
    }
  }
}

# ------------------------------------------------------------------
sub dico_set_default_symlink {
# ------------------------------------------------------------------
# Try setting default symlinks for ispell dictionaries and wordlists.
#    dico_set_default_symlink($class,$value)
# ------------------------------------------------------------------
  my $class = shift;
  die "DictionariesCommon::dico_set_default_symlink: No class passed" unless $class;
  my $value = shift;
  die "DictionariesCommon::dico_set_default_symlink: No value passed" unless $value;

  my $dictionaries  = loaddb ($class);
  my $program       = "update-default-$class";
  my $linkdir       = "/etc/dictionaries-common";
  my $class_name    = { 'ispell'   => "ispell dictionary",
                        'wordlist' => "wordlist"};
  my $libdir        = { 'ispell'   => "/usr/lib/ispell",
                        'wordlist' => "/usr/share/dict"};
  my $link_suffixes = { 'ispell'   => [".hash", ".aff"],
                        'wordlist' => [""]};
  my $link_basename = { 'ispell'   => "default",
                        'wordlist' => "words"};

  if ( defined $dictionaries->{$value}{"hash-name"} ){
    dico_debugprint("update-default-$class: \"$value\" -> \"$dictionaries->{$value}{'hash-name'}\"");
    my $hash   = "$libdir->{$class}/" . $dictionaries->{$value}{"hash-name"};
    foreach my $i ( @{$link_suffixes->{$class}}) {
      my $link_to   = "$hash$i";
      if ( -e "$link_to" ) {
        my $link_from = "$linkdir/$link_basename->{$class}$i";
	system "ln -fs $link_to $link_from";
        dico_debugprint("$program: \"$link_from\" symlink set to \"$link_to\"");
      } else {
	die "$program:
  Could not make the default symlink to \"$link_to\".
  This may be a temporary problem due to installation ordering. If that
  file is not present after installation, please file a bugreport
  against $class_name->{$class} package owning that file.
  \n";
      }
    }
  } else {
    die "$program: Selected value \"$value\" for $class_name->{$class}\n" .
      "does not contain a hash name entry in the database.\n";
  }
}


# Ensure we evaluate to true.
1;

__END__

#Local Variables:
#perl-indent-level: 2
#End:

=head1 NAME

Debian::DictionariesCommon.pm - dictionaries-common library

=head1 SYNOPSIS

    use Debian::DictionariesCommon q(:all)
    $dictionaries = parseinfo ('/var/lib/dictionaries-common/ispell/iwolof');
    loaddb ('ispell')
    updatedb ('wordlist')

=head1 DESCRIPTION

Common functions for use from the dictionaries-common system.

=head1 CALLING FUNCTIONS

=over

=item C<dico_checkroot>

Check for rootness and fail if not.

=item C<build_emacsen_support>

Put info from dicts info files into emacsen-ispell-dicts.el

=item C<build_jed_support>

Put info from dicts info files into jed-ispell-dicts.sl

=item C<build_squirrelmail_support>

Build support file for squirrelmail with a list of available
dictionaries and associated spellchecker calls, in php format.

=item C<$libdir = getlibdir($class)>

Return info dir for given class.

=item C<$default = dico_getsysdefault($class)>

Return system default value for given class.

=item C<$libdir = getuserdefault>

Return value for user default ispell dictionary.

=item C<dico_get_spellchecker_params($class,\%language)>

Get right params for $class (currently unused) and $language

=item C<\%dictionaries = loaddb($class)>

Read class .db file and return a reference to a hash
with its contents.

=item C<\%result = parseinfo($file)>

Parse given info file and return a reference to a hash with
the relevant data.

=item C<setsysdefault($value)>

Set value for system default ispell dictionary.

=item C<setuserdefault>

Set value for user default ispell dictionary, after asking
to select it from the available values.

=item C<updatedb($class)>

Parse info files for given class and update class .db
file under dictionaries-common cache dir.

=back

=head1 SEE ALSO

Debian dictionaries-common policy.

=head1 AUTHORS

 Rafael Laboissiere
 Agustin Martin

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This directory will contain files related to aspell hash autobuild.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This directory will contain files related to ispell hash autobuild.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            /.
/etc
/etc/dictionaries-common
/etc/emacs
/etc/emacs/site-start.d
/etc/emacs/site-start.d/50dictionaries-common.el
/usr
/usr/bin
/usr/bin/ispell-wrapper
/usr/bin/select-default-iwrap
/usr/lib
/usr/lib/emacsen-common
/usr/lib/emacsen-common/packages
/usr/lib/emacsen-common/packages/compat
/usr/lib/emacsen-common/packages/compat/dictionaries-common
/usr/lib/emacsen-common/packages/install
/usr/lib/emacsen-common/packages/install/dictionaries-common
/usr/lib/emacsen-common/packages/remove
/usr/lib/emacsen-common/packages/remove/dictionaries-common
/usr/lib/ispell
/usr/lib/ispell/README.select-ispell
/usr/sbin
/usr/sbin/aspell-autobuildhash
/usr/sbin/ispell-autobuildhash
/usr/sbin/remove-default-ispell
/usr/sbin/remove-default-wordlist
/usr/sbin/select-default-ispell
/usr/sbin/select-default-wordlist
/usr/sbin/update-default-ispell
/usr/sbin/update-default-wordlist
/usr/sbin/update-dictcommon-aspell
/usr/sbin/update-dictcommon-hunspell
/usr/share
/usr/share/dict
/usr/share/dict/README.select-wordlist
/usr/share/dictionaries-common
/usr/share/dictionaries-common/dc-debconf-default-value.pl
/usr/share/dictionaries-common/dc-debconf-select.pl
/usr/share/dictionaries-common/elanguages
/usr/share/dictionaries-common/mutt-ispell-init
/usr/share/dictionaries-common/site-elisp
/usr/share/dictionaries-common/site-elisp/.nosearch
/usr/share/dictionaries-common/site-elisp/debian-ispell.el
/usr/share/dictionaries-common/site-elisp/flyspell.el
/usr/share/dictionaries-common/site-elisp/ispell.el
/usr/share/doc
/usr/share/doc/dictionaries-common
/usr/share/doc/dictionaries-common/NEWS.Debian.gz
/usr/share/doc/dictionaries-common/README.Debian.gz
/usr/share/doc/dictionaries-common/README.dictionary.lst
/usr/share/doc/dictionaries-common/README.emacs.gz
/usr/share/doc/dictionaries-common/README.jed-support
/usr/share/doc/dictionaries-common/README.problems
/usr/share/doc/dictionaries-common/README.source
/usr/share/doc/dictionaries-common/changelog.gz
/usr/share/doc/dictionaries-common/copyright
/usr/share/doc/dictionaries-common/dictionaries-common.checklist.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/dictionaries-common
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/ispell-wrapper.1.gz
/usr/share/man/man1/select-default-iwrap.1.gz
/usr/share/man/man3
/usr/share/man/man3/Debian::DictionariesCommon.3pm.gz
/usr/share/man/man8
/usr/share/man/man8/aspell-autobuildhash.8.gz
/usr/share/man/man8/ispell-autobuildhash.8.gz
/usr/share/man/man8/remove-default-ispell.8.gz
/usr/share/man/man8/remove-default-wordlist.8.gz
/usr/share/man/man8/select-default-ispell.8.gz
/usr/share/man/man8/select-default-wordlist.8.gz
/usr/share/man/man8/update-default-ispell.8.gz
/usr/share/man/man8/update-default-wordlist.8.gz
/usr/share/man/man8/update-dictcommon-aspell.8.gz
/usr/share/man/man8/update-dictcommon-hunspell.8.gz
/usr/share/perl5
/usr/share/perl5/Debian
/usr/share/perl5/Debian/DictionariesCommon.pm
/var
/var/cache
/var/cache/dictionaries-common
/var/lib
/var/lib/aspell
/var/lib/aspell/README
/var/lib/ispell
/var/lib/ispell/README
/usr/sbin/update-default-aspell
/usr/share/man/man8/update-default-aspell.8.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          dictionaries-common/noawait
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    dictionaries-common/noawait
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    dictionaries-common/noawait
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    dictionaries-common/noawait
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    /usr/share/debianutils/shells.d debianutils/noawait
/usr/lib/systemd/catalog systemd/noawait
/usr/lib/binfmt.d systemd/noawait
/lib/udev/hwdb.d udev/noawait
/etc/dbus-1/system.d dbus/noawait
/usr/share/dbus-1/system.d dbus/noawait
/usr/share/dbus-1/system-services dbus/noawait
/usr/lib/mime/packages mailcap/noawait
/usr/share/applications mailcap/noawait
/usr/man man-db/noawait
/usr/share/man man-db/noawait
/usr/local/man man-db/noawait
/usr/local/share/man man-db/noawait
/usr/X11R6/man man-db/noawait
/opt/man man-db/noawait
/usr/share/hunspell dictionaries-common/noawait
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Package: dictionaries-common
Status: install reinstreq unpacked
Priority: optional
Section: text
Installed-Size: 717
Maintainer: Agustin Martin Domingo <agmartin@debian.org>
Architecture: all
Multi-Arch: foreign
Version: 1.29.5
Replaces: openoffice.org-updatedicts
Provides: openoffice.org-updatedicts
Depends: debconf (>= 0.5) | debconf-2.0, libtext-iconv-perl, emacsen-common
Suggests: ispell | aspell | hunspell, wordlist
Breaks: myspell-ca (<= 0.6-10), myspell-cs-cz (<= 20040229-5), myspell-de-de-oldspell (<= 1:2-27), myspell-eu-es (<= 0.4.20081029-4), myspell-fi (<= 0.7-17.3), myspell-gl-es (<= 2.2a-8), myspell-ku (<= 0.20.0-1.1), myspell-nl (<= 1:2.0-1), myspell-nr (<< 20070206-4ubuntu1), myspell-ns (<< 20070206-4ubuntu1), myspell-sl (<< 1.0-3ubuntu1), myspell-ss (<< 20070206-4ubuntu1), myspell-tn (<< 20070206-4ubuntu1), myspell-ts (<< 20070207-4ubuntu1), myspell-ve (<< 20070206-3ubuntu1), myspell-xh (<< 20070206-4ubuntu1), myspell-zu (<< 20070207-5ubuntu1), openoffice.org-thesaurus-it (<< 2.0.7.gh.deb1-1.1ubuntu3)
Conffiles:
 /etc/emacs/site-start.d/50dictionaries-common.el newconffile
Description: spelling dictionaries - common utilities
 This package provides utilities shared between all wordlists and spelling
 dictionaries for Ispell, Aspell, or MySpell/Hunspell. It also includes
 support infrastructure for software using them (such as JED and Mutt),
 and some patched spell-checking Lisp files for better Emacs integration.
 .
 More information about the availability of these dictionaries and their
 naming conventions is available in the README.Debian file.
Homepage: https://salsa.debian.org/debian/dictionaries-common
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Package: dictionaries-common
Status: install ok unpacked
Priority: optional
Section: text
Installed-Size: 717
Maintainer: Agustin Martin Domingo <agmartin@debian.org>
Architecture: all
Multi-Arch: foreign
Version: 1.29.5
Replaces: openoffice.org-updatedicts
Provides: openoffice.org-updatedicts
Depends: debconf (>= 0.5) | debconf-2.0, libtext-iconv-perl, emacsen-common
Suggests: ispell | aspell | hunspell, wordlist
Breaks: myspell-ca (<= 0.6-10), myspell-cs-cz (<= 20040229-5), myspell-de-de-oldspell (<= 1:2-27), myspell-eu-es (<= 0.4.20081029-4), myspell-fi (<= 0.7-17.3), myspell-gl-es (<= 2.2a-8), myspell-ku (<= 0.20.0-1.1), myspell-nl (<= 1:2.0-1), myspell-nr (<< 20070206-4ubuntu1), myspell-ns (<< 20070206-4ubuntu1), myspell-sl (<< 1.0-3ubuntu1), myspell-ss (<< 20070206-4ubuntu1), myspell-tn (<< 20070206-4ubuntu1), myspell-ts (<< 20070207-4ubuntu1), myspell-ve (<< 20070206-3ubuntu1), myspell-xh (<< 20070206-4ubuntu1), myspell-zu (<< 20070207-5ubuntu1), openoffice.org-thesaurus-it (<< 2.0.7.gh.deb1-1.1ubuntu3)
Conffiles:
 /etc/emacs/site-start.d/50dictionaries-common.el newconffile
Description: spelling dictionaries - common utilities
 This package provides utilities shared between all wordlists and spelling
 dictionaries for Ispell, Aspell, or MySpell/Hunspell. It also includes
 support infrastructure for software using them (such as JED and Mutt),
 and some patched spell-checking Lisp files for better Emacs integration.
 .
 More information about the availability of these dictionaries and their
 naming conventions is available in the README.Debian file.
Homepage: https://salsa.debian.org/debian/dictionaries-common
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    #!/bin/sh
set -e

SCRIPT="ispell-autobuildhash"

if [ "$1" = "configure" ] ; then
  ! which "$SCRIPT" > /dev/null 2>&1 || "$SCRIPT"
fi



exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               d802520655c8835ea23dec4ae19cd34c  usr/bin/buildhash
29e57f823992cd055de0b95e3e455f1d  usr/bin/defmt-c
27314b5103b896b07061b4c2c145c7a6  usr/bin/defmt-sh
b7bc598b2cfe7a59f99016c314b4beb5  usr/bin/findaffix
50c00d6e2114416114241ecf608d1f9d  usr/bin/icombine
cd26eced0377f1bcf1b63590726b02ae  usr/bin/ijoin
abbfe2c847806763b84a596e2ed6a599  usr/bin/ispell
68709ec78e26e381c287caa3c3a87dd6  usr/bin/munchlist
9736bdf515d38a4308baf86996d7ed5f  usr/bin/tryaffix
abc6fcc4570dce73b79a2c55749f48d6  usr/share/doc/ispell/Contributors.gz
34fa0778eac985165f5fda72256b319d  usr/share/doc/ispell/NEWS.Debian.gz
e5727d6f9d57b74654d7b6dd73a97a6b  usr/share/doc/ispell/README.gz
0a79209406204102c268e79f57c69647  usr/share/doc/ispell/WISHES
0d3d56576e8b39f1de73da924e52c3d6  usr/share/doc/ispell/changelog.Debian.gz
380b65155daa2a746d456eec6fbaf433  usr/share/doc/ispell/changelog.gz
63f1a245712b543e54809d66098bc7e3  usr/share/doc/ispell/copyright
2edaa4aef45a0577788ce1381e7441d3  usr/share/lintian/overrides/ispell
e9f20419b85047ee65de6e32b92d29be  usr/share/man/man1/defmt-c.1.gz
8cdb4492cdeeb898379109761dd1a649  usr/share/man/man1/ispell.1.gz
e7615c135bffd7793bcea10f958e61c2  usr/share/man/man5/ispell.5.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Package: ispell
Version: 3.4.05-1
Architecture: amd64
Maintainer: Robert Luberda <robert@debian.org>
Installed-Size: 381
Depends: libc6 (>= 2.33), libtinfo6 (>= 6)
Recommends: iamerican | ispell-dictionary, wamerican | wordlist
Suggests: spell
Breaks: ifinnish (<= 0.7-17.3), ifinnish-large (<= 0.7-17.3)
Section: text
Priority: optional
Multi-Arch: foreign
Homepage: https://www.cs.hmc.edu/~geoff/ispell.html
Description: International Ispell (an interactive spelling corrector)
 Ispell corrects spelling in plain text, LaTeX, sgml/html/xml, and nroff files.
 [x]Emacs and jed have nice interfaces to ispell, and ispell works from many
 other tools and from the command line as well.
 .
 No ispell dictionaries are included in this package; you must install
 at least one of them ("iamerican" is recommended by default for no good
 reason); install the "ispell-dictionary" package(s) for the language(s)
 you and your users will want to spell-check.
 .
 It's a good idea to install "word list" package(s) for the same language(s),
 because they'll be used by ispell's (L)ookup command.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Package: ispell
Status: install reinstreq half-installed
Priority: optional
Section: text
Architecture: amd64
Multi-Arch: foreign
Version: 3.4.05-1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ELF          >    2      @       @          @ 8 
 @         @       @       @                                                                                                     `      `                                           ]h      ]h                                                                                         h                  Ȭ      ȼ      ȼ                               8      8      8                                   X      X      X      D       D              Std   8      8      8                             Ptd   ؞      ؞      ؞      l      l             Qtd                                                  Rtd                     H      H             /lib64/ld-linux-x86-64.so.2              GNU                     GNU G 큨}	]/]F
         GNU                      &           &   (       (emfUa9                                                  %                     k                      
                                            S                                            g                      &                      E                                            n                                                                                       Z                      `                                                                                       L                                                                                                              7                                                                                                                                                                                u                                                                                                             "                   ?                                     getc fflush strcpy exit fopen perror __stack_chk_fail realloc stdin rewind strtol isatty fgets calloc strlen memset __fprintf_chk stdout fputc fputs memcpy fclose malloc __ctype_b_loc stderr fileno fwrite rindex qsort __strcpy_chk __cxa_finalize memmove __strcat_chk strcmp __libc_start_main free libc.so.6 GLIBC_2.3 GLIBC_2.14 GLIBC_2.4 GLIBC_2.2.5 GLIBC_2.3.4 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable                                                  *         ii
   4        >     ii
   I     ui	   S     ti	   _                   3                   P3                         @             |      P                   `                   p                                                                      ˕                   ֕                   H                                                                                                Ӕ                          0             
      @                   P                   `                   p             (                   1                   ;      ؿ                                                                     #                    '                    &                    (                    )           о                    ؾ                                                                                                                                  	                    
                                                    (         
           0                    8                    @                    H                    P                    X                    `                    h                    p                    x                                                                                                                                                                          !                    "           ȿ         $           п         %                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           HHݟ  HtH         5  %  @ %  h    %  h   %  h   %  h   %z  h   %r  h   %j  h   %b  h   p%Z  h   `%R  h	   P%J  h
   @%B  h   0%:  h    %2  h
   %*  h    %"  h   %  h   %  h   %
  h   %  h   %  h   %  h   %  h   %  h   p%ڝ  h   `%ҝ  h   P%ʝ  h   @%  h   0%  h    %  h   %  h    %  h   %  h    %  f        AW1ҹ   AVAUATUSH  dH%(   H$  1   HxsDуZ  HF8-tt
~    H  HJ  H~HFH=+  H,  b  D$   ;  Zc  8  D$p  H5  H=     .   H=՞  Ht     H5l  H=  =ݣ    H=  H5(r  PHD$H  fǄ$@    E1L$p  D$    > D$0  A1ҹ  D$   Dj    LH)  HT$  LH  AD$HHiMbH&i  )   5 LHt  Ll$       LL`    LH$@    LIm  HL2)  H       0I9;  AD$D$   IHiMbDH&i  )o H=  D   1H@k  (H=ќ  t
-    H
Ҝ  Q      H=k  D$   H$  dH+%(   y  D$HĘ  []A\A]A^A_H=  H-j  L5(k  H=_  LEAVA  MHj  H
j  H=+  PHE;   1Hpk  CZYD$    AH=  پ   1H(j  H=  tH|$e=    D%Q E  H=ѫ  H5Mo  uIH  =#    1L$`  H Hg      L  LhH  ؉HiMbH&i  )v    L$@    LL  xH$H  -    5  H[
  HH,@H    H-n HD$HE   fo$@  ] H$P  HEH$P  H       0H!H9%H          H=Y  پ   1Hh  tH=   H$H  L  L   H}LD   @ E@Hm uHuHl$H- D  IHm Hu     HHY
  fo$@   H$P  HG   H$P  H<I<$H!H    H9     o    LH!  ڃ=    LH5g  H=@  IH`	  H$@   2   1HHtbzH HkHpHf     HH9t:HH@t1f     c   dtHcH@  HuE1E1   L-3g  *f.     Hg  L1H   HetMDDDAEtffELA*̾   L   A*H^9HeuL L HHkLLACtI9r
 H9v
HAu   DHE1MIMkMfH9vIM9   A@tI0I9vHtH9  LfD  oHFHAHHAtH9w
fD  H9v
H@uH1Ht
HH9v
HHyHHH    AcE  H=  H5e  IH  p L   L  H=| H}      H  =  H  &  E1E114fD  Sf   1A9DLAH   D;%   CftH;L   HcHH  KSH+AHHlE 1f   ))HH=  DѾ   1He  H=ʕ  D   1Hd  H
  !      H=d  
H5  
   A    H{LHc   yH  CKHkPHcHlU 5Dt$=  H`G   E1E1,fKfuw1A9DLAH   D;%P    CftH;L   HcH1  SKH+BHHlE 1fu))H H{   HcLH  CHkPHcHlU SDt$=2  -0 ,  E1IDt$ \$HM  HL$LL   LhHcHHi  H  HLtLLL   D`McLIH*  H  IHl}  t*E1H     ;EtIcH? uAVLcL   LHH  L      MHh  H{WH  D$MD$; LD$t$-ԥ D0(  =  L%   E1MfD  LL   LXHcHH$  HHID$AID;53 sM|$MuHHL     1HHt'      ))H    1LsDڤ L%ۤ EtGIkLHLf.     HHHtL)HHHH
HH9uLL   LIk I99   H=  L    II9
  h H=C L   ߓ ԓ H9   L: -$ #L   L  H= ZH   LoH=  D@1(   H*a     0   H
     H=a  H=א  R[L^  H
  H=  Hc_  H<_     LD1L{H
        H=9_     rD$    1%D$    HL     1E1HH=H
        H=e^  "   H
        H=V^     H
ʏ        H=]  FH=  #,L]  H=  H
  H4^  H
^     LD1   mH
V  '      H=^  `   FfD  1I^HHPTLU  H
#U  H=|  D  H=  H  H9tHތ  Ht	        H=  H5  H)HH?HHHtH  HtfD      =   u+UH=   HtH=  de  ]     w    U   SH9ǋ-} CǉHi 9r)HHQ -S H[]@   9C-6 qH" Hu1ȐUHSH~IHtHHyIHL[]ff.     f.     D  LcftnWL* A@F  ftMAPF  HHwH	Wft0    HHHHH	APF  H1fu1I1@ AUIHATLUHS1H         :t5HEHsh DcAt8LDM    :uHL
   []A\A]@ =u L    ATH=W  UH-[  SIHhZ  H=1  LEATHA  H]  H=  HU[  PHE˾   1Lj XZ[]A\ff.      HIIHHHH1H!Ht,H       8H   H       0   H!H9tzÐH;rQH       0HtH       0   H       H!H9tH        HH9!D  H       1HufD  1D  HLL9Hff.     I       7f   HH
}  PHf   F(   t F#   uMHfuꀼ1F#   tHGHWI        fu(    BHft;F#   tI       0L E1Lf     I       LfI        Lfft H BF  HfGfu    ft H BF
  HfGfu    D} E1ۅDD A   UE1HL4 S}>DNE9|C4HcE9Ho  ~DFE9}1[] f     HHGAF3  IF3  t>HH PHHt8tsDF@ )AH_  []B 110  AWAVIAUATL%n USHH  LnHt$Hl$ dH%(   H$8  1H,$!@    fEH$   IH9{  AE tBHAF2   tȾ   LHcЅ~ f     AE 뙐1fu Ld$L-~ H       @I       0<     H       H9#  H>2  L;d$'      M$$ID$tH;   H        HL!H97  	  HuD$ f   H$H5  FF
  HfBfuL$LL$.      HM9tMAItO=   v-   HHPF3  HHDHHHDXEuM9u  h	L  LLLID$HH$8  dH+%(   G  HH  []A\A]A^A_     L9uIt$LL[ID$H D$ H$H5 ft  FF
  HfBfuD$ FF  L$LL$.  fT$ D  HM9AI=   v-   HHPF3  HHDHHHDXEufD  D$ fH$H57     FF  HfBfuL$LL$.      HM9aAI_=   v-   HHPF3  HHDHHHDXEufD  H=ل  1L-S  H-R  f$   <ELH=  HD$HEL@HT$LD$
HT$LH=w  HV  A     RHEHS  PLD$ 1zZY9ff.      HcAVL5 HAUAATIUHSZaf        fAD$HՃtEE t=IAF2   tDH(HcЅ~1& Hf fAD$u1fA$1[]A\A]A^ÐE f.     IrL3 AɅdf.     HtOA ItA=   v-   Et>HHPF3  HL@ 
HHHHuu1  HcՕ уxDK ID  HtD9Do  u9D_  u    AWL=g AVAUL-< ATM  AUHSLHH|$D     fCHL9tOE    HAF2   tDHHcЅ    Hf fCL9u@ H=  1H-P  H%P  f Ir{H=  LEYbAVHA  HTS     H=  PHELD$1HP  ZYfD  E     1f3HL[]A\A]A^A_f     AT   UHHI ft)LH
     AF  HfBfuHHLHP]   A\vfD  AWAVAUATUHSHH8  t$dH%(   H$(  1mƃx-HHc։HLHH)f HH9t<
t<
tH       H    HHC5n eHD$HtHD$  Ld$IL5 M%       fAGH$   II9  AE tAIAF2   tǾ   LRHcȅ~P f fD  AE 뙐D$1fA  HL
p LMDDfD  HL9  HtD=   v-   HHPF3  HLfD  
HHHHuf     D$ LH
 f   F      F-      H=  L%M  HM  MluH=~  LES\LMIHjP  HEH=~     1H$(  dH+%(   	  H8  []A\A]A^A_D  L9^fz S@ BHf"HLITH	CAcM  AyHCHH  HuHSH       0H!H9  H|$    HD$Lp@<
      L%K  H-jL  A   L-O  1LHH	CAF 9,  I   <
t}H:vǋ
 uH=[}  IEH=A}  MEDD$LL$HLL$LDD$   H=}  IE1,\1RHD   H=|  L%K  HJ  MHQH=|  LE/8AULA   H*N  PHEH=|     I1HK  ^_H{mAFIf.     1f$   LH=*|  L%J  H@J  MH=|  LE{LMIHM  HE#H={  L%J  HI  M<EH={  LE#,LAUA   HM  PHE9f     AVAUATUSH   H   oHH       0 HCHEH!H9t>HE    H{H+HH#CH       PH	HC1[]A\A]A^H}xHEHHtHs:H=z  L%pI  H-H  M+4H=z  H[LELMI؅H=uz     HIL  HE1[H=Mz  L-H  L%cH  MH=)z  H[MELMI؅H=z     HK  IE1HRf.     AWAVAUATUHSHHLnLrLfLzH|$LLLL   LLLLA   H9tHL!I	LsLeH       HI!H       M	LcI!HD$L	`HE HMtLLL{LxHEA   HCoE HCHEHSH       0H!H9tdHD[]A\A]A^A_fH9tHL!I	LeLsH       HL$LI!M	LuH#CH	AA   fH       pH|$H       PH#GH9vDL$DL$bfD  H       pAVH       PAUIATI       @UHSHGHH!H9t"  HLHH   HCLuH       pH#EH       H9   H       PH9      PHH
  H       @AoE  IEHGH	@ HtHH HQHuH>HH9HQL9   HI#EHEHEH       I#UH	HEIUH       0H!H9uSIEHG1[]A\A]A^HH[]A\A]A^@ HCI3EH;H5HG    I}[1]A\A]A^@ HEYH=pv  H-E  HD  IH=Lv  MeLEHMMH=$v     HG  HE1=D  AUL-w{ AL  ATL% LUM$Ho  SI H D'x Xf.     HL9tOH   =   v-   EtCHHPF3  HL
HHHHuL9u HL[]A\A]ÅxHc    HxE9u;D u      HL[]A\A]ff.     @     LAz @=:z 4z  L     Lz HHLHPF3  Ha    HTHff.     @ H1 fHfufD  E1f? HGt HAfx uDff.     f1
@ Hf9ufu@ )f1DB     GFftHf9uA9y1ff.     )f.     AWAVAUATIUSHHT$CD5t IǅtuE   L-  1LfD  H D9tXH3LuLt$Mt"LcH5D  Lp   A    H[]A\A]A^A_L-1  EtaD$    DM}A? t:    LH9|L)HcLt;HcM|A? u̓D$D$I D9rH[]A\A]A^A_    H\$HtMeH5D  Lu   D$H[]A\A]A^A_H5C  LHL$H5C  L\uHD$    H5C  L7HL$ff.      AWAVAUATIUSH(5 dH%(   HD$1f tk
  H 11L  ,     
   uHcfAx   Hf9t8 uր    uփHf9u@t
V  MM  =C    Hl$L5׃ H0  ~g)  f     fAM  AF   u.AƄF  5 fAtFF~Hc= fCӛ       E,$E   M|$AntA\uD$    HID$HAf% tuIt$T$Dqt@t$It$Dq   HT$AnfT$M$tbft$fL$}   B@tDЄDAnt*MfHD$dH+%(   u:H([]A\A]A^A_ÐHh
   1HM$@t$XQ1f.     HGHNftIftDHLFHGIHf.     H9s;I9s&BqHHf9t)fD  )D     f.     u1I9 SHH=n  H=n  Iپ   D.m  H
n  HA  1H=n  [X     w ~6Hw zw H
tf.     l       HH=w 
tHfD  l      UHSHv     uIH=l  Ht=Hvl  @ H{HHt#H;uCv H[]    Hx`Hv HHtH)H  []H=?         GVftfu) HvH;ff.     AWIAVAUATUSHHt$T$ 
9    =     D
<v L E1IAAD$DT$uC  AIHA9t/A D9}'D9u1tHAt@8ts    H OHPIH4 D9rHH9uDA$      H\$AHFF3  Ht$0HD$(\$$   tHHH AT$HpH4VD  fD9rf 
  fD9r
f 
  HH9uH~ 9|$A  L;F  Ll{FDd$HL|$8MEMfD\$
D  IA  Eo   D$HD HEF3  KD IEF3  HHBD$A$ 
  F(  A$   F#  A$F  A$   F-  A 
  f;T$rfA 
  A   f;t$rfA   fCF
  IIfCF  AVfTCFH_  BH_  Ho  BHo  AGD;|$Dd$D\$L|$8H|$(   LD\$HUD$L$f} D\$F(  L$ ƄF  F#  JƄF-   
5} L$fTCFfDCF
  fDCF  HD$0DH_  Ho  A| ƄF2  D$$HH[]A\A]A^A_H=i  DAh  1H
i  H=i  L
,<     H<  H=i  Y=| D$$   A   HHD$(F3  D$   HD$0    H=Si  L
;  Dg  H
i  1H;  H=Ii     oH=8i  D$$H=h  L
{=  몐ATYt4Ač@Ѓv9Ax   AD$wH?  HcHD  A\   DA\@ APЃ   t݃
n  Hc{q   J
iq H
~q f     HPЃ   	   P   E1q
u-f  Hcq   JE1
p H
q :@ FdFPЃ   FdA   D  A   D  A	   D  A
   D  A   D  WAA	DGPЃ	vPw_WA	@ A	7AD  A
   kD  -}e  @ 
tHoD  Pw`7A	+D  H=f  D1e  1H
f  H=f  L
^;     H8  H=f  I@ AH=gf  E1Dd  1H
/f  H=hf  L
:     H8  H=If  uff.     @ AWAVAUATU1SH  dH%(   H$  1Ld$`H$  n Ƅ$   ID$    Ld$HD$ H$   HD$H"A  (A߃2  D-n A   E   A   X  A  .  D{   A      McH5~>  B>9   H
?  B8Hy  t$fom L n AD$It$      A#t,EAŃt=8IIcIDB uA#r  
tʃu
AŃufD-m Evm     1A       HY?  ,(   D$1  |$u54m     HL$H=  )     I9  IFH5{?  IItڃ   wHcH=  <uH~fo
l D$   ILA$@  fLcH<  B8   )ЈT$XHHLH8Hp@H|$(Ht$8D$07wkH:  HcHI,$   HHIxHcHHD$(H%  LH     Hx     HD$XLt$0H|$(HHH)LH)HyLaH    H#D$8H	HAH;  H
b=  :B8H   wHcH=;  @:4  H
<  HHt$H<$BLrHD>I9   I)II^H'    H'  H9HNH$IHI|IHw  IHLH{IHt$HMHL`HD$ I9tL>H$MMdIDI9u  L|$Ll$3Lt$E1    IA   L;t$ tLH$  dH+%(   $  H  D[]A\A]A^A_A>2  A[        L=j bHi H#  i     cD$(^U  |$(]  Hi @]\$X@ 3]tItDH=s F2  _  \n  -  IHcЉD$(]ugi \$Xt1D  IH: HH=   u>i   A       IcH&<  D<f     i A!~H     t DL   A"  H$
  \$(E1H0 D   HLSA
~UAM<w   HH  uL<n  DkHD\$0D\$0LSH0 D   AA
A|AEl  Hs\$(A H$
  DHAA~CD-h  H=	_  g 轾Dj]  1H
^  H=_  L
l2     H+1  H=^  肾D  H8  HBDg Hg Eu)   
   ҽHg H<!  g 
   M$   Hg    LHLļH    H!D$(@H    H#D$(HHD$(#	g   |$(
  |$(Hcf   |$(PH5f D$(f @<Ml$1LiI\$LffCHIEHM,$L?LffCIEHkf{_  H\$(cI\$E1I,$fDKHH    HffC    HEHC7f{up    HTHty1fK늋1f 'f H-f 9|I
Hf HHL,IL~He HHe  J(@3  1藻HcM$   He HLHHHHLҺ]   H  HHD$(   HHD$0    #I,$H׺H  H=[  豻L
2/  DWZ  H
[  1H+.  H=[     H=[  vH=d 5d    H
(H=
 5^ &d     A$n xI$H,H$  H=K[  L
.  H=X[  DY  1H-  H
[     gH=0[  ˺&n H    H#D$(HHD$(H    AD$H#T$(A$H	HT$(Ml$L耹HtGH=Z  ^H=Z  1DY  H
gZ  L
-     H,  迺H=Z  #AE h9  DTc 1E\  @ H9:c H  HHHH%c @9uH=Z  DnX  1H
Y  H=
Z  L
a-     H/,  "H=Y  膹Ml$L臸HtGH=Y  eH=Y  1D	X  H
nY  L
,     H+  ƹH=Y  *AE h9  \b 1ۅ7  D  H9Bb "  HHHH-b @9uH=Y  ɸDvW  1H
X  H=Y  L
i,     H7+  *H=X  莸Lc-a Hc-b A\- ;a |mK
H=a Hc
a HL$@H4HYHa HH@  D$@1D)HHLIcHIHHH<LT~KHD L
la LD KD IT I1HH$a @ H<I4H      HI9u` 5a     ` $a f  9CC
H=` ` HHL,ILrH` HHY  L1蕶`     ~L` L
y` DC1Ҹ   fD  ^` HI<I4   H   HI9u>      nHD$(HH  I,$Hi E F2     H踵HtGH=V  薶H=V  1D:U  H
V  L
(-     H)  H=V  [E HD$0    |i I,$      HHcH)H@ H< i  =   H=b 1H  |  ti J
i fFHH=   uh Il$   HcH&    |  \  I$HH     M,$Hц 1f     L A
L L  
  AL H   HH   uLEh Ld$@11MF   HH      |  t=   
  HcLD  H=   	  : th HcH5h fARF
  fA[fADRFPg f^A{I\$Kf     AI<$At$fCL{   D  < tTu	A@THsnҸ  H5{ D  < uF THsB      耳HH     H@    H56{ fxHx"Hǀ      H)  1H  I<$AT$ < tDu	FDHs  -K      HZ  HD$(ID$fxH     @    H@    uԋ=bf    HcLHty1fPf     Il$HI\$HffC    HEH#E1f{HC    fDCe    HTHjyfD  e Il$   HcH%fD  |  `
  I$HL
     M,$H 1ҐL A
L  
  L    AL HHH   uLe Ld$@11MF   HH   C  |  t=     HcLD  H=     : td HcH=d fARF
  fA[fADRFPd f_A{A$d I,$E tbH BHtN1<vH=NQ  	H=bQ  1DO  H
Q  L
[$     Hw#  jH=3Q  ΰ
   1Hfc I,$H路H
  H=P  葰L
&  I,$H良H  H=P  cL
t&  I,$H5:#  H  H5/#  Hͯ  H=(#  y   HcY HHD$HH  LhHD$PA}  L  HH\; uHL)D$@I,$t$\H®t$\
0Y t9|ADL4A5Y 蛯Ht$PHFH  Ht$HHT0Hr  HcD$@HHH$H\HD HcX Il$H5Z"  IT$HHH  HHHh@ 衮"  H5*"  H芮  H5"  Hs  H5"  H\t&H5!  HItH5!  H6uE sgmlE H5   Ht=H5!  Ht*H5a   HtH5R   H߭  W pa sW Il$HP 

    =0a   Ha   I<$F2   t     H=M  谭L
 !  H=N  DOL  1H*   H
M     H=M  uH-I<$$I,$Hc
     =|`   p
  H=kM  &L
  pX` I,$      HHcH)H     H<   =   H=: 1H  |  t_ J
_ fFHH=   uIl$H蜫M,$HL荫II9  H=L  cL
!  H=L  DK  1H  H
^L     ĬH=L  (HLتcU D-U H-  D9|1E*
  @  ׫HH-e  H  A
D-IU M,$LͪD| HcH=0U H萫HEHH  LXL萪HULD /H=T 5T    H
1H=ڭ  5N }T     Lt$A   L%2  H=RK  H	DI  M   H
K  H=LK  H}  1nH=7K  ҪH     L] |  MF  u   fD  L%  H=J  H艪D6I  M   H
J  H=J  H  1H=J  RH     L^] |  MF  u   V=   M=   i{fL$
     Hl$0L툄$
  AD  t   Hbr  D HH
   $
  H5\ D  AF2  tf|$(u8ID$(-   @-I(L D$(Hl$0   .  ]%  \p	  9D$(&HcL$(HQ)H HI7HH9uD$(`3ID$(HIIHl$0	   HcЃL
  II)L HH5Q 
Q IL9tzAU 
u-/G  HcQ uH=H  cDG  1H
sH  H=H  L
=     H  ĨH=H  (DIHl$0N$
  I@-Hc;Q   PH=DQ D$(-   Q -EHc
Q \$($
  HH5Q 
P D,*Q ~CH=Q At$ЉLJHGHH0  @ fH   fH9uLH=G  Lt$A   /DE  1H
?G  H=xG  L
     H  萧H=YG  MA   ,A   AXP mH5.P H<HHFHH0  @ 1fH   fH9u)Ld$@=   DHcHl$@ILI\    )LLf.     HH9tN; tH=kF  &DD  1H
6F  H=oF  L
!     H  臦H=PF  Hl$@Ld$@=   HcHl$@ILI\    )LLD  HH9t; tH=E  莥D;D  1H
E  H=E  L
     H  H=E  SN    D$(H=rE  -DC  1H
=E  H=vE  L
/     H  莥H=WE  wH=&E  DC  1H
D  H=*E  L
     HO  BH=E  覤sH=D  蕤DBC  1H
D  H=D  L
     H  H=D  ZRH=D  IDB  1H
YD  H=D  L
     H  誤H=sD  .-B  OE WW .f=W    fV Af92  fV 
3    =V     H=C  荣L
Y  %H$
  L$  HD$(I    AE I   "tM9tS\uAE  M}D+|$(HHL HH  Ht$(A  ̡2L   H=&C  Ƅ$   ٢DA  1H
B  H="C  L
     HG  :H=C  螢@ t\tl9"uL$  LAE  H=B  M}bDA  1H
rB  H=B  L
D     H  âH=B  'mH=TB  D@  1H
B  H=XB  L
     H}  pH=9B  ԡD$(-   ?Au
H=D  HcHH   HH=T ġH=A  胡L
2  H=A  kD@  1H
{A  H=A  L
     H  ̡H=A  0   H޷AEbHI9tGH=>A  H=RA  1D?  H
A  L
     Hg  ZH=#A  辠C    WH=@  螠DK?  1H
@  H=@  H     L
T  H=@  c      H=@  HD>  1H
X@  H=@  L
     H  詠H=r@  
H=A@  L
  G
   HH=6S n   E plaifE;11H  H
g  < u	AD HsH=?  rL
!  
H=?  ZL
  E tex H={?  6L
  H=c?  L
  H=K?  D=  1H
?  H=O?  L
     Ht  gH=0?  ˞D$(.Q    HTHyH=>  舞D5=  1H
>  H=>  L
     H  H=>  MpQ AxH=w>  2L
  }Ld$@f   E nroffE   1LÅ1Ҿ   H19HP HcfJF
  HfBF  H==  衝L
b  9H==  D\$0LT$(D,<  1H
=  H==  L
Y     H  H==  DLT$(D\$0-D$@    1dC
   `F     HcSF 薜HOF HH=  J   P11H ? 9r	? Hc҉H_  7H=<  蠜DM;  1H
<  H=<  L
b     H  H=<  eE #   Hc? HH˞  P   Off.     @ ATIUS$xHH"<  H   HHSL躛H5  LHlE Hty:     1[]A\fD  H=<  H-
  腛莚L
  LH=;  Ho     LD1H̛   H
;  #      H=  ț   讛ff.      H=D  p  HN 1f     f 
    Hf  fJ=   uH=Ql 1H
@l H5l     HH, H     H)   HH= H
 H     H     HH)   H HH=   uH=ʼ 1H
 H     HH     H)   HpM *H()[]{}<>H`M 1fdM H  
 >M ().\AM \$*.>M %HM    /M /f, HL L  H9  H<C }f.     D  AWL=4  AVIAUIATAUH-4  SL)HHt1 LLDAHH9uH[]A\A]A^A_    HH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
 .stat Can't open dictionary
 %d  buildhash.c 
%d words
 No words in dictionary
 Couldn't allocate hash table
 w Can't create %s%s
 %d:	%d	0	0.0
 %d:	%d	%d	%f
 wb frwite() failed Usage:  buildhash [-s] dict-file aff-file hash-file
	buildhash -c count aff-file
       Counting words in dictionary ...
       %s
Word '%s' too long at line %d of %s, truncated%s
    
couldn't allocate space for collision
 Hash table overflowed by %d word(s).
You probably need to run your dictionary through munchlist.
           Warning:  this language table may exceed the maximum total affix length
of %d by up to %d bytes.  You should either increase MAXAFFIXLEN in local.h
or shorten your largest affix/strip string difference.  (This is the
   difference between the affix length and the strip length in a given
replacement rule, or the affix length if there is no strip string
in that rule.)
 makedent.c plain tex sgml %s
Word '%s' contains illegal characters%s
     %s
Couldn't allocate space for word '%s'%s
     %s
Illegal affix flag character '%c'%s
 %s line %d: %s
 Out of memory String character is too long Too many string characters raw_display squeeze_strings Illegal option Unmatched charset lengths none TeX troff HTML html SGML nroff No such string character Illegal digit in number Flag must be single character Flag must be alphabetic Duplicate flag syntax error memory exhausted Can't open %s%s
 allaffixes altstringchar altstringtype boundarychars compoundmin compoundwords controlled defstringtype flagmarker nroffchars troffchars options prefixes suffixes TeXchars texchars wordchars (stdin)      String character must have nonzero length       Internal error:  ungrab buffer overflow wordchars statement may not specify string characters   boundarychars statement may not specify string characters       Upper and lower versions of string character must be same length        Deformatter must be 'plain', 'nroff', 'tex', or 'sgml'  Incorrect character count in nroffchars statement       Incorrect character count in TeXchars statement Compoundwords option may only appear once       Single characters must be separated by a blank  Too many conditions;  8 maximum Unexpected EOF in quoted string Quoted string too long, max 256 characters      yyopen:  trouble allocating memory
              0 @k|||||||	yY?|<(||||(|<m<|-!                                   !!!!""####$$%&&'(()******++++,--.//01111111222334444567788899::;;<<<<==>>?                   8 

	ioL ;=<	2-
/
MO
\

gX _b57QW)
G`                              :i<;=+N+2lpDEm	
+,qj,N@
jFj,:!:ODEKII$&'W:	T
V
d(0dc13
f
c"7
	ABS`JPaehVnoLMZ5b6#4?C/ >Ug                              8)*9%QRXY[-.GH\]^_k                               g?T>%!ivlcht:"쩩                                                
  6732-/10* + .(>  : )	  45, AB  ?;
$!"I @ %#K<C JI  &D L=' ME  H GF              (LP.7;X=W@JOMN.	QWWRd&W8ReSffkUfon
               	

 ;l  ,   H  h  x$  ؓ  Ȕ  8  x        8L  (d  x  8  h  H  ؞4  t  X      p  8  ت  `        خ     X  8      X  ȴ,  xd  x    ؼ  8	  xh	  	  x	             zR x      H+                  zR x  $          FJw ?;*3$"       D              (   \   Ȓo    AFD v
AAE  \      LZ   BIB B(A0A8G

8A0A(B BBBA|
a
X
A
   $      4    AFF aDA      Ē          $  |           8   <  (    BHD D(F0Y
(I ABBI 4   x      BHH q(a0X(A AAB            T                 )            )       0         _Nr
APS
AGD \   8  l   BBE B(H0A8I 
8A0A(B BBBILMA <         ELE D(D0v
(D BBBB               P     țG   BIB I(K0D8GPX_`XXAPa8D0A(B BBB$   @  Ĝj    BFG EJGh   h  w   BBB B(A0D8JY
8A0A(B BBBFSbF
PI <         BBB A(A0p
(A BBBA   H        BBB B(A0D8GP
8D0A(B BBBC `   `  Ԥ+   LLE K(D0
(A BBBAT
(A BBBEr
(C BBBE  H        BSK I(K0
(D ABBAw(D ABB       da    yg    (            <  ȧ#          P  .          d   F       x   x  <   BBB B(D0C8DP
8A0A(B BBBAq
8F0A(B BBBHo
8A0A(B BBBAL     F   BBB B(D0A8D`
8A0A(B BBBB       D  }          X  H    AB     t  @i    DU
G 4         ADD M
AAHk
FAA      %       L     (O   BEB B(A0A8DD
8A0A(B BBBA      ,  (   BI
E   L   L  )   BBB B(A0C8G
8D0A(B BBBA   ,     H    BDA W
ABG                  D     ]    BIE E(D0H8G@j8A0A(B BBB    ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             3      P3             *                     
       T                                                            o                                    
                                                                                         H
             0
                   	                            o          o    	      o           o    x	      o                                                                                           ȼ                      6       F       V       f       v                                                               !      !      &!      6!      F!      V!      f!      v!      !      !      !      !      !      !      !      !      "      "      &"      6"                                                            P                          |                                                                        ˕            ֕      	      H      
                                                      Ӕ      
                  
                                                (            1                            ;      /usr/lib/debug/.dwz/x86_64-linux-gnu/ispell.debug tgJhU  a54700ed81a87d095d2f5d4691170d88d5d2f2.debug    + .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .gnu_debugaltlink .gnu_debuglink                                                                                                                                        8      8                                     &             X      X      $                              9             |      |                                     G   o                   4                             Q                                                   Y                                                      a   o       x	      x	      T                            n   o       	      	      `                            }             0
      0
                                       B       H
      H
                                                                                                                                                                  @"      @"                                                P"      P"      f                                          T      T      	                                                                                                    ؞      ؞      l                                          H      H      p                                                                                                                                                      ȼ      Ȭ                                                          H                                                                                                              `	                                                         F                              
                           4                                                    $                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ELF          >          @       1          @ 8 
 @         @       @       @                                                                                                                                                                                                                               -      =      =      `                         -      =      =                               8      8      8                                   X      X      X      D       D              Std   8      8      8                             Ptd                        <       <              Qtd                                                  Rtd   -      =      =      P      P             /lib64/ld-linux-x86-64.so.2              GNU                     GNU Te
OyBi         GNU                                      	       (emgUa                        O                       '                                            k                       z                                                  @                "                         @              getc putc stdin stdout __cxa_finalize __libc_start_main libc.so.6 GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable              9          ui	   C       =             p      =             0      @             @      ?                    ?                    ?                    ?                    ?                    @                     @         	           ?                    ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            HH/  HtH         5/  %/  @ %/  h    %/  h   %/  f        ATUH-  SD  H=/  ǃ   GH5/  %w
HcD H    @ H=i/  tEH5H/      ^@ H51/      G't\tH=&/  AÃu[1]A\     fD  H=.  ǃtH5.  "]\   Ϳ    H=.  tH5.      *   /D  H5q.  
H=j.  Ãu[1]A\    H=I.  dAăH5!.  /ty*   2H5.  D#H=.  'ǃ*tH5-  f     H=-  ǃH5-      H5-       1I^HHPTL:  H
   H=&-  D  H=I-  HB-  H9tH,  Ht	        H=-  H5-  H)HH?HHHtH,  HtfD      =,   u+UH=,   HtH=,  d,  ]     w    AWL='*  AVIAUIATAUH-*  SL)HSHt1 LLDAHH9uH[]A\A]A^A_    HH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     O;8               T     DL         zR x      +                  zR x  $      0    FJw ?;*3$"       D               <   \   -   BAH 
CBD
CBH      D      ]    BIE E(D0H8G@j8A0A(B BBB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  p      0             9                     
                    =                           =                    o                                    
                                                  ?             0                            x                                 	                            o          o    h      o           o    T      o                                                                                           =                      6      F                                                      @      /usr/lib/debug/.dwz/x86_64-linux-gnu/ispell.debug tgJhU  65ae0afe4f9c1b79d67ff0b1a1cfe6c042fc69.debug    ^
c .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .gnu_debugaltlink .gnu_debuglink                                                                                                                                        8      8                                     &             X      X      $                              9             |      |                                     G   o                   0                             Q                                                    Y                                                       a   o       T      T                                  n   o       h      h                                   }                                                           B       x      x      0                                                                                                               0                                          P      P                                                `      `                                                            	                                                                                                                    <                                                         (                                          =      -                                                =      -                                                =      -                                              ?      /      P                                           @       0                                                 @      0                                                           0      F                              
                     X0      4                                                    0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ELF          >          @       1          @ 8 
 @         @       @       @                                                                                                                                                   m      m                                                                    -      =      =      `                         -      =      =                               8      8      8                                   X      X      X      D       D              Std   8      8      8                             Ptd   |       |       |       <       <              Qtd                                                  Rtd   -      =      =      P      P             /lib64/ld-linux-x86-64.so.2              GNU                     GNU sbķFhX/"o         GNU                                      	       (emgUa                        O                       '                                            k                       z                                                  @                "                         @              getc putc stdin stdout __cxa_finalize __libc_start_main libc.so.6 GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable              9          ui	   C       =                   =                   @             @      ?                    ?                    ?                    ?                    ?                    @                     @         	           ?                    ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            HH/  HtH         5/  %/  @ %/  h    %/  h   %/  f        USH  H H=/  ŃC  H5/  '	~XEwPHcH    \u;    qH=Z/  uǃ   H53/  
t
tf         6q    &fD  H=	/  $ǃ   H5.  9t\   fD  @     H=.  tWH5.              @ H5i.  
H=b.  }ŃuH1[]D  SH=<.  WǃtH5.  4f.     D  1I^HHPTL:  H
   H=,-  D  H=-  H-  H9tH~-  Ht	        H=-  H5-  H)HH?HHHtHU-  HtfD      =m-   u+UH=2-   HtH=6-  ydE-  ]     w    AWL=*  AVIAUIATAUH-*  SL)HHt1 LLDAHH9uH[]A\A]A^A_    HH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     DDT;8               T      <         zR x      8+                  zR x  $      0    FJw ?;*3$"       D               ,   \      AAK a
CAF    D      ]    BIE E(D0H8G@j8A0A(B BBB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     9                     
       d             =                           =                    o                                    
                                                  ?             0                            x                                 	                            o          o    h      o           o    T      o                                                                                           =                      6      F                                                      @      /usr/lib/debug/.dwz/x86_64-linux-gnu/ispell.debug tgJhU  9acd62c4b7460368dcf6f558892feec2226fd5.debug     .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .gnu_debugaltlink .gnu_debuglink                                                                                                                                        8      8                                     &             X      X      $                              9             |      |                                     G   o                   0                             Q                                                    Y                                                       a   o       T      T                                  n   o       h      h                                   }                                                           B       x      x      0                                                                                                               0                                          P      P                                                `      `                                                d      d      	                                                           |                                           |       |       <                                                                                                   =      -                                                =      -                                                =      -                                              ?      /      P                                           @       0                                                 @      0                                                           0      F                              
                     X0      4                                                    0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #!/bin/sh
#
# $Id: findaffix.X,v 1.23 2015-02-08 00:35:41-08 geoff Exp $
#
# Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All modifications to the source code must be clearly marked as
#    such.  Binary redistributions based on modified source code
#    must be clearly marked as modified versions in the documentation
#    and/or other materials provided with the distribution.
# 4. The code that causes the 'ispell -v' command to display a prominent
#    link to the official ispell Web site may not be removed.
# 5. The name of Geoff Kuenning may not be used to endorse or promote
#    products derived from this software without specific prior
#    written permission.
#
# THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#	Find possible affixes for use with ispell
#
#	Usage:
#
#	findaffix [-p | -s] [-f] [-c] [-m min] [-M max] [-e elim] [-l low] \
#	  [-t tabchar] [files]
#
#	Each common prefix (-p) or suffix (-s, default) is presented, along
#	with statistics to indicate how useful such an affix might be in
#	reducing the size of the input file.  Only those affixes which
#	produce a legal root (one found in the original input) are reported.
#
#	If the "-c" option is not given, the output lines are in the
#	following format:
#
#		strip/add/count/bytes
#
#	where "strip" is the string that should be stripped from a root
#	word before adding the affix, "add" is the affix to be added, "count"
#	is a count of the number of times that this "strip/add" combination
#	appears, and "bytes" is an estimate of the number of bytes that
#	will be saved in the raw dictionary file if this combination is
#	added to the affix file.  The field separator in the output will
#	normally be the tab character specified by the "-t" switch;  the
#	default is a slash ("/").
#
#	If the "-c" ("clean output") option is given, the appearance of
#	the output is made cleaner by changing it to:
#
#		-strip+add<tab>count<tab>bytes
#
#	where "strip," "add," "count," and "bytes" are as before, and "<tab>"
#	represents the ASCII tab character.
#
#	The method used to generate possible affixes will also generate
#	longer affixes which have common headers or trailers.  For example,
#	the two words "moth" and "mother" will generate not only the obvious
#	substition "+er" but also "-h+her" and "-th+ther" (and possibly
#	even longer ones, depending on the value of "min").  To prevent
#	cluttering the output with such affixes, any affix pair that shares
#	a common header (or, for prefixes, trailer) string longer than
#	"elim" characters (default 1) will be suppressed.  You may want to
#	set "elim" to a value greater than 1 if your language has string
#	characters;  usually the need for this parameter will become obvious
#	when you examine the output of your findaffix run.
#
#	Normally, the output is sorted on the "bytes" field.  If the "-f"
#	flag is given, the output is sorted according to the "count" field.
#
#	No affix longer than "max" characters (default 8) will be reported.
#	Smaller values of "max" will make the script run faster.
#
#	Affixes which appear fewer than "low" times (default 10) are
#	suppressed.  This significantly reduces the size of the output file.
#
#	Affixes which generate stems shorter than "min" characters (default 3)
#	are suppressed.  (A stem is the word after the "strip" string has
#	been removed, and before the "add" string has been added.)  This
#	reduces both the running time and the size of the output file.  "Min"
#	should only be set to 1 if you have a *lot* of free time and disk
#	space.
#
#	The script requires a non-blank field-separator character for internal
#	use.  Normally, this character is a slash ("/"), but if the slash
#	appears as a character in the input word list, a different character
#	can be specified with the "-t" switch.
#
#	If the input files are ispell dictionaries, they should be expanded
#	before being fed to this script.
#
#	If the input files contains characters other than [A-Za-z], they
#	should be translated to lowercase before being fed to this script.
#
# $Log: findaffix.X,v $
# Revision 1.23  2015-02-08 00:35:41-08  geoff
# Be a bit more paranoid about creating temporary files.
#
# Revision 1.22  2005/04/27 01:18:34  geoff
# Work around idiotic POSIX incompatibilities in sort.  Add secure
# temp-file handling.
#
# Revision 1.21  2005/04/14 14:39:33  geoff
# Use /tmp as the default temp directory
#
# Revision 1.20  2005/04/14 14:38:23  geoff
# Update license.  Protect against modernized (i.e., incompatible) and
# internationalized sort commands.
#
# Revision 1.19  2001/09/06 00:30:28  geoff
# Many changes from Eli Zaretskii to support DJGPP compilation.
#
# Revision 1.18  2001/07/25 21:51:46  geoff
# Minor license update.
#
# Revision 1.17  2001/07/23 20:24:03  geoff
# Update the copyright and the license.
#
# Revision 1.16  1999/01/07 01:22:55  geoff
# Update the copyright.
#
# Revision 1.15  1994/01/25  07:11:29  geoff
# Get rid of all old RCS log lines in preparation for the 3.1 release.
#
#

# In one of the most incredibly stupid decisions of all time, some
# genius decided to break backwards compatibility by "deprecating" the
# old-style sort switches even though it was trivial to recognize both
# styles.  The result is that that thousands of people (like me) will
# have to rewrite shell scripts to tolerate that stupidity.  (It's not
# that the new syntax is bad--it's definitely easier to understand.
# But that doesn't excuse breaking compatibility.)
#
CRETIN_SORT=true

#
# The following is necessary so that some internationalized versions of
# sort(1) don't confuse things by sorting into a nonstandard order.
#
LANG=C
LOCALE=C
LC_ALL=C
LC_COLLATE=C
LC_CTYPE=C
export LANG LOCALE LC_COLLATE LC_CTYPE
#
# The following aren't strictly necessary, but I've been made paranoid
# by problems with the stuff above.  It can't hurt to set them to a
# sensible value.
LC_MESSAGES=C
LC_MONETARY=C
LC_NUMERIC=C
LC_TIME=C
export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME

TDIR=${TMPDIR-/tmp}
TEMPDIR=`mktemp -d ${TDIR}/faffXXXXXXXXXX 2>/dev/null`  ||  { echo "$0: Failed to create temporary directory; exiting..." 1>&2; exit 1; }
TMP=${TEMPDIR}/faff.

SORTTMP="-T ${TDIR}"			# !!SORTTMP!!
USAGE='Usage:  findaffix [-p | -s] [-f] [-c] [-e elim] [-m min] [-M max] [-l low] [-t tabch] [files]'
LOOP='
    i = len - maxlim + 1
    if (i < minstem + 1)
	i = minstem + 1
    for (  ;  i <= len;  i++)
	print substr ($0, 1, i - 1) tabch substr ($0, i) tabch len
    print $0 tabch tabch len'
ELIM='$1!=$2 \
    {
    if (substr ($1, 1, elimlen) != substr ($2, 1, elimlen))
	print
    }'
maxlim=8
minstem=3
elimlen=1
lowcount=10
cleanout=no
if $CRETIN_SORT
then
    finalsortopts='-k 4rn,4 -k 3rn,3 -k 2,2 -k 1,1'
else
    finalsortopts='+3rn -4 +2rn -3 +1 -2 +0 -1'
fi
tabch=/
while :
do
    case "$1" in
	-p)
	    LOOP='
		lim = len - minstem
		if (lim > maxlim)
		    lim = maxlim
		for (i = 1;  i <= lim;  i++)
		    print substr ($0, i + 1) tabch substr ($0, 1, i) tabch len
		print $0 tabch tabch len'
	    ELIM='$1!=$2 \
		{
		if (substr ($1, length ($1), elimlen) \
		  != substr ($2, length ($2), elimlen))
		    print
		}'
	    shift
	    ;;
	-s)
	    shift
	    ;;
	-f)
	    if $CRETIN_SORT
	    then
		finalsortopts='-k 3rn,3 -k 4rn,4 -k 2,2 -k 1,1'
	    else
		finalsortopts='+2rn -3 +3rn -4 +1 -2 +0 -1'
	    fi
	    shift
	    ;;
	-c)
	    cleanout=yes
	    shift
	    ;;
	-e)
	    elimlen=$2
	    shift; shift
	    ;;
	-m)
	    minstem=$2
	    shift; shift
	    ;;
	-M)
	    maxlim=$2
	    shift; shift
	    ;;
	-l)
	    lowcount=$2
	    shift; shift
	    ;;
	-t)
	    tabch="$2"
	    shift; shift
	    ;;
	-*)
	    echo "$USAGE" 1>&2
	    exit 1
	    ;;
	*)
	    break
	    ;;
    esac
done
trap "rm -rf $TEMPDIR; exit 1" 1 2 15
trap "rm -rf $TEMPDIR; exit 0" 13
#
# We are ready to do the work.  First, we collect all input, translate it
# to lowercase, sort it (dropping duplications), and save it for later.
#
if [ $# -ne 0 ]
then
    cat "$@" | tr '[A-Z]' '[a-z]'
else
    tr '[A-Z]' '[a-z]'
fi \
  | sort -u $SORTTMP > ${TMP}a
#
# Now the monstrous pipeline.  The awk command produces several lines for
# each input word.  Each line contains a possible stem (first field),
# a possible affix, and the length of the original word.  The loop which
# does this was placed into the LOOP variable by the code above (q.v.).
#
# The first sort puts this output into an order appropriate for feeding
# to 'join'.  The join command then combines stems and affixes, and for
# each puts out an affix to strip, an affix to add, and the length of
# the word before and after modification.
#
# From here on out the job is relatively easy.  The second 'awk' gets rid
# of lines that have the same strip and add affixes, and also eliminates
# lines where the strip and add affix have a common leading (for suffixes)
# or trailing (for prefixes) substring, or where the strip affix is longer
# than the add affix (this is all done by the $ELIM variable, which is also
# set up by the code above.  The second sort collects identical affixes;
# the third 'awk' functions like 'uniq -c', replacing duplicate affixes
# with a count and summing the estimate of bytes saved.  It also eliminates
# any affixes which appear less frequently than the minimum ("lowcount").
# Finally, the third sort ($finalsortopts) rearranges the list in the chosen
# sort order.
#
if $CRETIN_SORT
then
    sortopts1='-k 1,1 -k 2'
    sortopts2='-k 2,2 -k 1,1'
else
    sortopts1='+0 -1 +1'
    sortopts2='+1 -2 +0 -1'
fi
awk "BEGIN{minstem=$minstem; maxlim=$maxlim; tabch="'"'"$tabch"'"}
    {
    len = length ($0)
    if (len < 2)
	next
    '"$LOOP"'
    }' < ${TMP}a \
  | sort "-t$tabch" $sortopts1 $SORTTMP -o ${TMP}a
join "-t$tabch" -o 1.2 2.2 2.3 ${TMP}a ${TMP}a \
  | awk "-F$tabch" "BEGIN{elimlen=$elimlen}$ELIM" \
  | sort "-t$tabch" $sortopts2 $SORTTMP \
  | awk "-F$tabch" 'BEGIN{tabch="'"$tabch"'"; lowcount='"$lowcount"'}
	{
	if ($1 == last1  &&  $2 == last2)
	    {
	    count++
	    totchars += $3
	    }
	else
	    {
	    if ((last1 != ""  ||  last2 != "")  &&  count >= lowcount)
		print last1 tabch last2 tabch count tabch totchars
	    count = 1
	    last1 = $1
	    last2 = $2
	    totchars = $3
	    }
	}
    END {
	if ((last1 != ""  ||  last2 != "")  &&  count >= lowcount)
	    print last1 tabch last2 tabch count tabch totchars
	}' \
  | sort "-t$tabch" $finalsortopts $SORTTMP \
  | if [ "$cleanout" = "yes" ]
    then
	case "$tabch" in
	    /)
		sedsub=/
		sedsep=';'
		;;
	    .|\*|\[|\^|\$|\\)
		sedsub="\\$tabch"
		sedsep=/
		;;
	    *)
		sedsub="$tabch"
		sedsep=/
		;;
	esac
	exec sed -e "s$sedsep$sedsub$sedsep	${sedsep}g" \
	  -e 's/	/+/' -e 's/^/-/' \
	  -e 's/^-+/+/' -e 's/+	/	/'
    else
	exec cat
    fi
rm -rf $TEMPDIR
                                                                                                                                                                                                                                                                             ELF          >          @       @          @ 8 
 @         @       @       @                                                                                                     x      x                                        [      [                    p       p       p      @      @                   ،      ؜      ؜            (                                                             8      8      8                                   X      X      X      D       D              Std   8      8      8                             Ptd   |      |      |      |      |             Qtd                                                  Rtd   ،      ؜      ؜      (      (             /lib64/ld-linux-x86-64.so.2              GNU                     GNU Kir:&'PvcX%         GNU                      "           "   $       (emfUa9                            	                     O                      
                                            L                      `                      &                                            g                                                                                        S                      Y                                                                  k                      E                                                                                                              7                                                                                                                                                          n                      z                                                                  |                     "                   ?     С                                getc fflush strcpy exit fopen perror __stack_chk_fail realloc stdin strtol isatty fgets calloc strlen memset __fprintf_chk stdout fputc fputs memcpy malloc __ctype_b_loc stderr index fileno fwrite qsort __strcpy_chk __cxa_finalize memmove strcmp __libc_start_main free libc.so.6 GLIBC_2.3 GLIBC_2.3.4 GLIBC_2.14 GLIBC_2.4 GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable                                                   ii
        ti	   "        .     ii
   9     ui	   C      ؜                                @                         @             r      P             r      `             r      p             r                   r                   s                   s                    s                   r      Р             .s                   9s                   Ds                    q                   p                    Os      0             Ws      @             r      P             `s      `             is      p             rs                   {s                   s      ؟                                                                                         #                    "           С         $                    %                                                                                                                                                         (         	           0         
           8                    @         
           H                    P                    X                    `                    h                    p                    x                                                                                                                                                                                                        ȟ                     П         !                                                                                                                                                   HHݏ  HtH         5  %  @ %  h    %  h   %  h   %  h   %  h   %  h   %  h   %  h   p%z  h   `%r  h	   P%j  h
   @%b  h   0%Z  h    %R  h
   %J  h    %B  h   %:  h   %2  h   %*  h   %"  h   %  h   %  h   %
  h   %  h   p%  h   `%  h   P%  h   @%  h   0%ڍ  h    %  f        AUATE1U1&ZD   uzHV`  LfHփt6H~?-u4WHLFTtȀw2   tIHoLƃuH=.^  H=u  A   jV  t7D]A\A]D  LgLƉD  HV   HnHqW  u,  AŅ   H   Mt 1Ҿ   L    x  뇃=  y     H5]  LtH5]  LtH5s]  LtH5f]  LtH=e  L   1H\  ?      1I^HHPTL:X  H
W  H=L  D  H=э  Hʍ  H9tH  Ht	        H=  H5  H)HH?HHHtHŋ  HtfD      =   u+UH=   HtH=  du  ]     w    H3      H
;  H=\[     D  ATL% USAD$uFID$    ID$    []A\fD  HLf.     H9-a tHHtjIH=  1L  I|$I,$AD$@ufD  HL9% tLH}HtH] IE@u    L% G@ AW1ɿ   AVAUL-[  ATL%[  USH  dH%(   H$x  1f$@  H$`  bH H@    H@     L5AZ  Hʋ    HH  1H       HH     1HH     H#  H  H#  xLt$ Ht$     L
    LL$@    LL     H= G   fo$HD$HGHT$H       0H!H9     @ H=Ɋ  L:H=  IE!ULH=  HTY  LIPIEA      1`XZf     H  hm #LLX   H=)  MqH=  MEXAWLA   IHX  H=  PIE;   1H0X  Hx H$x  dH+%(   uHĈ  []A\A]A^A_1f     f     f.     AUIHATLUHS1H΁         :t5HEHs DcAt8LD    :uHL
   []A\A]@ = L    ATH=  UH-FX  SIHiW  H=  LEATHA  H^W  H=d  HV  PHE˾   1L} 5XZ[]A\ff.      HIIHHHH1H!Ht,H       8H   H       0   H!H9tzÐH;rQH       0HtH       0   H       H!H9tH        HH9!D  H       1HufD  1D  HLLiHff.     I       7f   HH
  PHf   F(   t F#   uMHfuꀼ1F#   tHGHWI        fu(    BHft;F#   tI       0L E1Lf     I       LfI        Lfft H BF  HfGfu    ft H BF
  HfGfu    D E1ۅDD4x A   UE1HLt S}>DNE9|C4HcE9Ho  ~DFE9}1[]w f     HHGAF3  IF3  t>HH PHHt8tsDF@ )AH_  []w 11pw  AWAVIAUATL% USHH  LnHt$Hl$ dH%(   H$8  1H,$!@    fEH$   IH9{  AE tBHAF2   tȾ   LHcЅ~v f     AE 뙐1fu Ld$L-y H       @I       0<     H       H9#  H>2  L;d$'      M$$ID$tH;   H        HL!H97  	  HuD$ f   H$H5[  FF
  HfBfuL$LL$.      HM9tMAItO=   v-   HHPF3  HHDHHHDXEuM9u  h	L  LLLID$HH$8  dH+%(   G  HH  []A\A]A^A_     L9uIt$LL[ID$H D$ H$H58 ft  FF
  HfBfuD$ FF  L$LL$.  fT$ D  HM9AI=   v-   HHPF3  HHDHHHDXEufD  D$ fH$H5w     FF  HfBfuL$LL$.      HM9aAI_=   v-   HHPF3  HHDHHHDXEufD  H=9  1L-P  H-O  f$   lLH=  HD$HEL@HT$LD$=fHT$LH=׀  HO  A     RHEHO  PLD$ 1ZY9>ff.      HcAVL5$ HAUAATIUHSZaf        fAD$HՃtEE t=IAF2   tDH(HcЅ~1fr Hf fAD$u1fA$1[]A\A]A^ÐE f.     IrLs AɅdf.     HtOA ItA=   v-   Et>HHPF3  HL@ 
HHHHuu1  Hc уxDq ID  HtD9Do  u9D_  u    AWL= AVAUL-|u ATM  AUHSLHH|$D     fCHL9tOE    HAF2   tDHHcЅ   p Hf fCL9u@ H=q~  1H-M  H&M  fv IH=D~  LEAVHA  HM     H=~  PHELD$1H_L  ZYfD  E     1f3HL[]A\A]A^A_f     AT   UHHI ft)LH
7     AF  HfBfuH HLHP]   A\vfD  AWAVAUATUHSHH8  t$dH%(   H$(  1ƃx-HHc։HLHH)f HH9t<
t<
tH       H    HHC5 HD$HtHD$  Ld$IL5D M%       fAGH$   II9  AE tAIAF2   tǾ   LRHcȅ~n f fD  AE 뙐D$1fA  HL
~ LMDDfD  HL9  HtD=   v-   HHPF3  HLfD  
HHHHuf     D$ LH
.~ f   F      F-      H=b{  L%J  HJ  MH=>{  LELMIHJ  HEH={     1H$(  dH+%(   	  H8  []A\A]A^A_D  L9^fz S@ BHf"H/LITH	CAcM  AyHCHH  HHSH       0H!H9  H|$    HD$Lp@<
      L%H  H-I  A   L-gI  1LHH	CAF| 9,  I   <
t}H:vǋ
.l uH=y  /IEH=y  MEDD$LL$HLL$LDD$   H=gy  IE1L\1RHD   H=>y  L%H  HG  MxH=y  LE_AULA   HG  PHEH=x     I1H7G  ^_H{mAFIf.     1f$   LH=x  L%H  HAG  MH=fx  LELMIHrG  HE#H=2x  L%G  HF  MlH=x  LES|LAUA   HF  PHEyf     AVAUATUSH   +H   oHH       0 HCHEH!H9t>HE    H{H+HH#CH       PH	HC1[]A\A]A^H}xHEHHtHsH=!w  L%F  H-E  M[H=v  H[LE>gLMI؅H=v     HE  HE1[H=v  L-=F  L%dE  MH=v  H[MELMI؅H=av     HE  IE1:Hf.     AWAVAUATUHSHHLnLrLfLzH|$LLLL   LLLLA   H9tHL!I	LsLeH       HI!H       M	LcI!HD$L	`HE HMtLLL{LHEA   HCoE HCHEHSH       0H!H9tdHD[]A\A]A^A_fH9tHL!I	LeLsH       HL$LI!M	LuH#CH	AjA   fH       pH|$H       PH#GH9vDL$DL$bfD  H       pAVH       PAUIATI       @UHSHGHH!H9t"  HLHH   HCLuH       pH#EH       H9   H       PH9      `HH
  H       @AoE  IEHGH	@ HtHH HQHuH>HH9HQL9   HI#EHEHEH       I#UH	HEIUH       0H!H9uSIEHG1[]A\A]A^HH[]A\A]A^@ HCI3EH;H5HG    I}[1]A\A]A^@ HEYH=r  H-`B  HA  I
3H=r  MeLEHMMH=r     HA  HE1]D  AUL-g AL  ATL%t LUM$Ho  SI Ht Dgd Xf.     HL9tOH   =   v-   EtCHHPF3  HL
HHHHuL9u HL[]A\A]ÅxHc    HxE9u;D u      HL[]A\A]ff.     @     Lf @=zf tf  L     L[f HHLHPF3  Hs    HHff.     @ H1 fHfufD  E1f? HGt HAfx uDff.     f1
@ Hf9ufu@ )f1DB     GFftHf9uA9y1ff.     )f.     AWAVAUATIUSHHT$D5r IǅtuE   L-  1LfD  H D9tXH3LuLt$Mt"LcH5v>  L   A    H[]A\A]A^A_L-q  EtaD$    DM}A? t:    LH9|L)HcL7t;HcM|A? u̓D$D$I D9rH[]A\A]A^A_    H\$HtMeH5=  Lu   D$H[]A\A]A^A_H5=  LHL$H5h=  LuHD$    H5M=  LgHL$ff.      AWAVAUATIUSH(5p dH%(   HD$1f tk
  Hڎ 11L~  ,     
   uHcfAx   Hf9t8 uր    uփHf9u@t
  MM  =    Hl$L5p Hp~  ~g)  f     fAML  AF   u.AƄF  5o fAtFF~Hc=o fC       E,$E   M|$AntA\uD$    HID$HAf% tuIt$T$Dqt@t$It$Dq   HT$"AnfT$M$tbft$fL$}   B@tDЄDAnt*MfHD$dH+%(   u:H([]A\A]A^A_ÐH
   1HM$5@t$X1f.     HGHNftIftDHLFHGIHf.     H9s;I9s&BqHHf9t)fD  )D     f.     u1I9 SHH=5k  H=Ik  Iپ   Di  H
j  H:  1H=k  [     c ~6Hc c H
tf.     -i       HH=c 
tHfD  h      UHSH=c     uIH=h  Ht=Hh  @ H{HHt#HkuCb H[]    HxHb HHtHyH  []H=9         GVftfu) HvH;ff.     AWIAVAUATUSHHt$T$ 2
9    =Ol     D
|b LY E1IAAD$DT$uC  AIHA9t/A D9}'D9u1tHAt@8ts    H OHPIH4 D9rHH9uDA$      H\$AHFF3  Ht$0HD$(\$$   tHHw AT$HpH4VD  fD9rf 
  fD9r
f 
  HH9uHj 9|$A  L;F  Ll{FDd$HL|$8MEMfD\$
D  IA  Eo   D$HD HEF3  KD IEF3  HHrD$A$ 
  F(  A$   F#  A$F  A$   F-  A 
  f;T$rfA 
  A   f;t$rfA   fCF
  IIfCF  AVfTCFH_  BH_  Ho  BHo  AGD;|$Dd$D\$L|$8H|$(   LD\$HD$L$i D\$F(  L$ ƄF  F#  JƄF-   
ui L$fTCFfDCF
  fDCF  HD$0DH_  Ho  A?i ƄF2  D$$HH[]A\A]A^A_H=9f  Dd  1H
f  H==f  L
5     H5  H=f  =h D$$   A   HHD$(F3  D$   HD$0    H=e  >L
5  Dd  H
ye  1H85  H=e     H=e  D$$H=_e  L
#7  몐ATYt4Ač@Ѓv9Ax   AD$wH9  HcHD  A\   DA\@ APЃ   t݃
n  Hc]   J
] H
] f     HPЃ   	   P   E1q
u-b  HcL]   JE1
7] H
L] :@ FdFPЃ   FdA   D  A   D  A	   D  A
   D  A   D  WAA	DGPЃ	vPw_WA	@ A	7AD  A
   kD  -a  @ 
tHoD  Pw`7A	+D  H=)c  Da  1H
b  H=-c  L
5     H2  H=c  y@ AH=b  E1OD,a  1H
b  H=b  L
4     H=2  H=b  uff.     @ AWAVAUATU1SH  dH%(   H$  1Ld$`H$  [ Ƅ$   ID$    Ld$HD$ H$   HD$H:  (A߃2  D-Z A   E   A   X  A  .  D{   A      McH58  B>9   H8  B8Hy  t$fo=Z L@Z AD$It$      A#t,EAŃt=XIIcIDB uA#r  
tʃu
AŃufD-Y EY     1A       H8  ,(   D$1  |$u5tY     HL$H7  )     I9  IFH59  IItڃ   wHcH6  <uH~fo
X D$   ILA$@  fLcH5  B8   )ЈT$XHHLH8Hp@H|$(Ht$8D$07wkH4  HcHI,$   HHIxHcHHD$(H%  LH     H     HD$XLt$0H|$(HHH)LH)HyLaH    H#D$8H	HAH)5  H
7  :B8H   wHcH=[5  @:4  H
6  HHt$H<$BLrHD>I9   I)II^H'    H'  H9HNH$IHI|IHw  IHLHIHt$HMHLHD$ I9tLH$MMdIDI9u  L|$Ll$3Lt$E1    IA   L;t$ tL8H$  dH+%(   $  H  D[]A\A]A^A_A>2  A[        L=GV H;V H#  0V     cD$(^U  |$(]  HV @]\$X@ 3]tItDH=_ F2  _  \n  -  IHcЉD$(]uU \$Xt1D  IH: HH=   u~U   A       IcH5  D<f     FU A!~H     t DL   A"  H$
  \$(E1H0 D   HLSA
~UAM<w   HH  uL<n  DkHD\$0D\$0LSH0 D   AA
A|AEl  Hs\$(A H$
  DHAA~CD-HT  H=i[  "T DY  1H
-[  H=f[  L
,     H*  >H=G[  D  H12  HBD)T HT Eu)   
   HS H<!  S 
   M$   HS    LHLH    H!D$(@H    H#D$(HHD$(#IS   |$(
  |$(Hc+S   |$(PH5/S D$(S @<Ml$1LiI\$LffCHIEHM,$L?LffCIEHkf{_  H\$(cI\$E1I,$fDKHH    HffC    HEHC7f{uN\    HTHty1fK늋qR gR H-LR 9|I
HPR HHL,ILHR HHe  J(@3  1HcM$   HQ HLHHHHL"]   #H  HHD$(   HHD$0    #I,$HH  H=VX  L
(  DV  H
X  1H'  H=LX     2H=;X  H=P 5P    H
(H=1  5OJ vP     A$Z xI$HlH$  H=W  6L
1(  H=W  DV  1H0'  H
aW     H=W  fZ H    H#D$(HHD$(H    AD$H#T$(A$H	HT$(Ml$LHtGH=W  H=W  1DbU  H
V  L
r'     H|&  H=V  SAE h9  DO 1E\  @ H9zO H  HHHHeO @9uH=fV  DT  1H
1V  H=jV  L
'     H%  BH=KV  Ml$LHtGH=
V  H=V  1DiT  H
U  L
y&     H%  H=U  ZAE h9  N 1ۅ7  D  H9N "  HHHHmN @9uH=nU  DS  1H
9U  H=rU  L
&     H$  JH=SU  Lc-N Hc-NN A\- ;M |mK
H=M Hc
M HL$@H4HHM HH@  D$@1D)HHLIcHIHHH<L~KHD L
M LD KD IT I1HHdM @ H<I4H      HI9u;M uM     "M dM f  9CC
H=M  M HHL,ILHL HHY  L1L     ~LL L
L DC1Ҹ   fD  L HI<I4   H   HI9u>      HD$(HH  I,$H"V E F2     HHtGH=;S  H=OS  1DQ  H
R  L
&     H"  H= S  E H[D$0    U I,$      HHcH)H@ H< i  =   H=s 1H  |  t_U J
VU fFHH=   u?U Il$   HcH&    |  \  I$HH     M,$Hs 1f     L A
L L  
  AL H   HH   uLT Ld$@11MF   HH      |  t=   
  HcLD  H=   	  : tAT HcH5]T fARF
  fA[fADRFPT f^A{I\$Kf     AI<$At$fCL h   D  < tTu	A@THsnҸ  H5g D  < uF THsB      谿HH     H@    H5vg fxHx"Hǀ      H)  1H  I<$AT$ < tDu	FDHs  }K      HZ  HD$(ID$fxH     @    H@    uԋ=R    HcLHty1fPf     Il$HI\$HffC    HEH#E1f{HC    fDC&R    HTHjyfD  Q Il$   HcH%fD  |  `
  I$HL
     M,$Ht 1ҐL A
L  
  L    AL HHH   uLEQ Ld$@11MF   HH   C  |  t=     HcLD  H=     : tQ HcH=Q fARF
  fA[fADRFPP f_A{A$P I,$E tbH BHtN1<vH=M  9H=M  1D
L  H
rM  L
     H'  芽H=M  
   1H诼f P I,$HH
  H=6M  L
   I,$HɻH  H=M  蓼L
   I,$H5  H  H5  H  H=  y   蟼HcE HHD$HH  LhHD$PA}  L  H(H\; uHL)D$@I,$t$\Ht$\
pE t9|ADL4A5XE ˻Ht$PHFHC  Ht$HHT0Hr  HcD$@HHHtH蜺HD OHcD Il$H5
  IT$HHHܝ  HHHh@ Ѻ"  H5  H躺  H5  H裺  H5  H茺t&H5  HytH5  HfuE sgmlE H5  HHt=H5  H5t*H5  H"tH5  H  C M sC Il$H= W

    =pM   HEM   I<$F2   t     H=UJ  L
  H=bJ  DH  1H  H
J     1H=:J  襹H}I<$tI,$H裸
     =L   p
  H=I  VL
  pL I,$      HHcH)H     H<   =   H=zy 1H  |  t7L J
.L fFHH=   uIl$HܷM,$HLͷII9  H=I  蓸L
  H=I  DbG  1H  H
H     H=H  XH0L(cA D-A H-ǚ  D9|1E*
  @  HH-  H  A
D-A M,$L
D| HcH=pA HHEHH  L訶LжHULD H=@ 5@    H
1H=  5D: o@     Lt$A   L%  H=G  H9DF  M   H
sG  H=G  H-  1获H=G  H     LJ |  MF  u   fD  L%b  H=2G  H蹶DE  M   H
F  H=,G  H  1H=G  肶H     LI |  MF  u   V=   M=   i{fL$
     Hl$0L툄$
  AD  t   Hbr  D HH
   $
  H5H D  AF2  tf|$(u8ID$(-   @-Ih8 D$(Hl$0   .  ]%  \p	  9D$(&HcL$(HQ)H HI7HH9uD$(`3ID$(HIIHl$0	   HcЃL
  II)L HH5>> 
> IL9tzAU 
u-C  Hc= uH=E  蓴DpC  1H
D  H=E  L
     H  H=D  XDIHl$0N$
  I@-Hc{=   PH== D$(-   Z= -EHcJ= \$($
  HH5O= 
-= D,j= ~CH=D= At$ЉLJHGHH0  @ fH   fH9uL[H=C  Lt$A   _D<B  1H
C  H=C  L
     HM  谳H=C  $MA   ,A   A< mH5n< H<HHFHH0  @ 1fH   fH9u)Ld$@=   DHcHl$@ILI\    )LLf.     HH9tN; tH=B  VD3A  1H
B  H=B  L
     HD  觲H=B  Hl$@Ld$@=   HcHl$@ILI\    )LLD  HH9t; tH=3B  辱D@  1H
A  H=7B  L
9     H  H=B  胱:    D$(H=A  ]D:@  1H
A  H=A  L
     HK  讱H=A  "wH=A  D?  1H
QA  H=A  L
     H  bH=kA  ְsH=:A  ŰD?  1H
A  H=>A  L
?     H  H=A  芰RH=@  yDV?  1H
@  H=@  L
+     Hg  ʰH=@  >.-?  OE C .f=PC    f=C Af92  f)C 
3    =#C     H=2@  软L
	  %H$
  L$  HD$(I    AE I   "tM9tS\uAE  M}D+|$(?H8 HH  Ht$(A  r8   H=?  Ƅ$   	D=  1H
I?  H=?  L
     H  ZH=c?  ή@ t\tl9"uL$  LAE  H=?  M}蒮Do=  1H
>  H=?  L
     H  H=>  WmH=>  ?D=  1H
>  H=>  L
     H-  萮H=>  D$(-   ?Au
H=  HcHH   HH=)A H=(>  賭L

  H=>  蛭Dx<  1H
=  H=>  L
     H
  H==  `   H޷AEbHZI9tGH==  )H==  1D;  H
b=  L
3     H
  zH==  /    WH=C=  άD;  1H
=  H=G=  H     L
  H=(=  蓬      H=<  xDU;  1H
<  H=<  L
z
     Hf  ɬH=<  =H=<  ,L
[  G
   HH=v? <n   E plaifE;11H  H
AS  < u	AD HsH=<  被L
  
H=;  芫L

  E tex H=;  fL

  H=;  NL
?  H=;  6D:  1H
v;  H=;  L

     H$  臫H=;  D$(.<>    HTHyH=-;  踪D9  1H
:  H=1;  L
     H
  	H=;  }= AxH=:  bL
  }Ld$@f   E nroffE   1LÅ1Ҿ   H19H'= HcfJF
  HfBF  H=F:  ѩL
  9H=.:  D\$0LT$(诩D8  1H
9  H=(:  L
     H	   H=	:  tLT$(D\$0-D$@    1dC
   2     Hc2 ƨH2 HH=G	  J   p11H + 9r	+ Hc҉H_  7H=E9  ШD7  1H
9  H=I9  L
     H  !H=*9  蕨#2 #   HcV+ HH  P   菧ff.     @ ATIUSdxH)H8  H   HHSLH5	  LKH1 Ht6     1[]A\fD  H=q8  H-  赧ަL  LH=M8  H	     LD1$H   H
8  #      H=E     Χff.      H= 1  p  H: 1f     f 
    Hf  fJ=   uH=X 1H
X HuX     HHl HWl     H)   HH=Ql H
Bl H7l     H$m     HH)   H HH=   uH=
 1H
 H     HHҸ     H)   H9 *H()[]{}<>H9 1f9 H  
 ~9 ().\9 \$*.~9 %HR9    o9 /fl H9 9  H[6  H|/ }f.     D  AWL=?1  AVIAUIATAUH-01  SL)HCHt1 LLDAHH9uH[]A\A]A^A_    HH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Usage:  icombine [-T suffix] [aff-file] < wordlist
     %s
Word '%s' too long at line %d of %s, truncated%s
    icombine:  unrecognized formatter type '%s'
 
 icombine.c default.aff plain tex nroff sgml makedent.c   %s
Word '%s' contains illegal characters%s
     %s
Couldn't allocate space for word '%s'%s
     %s
Illegal affix flag character '%c'%s
 %s line %d: %s
 Out of memory String character is too long Too many string characters raw_display squeeze_strings Illegal option Unmatched charset lengths none TeX troff HTML html SGML No such string character Illegal digit in number Flag must be single character Flag must be alphabetic Duplicate flag syntax error memory exhausted Can't open %s%s
 allaffixes altstringchar altstringtype boundarychars compoundmin compoundwords controlled defstringtype flagmarker nroffchars troffchars options prefixes suffixes TeXchars texchars wordchars (stdin)    String character must have nonzero length       Internal error:  ungrab buffer overflow wordchars statement may not specify string characters   boundarychars statement may not specify string characters       Upper and lower versions of string character must be same length        Deformatter must be 'plain', 'nroff', 'tex', or 'sgml'  Incorrect character count in nroffchars statement       Incorrect character count in TeXchars statement Compoundwords option may only appear once       Single characters must be separated by a blank  Too many conditions;  8 maximum Unexpected EOF in quoted string Quoted string too long, max 256 characters      yyopen:  trouble allocating memory
     pvvv`vvvvvvv vvvvv5Nr-Ry}iPAdU" (yF$                                   !!!!""####$$%&&'(()******++++,--.//01111111222334444567788899::;;<<<<==>>?                   8 

	ioL ;=<	2-
/
MO
\

gX _b57QW)
G`                              :i<;=+N+2lpDEm	
+,qj,N@
jFj,:!:ODEKII$&'W:	T
V
d(0dc13
f
c"7
	ABS`JPaehVnoLMZ5b6#4?C/ >Ug                              8)*9%QRXY[-.GH\]^_k                               g?T>%!ivlcht:"쩩                                                
  6732-/10* + .(>  : )	  45, AB  ?;
$!"I @ %#K<C JI  &D L=' ME  H GF              (LP.7;X=W@JOMN.	QWWRd&W8ReSffkUfon
               	

 ;|  .           x    xH  8  H  X  h   \      h    ȟ    8|      $  xL      8D  h  x       84  hH  \    (  h<  X  (t  ػ    X	  80	  	  	  x	  
             zR x      +                  zR x  $      8   FJw ?;*3$"       D                 \   h+    D(   p       BHA [
ABGh      (   BIB I(H0A8GZWAo]Zg
8A0A(B BBBA  ,     <   BDD 
BBF      8  L          L  H          `  D       8   t  @    BHD D(F0Y
(I ABBI 4         BHH q(a0X(A AAB            T      Ԛ            )          (  )       0   <  ؛    _Nr
APS
AGD \   p     BBE B(H0A8I 
8A0A(B BBBILMA <         ELE D(D0v
(D BBBB        $       P   $  G   BIB I(K0D8GPX_`XXAPa8D0A(B BBB$   x  ܢj    BFG EJGh     $w   BBB B(A0D8JY
8A0A(B BBBFSbF
PI <     8   BBB A(A0p
(A BBBA   H   L     BBB B(A0D8GP
8D0A(B BBBC `     +   LLE K(D0
(A BBBAT
(A BBBEr
(C BBBE  H        BSK I(K0
(D ABBAw(D ABB     H  |a    yg    `  ԭ          t  #            .            F       x     T   BBB B(D0C8DP
8A0A(B BBBAq
8F0A(B BBBHo
8A0A(B BBBAL   ,  F   BBB B(D0A8D`
8A0A(B BBBB       |  }            $H    AB       Xi    DU
G 4         ADD M
AAHk
FAA       $%       L     @O   BEB B(A0A8DD
8A0A(B BBBA      d  @   BI
E   L      )   BBB B(A0C8G
8D0A(B BBBA   ,     `    BDA W
ABG                   D     ]    BIE E(D0H8G@j8A0A(B BBB    d                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           @                                 
       k             ؜                                               o                 h                   
                                                 ؞                                                     	                   	                            o          o    H	      o           o          o                                                                                                                 6      F      V      f      v                                                                  &      6      F      V      f      v                                                                                                            P                          r            r            r            r            r            s            s             s      	      r      
      .s            9s            Ds            q            p      
      Os            Ws            r            `s            is            rs            {s                            s      /usr/lib/debug/.dwz/x86_64-linux-gnu/ispell.debug tgJhU  fac94b69b7e972ec3a26ef275076635888bf25.debug    }J .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .gnu_debugaltlink .gnu_debuglink                                                                                                                                        8      8                                     &             X      X      $                              9             |      |                                     G   o                   4                             Q                                                   Y             h      h                                   a   o                   L                            n   o       H	      H	      `                            }             	      	                                       B                                                                                                                                                                                                                                              Y                                          k      k      	                                            p       p                                                 |      |      |                                          }      }                                                ؜      ،                                                                                                                                                          ؞      ؎      (                                                                                                              @                                                         F                              
                           4                                                    $                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ELF          >    @      @       A          @ 8 
 @         @       @       @                                                                                                     
      
                                        M      M                    0       0       0      H      H                   @=      @M      @M            h                   P=      PM      PM                               8      8      8                                   X      X      X      D       D              Std   8      8      8                             Ptd   1      1      1                           Qtd                                                  Rtd   @=      @M      @M                         /lib64/ld-linux-x86-64.so.2              GNU                     GNU QSU㖸O'3+x*         GNU                                           (emfUa9                                                                         J                                            y                      ^                                            D                                                                                                               =                      d                      Q                      /                                                                                        r                                             W     @P                "                   7     PP             k     `P              exit fopen perror putc ftell __stack_chk_fail realloc stdin strtol fgets strlen fseek stdout fputs malloc stderr fwrite strchr __cxa_finalize strcmp __libc_start_main free libc.so.6 GLIBC_2.4 GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable                                          ii
         ui	          @M                    HM                   P             P      P             0       P             0      O                    O                    O                    O                    O                    (P         	           @P                    PP                    `P                    XO                    `O                    hO                    pO                    xO                    O                    O         
           O                    O         
           O                    O                    O                    O                    O                    O                    O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    HH?  HtH         5"?  %$?  @ %"?  h    %?  h   %?  h   %
?  h   %?  h   %>  h   %>  h   %>  h   p%>  h   `%>  h	   P%>  h
   @%>  h   0%>  h    %>  h
   %>  h    %>  h   %>  f        AWAAVIAUATUSH~eH-(?  IV:-  BAOMna<  H  HcHf     H  MAHt>  @ AAd       I~?-O   E  Hb>  H-n  H>  I~HH>  HK  H=>  H^  
Z>  =  H5=    H=Q>  IQIHx  
*>  =  E1H5=  H=>    HLH	tM  =  A9$  H  =  9E   Eu  AH!  H==  
=  )=  H5*=  H==  I  HLH	u1H[]A\A]A^A_    H%<  MAH<  { H  MAH<  _    AHcHPH	=  HH  <      EgIAun  .uqHc<  01HL,I׺
   AE AU pAuHc;t rD AAIFD=|<  AII>PπvIIE|$:-A_      B<1   <2   uI~
   1P'<  %<  AI<@ IFAIH;        B<1t<2t,x;     ;     MAD  ;     MA I~
   1;  aI~
   1i;  CH-0  HH^;  HI~    HQ;  tH=;     1L5  L]	  
:  q:  H5r:  H=:  ^  IfD  Ht:  9U HMH4IT$H<1;:    H=:   e  HL  HA  
l:  9  H59  H=d:  
  HHt2I:  9E v'HUH4ID$5:  H<19  H=:  1LLHd  
9  x9  H5y9  H=9  e
  LH:  
9  N9  H5O9  H=9  ;
  IHH9  A9$9  9U HMH4IT$H<19      DDWfD  29  H=29   b  H1b  dD  &9  ID$1H58  H<A4$uYH=8  A;$sC98  tHd8  H58  8IT$H5o8  H<? tA;$rM 1ۅuZD  H=!8  l;] sA9~8  tH7  H58  8fHUH5	8  H<? t+;] rH57  
   2I~H=-8  HtH=8      zH7  H=7  L  MH[7  H=|7  Hq  H
7        H=y  /H=     	\H
G7        H=!         1I^HHPTL  H
  H=v6  D  H=6  H6  H9tHN6  Ht	        H=6  H56  H)HH?HHHtH%6  HtfD      =}6   u+UH=6   HtH=6  )dU6  ]     w    1@ H8uufD  )f1@ H8uufD  )fHB      H
5  H=\  o   UD  5     ATIUHS12@ H=95  H95  H5C5  ~QH5  8Hk5  H5$5  HH:IDHtR;sH@H<Ѐ? t(fD  [
   ]A\2fH54  
   f.     D  Hօu7HHPH \߀Xu=PЀHwUL&  IcLfuHHPH  1f     PЀvHHBHHHPH    0GD@HGAT    HH9       H1HLFLDBDH9u)fDGAPЀ	   A@<2  AWHGADGEHA	!  A0HED	p@ HHPH    D  HHPH 
   D  HHPH 
   D  HHPH    D  HHPH    D  HHPH    D  H1)LFLf     DGHGEH DWEHGD	EBAEHGD	x@ A@<vPHG1EHAwAWHED	EEHA6A7HED	 A7HGADGEHqfD  1D  AVIAUAATE1UHS1ۅtL@ HELH<A	9] v"tLDA	D  Eu[D]A\A]A^D  L
   []A	DA\A]A^ff.     Ht+UHHHt)H}HtH]fff.     @ AWI   AVAUAATUHSH8DD$dH%(   HD$(1XIH       1ELID$    IEAD$    ID$HcA|
uAD$   HA L$A  D$   @   ID$H   ډ؃D؉AރAD$A^D$@ L$/  A$ID$L|$ L<IՋT$C  Au~  fD  AtHLIHtIL|$ AIE,$b  D$t	D9   HD$   D$A9$[d$t$I|$HID$H7I|$Ht8I|$Ht)LE1HD$(dH+%(     H8L[]A\A]A^A_     HLIHa  AuE,$ID$J    뜍y|$HWf.     EEK  AHl$DA@ HD$ HPA_IHT$   H|$H  Et'tP@t`tE@t"t:I\uEtA    Ht$  RLcIAfD  D$uA$ID$L9<uAA uHD$ HPHT$ AWIwu#^fD  HD$ HHHL$ At@LL~8   \uEtG~   DLHt$ HIAuE,$HD$ AE,$  E,$j HT$ \NHBHD$    HBJHD$ jfEuHD$ HPHT$ D$^stl$LL|$f     ] dLHHHt݋l$I&fD  E,$Hl$AIhHD$ E,$fD  ALE,$	LLE1HD$ AAWAAVAUATI   USHH4$T$H   I1۽   /D  LHcA|
t1LHcnIHtNHcLMt= )LHut&L$H$HE[L]   A\A]A^A_pLhH1[]A\A]A^A_    AWL=W(  AVIAUIATAUH-H(  SL)HHt1 LLDAHH9uH[]A\A]A^A_    HH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Usage:  ijoin [-an] [-e s] [-jn m] [-o n.m ...] [-tc] file1 file2
 ijoin:  out of memory!
 r ijoin:  Can't seek file  2  	  @@@@@@@@((((((((((((((((((((((((((((((((((((((((Ph((((((((((((( (((8(;      $   4   Dx  D   4  d   4  H    D  $  4@      D4         zR x      +                  zR x  $      P   FJw ?;*3$"       D   8              \    .          p   <.             X+    D,      t    PDD yFB   H         BEE B(A0A8D@
8A0A(B BBBH           H   (  d    BEE D(D0\
(D BBBFN(A QBB   t  1    Fc  H        BJB E(A0D8Fp
8D0A(B BBBI\         BEB B(I0A8DP}
8D0D(G BBBEL8C0A(B BBBD   <  ]    BIE E(D0H8G@j8A0A(B BBB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
       D%             @M                           HM                    o                 H                   
                                                 @O                                        	                          P      	                            o          o          o           o    Z      o                                                                                           PM                      6      F      V      f      v                                                                  &                                                      P             0      0              /usr/lib/debug/.dwz/x86_64-linux-gnu/ispell.debug tgJhU  c95355b1c4f2e396b84f9727fe33f12b782ab5.debug    !( .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .gnu_debugaltlink .gnu_debuglink                                                                                                                                        8      8                                     &             X      X      $                              9             |      |                                     G   o                   4                             Q                         p                          Y             H      H                                   a   o       Z      Z      4                            n   o                   0                            }                         P                                 B       	      	                                                                                                                                                             0      0                                                @      @                                                D%      D%      	                                            0       0                                                1      1                                                 2      2                                                @M      @=                                                HM      H=                                                PM      P=                                              @O      @?                                                 P       @      0                                           @P      0@      h                                                     0@      F                              
                     x@      4                                                    @                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #!/bin/sh
#
# $Id: munchlist.X,v 1.70 2015-02-08 00:35:41-08 geoff Exp $
#
# Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning,
# Claremont, CA.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All modifications to the source code must be clearly marked as
#    such.  Binary redistributions based on modified source code
#    must be clearly marked as modified versions in the documentation
#    and/or other materials provided with the distribution.
# 4. The code that causes the 'ispell -v' command to display a prominent
#    link to the official ispell Web site may not be removed.
# 5. The name of Geoff Kuenning may not be used to endorse or promote
#    products derived from this software without specific prior
#    written permission.
#
# THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#	Given a list of words for ispell, generate a reduced list
#	in which all possible affixes have been collapsed.  The reduced
#	list will match the same list as the original.
#
#	Usage:
#
#	munchlist [-l lang] [-c lang] [-s hashfile] [-D] [-w chars] [-v] \
#	  [file] ...
#
#	Options:
#
#	-l lang	Specifies the language table to be used.  The default
#		is "$LIBDIR/default.aff".
#	-c lang	Specifies "conversion" language table.  If this option is
#		given, the input file(s) will be assumed to be described by
#		this table, rather than the table given in the -l option.
#		This may be used to convert between incompatible language
#		tables.  (When in doubt, use this option -- it doesn't
#		hurt, and it may save you from creating a dictionary that has
#		illegal words in it).  The default is no conversion.
#	-T suff Specifies that the source word lists are in the format
#		of a "suff"-suffixed file, rather than in the
#		canonical form.  For example, "-T tex" specifies that
#		string characters in the word lists are in TeX format.
#		The string character conversions are taken from the language
#		table specified by the "-l" switch.
#	-s	Remove any words that are already covered by the
#		dictionary in 'hashfile'.  The words will be removed
#		only if all affixes are covered.  This option should not be
#		specified when the main dictionary is being munched.
#		'Hashfile' must have been created with the language
#		table given in the -l option, but this is not checked.
#	-D	Leave temporary files for debugging purposes
#	-w	Passed on to ispell (specify chars that are part of a word)
#		Unfortunately, special characters must be quoted twice
#		rather than once when invoking this script.  Also, since
#		buildhash doesn't accept this option, the final ispell -l
#		step ignores it, making it somewhat less than useful.
#	-v	Report progress to stderr.
#
#	The given input files are merged, then processed by 'ispell -c'
#	to generate possible affix lists;  these are then combined
#	and reduced.  The final result is written to standard output.
#
#	For portability to older systems, I have avoided getopt.
#
#		Geoff Kuenning
#		2/28/87
#
# $Log: munchlist.X,v $
# Revision 1.70  2015-02-08 00:35:41-08  geoff
# Be a bit more paranoid about creating temporary files.  Fix a problem
# with detecting a new-style sort that refuses to be backwards
# compatible (and yes, it's still cretinism to break backwards
# compatibility--but I have to put up with the cretins).
#
# Revision 1.69  2005/04/28 14:46:51  geoff
# Remove references to the now-obsolete count file.
#
# Revision 1.68  2005/04/27 01:18:34  geoff
# Work around idiotic POSIX incompatibilities in sort.  Add secure
# temp-file handling.
#
# Revision 1.67  2005/04/14 23:11:36  geoff
# Pass the -w switch to icombine.
#
# Revision 1.66  2005/04/14 21:25:52  geoff
# Make the temporary-file handling safer (using mktemp, if it exists).
#
# Revision 1.65  2005/04/14 14:39:33  geoff
# Use /tmp as the default temp directory
#
# Revision 1.64  2005/04/14 14:38:23  geoff
# Update license.  Protect against modernized (i.e., incompatible) and
# internationalized sort commands.  Change the debugging names of the
# minimal-affixes count and stat files.
#
# Revision 1.63  2002/06/20 23:46:16  geoff
# Add yet more locale definitions so that we won't run into bugs caused
# by sorting inconsistencies.
#
# Revision 1.62  2001/09/06 00:30:28  geoff
# Many changes from Eli Zaretskii to support DJGPP compilation.
#
# Revision 1.61  2001/07/25 21:51:46  geoff
# Minor license update.
#
# Revision 1.60  2001/07/23 20:24:04  geoff
# Update the copyright and the license.
#
# Revision 1.59  2001/06/07 08:02:18  geoff
# Fix a copule of typos in comments.
#
# Revision 1.58  2000/11/14 07:27:04  geoff
# Don't generate an extra dot when attempting to preserve the count
# files in -D mode.
#
# Revision 1.57  2000/10/06 23:59:48  geoff
# Don't assume dot is in the path
#
# Revision 1.56  1999/01/07 01:22:42  geoff
# Update the copyright.
#
# Revision 1.55  1997/12/02  06:25:01  geoff
# Start the cross-expansions loop count at 1, not zero.
#
# Revision 1.54  1997/12/01  00:53:52  geoff
# Abort the munchlist cross-product loop if it goes over 100 passes.
#
# Revision 1.53  1995/01/08  23:23:36  geoff
# Support variable hashfile suffixes for DOS purposes.
#
# Revision 1.52  1994/12/27  23:08:46  geoff
# Dynamically determine how to pass backslashes to 'tr' so that it'll
# work on any machine.  Define LC_CTYPE to work around yet more
# internationalized sort programs.  Work around a bug in GNU uniq that
# uses the wrong separator between counts and duplicated lines.
#
# Revision 1.51  1994/11/21  07:02:54  geoff
# Correctly quote the arguments to 'tr' when detecting systems with
# unsigned sorts.  Be sure to provide a zero exit status on all systems,
# even if MUNCHDEBUG is not set.
#
# Revision 1.50  1994/10/25  05:46:05  geoff
# Export values for LANG and LOCALE in an attempt to override some
# stupidly-internationalized sort programs.
#
# Revision 1.49  1994/10/04  03:51:30  geoff
# Add the MUNCHMAIL feature.  If the MUNCHMAIL environment variable is
# set to an email address, debugging information about the munchlist run
# will automatically be collected and mailed to that address.
#
# Revision 1.48  1994/05/17  06:32:06  geoff
# Don't look for affix tables in LIBDIR if the name contains a slash
#
# Revision 1.47  1994/04/27  02:50:48  geoff
# Fix some cosmetic flaws in the verbose-mode messages.
#
# Revision 1.46  1994/01/25  07:11:59  geoff
# Get rid of all old RCS log lines in preparation for the 3.1 release.
#
#

LIBDIR=/usr/lib/ispell
TDIR=${TMPDIR-/tmp}
MUNCHDIR=`mktemp -d ${TDIR}/munchXXXXXXXXXX 2>/dev/null`  ||  { echo "$0: Failed to create temporary directory, exiting..." 1>&2; exit 1; }
TMP=${MUNCHDIR}/munch.
MAILDEBUGDIR=${MUNCHDIR-/tmp}
if [ "X$MUNCHMAIL" != X ]
then
    exec 2> ${MAILDEBUGDIR}/munchlist.mail
    echo "munchlist $*" 1>&2
    set -vx
fi
SORTTMP="-T ${TDIR}"			# !!SORTTMP!!

DBDIR=${MUNCHDEBUGDIR-$MAILDEBUGDIR}

# Detect MS-DOS systems and arrange to use their silly suffix system
if [ -z "$COMSPEC$ComSpec" ]
then
    EXE=""
else
    EXE=".exe"
fi

#
# Set up some program names.  This prefers the versions that are in
# the same directory as munchlist was run from; if that can't be
# figured out, it prefers local versions and finally ones chosen from
# $PATH.
#
# This code could be simplified by using the dirname command, but it's
# not available everywhere.  For the same reason, we use -r rather than
# -x to test for executable files.
#
case "$0" in
    */*)
	bindir=`expr "$0" : '\(.*\)/[^/]*'`
	;;
    *)
	bindir='.'
	;;
esac
if [ -r $bindir/buildhash$EXE ]
then
    BUILDHASH=$bindir/buildhash$EXE
elif [ -r ./buildhash$EXE ]
then
    BUILDHASH=./buildhash$EXE
else
    BUILDHASH=buildhash
fi
if [ -r $bindir/icombine$EXE ]
then
    COMBINE=$bindir/icombine$EXE
elif [ -r ./icombine$EXE ]
then
    COMBINE=./icombine$EXE
else
    COMBINE=icombine
fi
if [ -r $bindir/ijoin$EXE ]
then
    JOIN=$bindir/ijoin$EXE
elif [ -r ./ijoin$EXE ]
then
    JOIN=./ijoin$EXE
else
    JOIN=ijoin
fi
if [ -r $bindir/ispell$EXE ]
then
    ISPELL=$bindir/ispell$EXE
elif [ -r ./ispell$EXE ]
then
    ISPELL=./ispell$EXE
else
    ISPELL=ispell
fi

# In one of the most incredibly stupid decisions of all time, some
# genius decided to break backwards compatibility by "deprecating" the
# old-style sort switches even though it was trivial to recognize both
# styles.  The result is that that thousands of people (like me) will
# have to rewrite shell scripts to tolerate that stupidity.  (It's not
# that the new syntax is bad--it's definitely easier to understand.
# But that doesn't excuse breaking compatibility.)
#
CRETIN_SORT=true

#
# The following is necessary so that some internationalized versions of
# sort(1) don't confuse things by sorting into a nonstandard order.
#
LANG=C
LOCALE=C
LC_ALL=C
LC_COLLATE=C
LC_CTYPE=C
export LANG LOCALE LC_COLLATE LC_CTYPE
#
# The following aren't strictly necessary, but I've been made paranoid
# by problems with the stuff above.  It can't hurt to set them to a
# sensible value.
LC_MESSAGES=C
LC_MONETARY=C
LC_NUMERIC=C
LC_TIME=C
export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME

debug=no
dictopt=
langtabs=${LIBDIR}/default.aff
convtabs=
strip=no
icflags=
verbose=false
# The following value of "wchars" is necessary to prevent ispell from
# receiving a null argument if -w is not specified.  As long as "A" is
# a member of the existing character set, ispell will ignore the argument.
wchars=-wA
while [ $# != 0 ]
do
    case "$1" in
	-l)
	    case "$2" in
		*/*)
		    langtabs=$2
		    ;;
		*)
		    if [ -r "$2" ]
		    then
			langtabs="$2"
		    else
			langtabs="${LIBDIR}/$2"
		    fi
		    ;;
	    esac
	    if [ ! -r "$langtabs" ]
	    then
		echo "Can't open language table '$2'" 1>&2
		rm -rf $MUNCHDIR
		exit 1
	    fi
	    shift
	    ;;
	-c)
	    if [ -r "$2" ]
	    then
		convtabs="$2"
	    elif [ -r "${LIBDIR}/$2" ]
	    then
		convtabs="${LIBDIR}/$2"
	    else
		echo "Can't open conversion language table '$2'" 1>&2
		rm -rf $MUNCHDIR
		exit 1
	    fi
	    shift
	    ;;
	-s)
	    dictopt="-d $2"
	    strip=yes
	    shift
	    ;;
	-D)
	    debug=yes
	    ;;
	-T)
	    icflags="-T $2"
	    shift
	    ;;
	-v)
	    verbose=true
	    ;;
	-w)
	    wchars="-w$2"
	    shift
	    ;;
	--)
	    shift
	    break
	    ;;
	-)
	    break
	    ;;
	-*)
	    echo 'Usage: munchlist [-l lang] [-c lang] [-T suff] [-s hashfile] [-D] [-w chars] [-v] [file] ...' \
	      1>&2
	    rm -rf $MUNCHDIR
	    exit 2
	    ;;
	*)
	    break
	    ;;
    esac
    shift
done
if [ "X$MUNCHMAIL" != X ]
then
    verbose=true
    debug=yes
fi
trap "rm -rf $MUNCHDIR; exit 1" 1 2 13 15
#
# Names of temporary files.  This is just to make the code a little easier
# to read.
#
EXPANDEDINPUT=${TMP}a
STRIPPEDINPUT=${TMP}b
CRUNCHEDINPUT=${TMP}c
PRODUCTLIST=${TMP}d
EXPANDEDPAIRS=${TMP}e
LEGALFLAGLIST=${TMP}f
JOINEDPAIRS=${TMP}g
MINIMALAFFIXES=${TMP}h
CROSSROOTS=${TMP}i
CROSSEXPANDED=${TMP}j
CROSSPAIRS=${TMP}k
CROSSILLEGAL=${TMP}l
ILLEGALCOMBOS=${TMP}m
FAKEDICT=${TMP}n
# Ispell insists that hash files have a ".hash" suffix
FAKEHASH=${TMP}o.hash
AWKSCRIPT=${TMP}p
# If the file exists than we should exit with error
ERRORFLAGFILE=${TMP}z
if [ "$debug" = yes ]
then
    touch $EXPANDEDINPUT $STRIPPEDINPUT $CRUNCHEDINPUT $PRODUCTLIST \
      $EXPANDEDPAIRS $LEGALFLAGLIST $JOINEDPAIRS $MINIMALAFFIXES \
      $CROSSROOTS $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL $ILLEGALCOMBOS \
      $FAKEDICT $FAKEHASH $AWKSCRIPT
    rm -f ${DBDIR}/EXPANDEDINPUT ${DBDIR}/STRIPPEDINPUT \
      ${DBDIR}/CRUNCHEDINPUT ${DBDIR}/PRODUCTLIST ${DBDIR}/EXPANDEDPAIRS \
      ${DBDIR}/LEGALFLAGLIST ${DBDIR}/JOINEDPAIRS ${DBDIR}/MINIMALAFFIXES \
      ${DBDIR}/CROSSROOTS ${DBDIR}/CROSSEXPANDED ${DBDIR}/CROSSPAIRS \
      ${DBDIR}/CROSSILLEGAL ${DBDIR}/ILLEGALCOMBOS ${DBDIR}/FAKEDICT \
      ${DBDIR}/FAKEHASH.hash ${DBDIR}/AWKSCRIPT \
      ${DBDIR}/CROSSROOTS.[0-9]* ${DBDIR}/CROSSEXP.[0-9]* \
      ${DBDIR}/CROSSPAIRS.[0-9]* ${DBDIR}/CROSSILLEGAL.[0-9]*
    ln $EXPANDEDINPUT ${DBDIR}/EXPANDEDINPUT
    ln $STRIPPEDINPUT ${DBDIR}/STRIPPEDINPUT
    ln $CRUNCHEDINPUT ${DBDIR}/CRUNCHEDINPUT
    ln $PRODUCTLIST ${DBDIR}/PRODUCTLIST
    ln $EXPANDEDPAIRS ${DBDIR}/EXPANDEDPAIRS
    ln $LEGALFLAGLIST ${DBDIR}/LEGALFLAGLIST
    ln $JOINEDPAIRS ${DBDIR}/JOINEDPAIRS
    ln $MINIMALAFFIXES ${DBDIR}/MINIMALAFFIXES
    ln $CROSSROOTS ${DBDIR}/CROSSROOTS
    ln $CROSSEXPANDED ${DBDIR}/CROSSEXPANDED
    ln $CROSSPAIRS ${DBDIR}/CROSSPAIRS
    ln $CROSSILLEGAL ${DBDIR}/CROSSILLEGAL
    ln $ILLEGALCOMBOS ${DBDIR}/ILLEGALCOMBOS
    ln $FAKEDICT ${DBDIR}/FAKEDICT
    ln $FAKEHASH ${DBDIR}/FAKEHASH.hash
    ln $AWKSCRIPT ${DBDIR}/AWKSCRIPT
fi


run()
{
  "$@" || {
    status=$?
    touch "$ERRORFLAGFILE"
    echo "$@ failed with $status" > "$ERRORFLAGFILE"
    exit $status
  }
}

checkerrorflagfile()
{
  [ ! -e "$ERRORFLAGFILE" ] || {
   cat "$ERRORFLAGFILE" 1>&2
   rm -rf $MUNCHDIR
   exit 1
  }
}

rm -f "$ERRORFLAGFILE"
JOIN="run $JOIN"
COMBINE="run $COMBINE"
ISPELL="run $ISPELL"
set -e

#
# Create a dummy dictionary to hold a compiled copy of the language
# table.  Initially, it holds the conversion table, if it exists.
#
case "X$convtabs" in
    X)
	convtabs="$langtabs"
	;;
esac
echo 'QQQQQQQQ' > $FAKEDICT
$BUILDHASH -s $FAKEDICT $convtabs $FAKEHASH \
  ||  (echo "Couldn't create fake hash file" 1>&2; rm -rf $MUNCHDIR; exit 1) \
  ||  exit 1
#
# Figure out how 'sort' sorts signed fields, for arguments to ijoin.
# This is a little bit of a tricky pipe, but the result is that SIGNED
# is set to "-s" if characters with the top bit set sort before those
# without, and "-u" if the reverse is true.  How does it work?  The
# first "tr" step generates two lines, one containing "-u", the other
# with the same but with the high-order bit set.  The second "tr"
# changes the high-bit "-u" back to "-s".  If the high-bit "-u" was
# sorted first, the sed step will select "-s" for SIGNED; otherwise
# it'll pick "-u".  We have to be careful about backslash quoting
# conventions, because some systems differ.
#
backslash=\\
for i in 0 1 2 3
do
    if [ `echo a | tr "${backslash}141" b` = b ]
    then
	break
    fi
    backslash="$backslash$backslash"
done
SIGNED=`echo '-s
-u' | tr s "${backslash}365" | sort | tr "${backslash}365" s | sed -e 1q`
#
# Collect all the input and expand all the affix options ($ISPELL -e),
# and preserve (sorted) for later joining in EXPANDEDINPUT.  The icombine
# step is to make sure that unneeded capitalizations (e.g., Farmer and farmer)
# are weeded out.  The first sort must be folded for icombine;  the second
# must be unfolded for join.
#
$verbose  &&  echo "Collecting input." 1>&2
if $CRETIN_SORT
then
    sortopts='-k 1f,1 -k 1'
else
    sortopts='+0f -1 +0'
fi
if [ $# -eq 0 ]
then
    $ISPELL "$wchars" -e1 -d $FAKEHASH -p /dev/null | tr " " '
'
else
    cat "$@" | $ISPELL "$wchars" -e1 -d $FAKEHASH -p /dev/null | tr " " '
'
fi \
  | sort $SORTTMP -u $sortopts \
  | $COMBINE $icflags "$wchars" $langtabs \
  | sort $SORTTMP -u > $EXPANDEDINPUT
checkerrorflagfile
#
# If a conversion table existed, recreate the fake hash file with the
# "real" language table.
#
case "$convtabs" in
    $langtabs)
	;;
    *)
	$BUILDHASH -s $FAKEDICT $langtabs $FAKEHASH \
	  ||  (echo "Couldn't create fake hash file" 1>&2; \
		rm -rf $MUNCHDIR; exit 1) \
	  ||  exit 1
	;;
esac
rm -f ${FAKEDICT}*
#
# If the -s (strip) option was specified, remove all
# expanded words that are covered by the dictionary.  This produces
# the final list of expanded words that this dictionary must cover.
# Leave the list in STRIPPEDINPUT.
#
if [ "X$strip" = "Xno" ]
then
    rm -f $STRIPPEDINPUT
    ln $EXPANDEDINPUT $STRIPPEDINPUT
    if [ "$debug" = yes ]
    then
	rm -f ${DBDIR}/STRIPPEDINPUT
	ln $STRIPPEDINPUT ${DBDIR}/STRIPPEDINPUT
    fi
else
    $verbose  &&  echo "Stripping words already in the dictionary." 1>&2
    $ISPELL "$wchars" -l $dictopt -p /dev/null < $EXPANDEDINPUT \
      > $STRIPPEDINPUT
    checkerrorflagfile
fi
#
# Figure out what the flag-marking character is.
#
$verbose  &&  echo "Finding flag marker." 1>&2
flagmarker=`$ISPELL -D -d $FAKEHASH \
  | sed -n -e '/^flagmarker/s/flagmarker //p'`
case "$flagmarker" in
    \\*)
	flagmarker=`expr "$flagmarker" : '.\(.\)'`
	;;
esac    
checkerrorflagfile
#
# Munch the input to generate roots and affixes ($ISPELL -c).  We are
# only interested in words that have at least one affix (grep -E $flagmarker);
# the next step will pick up the rest.  Some of the roots are illegal.  We
# use join to restrict the output to those root words that are found
# in the original dictionary.
#
$verbose  &&  echo "Generating roots and affixes." 1>&2
if $CRETIN_SORT
then
    sortopts='-k 1,1 -k 2'
else
    sortopts='+0 -1 +1'
fi
$ISPELL "$wchars" -c -W0 -d $FAKEHASH -p /dev/null < $STRIPPEDINPUT \
  | tr " " '
' \
  | grep -a -E "$flagmarker" | sort $SORTTMP -u "-t$flagmarker" $sortopts \
  | $JOIN $SIGNED "-t$flagmarker" - $EXPANDEDINPUT > $CRUNCHEDINPUT
checkerrorflagfile
#
# We now have a list of legal roots, and of affixes that apply to the
# root words.  However, it is possible for some affix flags to generate more
# than one output word.  For example, with the flag table entry
#
#	flag R:	. > ER
#		. > ERS
#
# the input "BOTHER" will generate an entry "BOTH/R" in CRUNCHEDINPUT.  But
# this will accept "BOTHER" and "BOTHERS" in the dictionary, which is
# wrong (in this case, though it's good English).
#
# To cure this problem, we first have to know which flags generate which
# expansions.  We use $ISPELL -e3 to expand the flags (the second e causes
# the root and flag to be included in the output), and get pairs
# suitable for joining.  In the example above, we would get
#
#	BOTH/R BOTHER
#	BOTH/R BOTHERS
#
# We save this in EXPANDEDPAIRS for the next step.
#
$verbose  &&  echo 'Expanding dictionary into EXPANDEDPAIRS.' 1>&2
if $CRETIN_SORT
then
    sortopts='-k 2'
else
    sortopts='+1'
fi
$ISPELL "$wchars" -e3 -d $FAKEHASH -p /dev/null < $CRUNCHEDINPUT \
  | sort $SORTTMP $sortopts > $EXPANDEDPAIRS
checkerrorflagfile
#
# Now we want to extract the lines in EXPANDEDPAIRS in which the second field
# is *not* listed in the original dictionary EXPANDEDINPUT;  these illegal
# lines contain the flags we cannot include without accepting illegal words.
# It is somewhat easier to extract those which actually are listed (with
# join), and then use comm to strip these from EXPANDEDPAIRS to get the
# illegal expansions, together with the flags that generate them (we must
# re-sort EXPANDEDPAIRS before running comm).  Sed
# gets rid of the expansion and uniq gets rid of duplicates.  Comm then
# selects the remainder of the list from CRUNCHEDINPUT and puts it in
# LEGALFLAGLIST.  The final step is to use a sort and icombine to put
# the list into a one-entry-per-root format.
#
# BTW, I thought of using cut for the sed step (on systems that have it),
# but it turns out that sed is faster!
#
$JOIN -j1 2 -o 1.1 1.2 $SIGNED $EXPANDEDPAIRS $EXPANDEDINPUT \
  | sort $SORTTMP -u > $JOINEDPAIRS

sort $SORTTMP -o $EXPANDEDPAIRS $EXPANDEDPAIRS
sort $SORTTMP -o $CRUNCHEDINPUT $CRUNCHEDINPUT

$verbose  &&  echo 'Creating list of legal roots/flags.' 1>&2
if $CRETIN_SORT
then
    sortopts='-k 1f,1 -k 1'
else
    sortopts='+0f -1 +0'
fi
comm -13 $JOINEDPAIRS $EXPANDEDPAIRS \
  | (sed -e 's; .*$;;' ; rm -f $JOINEDPAIRS $EXPANDEDPAIRS) \
  | uniq \
  | (comm -13 - $CRUNCHEDINPUT ; rm -f $CRUNCHEDINPUT) \
  | sort $SORTTMP -u "-t$flagmarker" $sortopts \
  | $COMBINE "$wchars" $langtabs > $LEGALFLAGLIST
checkerrorflagfile

#
# LEGALFLAGLIST now contains root/flag combinations that, when expanded,
# produce only words from EXPANDEDPAIRS.  However, there is still a
# problem if the language tables have any cross-product flags.  A legal
# root may appear in LEGALFLAGLIST with two flags that participate
# in cross-products.  When such a dictionary entry is expanded,
# the cross-products will generate some extra words that may not
# be in EXPANDEDPAIRS.  We need to remove these from LEGALFLAGLIST.
#
# The first step is to collect the names of the flags that participate
# in cross-products.  Ispell will dump the language tables for us, and
# sed is a pretty handy way to strip out extra information.  We use
# uniq -c and a numerical sort to put the flags in approximate order of how
# "productive" they are (in terms of how likely they are to generate a lot
# of output words).  The least-productive flags are given last and will
# be removed first.
#
$verbose \
  &&  echo 'Creating list of flags that participate in cross-products.' 1>&2
if $CRETIN_SORT
then
    sortopts='-k 1rn,1 -k 3'
else
    sortopts='+0rn -1 +2'
fi
$ISPELL -D -d $FAKEHASH \
  | sed -n -e '1,$s/:.*$//
    /^flagmarker/d
    /^prefixes/,/^suffixes/s/^  flag \*/p /p
    /^suffixes/,$s/^  flag \*/s /p' \
  | sort $SORTTMP \
  | uniq -c \
  | tr '	' ' ' \
  | sort $SORTTMP $sortopts > $PRODUCTLIST
checkerrorflagfile

if [ `grep -a -F -c ' p ' $PRODUCTLIST` -gt 0 \
  -a `grep -a -F -c ' s ' $PRODUCTLIST` -gt 0 ]
then
    #
    # The language tables allow cross products.  See if LEGALFLAGLIST has
    # any roots with multiple cross-product flags.  Put them in CROSSROOTS.
    #
    $verbose  &&  echo 'Finding prefix and suffix flags.' 1>&2
    preflags=`sed -n -e 's/^[ 0-9]*p //p' $PRODUCTLIST | tr -d '
'`
    sufflags=`sed -n -e 's/^[ 0-9]*s //p' $PRODUCTLIST | tr -d '
'`
    grep -a -E "$flagmarker.*[$preflags].*[$sufflags]|$flagmarker.*[$sufflags].*[$preflags]" \
      $LEGALFLAGLIST \
      > $CROSSROOTS || :

    #
    # We will need an awk script;  it's so big that it core-dumps my shell
    # under certain conditions.  The rationale behind the script is commented
    # where the script is used.  Note that you may want to change this
    # script for languages other than English.
    #
    case "$flagmarker" in
	/)
	    sedchar=:
	    ;;
	*)
	    sedchar=/
	    ;;
    esac
    $verbose  &&  echo 'Creating awk script.' 1>&2
    sed -e "s/PREFLAGS/$preflags/" -e "s/SUFFLAGS/$sufflags/" \
      -e "s;ILLEGALCOMBOS;$ILLEGALCOMBOS;" \
      -e "s${sedchar}FLAGMARKER${sedchar}$flagmarker${sedchar}" \
      > $AWKSCRIPT << 'ENDOFAWKSCRIPT'
	BEGIN \
	    {
	    preflags = "PREFLAGS"
	    sufflags = "SUFFLAGS"
	    illegalcombos = "ILLEGALCOMBOS"
	    flagmarker = "FLAGMARKER"
	    pflaglen = length (preflags)
	    for (i = 1;  i <= pflaglen;  i++)
		pflags[i] = substr (preflags, i, 1);
	    sflaglen = length (sufflags)
	    for (i = 1;  i <= sflaglen;  i++)
		sflags[i] = substr (sufflags, i, 1);
	    }
	    {
	    len = length ($2)
	    pnew2 = ""
	    snew2 = ""
	    pbad = ""
	    sbad = ""
	    sufs = 0
	    pres = 0
	    for (i = 1;  i <= len;  i++)
		{
		curflag = substr ($2, i, 1)
		for (j = 1;  j <= pflaglen;  j++)
		    {
		    if (pflags[j] == curflag)
			{
			pres++
			pnew2 = substr ($2, 1, i - 1) substr ($2, i + 1)
			pbad = curflag
			}
		    }
		for (j = 1;  j <= sflaglen;  j++)
		    {
		    if (sflags[j] == curflag)
			{
			sufs++
			snew2 = substr ($2, 1, i - 1) substr ($2, i + 1)
			sbad = curflag
			}
		    }
		}
	    if (pres == 1)
		{
		print $1 flagmarker pnew2
		print $1 flagmarker pbad >> illegalcombos
		}
	    else if (sufs == 1)
		{
		print $1 flagmarker snew2
		print $1 flagmarker sbad >> illegalcombos
		}
	    else if (pres > 0)
		{
		print $1 flagmarker pnew2
		print $1 flagmarker pbad >> illegalcombos
		}
	    else
		{
		print $1 flagmarker snew2
		print $1 flagmarker sbad >> illegalcombos
		}
	    }
ENDOFAWKSCRIPT
    : > $ILLEGALCOMBOS
    dbnum=1
    while [ -s $CROSSROOTS ]
    do
	#
	# CROSSROOTS contains the roots whose cross-product expansions
	# might be illegal.  We now need to locate the actual illegal ones.
	# We do this in much the same way we created LEGALFLAGLIST from
	# CRUNCHEDINPUT.  First we make CROSSEXPANDED, which is analogous
	# to EXPANDEDPAIRS.
	#
	$verbose  &&  echo "Creating cross expansions (pass $dbnum)." 1>&2
	if $CRETIN_SORT
	then
	    sortopts='-k 2'
	else
	    sortopts='+1'
	fi
	$ISPELL "$wchars" -e3 -d $FAKEHASH -p /dev/null < $CROSSROOTS \
	  | sort $SORTTMP $sortopts > $CROSSEXPANDED
	checkerrorflagfile
	#
	# Now we join CROSSEXPANDED against EXPANDEDINPUT to produce
	# CROSSPAIRS, and then comm that against CROSSEXPANDED to
	# get CROSSILLEGAL, the list of illegal cross-product flag
	# combinations.
	#
	$JOIN -j1 2 -o 1.1 1.2 $SIGNED $CROSSEXPANDED $EXPANDEDINPUT \
	  | sort $SORTTMP -u > $CROSSPAIRS
	checkerrorflagfile

	sort $SORTTMP -u -o $CROSSEXPANDED $CROSSEXPANDED

	$verbose \
	  &&  echo "Finding illegal cross expansions (pass $dbnum)." 1>&2
	comm -13 $CROSSPAIRS $CROSSEXPANDED \
	  | sed -e 's; .*$;;' \
	  | uniq > $CROSSILLEGAL

	if [ "$debug" = yes ]
	then
	    mv $CROSSROOTS $DBDIR/CROSSROOTS.$dbnum
	    ln $CROSSEXPANDED $DBDIR/CROSSEXP.$dbnum
	    ln $CROSSPAIRS $DBDIR/CROSSPAIRS.$dbnum
	    ln $CROSSILLEGAL $DBDIR/CROSSILLEGAL.$dbnum
	fi
	#
	# Now it is time to try to clear up the illegalities.  For 
	# each word in the illegal list, remove one of the cross-product
	# flags.  The flag chosen is selected in an attempt to cure the
	# problem quickly, as follows:  (1) if there is only one suffix
	# flag or only one prefix flag, we remove that.  (2) If there is
	# a prefix flag, we remove the "least desirable" (according to
	# the order of preflags). (This may be pro-English prejudice,
	# and you might want to change this if your language is prefix-heavy).
	# (3) Otherwise we remove the least-desirable suffix flag
	#
	# The output of the awk script becomes the new CROSSROOTS.  In
	# addition, we add the rejected flags to ILLEGALCOMBOS (this is done
	# inside the awk script) so they can be removed from LEGALFLAGLIST
	# later.
	#
	awk "-F$flagmarker" -f $AWKSCRIPT $CROSSILLEGAL > $CROSSROOTS
	if [ "$debug" = yes ]
	then
	    rm -f $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL
	fi
	dbnum=`expr $dbnum + 1`
	if [ $dbnum -gt 100 ]
	then
	    echo "Too many passes, aborting cross-product loop.  Munchlist failed." 1>&2
	    if [ "X$MUNCHMAIL" != X ]
	    then
		(
		ls -ld ${DBDIR}/[A-Z]*
		cat ${MAILDEBUGDIR}/munchlist.mail
		) | mail -s 'Munchlist debug output' "$MUNCHMAIL"
		rm -f ${MAILDEBUGDIR}/munchlist.mail
	    fi
	    rm -rf $MUNCHDIR
	    exit 1
	fi
    done
    rm -f $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL $AWKSCRIPT
    #
    # Now we have, in ILLEGALCOMBOS, a list of root/flag combinations
    # that must be removed from LEGALFLAGLIST to get the final list
    # of truly legal flags.  ILLEGALCOMBOS has one flag per line, so
    # by turning LEGALFLAGLIST into this form (sed), it's an
    # easy task for comm.  We have to recombine flags again after the
    # extraction, to get all flags for a given root on the same line so that
    # cross-products will come out right.
    #
    if [ -s $ILLEGALCOMBOS ]
    then
	sort $SORTTMP -u -o $ILLEGALCOMBOS $ILLEGALCOMBOS
	$verbose  &&  echo 'Finding roots of cross expansions.' 1>&2
	if $CRETIN_SORT
	then
	    sortopts='-k 1f,1 -k 1'
	else
	    sortopts='+0f -1 +0'
	fi
	sort $SORTTMP $LEGALFLAGLIST \
	  | sed -e '/\/../{
	      s;^\(.*\)/\(.\)\(.*\);\1/\2\
\1/\3;
	      P
	      D
	      }' \
	  | comm -23 - $ILLEGALCOMBOS \
	  | sort $SORTTMP -u "-t$flagmarker" $sortopts \
	  | $COMBINE "$wchars" $langtabs > $CROSSROOTS
	checkerrorflagfile
	mv $CROSSROOTS $LEGALFLAGLIST
	if [ "$debug" = yes ]
	then
	    rm -f ${DBDIR}/LEGALFLAGLIST1
	    ln $LEGALFLAGLIST ${DBDIR}/LEGALFLAGLIST1
	fi
    fi
fi
rm -f $PRODUCTLIST $CROSSROOTS $ILLEGALCOMBOS $EXPANDEDINPUT
#

# We now have (in LEGALFLAGLIST) a list of roots and flags which will
# accept words taken from EXPANDEDINPUT and no others (though some of
# EXPANDEDINPUT is not covered by this list).  However, many of the
# expanded words can be generated in more than one way.  For example,
# "bather" can be generated from "bath/R" and "bathe/R".  This wastes
# unnecessary space in the raw dictionary and, in some cases, in the
# hash file as well.  The solution is to list the various ways of
# getting a given word and choose exactly one.  All other things being
# equal, we want to choose the one with the highest expansion length
# to root length ratio.  The $ISPELL -e4 option takes care of this by
# providing us with a field to sort on.
#
# The ispell/awk combination is similar to the ispell/sed pipe used to
# generate EXPANDEDPAIRS, except that ispell adds an extra field
# giving the sort order.  The first sort gets things in order so the
# first root listed is the one we want, and the second sort (-um) then
# selects that first root.  Sed strips the expansion from the root,
# and a final sort -u generates MINIMALAFFIXES, the final list of
# affixes that (more or less) minimally covers what it can from
# EXPANDEDINPUT.
#
$verbose  &&  echo 'Eliminating non-optimal affixes.' 1>&2
if $CRETIN_SORT
then
    sortopts1='-k 2,2 -k 2rn,3 -k 1,1'
    sortopts2='-k 2,2'
    sortopts3='-k 1f,1 -k 1'
else
    sortopts1='+1 -2 +2rn -3 +0 -1'
    sortopts2='+1 -2'
    sortopts3='+0f -1 +0'
fi
$ISPELL "$wchars" -e4 -d $FAKEHASH -p /dev/null < $LEGALFLAGLIST \
  | sort $SORTTMP $sortopts1 \
  | sort $SORTTMP -um $sortopts2 \
  | sed -e 's; .*$;;' \
  | sort $SORTTMP -u "-t$flagmarker" $sortopts3 > $MINIMALAFFIXES
rm -f $LEGALFLAGLIST
#
# Now we're almost done.  MINIMALAFFIXES covers some (with luck, most)
# of the words in STRIPPEDINPUT.  Now we must create a list of the remaining
# words (those omitted by MINIMALAFFIXES) and add it to MINIMALAFFIXES.
# The best way to do this is to actually build a partial dictionary from
# MINIMALAFFIXES in FAKEHASH, and then use $ISPELL -l to list the words that
# are not covered by this dictionary.  This must then be combined with the
# reduced version of MINIMALAFFIXES and sorted to produce the final result.
#
$verbose  &&  echo "Generating output word list." 1>&2
if $CRETIN_SORT
then
    sortopts='-k 1f,1 -k 1'
else
    sortopts='+0f -1 +0'
fi
if [ -s $MINIMALAFFIXES ]
then
    $BUILDHASH -s $MINIMALAFFIXES $langtabs $FAKEHASH > /dev/null \
      ||  (echo "Couldn't create intermediate hash file" 1>&2;
	rm -rf $MUNCHDIR;
	exit 1) \
      ||  exit 1
    if [ "$debug" = yes ]
    then
	rm -f ${DBDIR}/MINIMALAFFIXES.stat
	ln $MINIMALAFFIXES.stat ${DBDIR}/MINIMALAFFIXES..stat
    fi
    ($ISPELL "$wchars" -l -d $FAKEHASH -p /dev/null < $STRIPPEDINPUT; \
	$COMBINE "$wchars" $langtabs < $MINIMALAFFIXES) \
      | sort $SORTTMP "-t$flagmarker" -u $sortopts
else
    # MINIMALAFFIXES is empty;  just produce a sorted version of STRIPPEDINPUT
    sort $SORTTMP "-t$flagmarker" -u $sortopts $STRIPPEDINPUT
fi
checkerrorflagfile
if [ "X$MUNCHMAIL" != X ]
then
    (
    ls -ld ${DBDIR}/[A-Z]*
    cat ${MAILDEBUGDIR}/munchlist.mail
    ) | mail -s 'Munchlist debug output' "$MUNCHMAIL"
    rm -f ${MAILDEBUGDIR}/munchlist.mail
fi
rm -rf $MUNCHDIR
exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #!/bin/sh
#
# $Id: tryaffix.X,v 1.13 2005/04/27 01:18:35 geoff Exp $
#
# Copyright 1987-1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning,
# Claremont, CA
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All modifications to the source code must be clearly marked as
#    such.  Binary redistributions based on modified source code
#    must be clearly marked as modified versions in the documentation
#    and/or other materials provided with the distribution.
# 4. The code that causes the 'ispell -v' command to display a prominent
#    link to the official ispell Web site may not be removed.
# 5. The name of Geoff Kuenning may not be used to endorse or promote
#    products derived from this software without specific prior
#    written permission.
#
# THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# Try out affixes to see if they produce valid roots
#
# Usage:
#
#	tryaffix [-p | -s] [-c] dict-file affix[+addition] ...
#
#	The -p and -s flags specify whether prefixes or suffixes
#	are being tried;  if neither is specified, suffixes are assumed.
#
#	If the -c flag is given, statistics on the various affixes are given:
#	a count of words it potentially applies to, and an estimate of the
#	number of dictionary bytes the flag would save.  The estimate will
#	be high if the flag generates words that are currently generated
#	by other flags.
#
#	The dictionary file, dict-file, must already be expanded and sorted,
#	and things will work best if uppercase has been folded to lower with
#	'tr'.
#
#	The "affixes" are things to be stripped from the dictionary
#	file to produce trial roots:  for English, "con" and "ing"
#	are examples.  The "additions" are letters that would have
#	been stripped off the root before adding the affix.  For
#	example, the affix "ing" strips "e" for words ending in "e"
#	(as in "like --> liking") so we might run:
#
#	    tryaffix ing ing+e
#
#	to cover both cases.
#
# $Log: tryaffix.X,v $
# Revision 1.13  2005/04/27 01:18:35  geoff
# Fix a typo in a comment.  Work around idiotic POSIX incompatibilities
# in sort.  Add secure temp-file handling.
#
# Revision 1.12  2005/04/14 14:40:13  geoff
# Use /tmp as the default temp directory
#
# Revision 1.11  2005/04/14 14:38:23  geoff
# Update license.  Protect against modernized (i.e., incompatible) and
# internationalized sort commands.
#
# Revision 1.10  2001/09/06 00:30:29  geoff
# Changes from Eli Zaretskii to support DJGPP compilation.
#
# Revision 1.9  2001/07/25 21:51:47  geoff
# Minor license update.
#
# Revision 1.8  2001/07/23 20:24:04  geoff
# Update the copyright and the license.
#
# Revision 1.7  1999/01/07 01:57:48  geoff
# Update the copyright.
#
# Revision 1.6  1994/01/25  07:12:18  geoff
# Get rid of all old RCS log lines in preparation for the 3.1 release.
#
#

USAGE='tryaffix [-p | -s] [-c] dict-file affix[+addition] ...'
counts=no
pre=
suf='$'
while :
do
    case "$1" in
	-p)
	    pre='^'
	    suf=
	    ;;
	-s)
	    pre=
	    suf='$'
	    ;;
	-c)
	    counts=yes
	    ;;
	-*)
	    echo "$USAGE" 1>&2
	    exit 1
	    ;;
	*)
	    break
	    ;;
    esac
    shift
done
dict="$1"
shift
if [ ! -r "$dict" ]
then
    echo "Can't read $dict" 1>&2
    echo "$USAGE" 1>&2
    exit 1
elif [ $# -eq 0 ]
then
    echo "$USAGE" 1>&2
    exit 1
fi
while [ $# -ne 0 ]
do
    case "$1" in
	*+*)
	    affix=`expr "$1" : '\(.*\)+'`
	    addition=`expr "$1" : '.*+\(.*\)'`
	    sedscript="s/$pre$affix$suf/$addition/p"
	    ;;
	*)
	    sedscript="s/$pre$1$suf//p"
	    ;;
    esac
    if [ "$counts" = no ]
    then
	echo ===== "$1" =====
	sed -n -e "$sedscript" "$dict" | comm -12 - "$dict"
    else
	echo "$1" \
	  `sed -n -e "$sedscript" "$dict" | comm -12 - "$dict" | wc -lc`
    fi
    shift
done
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }ZmoF_1/Yuҧi8hk;F4xFHҊ{n7(j["gޙeܺ2ƚ*4cyU߹>v/Yg.ߛ"o}^܆rƮB
\v,xa]zq|zono../O?^`ή>~,[W:w!6m豉o֡mCchGxl\Z[3JUy|mE|zάEsa.;\|S[rb,oC	m+&9
kCcvld{Hdش+-uv*@Ms[U{Ӻykܻۜ=
mtX#]rj7}#m@2?[u;R.Mac7k" 5𱘔_`)!4QE3֚u>lb<Љ<aM<ߖupR{Ggb}K]4RZٶu5ⵧo'1G!]PCP@\-ХoP5Ү{mgvo禵4o'/zs_|Һv"8]D<u^X[KǮ
ެ=bԬ4w6&[xt[ha&`>ϝ+ '<{n_|΅ZHIЇ/5OOOM8VdPEl	"r>4r1̮l8ax9O}U3<`rY_ޘsc0\C#ޗUjDq[z·_qJ? Gf2v>riNdAۼngsuy)ǥY!^b!e
57;\ʠ5h:cL\ZM7
JHʛw7'/9`r0xsYF8^y#!;& 8sƟ3\``|yo{<Z5"(w-r&<Woid	'<Bɝ'aZd} SGʷSyԧg[mK!J.\(@ԙD<EgzͳO@â@uߊ&yN>?;0TŎ7TUM6ɲCcSڋ. PR@H+A]6|S)DC<5u?>9BJ[)=;BF"3dbnƵ'yׯN<b6Ģ=5t*1q{
j
޴|NL%= Yf`:b< JPC	^ڷIc&N$ÏDR$S"(UdoB(}uѾk\NNX,:
Sg)."9654)R2OUXu g˻[Cba%I532knɨts˕Y7k!&oϖȚnX=?NS>XJ}')!CQ.	N܁K r8ei)OZEC{P-\@ӕ<D¹׺O5}!_ΈTM֧^5AfLؼEעh)_њhZ YSS\Zݵt 0|-UK8Y݃<RPiW	D0KDw?I=.TKPYmvPc,5PbkX^
7hir+f/Jɵ4Vgf\Eou%YOX=͓J׷H+|~XÃc~7-{Q
+G"ѯ=Y
<ӕҵE)b%WJ[q GeO@ug'_%H#8qP b܂>eC%)b1;ȵΕxES%Y!S-?hE]DX(sas!-H
g31',$gq=aGW"_iPa 1MZJx:vhPXz{eb*rEu'Z?&G
_xSMc ;[yE,O}
ZY
4@^F!hH,@shQ4	#߉)JeБ%/(ElHY&F|
N
w%f	Z1nt
:Q?+=*}cE] W
8c(HmQTBT&J`h/`3p1rtZ%1ƈ.E8FQ%#g~|w_v'ؑ6{̀8Bb3kdjeSP,:4qP \ů֋XXKf$ɽPp"x!kr2?eRBS
v)F句N#&uژrN?n,,ʧ&úh.arvmj4X\#msPk`*琠ƚ+>X2tLzCݬ^a<T:q;K2ndXp0eSeOܞz5?KI9@|>
A7E
ñX#` _^	bR*>ŰsP
׻6N5%blk6DN˾D0YDl={LMQLZ8P0Tw:U97˻<Qs%%\ƞ{M%ϥh~Ef?kgڥT0ԱzS#IR3@+d2ePVtҺ%wmVYr˝81a"o8^{ u+#2M%+0O0f)r$%M: :D(5y+NGۄ$YwH8YIS= jMj80O_&
ƴ0nR+"}
e{u)F(uHHe*'+<?e0ly藡+35hʋ;DziQ24N
ӗ'2f|-RnmltxM"+'9giňմd|	&0'6#.QXo@&g:NYSN:u(uHDv=e47oʼꀴ=xxB<t m73
(>
yy2q:# ܊JB8?M=3bo+p,S.揍%c?ƪI>Yt?5cs^iJ
=pM)mb"z栰04NشS4&5X"sl!p,JZk/l
6a0f}$>0V#)Y
u!^mGiܚ#8ԫv8m۰g{&@-&_i#ό09d&*RVFyC<5gEa*ͭ>vmAWPZxݠۭ;9k
|HcU:ydUDohc+r쿄Lv!bJ1Z¨6b>
IRP6$TLrPƬ4qRt"\fHԶcEr <i)wLϋUy7%"/MUp;C$@f#MmK5T
ftCl/v6 A֨9<O5ԕdk%cND(΢bəɳ1YRHvFҷI&<elIgND"*zpaH^}^'.$EdR\J4N?})'KۆCy_0G~CbmRxpX<#'>m6ݲ]e kB #WInڄMX*\%y^'vφg<HyuqhHF>L>4*9+(>ʳg98B)h(IVIQȉwX/0ZW 'Ӷ2ȇ
kh^:(b:uN}B)=
3iofN})Q
Ctc] x[^MnI'5@>n
8ELkB66rUʈ)2i\ D 
#4a;mz3MPؔBx&ꑯad;$ԀBD8XfLMUYݴ(ŌEQGȇrzS#1Y(v"!)Ά7-K&p,ݧi5ѱuc9PiÃ}k<L6+ؖ=
oɝ)47c<P{b7xGoDgDn8>5էI7ay Ԡ`mOKVTpJZIN#P=&( R~{ѫ'\ՒR֧_~+TfKcEܟʬC/	
t4Fv8LAXdƃDҐd`P`kP[씕LЏ.,搻p,sҒ
B90cA+ۑHRJe$bh:_YZOYzbH5}@ނШ'[CW"MCSH ÎY1ψ9a$ $djڀMY7Z,sEñ"J{-Vk&pJ@҄IlA$n:rCşЃ֐:NƋY^c)9)]ֵ QL0fQkMGQ-GZﳱ˔R-[{m` 6RǃDg%#,yr\5),%.[PVA[95=	GU'Sn@闇,0/!Fd{9t}yݧϷYv݃Rqo/]IM!lq?٪!tgKfC!eMrǎ6Sף{yȔPZZhvUQ鄼t'R.AdD3?3_V>a7(A^n[\^!b8?S+4p,[?y	]ݲ 2-t2<e=BxSiJWm]*v(ښ'Jbj.Nz9
cETN.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        SKk@W`ZBvq4=K@Ici>>⨿P
!,e~lsw]C?({ -{'
45htΖ2O.v>8B
O<[ .u8X_w =}+PT4pB^qf-4OT/A@5EK6pqfq`BUX.ֵ@,GQ!v~4)2O#Lu>KkTJD664Lhq *id?p{|BViy
ᢲ& J$au&ijǠ,P=qhu<2N</QagZ^F&o,_Ih9[+6E|j~5f`DZF*x"-]P@YӐ-Lҗ-L;/[m(
/aUm* 
TPF1';&[8*ZYB -I޻5eQ\_:XvxuQfEY@AJ*DɺcFI)b
M*uqY;kDEz6o'?(4=                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Z[sr~`$އYZ"l
!# Dѿ>__JZrM\zz=0Ƙm\'W̗scKmdOY1%^N&g&6
I8=0,w&7_1Wy[7\/Ľ݃oq;*zhڙ3(ue.]ާ߉ԫ24KRƍ^q½Rۍs tI|ԻO>u7/dK[gn 	ϽI`i_>_$yܒ[	fksBkl҅+FOLw/elmL$:]ha(duK'.Kc~V<37OYqŭLe7GۦޝvenCL²Mrti{q~>Qۦ'ӟw"0::kI\p
">}b`e!6}ړlIg n/`
vɃ|*w,*u88m~B&M-Ǚ/*[CC盫_D9^`A
bEl!
xNmɜBܴǒ\<%_VMXMQV<%->]7R'AbkhwCQ	LiRr$+SrUEOcw	.id8lk}+8$.}-VXͪ Z6:{G'-rK	ʏU
3_S0#Z>,Hcc"0M{uڂJ Ru经O֡WPq&GZ;<m.7_sJZd<H6=9@ s6YA {y!p!gd
,|fXFn* +A :4%0	j)?K`8g`))FCmJ<MB4ʻ\5(KF$؁:"{s1Z]"6auH9-\%=Fogk!B|_lkVprf~3? b5h}b'M*ZB?7Hdϯ*lQlp+@=~hJr@ПgjMIu%<#̃PSĊq[ $35Ɍs"\tBtS[Z`h<_J-)!DU~ nX]],9*gs*-6M@3[NMWxgVW.}WC+npFB]),n%@e#ba˽GΖ};HBWAW[ TH%f86`!(%w# H]Fn/L\cP쫚6&3P~L1Ug	UJ{[ea<]uЙzK]g|@mLOrrEzjJG]*)iP˘ ȧ~BT%|JˮP_.}BųohÎ߆ҮҌx/03Zx01IW7WwTv5ק7.H(υ/Kg#QPɷĪ5({_D!ROAhhQYzHxzl?r\FQܫa>m1bua si
/KڿWJQRDmNxd8Ushc/r >)z)bm	ł);Bei!D<Z\KO橫YH DEveQd'9ñ5;pMdRN/ֵG\LwNCW9oilBםW048
|bwY~mH:gskCvglJ/'3psw45]zeQ_R/YNYGX#ˤT9@nCf_QiW\'^-m0'mO=!Ӝm1B)y:DGDһYQ&
36LWK0w٦0KehWc2[!1odLzA)jEj	ƨ~i*n[<ԕNxWspwZr;<l@^RILA+NU#r܂1l:|D
 2$c; $=HBC'mSВRJn5RVl
Qgd&:KZJ^3֮hqL-ro:$Z/cmEFs0* @ vjĐ#[ٚRd%Ry+}&Tt:VU(*J`%N8bW}#4Tؓ> 1[LI  ,5[pP?翑I2v6
a!č@({CXoe1uHr`	]Sl7*t/@Y;F>>C<CYJ4ELs**s
	."Ij1H<8?$wsB5׋
F9~W/&>M{=v*{##E#>e§N@JUJLFW,E&QH3K?7{~Xx}8W[kSG.S~Gp#
$١J6~0MGqG|4w"T
PlEtz2'άm<Hvu б{،w}਀G3/FL<P[MLSewG;`a)6W`&\~y;-\R%uǡ(5-Q/C!ruZ&n>uHfpML$Rb&Pgpe+icl<y<CV~ƶssqVW;[Əaȓ+[ @!70cRZ9XICФ~F(G 6,.Мvokt5W[]UaD;{r+bj96c xڒjNDEBp#^5~.D=z*ܣD,[s]QMhļQY;2.tf!ił$8}uh<q@P6-,Oi`Gv8CŐKnHa,^'{:zAD$Nq:Ou}L7ay9T]QCrk(E*$J>39a:-7y߳ʖ/$e Wz:Ԅܨ5Ar@k;J)`t0;3ZRO#rJIr۩.yXD'6X9@-b5M\$vbSQY&M(qB
1Pf6㆓x.:LK<6)YXѤ`9cy ):FM5ئjx\IVO'7ο4O
Q_GATSA3L陜FYݣs>fH?+O.>;ۿ Ϋ4ܯ8O<ZU}*D`n~xT:<aG3Mj9^I` ] }!O	u幄4;X1>-Ywd22#edv=aV
7#h.?̹Xdl4em+LvF#cqL,;f|/;hY%rț< &"O!TD:iAcvk>ʠlmƋG2-}p^|$ED%͙d:v;Sd%+Ew~xs9N 	;`h<תQQVV**
+:
RHǱ}aIСԎxD#dHEdWK9赱ghCudZ9n/E{"*657t~8V`ɇP<E"
><Q
uP6[+KuV{j_L<㧳ӏ~}~~E C2mN)	Ee8ɱBƖxrT1Vģ>EoH܇#y`MUOi>Lo=.~i3w*Kk*t=44H'o ^7ӊKģ#:8%Te-b/#un7lEh=;F1+zDAKſ!=%ۑBw/	~u@KK1У1Y'jFn,oKק?_ח?#݀s>"~t<&}>7yf	Y6yADBpg:'r_N.ΌmUrGgF-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Things remaining to be done to ispell:

	- It might be nice to support multiple personal dictionaries.  On
	  the other hand, it's pretty easy to combine them with "cat".
	- A small amount of string space could be saved if buildhash would
	  combine strings with common suffixes (e.g., "and" could be stored
	  as a pointer to the tail of "bland").
	- (Pace Willisson) Pace's latest version of ispell compresses
	  common digrams to reduce the size of the hash file, and stores
	  shorter words in the dictionary entry itself.  (Since the digram
	  compression also reduces word size, this is a big win).  He also
	  improved startup time, at a slight running-time penalty, by
	  eliminating the mass conversion of string indexes to pointers
	  and just using the indexes as such whenever a string is accessed.
	- The findaffix script takes ridiculous amounts of time and disk
	  space.  It desperately needs to be rewritten in C, which would
	  also allow it to correctly support string characters and to
	  suppress reporting of choices that are already in the affix file.
	- Some of the following ideas require more flag bits in the
	  dictionary.  Since there is only one bit remaining for most
	  cases, I plan to use that bit as some sort of an indicator
	  that more flag bits reside somewhere else.  This will be a
	  kludge, but it will save some space.  Beware!  Don't plan on
	  using that last flag bit for something else.
	- (Ian Dall)  For some applications, it can be handy to allow
	  multiple dictionary hash files.  This shouldn't be too hard, since
	  there's already similar code to support the personal dictionary.
	- (Not mine, but I've lost the name of the originator.)
	  Some misspellings are common, but corrections will not ever
	  be found by ispell's algorithm.  It would be nice to be able
	  to explicitly specify misspelling/correction pairs for such
	  words (e.g., "lite->light").
	- Several people, notably Peter Mutsaers, have asked if the
	  affix file format could be extended to allow limited
	  variables, so that you could specify things like
	  "[AEIOU][DNL] > \2ING" to handle words like "pad->padding".
	- Ispell should be smart enough to ignore hyphenation signs,
	  such as the TeX \- hyphenation indicator.
	- Since there can be two personal dictionaries, there should
	  be a way to specify which dictionary a new word ("I"
	  command) should be inserted into.
	- For languages that form lots of compound words, such as
	  German, munchlist should be smart enough to split compound
	  words into their components when appropriate.
	- (Jeff Edmonds) The personal dictionary should be able to
	  remove certain words from the master dictionary, so that
	  obscure words like "wether" wouldn't mask favorite typos.
	- (Jeff Edmonds) It would be wonderful if ispell could correct
	  inserted spaces such as "th e" for "the" or even "can not"
	  for "cannot".
	- Since ispell has dictionaries available to it, it is
	  conceivable that it could automatically determine the
	  language of a particular file by choosing the dictionary
	  that produced the fewest spelling errors on the first few
	  lines.
	- It is long past the time when the ispell.1 manual page
	  should have been broken up into components describing the
	  various programs in the suite.
	- If the -C flag is disabled, ispell should (at least
	  optionally) use the "??" form to suggestion possible
	  compound formations.
	- The elisp interface should provide a way for ispell to
	  return error messages to emacs, so that users don't get
	  inexplicable failures when things like dictionary open
	  failures happen.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       [ےF}W8=H-ˣIV%ac
E 
. ݢ؏٧=YUQlKm=H X(de<Uu
e$Zezk.=b?3I'~~,xO%ljLQue٦x?3xkLɊrUYl4%DyT,OM(3^}f»JI9Sၳow|6e'yC"~g	YRfGSU
m,LcDl|
G/̨𺑥m,/]f\طdB9Df")?R;3䎫B_U27U[gxf'&hohQ5Q'7 a/[%k+h'E]%
65X(K<-ds%lLJXeC03~4Ӭb]qϴͥ-ثD1}Vk7`v}}HwSZ@mH*0i#E[a
3]6+exrkPx*XZ*wV2ci.k*˙/f(y+{59&9{PVD-[!Hte"?`
GL#F;U`2چՍH,v֔uH[ 0LOC-w<ȶyrYj&YZWM3gtJ^D`1/^l>S>ii+>h/)tB
|@ɬM87r.C\Wp(QJF6*iҽVe8@g]J?@1$b
q ^{IxL1fe:D|C4e+2C 8&8РYjDhD$ Pi[Tp͞Wg	Y`@ﰍd^`"ZG'-s\lδ34 @Unq<LJHd4vDC3D
ܲmY9YoZByî/eF:$gAQncME˪i]mu3|=>?1NL#Ho6Г$RyLeΑ$BQ/rbg癕ym$t(mz("=Z;۶	I:i^;3$ έLЍ*([ZB,P'QjYS
p I 6k&;9(*7	bhb0xi2{IvWutҭ]'[IFMW4
Y,MBϱ&98Z-w
Y={QNyRɇ	YͦuuIZ~
8]y ?W
^'z+!aOY~Nĥ}g**R;E>3ј\}Yʿ<zfYcwX뻟Փ͛o_?c_7QȜk.Լi+3Y,ð$L|LΓ[)2ދV;th2jCD/h~Qj#V23`?К/Pt!eFj::運UXAT 0 \AE*`$3<21KJ1ii2ʜ\;	;F]:I^'aEEsd_+XտhQeO{ܕz<\D(;uz=>L(jMnvm
eփ,^wB'Ӗp	`S%*r@JfF~0#XF<Dxq0%^t./b(/oHYꨉ?x^ ~Ԛ"Jֵqci[E$G۪B///{.r~-Q0rmӴDw5W;ј7%)fɗ\e `2`CKLs;]oGxn9<4
[JjLQy*
v3P)"[K7k]`(J86b/
.B/rpau8Dj_أ"$bv n	]3PF>\q_9ߖ4̀!pKr:P0FD7O|\=p(7^`2 lj%:* 1|2)MbӄˤZ^1t Mm9`++1B0r)X`$*Tq-<P!F8`j#dc,>gb^ts_+E̿f=|R:xވB2I*6|,K g2yľ0}TqĭN":F[#m=ɿ`bG
&Ѵr%PBnej-r1⨎ybۀ]P=I.
wuju&u˪]_s %(էeI(]wUYe$u&4OUg0/i
)|殛[[]e2m5}TqT
DHԔ.ol*]ҩ j24d}&d{͖Z}XčٓJQX{}	o
e&n<pQ\c!'KhݱʛYs5uBі:]+W Sux5*KI݌0=Z ݴ<R[kʐ	(9Vv%q4й|O w9ƁE &(#`iV15'[Q,Dh޵SiQT ]g2Qkp:@Fcc⒎8f]R|iF,\q.`Lxo=$c˝)Ɣ̶i+ٯl&ݗP&+\RM12DGJ%)KS0jF8nm	hOzKBZ)I=-LϮFB 5}RnʑdabR"`h_P([;sh_
/@A RѢn<}{5ӽ+#U-sBUCd07F=7+.u O_MYs(
iEGaiwv$ϿxwE?:RPWj7'df
MvB/уxMph(lT辣gn>n*Z˫Ni>ulU̉6=_}Sp&z(4fĐhv8Ώ٤r6:!}͆˼VYlj.~W.'^ӕ"ZP+ytgl%>J@$4$ZT6
$;PsXdo[X_[EJ'AzwNc"\f}H@sss1YoesubM}3@Xg'vL;:pO$gQeuiwq5e3PFv{<#N86&'w]D*tPdjHZLxq1g/z %Lc牙,9cCueXҒR8{N-<H|Љ%s@DԚlm+;xg?PGXQuk|ʵ}Ȝ=+C
 V_ZqǉXX>C1\l'n/s )a'hЈi<Fї =I.|=[~0̍r68g4f阡x}/['ɞhDf&-!y*i7:ӵA
Ęҿ>]3_URGPYY3m)	ݸFa9(\k`Ըԍ*7V9 2ZD۲J_hVp$>T"
ƛVFeG6hwLg0'چkQ#*	~ˤG8c l4
ݚVZ0Az_{󪝜ZT.}??1-ݾ`T5y\hdZZp30|`Y9%BDhE~?M!Akp.Pv<g)8AYRg"iD ?LfYxXԕl:3~0n7hX87ssVV<HCErzϷ-c-Acb$QWiW ¨$gL(^d[⨾NCDXr2Ԍ2WZLh#{)k7
X\!$1<)>ĝ&tF7v#+Iбw,Y7DMht*s䈠t΂TV\V.qFSmhXKAn~ft9ٔ	%>OQ&@sCw9-{,WP5q9NfݑAK'a<}PGr`)l/x
طXhTD%3a=U7^"K!QrCRP`rԂU(&Y#JQb
{Lux:O 72<a43T43qFvWJgS>s9Zˑ(2϶( V2?W7ȇDȀ%cCGfE< r+T1!A~w
Lu썔x#逥Tq^9
/9,G_B*0&r17N5RqpQrrz/X$zCwnV5~=Zsx F}3
ޕ7ZnGAduʪIMfǙ	:
e^i1>p*I pb͔!{wÛV0DOʮ͓f
 @V#A܏ (n5f!ƛ0S!uQ
v $chu2
K[
!NTCxqf6RǶ9r\hjăP،h7i-:jHw+oSrf.POyh4fKKfqr%_łSnZS3|h5։ksqGwݍS;~Ġ'q\ޞOgS!F^S9Kw㚲8 Z^v񬮇i[Db\4F(Qas-J1<"!/<ENe,ggd3cۮ/]o@+=Ąpؖl닷/$A	I0h*UewGL@:{J5x:[Ӟnҧ{NI	)/ݤw(r9
I$z0-enp5OHK#bƤxG*6UN0Hu>A{DkYݡ1ahI>@
UE%hGf^2{;niUj\W"+-v5p||U-?㙶DhI0i%&3ܙF(EYj;#
A*wУJ;K/28`/_=ӪB:FhY:eVj(KN 1cCG9S:]g2agzPewX7~2uB=7H%{ΟōKGGIn${ru4ߥƧBG8`G"HvT_md#'Pۺd^uzp`U\y
e d[,f?Eg|IM9q?n$"-f<PV2ش.ˍ<m4h\sL`^<c1@m5JRfKL;u9G䷒=^\qylO4HHXӷ/zBUGN<zr=[&LB!AAՆca nl@
h9_zb6(CjгNN?t548N`ԯa(@`A7Ļ!M1S+7y(?+x4x,ijCz
Vdb61hL0`Q!B4qcp%9EgԄEl0H3
ݟ {)oCA	bGJQ-9U;	; ZߨCEOo`t\0\P狉]2r#kDib0ꖲcC2 hװiؖP= H54ZC8j̎#똤+7#:gŷF*!z2Y7I%v |>i;;dfJS%րC	Ȟ/࿙"[>=ys0oscu`6KBhp_?ͮVzHo
C|"D1	^8.n4-:TCjtUظ:X%%C9,қ3
;FI[|yXJE_{sJ7T-EK[+R*,eiX!r3-0Y
FACCg^ZG"Y^<zfAaoh֌
g/6$L5I֠]@<^]y-"<mRWx<?fjDUC(5<kkT/d$sN5Kdwl@ts%HC
ɷwuoHʀs<.8jV9tz/rYR<֎1ʡO=}0;p"68/x Z.P_"=^ܧSdtBU4h@@8G<[$uã '?bzeʚeNz8`^tq_MRB&mtZd7#0nȰ{ؤ;T)A;I;9<9;״4?Ʌ$T}֙|
m
ѹz&ѕ^)SXrF!>6>A,w5j20jF|_M8UǿyNxmvӐξ{k?wƜn=FQꝣA0i${f
BgY*d>=xKnD«	ID Q1<uO?KKB)edC<:~	(LMg6gpL~O43iMrQ'g\bWdpˏ)4Tｇ|)A:ɲ9EBE+Ǎ0G%zQc"75k#}Xt1(+<KS?EEe$,>=HupY9is$k2QpwZOt=A8b`Ye5@
H]truag,hAG`ʮD
R(~ߏ֡;m& [Rktbqw`6~z}G]V(SuH#<g>}K<?{J
^ى;tlI3]QeGM""rW͊_I6U'diѬ|jLRMOJ<*"VN$&ֽV=(kfY&kDn.oBZp+u͛yN(D \Z2*_62`aOyqWWډ`ifdH7b4TMjmeYOMI<Q>hluզ=WTҬK/%
c׷.@XZ5WjLj#|n Mͬ
+M~탲2TFιVb=핶WK^NU6emc")WumEr%u볜_HQn"WwϻtǴHjB#Wx_%ˏ]"//)d+P%+p q,'>tx	Bs!fq)Loоa(e9.vi9,L&98BKy[jF`<+ϟN&Q:AMgɝ~CTc|*ۧξhG>]U^#n"frC6DkPmlW
<҄
{]We5#zپ\
Cb,hw8AE#a
/*a}b6.0e"f`8\D1e!cw'dƀMs~OjRӛQG2lU=vꭳ i|ˍ(C;*)O}9{Rrנ%CdJ+̀ޘ%fpN*u"ә.2fYl0/l&}!};&!V+oʛT;Xy$nźÙJa6s
qH
9K$az4<~ΌM6aFO^?hֿܖJqd0R$⽏ `24^
,aCLtL}ed`K/b[`'ܥ{|o`b7U?w7݇<:\vu}L: 0[qFcJ AynxmN#t6yďQ	11gוAJ;r0*wIH{OLEs	#<UZ	5熇?#j)]ecJ8OPWFkwtm(=&x!HKT!RL[ēX!`vHpMftwиB`3f\IE`3AVEkc䥕P"Jqe`U	1*׈3ƫYoiwzZPxdJ7۬ 9Lx~T"FզHcǐu9Ovԃv-?	lh D5K@ AM[fnߨ"fFlG([h;NWv	ojIIc9RƉ$L6E:/q :}LNvۦ

d1^75dmѨ5d}]|4z ^ C6)y3RPj	mW\0Pܳ:zbR
Ҋ!-3ǣunR@9Nˇ~>^a=ðR9sO4SW E=NS#Q^.u#XI22ڻ6mHqB뒬8G<9΋5avNdZ7鯹#Kd.'~QƄ}]wD}}V{dgQfic	۪s18s$#hp1'dcy-ݕߤ"ޮaPƋ&pn 7.
&=CR[(v#'T|̂:?.rC1	vdnp?d^Q\2UzAuwQײ[b ~SHX7@u 3/1ѿC
8^kN (E4NipxD*^Vx㖮xCoF(׉0+FS8`eE]=TC>vltJ8XG+SY:J!L;pqhZ)y"r1-D'wRh{
A@Ĳz(=KN@('&wP󲏙X2Ǟu)qZ[NKrq8pY|
tu@!R[Ux\y@5q
KJAzv.IsnGu1I}kvt|n4yjXz[z_._5j/,.^\" A?f'
8(J3
1|XKi)BJ%nP<QPrfS, |)}!}ޔcEcw
bv*uob*پ)fԩ4'q:&Uث{#Cpfİ,ɤFBDd|3;LIv4i[-{5'#\i gIH(g
R8gk݅*8H&lόvũhIE
#e%Enn#RюŚDNꄫR
@H i=ZԼ$Qp8t#oEIAD>%7Ԕ%UapYYIB@E;;Z!%Z!~Y 6DH\X }x
:Bޏ=t+`EwDJ;}CO#
mY&i@Msߴ$v&UxexC?2uH(ex09ܸ~L'yPٓaMscvuƻ~)ߤj>bC"\=G|oqC5%S5w)RE@;f~xHr	*# DiR
s`cٴ)0rT
,G|MxJϝT6(~7ױU0u` TQyn${u%
|-'r
76鳫g?>z{s}昹 Y*9-`S=4BAԳ؀q2F7VOpKK))'YؠRje\O@ibe8NqgT_>5.AXT溧J]<	RD*tXѪ vZ!\> 
.'[8A2|_YA'4jMӎf
q' gRICU:<w?Fmn'뱲3{VoZUg?D5h/_#GGas2i,'TZQc+EvKSRLlD`łfslx兒?g+P	=zȹ28DExPr,ȏKp V#PBpeS^@_,[hL0@Xy#U@H16y犬Q_@[goQU|i-
t-<	*	hX6fDG*zԹU,I/tE#5X)-"$\0ބ4[/BQc%kP)zO훟,pm&.1-QHθWbd6jQ=n[QyN`:E~_JyCb6vU(΍f`K);QON6dKuUڶ٣$xCvtJL
B"B0?o4QtF0u'.*HɕxNr[CZ wI
҃(%˯ߤÔ ȍ:q_Ym<5R 4-DqF^M+z_|C="<$bqn5`:ɛm-Yš"D_ KR;BttdC.9z'/A3˥2.I5]
YCGGIXp5tf"5μ/)*:WkEP颓yoh':_9aA?4굦 U9M[N`"bF
e1~B䅝Ǉ 4_ڍ"g"WS<QB|#xԗPFI Pq
[%M7\;jU}5%CgTwE_9poB>'ׄ?8#C2=5[obdiL3rl9'}uf
9%<&\E|kƜmǼ7GQtϘ~95i
N9ikll6Kigu)/ˌ'CӟO/<1ͱ(0}hjo!x5`%G~vLFH/*C"[;*7N&/s"3%ށ%{d
RԱ$1MK{G_\bN,%MQ.Mm/Ke*bl`I
a7Xm|PJS&oA2
Xͷ
ҤOA<V]DC4Iw` qP|=ѾLR	H{1s\X}
qa)lq!'/.^LY~lG͎$
0X{6ΓtE.KdȮWI#RK, wӷW/߽<}{eƥb=Hg;ts8lzmDgp*	רJ%j.(Y^mn0z05܃F1&aG!-+U]?X+on[})cEQ(B ^3~+Y?-PAzdi4Xs`h{Cc`\RtuIA-ʌ_DŃU/,Cȝ{8y+DNQ)x/ZӺUhD#ͧ':ʾ2 N}8B-<]g LvQ\)'QEsôJJCr]"3+M{^
`d 𜮮ԓbJ|1
ZG4HIUqNgP>8m]I`Zy/u]K*3FG?~~5!n.P	xm˨r]>ɫ3I̉|֜eh]ğXG}?_{f&eL'ypev 5j{FmJ:Q:s)+<X7)bUI1
̶^:h2b0kz殿j̆`{+xil`sny;Jxey,)6Mمď޻'y}!ٻONGhJܜ;h${b[juHmTޔ36#z<ݥw~ߧ痧'w5cl%<]
CO
甍ix|^HIjXJC"e撤7
)hSeQ3,o~mtu$FsB}NhVi9saк?!R81[%
`n
5UWP#9DDF\SvS!Ξ?7J2?*yjؒ-0.GyH(7i`0t-zG_;0d@~..IDlO0'Y7kA"
Ve/R~XeǢuR6KB4+-I-KpI~Dj:s(d֏|U0S;J
;^{佛NmƄğ/:7_b#}.e
w@+>VsNSÔnxu>p$/Q*9&_q_pRKƔg66
85QlZWAᬨ Ì$]!Fãdri*CA`9iaurEfb1*bKQ92+跔;AT[MN1G'>}d%*lUw%c~acЅfqC;8QT;?4Z?)ww/DSSb+9@b
jbh
M@=*'씭DJX+C.0=,'Eɘ[33R4A3[qM]KY?)%X-2X9CO!s%2`ki/gX[	9#̜6E-N>V@=xxyr
%awzL'EmE+x""-Dfz̯4]_{^_u&`p=ޏ`DӿԞԔBVvy;ЗNXzp
Ds$CJ Bc.pN`1?&(D0k(ݪvîwoF_VWTȫCLyvP{j^xM9JjerPwv9 &-}иs,tf=ug4>c\z\ZTXwA%mNQ/?;5xE<YgEd>;w;b;G=ۆ_bQ9NJ_jWNsoˋlj>t)%a1ƘLn2GaaTGc7L/A~%T(cOJp@1PDTNǑꚷc"4_cSJrK{JFՄΖeL5EZR-6!Rܣ+D:Yѩ!\98)Sm.EgfzzU%- ;"%]ø~yl'/CeՁ\V%>[GCG}k~˻nA.? 4Z@
>CEĲ<Q"HDix^űݠX
6^
(C]R1X7
6dHy&Sr^@eT\-Qql#_N&RN%#7vk
)(ZFpRUEib%dBIRSgׇSr	ـǘ>0[6
rB?6J1%ޕ+8vQirI6:.SIPMZR8VǻHVFA?v{O\5,QS'!W63S<iqD'8CPcWW/_={~u.^R8PV1}{;̱+fpǳ(Y|-=9~o';TS vd7ڬсpT9AG
',Zy;LkQ[o̃:E~:(ɡw'U?"iHIia >RFtTKH=ч^_4AQoP5C\U~hLخ@ 8	ױ7$+:tV<ZptMܢF.&z$x{L"tY8ٚxNmVyH;а:aYJn45ێGFc^:2Q= 0bjbbS7EU%q)?pm~3&nûi~
 *%#\x	2
Ę;1TT971zCRmTO:%kVS65RЭ^V͆ϳLNs
\t6Ni݊Ru:ϟp1ZոIDEWə)781,,c\*I-QtR(&{gD5OZl}fRڝHq 9P1#.D??voa(J~@TcEjqa<Ld:`a6}暈Qhe~)/-`	^M!ҭ8<kx;!HJ<)
r=iݢaJBrTԙe"|{S8@4u(/|ѾeZ)i&9x"s>tf^Exē`s}`%߳7 {=~<,S8}-R	ker$qjvKkB6Xfd2ڇ!dZ=#xVv.u%x~FȠ,afa`pZOdO
`ށSIyYu#*I2!h.;=n )$,?/)#,A 3cQhecűԉH>-iJfSBtp5bE[>b6+MHN>8
U]X'_?1˦bLny=ɏbſU2B4Lo1g?5̠"2YLNQqrdN%wA/+At:?wYQbq"I\ߐi97ֺ*	ȎlP:ZlLBR˜29|:aWE븬qψH:iy!gwO>wF3Kԯɡ1[5+?c U^LdTbl<}v`WYQ8d\{XDr.4@cs7ŗzA[7
CoY+'gָ[y.>gHt2#֪Xl=,,t6Z%K?OuzG6R鸲MrAYͺ]zB#	p[ICyDox\'UPL]kz>'B
֡a3.?fA(:-(ߞ[]y&uvB?G#)mMQAadM0jM0Ho|IyӥK
e^J*y3O)Q̈R[W̰?crWkOwS ()i3uBX	*Uy9#IY.Vp2EJH5BSvñw-|^ Tg
U6\.48D#5/(-
1\KNm<qal$db-+ό|&\ QjH {N2hƛvm	ߴoηC)n]2
<˖~:rHM!+"s)9	P^ԝ9xHu"Cg2SmKdU3,KF┧Kq.Ƥ/_8zY?jyN?bYS"8T!zh7uѭs1
A2~l4˥ZGت Cfq?{΍;ʰ+hШRYaYzK*pziT	VtS<p
bVkOXޕ.^^4)2V*!6\yKue*7Xoolݗo۴2oN$)696UL4^KR\#z\J|`+"t4wn*$V_}΂v
jx"ӿsBGL&`o qRk܂2O H	\@
XJ9]NԵBtj%#I'ƉqaK0<]7v&l",Ah>DXf\4p7sH٤2R.D(7F<ةu=d\8,VmJmExA=7QvRIv?*%QEEJnH3ACQ3umqG¨T3-JnQ,/몹^E~Yȃ:&No%ĸ%(wLyT2%(o98 v!;7nwd<3
SlnI9_b~P:+2j
U¹$nm`mT$x4ȷy$Ļ(ŇҲOyS)'6\-.l8w4eczVVtXg/Ԕ[m\{-/cj8&O'?`wsDKdGꇻNP"Xޓڐ:\-fVR2w}~iđ2<7P ,f
vy{Zna᭜Mh_JK`gfe2G'9}5?F27GZ;1g苨-ϠWM'.zK : BbH|K8#
5XR7AlxoL2-Qosir1Pt8|윹y
МxߝOFFY= 11Y&r^DOAsk	K kG|m&O,z~7P W0umjmj
{Wkիu:H9کt/:^4p@
|Yv+\@n]h︖ʰӉX
h.Sx,O&CތQEaA+jTj`!~!!;ZѨChø7ώ-Z8`zÈftI=S]>1K-uVKs_Zʰ)&9183nu:W}we% \i@d1N"n\VlEFX^c.6N9z޼9}{r^^<0CeHDA.n
lRa1 YR
E.Ckf%+[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Zmsl
˕R$eo쭔M^im%]'΀$d!Mt=
%Rw[F_~1[WM_L}GGjfԟ]Jٸ
kT[or6sMcf76)
]Z2^SS>nmTn-v}e[-Qn|hlֺH](h"sW붱^ֶn*lm#|[׍exnOjUXR-!W1KNr[ӽC}Emnb
I8&bJ©U^}vmښσNF2jmXT^d<0gTe
k$դ<10|:P!.TnB7_qz®6SE&ڷЭ
uIX5z).NA?|R޸&!~0

kBW%FmPK$@' ne7F(FmP1Z9(4S1mo\Cٳgj|ɝJ+CtVlR$qDb6X0f+x@Ym	Ζ,g(3<B!J}/>78`UX]5!bܒĈ-t 6X3d˚oփl%Wjy:I@"`8~MCQ7ncsX73
AdDhkڨ)fJxOATe[ekPu\5D"B (|0Wog'UK碯|rBg@\>ƫ-lSlM)	4K22'CtɁ<:ؘͮt-0QTC׌2a	
vIaGnG
>^ڵ󞲔Í
$[CJV	
[y" RiǕ0e!`AAekA+ϣEх:,NҔ?S:OXm*
 Ycj]y
T ,[P^6@%ʦ؏6ЭT@f#G{AKbJD?.VlnKJG\",fݓ
\1*I(U=!4H\6![wMmݙAJ! >nLeRpΐ֓I۸0S6.o3h,wd"tOf?OA4r
j=]nd (Kc%)ћ/>Niuv>;܃;H0ǰ!025ZÚꤓ?+ $(ҡ{Pd^`_^()4ȇ!,՛}[wf  vhM&@jdm+,ZWQrT;&b|LR)5t1Yie8-T~:v
cS1c8*貮ٝEh,5LVN@%L	@:ivF![!\g̑_j]I	!ĊE]O(4({Z	ߠZ-T^޿0{{>fhQ`u
i$}A6'yŲ*5)ɦnIv5xz%G\p
0#Gjm9,]ҿ0vq|]W7f3%
:s^uӓ>0˩Wq̨;In%bKo6iKdygFpHڠ4 Wڃmj6;}7l>;9H$s[ȱqsXs؎L@EI(w(0|1*eBR3ڭ!4;ǐ^@$ d6Q	QK
QPTbSV PX'Dfzfmf#u	/E)-%ZbIh;sfH}Mr|DX>AbA|ȶA=v9z@˃@JVc_jK@i*'AwZgR]UKfkGQ
0"3!D:">c
L,oon^ya[`PکkV|ut{d7oogWW*H6-_^VI:2"C?a{t)SELXdeJ	NDԂߓ[YouCgJ*uWmW2 /&WtwqU̪\Ф6H)V@{䟧^zzF3NЇm7~&uc=P ("`eҐ	GOxXYik-WĐ`7w7-D
wW#qt_I$]}hxDRgN˫Zػ;|vvu@![F㽞
B@2LY%< rdsyUA{z֒ D9b)bKg#̞~R~x2Gx?fV/iO3n7ިb(Go.2ˋ7ۿLq1STj6"F^e~$qy2F6]0cut-@nuQ-LLF
reD3M"rDAےa9A
C"tpvlQ/:,:RkIS<N`T%v4(ܣ퍸T̅l%ny\8d%
baDhj[q<I僩8m%tdgHveeOJw!`||uVsYyF 
vb8IؙD:ѩQ( h<%ĢQ̒ѭT.ȜO3ʝ72{DY
\sSw=ڞ+2L2
 M1@HJ#Oɥ_mmsu5]/
Fj~ȭL
'j
BWǾH"5G->8j$\[e6x9r*yuqp0(
Uσo	,9PJ~In^o//?	Ι76|ޡs9uC1>H0mIs
42&(;S ~Eps%cEk*׆#I(ejcvɺfo|C)sK_՚Gq4/|=owRs1Rނ	ɓ&
IzQ iEE<M0n85Y$VS!DCœ>&`,J|>C|ZLuCS:迸qcfY"	30ya-+9Kς
{V.#+jZ@Gh#J01gc51/Wʲ+px\ =b89({o/5ai(kȇl`K!Q÷&u|3x2<%t5{nufE5Nm3hO :e	
K|"puoF.TLР-?QCn W;č5֓U~s5ݜyP^g5^OuK<=A:g<WI
1i%hţ?dCu@> fNa|,KȏՃFrAs$<V]ytKD4)vC;M^KbmM%(fRz&[702ߙexȝ 0dnyЈ/~B襚dk OGӸb7짦Jtb4ڟ<yh	}cb	3D;õ1KY4Nh6Fa]U7L"o~L{&繚mC\X9O4hXNK_Fck0l^FW)'oE?=II7f%q+=&yڥzwDkv]\⠧csnten' >/aR$*B~g
Z~xjߚ6{#ۿ)M|zߢ[&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Contact: Geoff Kuenning <geoff@cs.hmc.edu>
Source: https://www.cs.hmc.edu/~geoff/ispell.html

Files: *
Copyright:
 (C) 1983 Pace Willisson
 (C) 1987, 1988, 1990-1995, 1999 Geoff Kuenning, Claremont, CA.
 (C) 2001, 2002, 2005, 2015, 2020 Geoff Kuenning, Claremont, CA.
License: Ispell
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 .
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above
    copyright notice, this list of conditions and the following
    disclaimer in the documentation and/or other materials provided
    with the distribution.
 3. All modifications to the source code must be clearly marked as
    such.  Binary redistributions based on modified source code
    must be clearly marked as modified versions in the documentation
    and/or other materials provided with the distribution.
 4. The code that causes the 'ispell -v' command to display a
    prominent link to the official ispell Web site may not be
    removed.
 5. The name of Geoff Kuenning may not be used to endorse or promote
    products derived from this software without specific prior
    written permission.
 .
 THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS
 IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF
 KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED

Files: debian/*
Copyright:
 (C) 1995 Kenneth MacDonald <K.MacDonald@ed.ac.uk>
 (C) 1997 Fabrizio Polacco <fpolacco@debian.org>
 (C) 1997 Martin Mitchell <martin@debian.org>
 (C) 1998 Stefan Bjornelund <stefanb@debian.org>
 (C) 1999 Vincent Renardias <vincent@waw.com>
 (C) 1999 Mark Brown <broonie@debian.org>
 (C) 1999-2004 David Coe <davidc@debian.org>
 (C) 2001, 2002, 2009 Agustin Martin Domingo <agmartin@debian.org>
 (C) 2002 Tollef Fog Heen <tfheen@debian.org>
 (C) 2006 Steinar H. Gunderson <sesse@debian.org>
 (C) 2006 Roland Rosenfeld <roland@debian.org>
 (C) 2006 Martin Michlmayr <tbm@cyrius.com>
 (C) 2007 Thijs Kinkhorst <thijs@debian.org>
 (C) 2009 Daniel Baumann <daniel@debian.org>
 (C) 2009 David Paleino <dapal@debian.org>
 (C) 2011-2022 Robert Luberda <robert@debian.org>
License: Expat
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
 "Software"), to deal in the Software without restriction, including
 without limitation the rights to use, copy, modify, merge, publish,
 distribute, sublicense, and/or sell copies of the Software, and to
 permit persons to whom the Software is furnished to do so, subject to
 the following conditions:
 .
 The above copyright notice and this permission notice shall be
 included in all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                                                                                                   # false positive
ispell: hardening-no-fortify-functions [usr/bin/ijoin]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             uRn1|WCnH*EQ!5чTnw}4ڇjaLs(z8?:hąg!,JRB{*=grP)S[B&<gcӦ
~U+	\R!0 0atzڃ29|;]FN?4dB.q)d}D͒rXMbUPxg֩C9:v9?r>J9],hďύӁF[1jֿсI,컃,4!<WBLoUy+8YAF3hdϜ/U=,P*hϮ2rlU	Nkqa_{q'/!Ic{±6̗_k2F\n:2Iy}%bp29~*#&Z2HXڔ\}Ϳ\ҵRn{%X1i9`Gg6/<i6HY@^!
 8[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        [sƒ]V=~gw/~0B"a0lRR)"KTrO%;i
2OQkQ_Vj*KѨ7S\_Sy]oh5ShGMfD//e=2{^+*E;c-
T369Q:h(~8+-
VX
x#QeV\D17Z%LfMT}"R@,ePI"'bG/jd' qN-L.dīWw$"	^_J|LQB
	De(-$:9wh:|1kK4ފդ`F&xa;i"XM#ōVS"7
@q}JWyU+xGg#_mj@<%qGE:5oοq>CLd;X""B&$PsLīCG9Z%,3his#J/hNWH"I#u$J2D&@` xnPGdMhZ@1(N)cķ֩׿~l
:uZ\}͍cs{ջ~o8p'|iyX=2Yt>=:'?t]A7t;^YvdD?]a:LRѿAܮ;"ݸÖxh
nC3hw׮5|큵
wvwwj[@Ucf;贇
AnYxKO5\thLuߺ@;Nqй'aG3mwݾǊ{:epX Ws{`0tctA_=6|&¤EY|T˚k:<h=drWJ+zۮ{;O>^s=z5?>m>
m\|̶h]eZ0)}gMG7h
EQY|p `WPf@f+N?iQkK*Fx.Mp_=zz_``zR?zY?"{?p"WKmIǡn8SV _⹪_϶lAjy֝`[js`OfT¤y_oh~,`'FP
k,ivVimG	
Xސmq-%ՋwȦ~8C=`Vl.gicgAM(LP G2;U?x"f]h6Ob9mT=F5L˃]Es)p kVT~BEA& ?~^-+SH!_Qa*G}X h=3U&*~C%
R'D2;ϙH3̮-1.^@qMl7{)?w5CElun1E	ʗTq/v&bu]y&QA,fXﲝ2fNC XNe,a
9<߿'_In4dKtD<(rqN8G62
ĊuV@ZfYۧd^h >.h/ͳL=~ %m24q&jyVKnq3(g8Ȣ7oݧhq`Re$wAP_m(Vn=/jdxdA~#2H.@1dz@=9M%Ze(_|7
*|3Vˀ;t'jkpvkA%>Mc{6{ԡxF
yYo7kˡrV	34Ⰳ4vZ"ϊ|ڜ[!b;Ed#u@%c
mSXT\rQOQf ޸0!<YFNB}h
FnՑAx?ךZ3jARU5Ae$	ađ/Q&5)ÔRT˔3,Ys
ם@ml	īvyRo|}؁|0]ΧYr;MY08fߓ/.R) L.8S2b飅vIٔ{|ߧ|OOu>1}1P+8iSZQ
㻓)WeTyq2`uy=#E@qA4ɋd'J$Χ:>PNuxgw'zcRZRb,p<^N)PY$^WD`B	rf}<=MNuXyQX!yO{O
wiiJG\Sdk:VMK~|EwvZN;5ߤ+'DI1Lo+vK
҄uT_WvhE+\UOw%g	Ϗy?ᛶvPucۮ:TL!f.EJ-UXNԴP)_T{PDXYXg+;
E""tp#셥ׅ뗯X"9g7YfMϡ-=9S=ޭ&]^XfD1tWi]K95Ƃv
^|Z>}ROz֋`iQ/x+2ѓy9.OL
AW& M"X4s
<'ָCOhB>MXp-C
щ\SEJ3|%p%93F,(^L>M%(>KBZaM>
rhI՛q8Et%6ъb*!aUt1t`Q
AڡK{X@:HMe	EEa@g55F$5mL
20jg珀Tb~1Pu@'UݚosQd6$:;/2aQ#ӂd_
rڹOws5[IzŁNa"QA|FPQ\6&4"w8j
"ݨde;
iCbI
@	J	N(Jȳevc[X.N'LTI7
났-:Te0%Rl^$h4#-vyOѫ -m
3e=isDCYQ7eKc1p,Yl9dy2w'y0}Ҝ<s\
zX.KɢR1,c?Ǚǣ.G<Mۑ"t^fxeʸB<vґ0q=ɐ4W!ص-:(znM23V8#ↈ}=۾sQ {Z76҉'h_~אy%;,\2[Hxi(N̢s9%lKP$i<x+A-94Nhj
w슎ͩ_<@WAxMQ:m 0J6Aֽ5e^-fWya'ryZ,/
ݞ{=Z8YGaO?|A~vax쨳
͠ФL"\-F6h꘎|pB!s*
_QM./Uli0?P93-jX%A>³5G_E-lU>}я:*dslMyR4r5BdR#Yp$2٘1ki@((Uᶷ gvP/Hzt]䍰R'tD;]4
yO`"h?0zpXJ	XM
~Z:"Th1ñⲴȠj	N`R9F#;Ƅ^l|\!Ӷl7ݱ8RyXr|3z烪%aQNyF1*
rQ.WI6Of_ׅׅq4$ve}&٢#*'TZsh+c>zS{+ '`a8'#eXH*1E|ExddoRJSuftmZTpa%d97tqDُqA# ٘SipS%ӬdKWz- 2?vJ!`$*=O5%Wa%fp(eh|-#Tź@͛(J{(bGT'3|Nl:&j-NLmkli\+dCC}c@#ƴ'Tٞ6yDy==D"$%jJ 
!g{[Қ[Dy<S	tc.BO5:19ľR
;'
~}bsK-{?:=:|MyQXo%zTMbK
IGΨ"MCeR"!:QBGQ%\d'f8C̷3
aV>fWIDY!h$|JJ_	:[1SHكp)n't>C-i$3̹Z\8vyd>I&0TlQ%
Hŏa@	#,1Lla
XrY`Ӕ<?)U{6IKcKTdc3(˄pD24@Yh[gjU>ixZұ;l hr3U:);D?y?$k늾U&lb1kLEȶzFQI7pvlPC6yib~z5[v3~l7P6d g],7\H,sZ
jw1Vƈ=nV̜*	{a՗'tiHlE0
=X8SeS6~K1/|wǈ׾,혁dה3)UMv<\lye?s(;b۴Ot>q,719#YZȫ7P+ʬL߻>?܉nhNwr3b3*%C%@r1oۛI's^9TJKVR`[md18?q9_P#QG^|0,KHEvٔPd0ɚ˗Qp~=]Qf\tviۘBڨ)Ie5+)[7ys }Dps+M[%$ 
+h~cZC ^=
9-3"y;
ԴF/**ɂ6{:޺6-Ʈn*u}kwVw
=mJ괝iVlďe)k
6	(iEϩ]S ̽$Yv==}OoFޔ?Sl07흛M
5(S%t~nr%9~N
b)'3m֓ZP^cqwᆠI!$G92v36+vY{Ϡpme=2ګ6t
5&V[־
i%k?6X۫ޕ"snONЏR:LRg"l?$vsW]cxƈl
R

Ǽ̃QUP2_[noKbЦuBnKtySL?{@s${:_jr
WR*q8I9Ji4
vDgF?Dɂe/k5z__/MmHxcqM[5;g*D9wQSE(Уsgy$]0 N18a}DhkYWbI.iO֟܇!9bʁd]7|@R@0Ă'Ų$/;Rgءё61( j3|hiݰ̓@:=9$3EAWdlwF)rw7[
&׮_]0VlƢb.4;)l@FSuWF)ȕj9B2"eѣ1O9qǽLqH-yq\沪6v5D WL`a-&R	W9`uxytL0SXJBﲢt-
o̎ȹ@pCX2/A|+>̏fǰ& WHOA`n9ÄQp
A >%{LCLY^Bގ;jD`NnJ'o^@vZ8F!  l<T!la2
Qg"pۿ@urƸc%!F=6C~FUn(Aylj)9tdvP`HxJxI:Be.ubiˎ!>{Js05X~\np\yDܰ< EōݶAP/D)SoMs66,-p?H,h-/QҒyWd}#N	g's؄AChWavUffOZZ[3c? q:>(
f8i;f>c"I`}oT	q5I{OI"'t
.8ru{S^UA}}e Do!tP7	]i嗗Pfmx`lOz"u!/W]XXK=]0CJعMK/u$:<#~8q>tWQn]G}z/9#hy
Ǆ@$}䏅W,+ڪrn)
ηɎ\ӌ8,g_lz=뙃 ȓ=	/%l]G 5M%˺3,G;?PVv<|#2uM65|`h
	C=hǈU^.W|^X#F|4m>%kⁱV2VY=x8 7}3`,"HmͿ{XZh^Do~0\iU4}0ikQ4U&j!j-L{x{:Mc@4DzB}	OqA&Ն	7q'Iwݩ@x>̳N[!>Sؾ5k\ ֟DdGd4w~)Bį%9A0/:
9jn(`'4kVsD2fϯ_:v˱iwEFwW6<4kmgeԫHo	gOh]:aA{
Bj&VA>2>LNP,(b_c\Ad+5
TF9gwodNa$-!q9tF;YvGyG"#vw;ü^e|j˄;mt7hFH+*U*%q/	sMMWTuT$W/=v,<.Җ\(	0
`e]&SO e(fh]z[T,ų%ֳRLc*u؇]SG<
DfQ;  0iZPtƊzHO<n{_heKf~M9	2J༱[#+/:6o_P:Ǡٺ5} J\-E]55	M\Xm{HsN^#_!tYچ#FC_N
T3mh
uު*/㕩v+`a$ +#bv
x-RBp , ,)4/,G!Oѹx (e&	8vY6lgA<XU(@~"4O[W-
Y(,+V,.*ՌFt!ɮV
#} (=i=aiBϹXnYM`rp gs	v"ȯO$HDP`Ùggl6Ն~`ۺcJ|L㷎:,0,O1h
	W϶^A!	5uP.2؂p?\a1D?:l|.0lq^; Rpbp]쮂Z`05k{)OEVreؓ {9%5^ uPiV&$BU	֋k/1uUEb`B8vf>A*ԺAR
Ru?syo?=9@o^1xPHG?~nͼٻz=;V(~qƅ#7d<1b4mZR÷ <P81J_σ{4K7:_\
7@m#D<Mɇx3pRXњv&Lc0N#]8LTF.YCwJ s0Mo2GlQHc?r%Uz
sW
\	mMK2Yq1iv'oţv@~Ar۸Ɲ5CUrJ7`i@Ed@/A$ΜXz2[C+pf-?KH{'wShlR#3&˜
 \QrP9]z/rYJ .!@zDCcw6"W~(8fcħA
AAiNHQ^RbBm}iW[FBl꽳CtK(

AHE}[9]rmI5s
w&ueҽ`r@5fe>q@NbJPs4 ̨>we0"3,Y2f)5u6] h4A;
Rg!=1XZI惞qf$S#ǇLyEcG
Z,NICcnNFXzf,nf_Cʍ9
eت>ȼ]q"x9[H9ǰ
A#݃.52*6-*DNs͑vZt^"䪍O6D03S޺Ζpdu7l@2s.d|v&#,q:2#b6\xldɁVVpCrZ811FA5F?c/@~86ՃAM5aíKӌ:!5SL@];H20W[4cAGJuzMzRw+s$],xm
n1 ~QIan
vݏ&#|'trɩ2늹5/(Mr:#ӟftW{4wl4Gaּq	q w3gWa6g_߶[/woiοٿB
&_g|[ӇF~RɣvRS#_Iz`,,7%\xo{rC>܋B_+&VJNFߴra %R{hOJ2vSe6ݔ'B)𫣇G',Õ"uIX7㜆7ip}L:_?_(EÉhY\,&eim0' 
Ƕec4JX Rm:	(H	ʏLy9l},fy5),e||
ӱTdV8S _o](zٹ|×5၏dU|7RO-~t(qwE6aJһKd ;~f}'؟%r)#BfUPWCze~_O5Kq ?"|K	%Y	-Zuic/Y#+G4pQ]W@8WWt++N\wzrowOtv/R)O^dKY2C޳\("_>B\Q
j"W_Hu /;v@-ނ~^ei.t-ԧO"i:F'`[z?P+-<<;HQ*l0y!I,4VK2)/B\dWS%lrF;	u̒%A.ĩtOS>!faf4]:˖`9 psr3< na+Ql/!f[тWYIܳ^;g4!1ZJx'a\sugICfs9lte5h;KDWcbnr]PDw?$qJpiv. GRvzC2K;q veRcU<7
Z)Iq"U˼DՖSL	gLZ"P&$x}cb(m##L?d˗/E90ټ$Ìٶ]Ї
*ovQmh59{|Ѭz7ᏇL%b({SJfqMHcpޓmZpoXȱyOǩ,iZ{RYxATH׭7 k`	Z.XAI+Ilm&-5Gh6$?CD'zW`kkq@ӋZRI?#i	fi@/8qyq6&*XC`Ҝqi+ƒITPږmњO {(,v\i̒^YxyU)zڻsAHՓ|C%4NݞUیEࢫ~cm.]%6!O!s#8y_5_s|c-ؒf@jU%M&1t\m{ 9;&k"#d
vrE%J\u:v7Lv0E8{Ep%T
OS]L.f=~}JU=ЀҚސ$=t
[hYn4c;NVɔ$#:m,:)]Sl`'ƄW^:UmXvc
U к1ʺ5+}?Kn%ܭ7!oe̡;C%-;1ʊEL%)(AU)!%SP;_v-%AؘcG_c-/NXotطz~Hsg2]Vo?SA9(HkUf"4kMVm8U}Z_4%Ǝef(J»J ꤦ<!ãin5_5B/BfG{ )VHԋlJTN]GҀ,QWC|ep En+<A\yG^^NgBâɿl|E?tgI0WpjIiZ7(5QZZ~M^ \,!YLCpEʼK*_[rk5}P,)Bn9%f[sx){-I*)\D%:ɻИ}츴pإFBSeqiBր :^]cZG)>";/VFG:eYp'tϼZ:0kU<fad;Bc{HaU2i8P_nPp?m4bz%3??qv%1g7B)Ɂ1U@埿''S$z J0\E	/v16
#6{=x(D~X
)e<w|QsCH'_Dbk<#
a>ex͍0ΥyUupC9坥#xٍ!U$L
&֝9 ܛs|·|Ea..|y<JՉt{:!)`;5MB2O
5(o7N2.E"R	 WnρK(ԣHL$3s|==nIGհ	hs#\۰8uiϬo7#6c=x\u¸z|䨢MJcβ?թKG8SL_fF
E 
TߑobK R%N Ġc&q4GuiL虥cT<olSK4aLI?8,nS
'~UW\?
U䓖GKvC|H!)JLɢ]mm7Q,0y`tr@snd޵D+ӃEWiHQȑ2߁5]I9¹$fK7|a.]2Q;Hװ^gOz񜨝~j*ax+PщDy"e:3u\0A%6 *^0!ovdDۆAO[#Q/[b]V>4%/Pn&m$d
գ^v|b#ud<®|O$)mHSRƕ<,@5`|v I_?H?Qq6"7GizmӴ-0WY4U&b5:1MLW fȠ*R
dv+pnEw}v4q dWJyh-PY<oM#QGtDjtM	w?hk&ph}̬TV[ӘzS?L3gzGgCi!y>YޙpxI
s
.GL@`k*`F2\$&9W)<8$].W[;vI(~""H(#le
rwc7Qauh$LYEBL3\)	r^[ ̱`NwCV	yq{ry=ƤmdN
0lJ_-`/Q ͊ב74Y\uUj=Fgc4u+FC[vI"$V_ׇ%[&Y}(^u),=	aWϤyL/;ʡKT9.F*ZγI1
o]ƓYrꈪ/&pO $Cd{(9S*q|t-&
6;4ܧ36Ew,KV]0;mGh),{xs^<;?Og=xU
c17qdaw2kdTZR<LEV(Uq˨,	u
EI4_$- R1VFm]~^<6mqx n^	\"eA*
S) aA ULd0ln7qDܓzgt*ɤϤNr^{DItZD,#Q#0A_#<(Jqy{)
 gB%.fKi꺜!P)ij :]
3
rżdY) T/i]㕽))[4x8'XSՂHmʽ%Rٓq6
cFhW*UQ^zv]%5)(,}`[_MTjDeّ i2E&b;W~ON"'ޢ g"jd]Tynqocd"ͳ Ql]=Tv\5^51,??6n%HZ!-F:VlbDQ/@yTM.l]]8e>%d9PD؜
0j)ASt}Csgƃ->8cЕ U{\ii7lmyr)v")Ȧ/7RJ\EˡUV؛%`p؅}cZ-"Β<S(ȝ	fg4S;Juڿi}GhTFj\1Z"MyDr!v tҎmt]9
	Ms2YHU0gtgeըyVA抐dD)ӈAbL5^ȯ"Oٻ}J(׫cfc^(IXoOxT04
P:?:IP1~$,}D#WLAnQmKlhdԊiw	u>4HvˏbY=+7PGLG"҅PCҝJҤ[<s|~jE*:C908)IkoWlU+ AS0y,$mn˒kx3#ioj{u3'^ādvH:1^U9V!R5"MyH0
JN4xOL|."	s."ܹ͖
;ji̻J<AK1mvWpҴAnp㟿I;+, "͓,VBI|IIsVs"]UVjCqy]yzO@/i+2+[!<I!'njSlK0q%n쏪t1Q&&uB-X3!=azR_o
d`ϩɁ(d~ˀLʉH;}S%]3VK#aa{\XV2I|[oDEF}>Q i!HmVVsϴm/_<M8'IK8 ,F/QmET(T0LƑXYCj9c܀ZVt|{)5˭2t@M׶Aj~c75AslCĪ$
P.P803♠Y
ϳN?J{i*I67!d]$܍w&5ƏX.3	` mmF(I$܉ׄ*+ZN6Y{좪l_%<4w<.^gzWg/{~w7{>ȅGfӢкg?g/O]]
ӾjbrgKd~ޡݲ{GeFQ5HT1l$0hа r')JvP.jorsZA3DُJjC(ȜPһZn޵ύ*WMRҺO
?{y쇴XGl[^Y3>uU}u;J < '3{BW/s
RoW'Dq7r^-btl}/xۖJ/%ߌ҄ZKox|KexU?|CEG3qvxmp+cS7oDo_?o뫼`Uh%[C濘bI{2GdAt@	e?0Mc*DS_,,A	$i2[*ƞ=]#GKd_`$T
E[ܠ/5wg%A*SbbVKwSG%p]7`AkM&hc3L`ODӺ-R
An-*c"/"h2s2tuQ q`"!y;RsRŴ|c)Ncc&?b?]|.{K
]Gur%HÏY~oJoOZjr .ihJ56ƺ<hK:aD6ý)ecW
_#3᳧ Q>==5xoH
 9(]uUÈ>#:DP5:􋊜?*8U4cCU((ΟWϠL>eʣ95E3Sq-Jї茈ے:zx1#LUXWYz"h{0"k(H]ԑP(ONzoG=:Sq                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     [sǲWLq|Je%6>ul*7JYKM߯gvgIn%(0ϯ{m6AUaQ9u:Gߩah_voB'?KNS.rua߷-?h<Bq/Z4SL{LEid*ՙNu) 4yʏUdZʒ"i>y.z;ș2	y8HK2sU܇>w~?(y jAH2&C:t8T2͒ Y}>X&4GFnLIt@T6aYK&+Xe
7qdT̊soIB~ЏJ;nDwaKq5<7>ŗHiUϠgu:ɤk2>;-gרf4J
rtxQ;e6ܙqiվ%+!"R>-cpc&5G=UYCˠ[?UJ/iǻ
-Vqbl8IRbDd?VnFIaZ
)yu,eV^xa0VcoW|=88럩O}x~~_]
ޫՙ:^MFp4VOo9;;H'zpQj2[jpuzqsz-2j8QM-0gJS\]Gw2L>1Kw{7No.z#u}3l0>
.gVW5лX-6{ǋagQtB>B~`}~zO-Cw/,4C&wֻw!hfԿ$!x2Lpx6fZX`88ߩw3ʤ|r3Whts=L#~{~^񶡥&.Z>G$Z\1O'LyBgbuڧCq07^{d7,G-Xjpzg?}2Lb<03<gRFgHu$Ҥ|Hs@ք9$~P;?glL#8${QpUs/%Pb&.$x:&ۇj.Oׅ3KT8lp<zfײ뽃uM%
Bg:ΞrT;<V\*aph@$Ds;C>v_wq${ y1yЅ$fot=x=z;)E>R jTsbSa΃ƘODũ%crV6Z67}}IOd;7LV :PwLnh#Ί⧇$E.P.ݩ[ݑ|
|}{Pq ~wuK63`<% z<_ 4 Z=OY{G):zwW8l\ʿ+ ?p#)qN-b*Ccā0} v2q(
*>Mjt:VQ`cĶL=_D,y@u)$f~uUt6QV4cOC-hzT08OGNO^jdAKE{Hd<='a/7yAN>C@<L!\ X2Dx
dIY)KYKADEqb4(//|	6]"I*A`d]N.
mL 5-(;od܀
f"BWp&		:_5yO"$=G4:dy!=bPܦkƱNJ+oUץl?a0'BRx@&hWF耍ej
?\<1im3u
"W
L4ŇJD-6pEP`&U;s.b.#c]0D$ <\A<\Z߮~#?3S`oe1x
7mޏ
7{<CW{[w;)`
[]z Ռ~Ne(#AP.)r
uFD{ "oo:V$VuN*4B"+ƦzNf*1#
AE3',؋@>5<9TH
F/3؝MيBUr{RMj觲s`U%[ɧ`"`2Ԝ>m/LojhKI#mr;	yzEafi! ?Mz } ^)fAP%z'+@L^+
M4LsQo^^E­f@6'dd5=mJf=Kԯ7X_.:4{Qf)gTί3Nf/jvƫƗՙƗ&B[]ڋbIm2%KUkc`<\@ak{ߋE4l:H&Z'J(,f?fz^&r̤8fHW0eTV՝E4F0R.\Fz~/E3F89
'ts0Jd]5&o:#kL-K5ϛOu.Y{8)1/Qo2O`r+YU	P*..ٵ]J2SYgKn6zΐ@\s`x
@6;Z"-4^P#PYF)32m,6gefWa3<9u2f,Fl
74e>!e7Lndg9hGlYKi/(١7 <Z&Q:x4<Q53_'D9nmS5Clpt-b-\K`PdY"i$y/-M3(A9Li)!ӛVe\D
SK?naW~\USѿٴB9|#a4`ˬD߫zC(~5{`֕(<B9JlK#Hl8g(;ӚrӰUxZ1 `("Y.VԼ{K{TWrk)|F7"(1*F,0KPU(l9pk$pڐhIh9튶LQЈh"MZ(vrW;r!oۻ5Z
>AP52"mr xXIW:
YCABLulP5Rՠw
(?es F5]z֠j1?j>1i"Q -:bШh)(yvڵx
pwdLPP}
:mf9:!R:7瞁bO
clZF\q
Dc9?l"-bgǘ`ʀ`5b.Cqe6Y,H;@=dE7@%kHrJ@V2EtmWy_.	PρbGei`e2]9[sm+|$W:LA@(z˥甊U?m[Ztvas:PyQǁgiEd2mX7.\d쎁VS
ǷQK"L/C0)OTUGJ"wvVyG^zBc0HYH0ŋ9BN"#IgΧVD&yHG j]Ȟj?CtgDptw[i3*݆ T]YðjFPh\Kԫ);
$
Og"Y#|̈۠ ^t_w 0Gt5 iDjȮ+l'h\
Ӧ#G?*xnUQ;W,\2K#NDǗ4QeD)[(*We@%*8Dul,8 q4	}9ĿW;Η9/sF"Ue9eCBV e*sO*mf}ޞ=
եL6nn3$K*^=N%܌4~^ǻddrzrQizɈ
5iR?Nm7f*cB.M@ocJuv9O?b,ߢ
/J9A"Y䵡/'dmqF*Nԗ>&rlS5	gmyx]C@H_)*)e@1ϋ0#Y 
nTP	w@ʦ2aVc:5	^5	w5V'SiG,a7z*шΣ|,47R`M} zЂq
p[{ <M!|-])J71)CqIؠ<Ѩ.'JT..-ш0[_K3o/纺9ZJlʬz
N1dZs'N.@3.|UBozϫ~-`?S6mKFD+m:{*.':#*/P7^
s g.g&C\mo_9W~+ayu=ukaѝO>,m:ae̅uNi8PxuǷ@f3%$}-ۨO-Jk`&7fU$@lm}=\l(fo`)2!a3QY@I\yX_$hBI˵[ a+8<)Z%auF}@oX;2t+ck4ҳ0V$7jHَq4f˽6VTڅG=dXpNgXr?jϔU#BC
G?)YRIӯߠ"ne:BMM&_|,4ǗC͋Y  )OD͹mA/B?6'	|m S̳XN	-/Ld}a/}25HY/F/3RyG/HkdUhW:mӸ.FnjH1\Q3Fk5tB.re	UuS V5؜/,E#9XIҸ[]-z&8n\7cǲc+yNWv6sEiSܕ;v=w㑫:r0Pl5{R+ڊT^U'ܖ"U-qNyQ 06j
E?"BiJNݱI1|mxD'4+)o*bKX"I)a<wӐs|jH8ێ/2T"f\KڼB64}TzY/RQ:eRLwxOya
*'W{3DP9'ԪL
1Zg[(ei9K%IPe7 0ǝ:qO'"}D׏w51-֓LԣֹEuw=x`~.=TV2yd**%ydJnrz <6RmvHvQЄ:pB5#/AVܛײg]DFlKjTmZ}.)EMm$ xH>	M;m]D	4Iڢc֒j%;
zo癗%i_bY>3d Oނ1ɡUC2Ób?%1MiϋXN%JƏ
'ժ!X0S%}JZ+.yhNtD<WՖ4(c<d{p:
Ub4.*0 6!ʥL[
(
҅I`QqdH5sώ;=ՔDH	dawX6ke$;@N1X艞//*>z8+/Qɸ_݋כ݊] 26m&Ϛ.̮d(VA	VB:DûQ*EhYҾ򛸼%>=1
2Wʡ0~Bu
Մ4g4x(G(x[܌.nT2ȝOJc>2ETu.*?)FINWc)W3:Β@?!AӠ3b$R?.qyfpV_/7ӯhǒl5rɳs~ǉKZNT3"n4ZBF #IJ`tAFTjKZy&2PߵuSk'GмsqkE~{S:aUu)na&뫛mn4ُs8ŧlXq	5ZGUb_+Ueyl>[o7j0#Y2H?@<KfՃ-<;gНRPdp#.I
C|w@7p&ueEP݈{JĶ^,(rþ
$I ʹubU4	b!gY&7uɺHGL!=<kIOSZ3QrɨiHk9|mMu)Z|py\OϪ+Νnt)FSdLkO	}0Æ'T2cXrT]7 Ca%macj&48zy^o$مԈn=\2O@>Ĩjt̡ɅH9:+ykL3E̍+Bee/7b'S?txs6zԏ'6	cdoNdem{\6QFQ7,耒7Qq;0]Wk̎*üҏPePĥeO<e`^6\˨!V}򷄊o^r,HELH@Hk
v#~gE}^r#:OozH<[BU=ݯ~n[	7X豪
c1HzO\7&&6YkDA$vj/룝Ǒ!}Mَ*IEQ%\I#jDOZ:"uOӞSRi
qS-yutcuգv&ϥG9Stp|6/=2{A8KquZ2aMճ,`Ė
ũ`{8C$cYɜ'Rp;2n99'GP2e4d'k*w	`f.mjщAvׄ.CXXUDSҙ?4U4_σRq=~,
:5ca:_9#óݸ9zshBɴb#q:O1_2*[`n Uw;9[I?	7Rp}F:
+SdNY^pY41lW2ґ^f*G&ҵijpA,L^)Ct3KLT%v`3#>.ݻ6\p5]ժӖۘ^]JCC/뉕]R89pn.Y
8$`
Q5[3eaAZBIM2S/NF)_Y}U1*7>tuTDss^hϩph3]&a(NiH_S9fI|6*7qs闏 g֌%FϮ
m |iYk'0EfUT.)aq^@W'$H3mf)M޽ssVKߕ(m5>3ˁ*bgkRObX0d&OVZ%0\-)wڻ-7TFAFPhje*EsJtP%4AQL$]DԌ ?i=5G`
<eҪje"|d0ʐi[XKb8 &ιɃlsCnnMۏۋ4NXt4cT,*z~x#ݕ[8q{<WgToϚb-gg]y>x/EC`DzKy"q'O&I^6OĤ074J`osa
υUmnHUQ'Ȥq&y`|f:̈́ɼ)GZ*ϑ&ԖRڤ&bl_TQgd~aoQ٨IfE
3τm`|O!R{`՞jjvbG lj=fNˁT\\+t7@pa|;ӈ,Cq,
'E Y-s},Tx5P; xB(ib%8 TɴUփ΃`ԘfR@w>E_"57R0#kYg
X$%i$+@&v_z;vNu{nƺ7 0\-;K%=}Gc)I'2PE@A,dT-/7%՛&H Xܽē^Iʩg]	@̈́DY(b|Q-#UYTFHm?K}Ml+Yx籈RfqU +~[\!^70d.tѬ0͗+eʅ6v)d'K&:gkߴ]jmt*j̞lH]:'Gs>n	AK{J:FyH50i(+#R	MD</_#o(Rƌ᠎W:jTt#^>z81x'׏8 K=<XlRX2-@
*<3*a5A>Vwުo"U,>YhaBr1Z٠\tZ꼢vo7XJ/6ʱTt Rñ77myLLx7F~ðV;_+IDM6Rzuq<dP0U{\#&)pC>S1̲"T$HݑAwHF*)l~zUAӣGڄ]0}7G&&4oPJzIuK9ӅBa~pi
0O#;Rw$N_l8ç˘A-%XQ5;Mwc)<Ch+N7H	7DTi6\j_/έ0vFĕ"taU]"
M[/Y[T5'>ťk<^HMHwiB0049xʍ&땢8qκW
x9m] B#E? OUůM
B1@Wp8G 7F,AEnl{5Q
AK'0L$b&Gv"mx<T4۝ěB/i;Q'7 TGfSW|]:,9vV_mm.ټ7A(rMۖ|ǊKF/M]ARM\k84W˶Qq/j0<JQ'Xsߜ
^Mf/Y;_'7}S+s?]@9W	@7 # #V,BuN	"XEϊ+4,[sii97鷻 <Zډ^/P*ػIel\϶"WÞĭ{Д!QWY~"3zDH
ES^M|סkN*l!<KHr!
}(d$a+F&_]صt(S1Byo/5,>x,fqry(|	y˚
P|Tpٷ0y	|$JCPc:<fFC8͍&2U)?}÷}[d/08&)ye*f#☳Jm*>Z??+tFVWK&pz9i:9w-iF/ S+feM
Չ,	>[~VBAշd:ؗC.qC:Gˉ57/4MN#p1UXڴW#P*lA uYi#W_@շ# h?b1.zfk20ҽ_tJIQ
&fsO kwȖ=*J0I]U6/`:$ҐG-f	eKD݅]UV4\*n{h\8ɠK0]qΏ"aNniR/5?dpI_[UZ厇?#)\Fm45vfv)Jj쒿V": ҅A
ܲ7}q;9_o9@f
Xl?kLO)Bﾩo+ 1S˳o[Ty                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              /.
/usr
/usr/bin
/usr/bin/buildhash
/usr/bin/defmt-c
/usr/bin/defmt-sh
/usr/bin/findaffix
/usr/bin/icombine
/usr/bin/ijoin
/usr/bin/ispell
/usr/bin/munchlist
/usr/bin/tryaffix
/usr/share
/usr/share/doc
/usr/share/doc/ispell
/usr/share/doc/ispell/Contributors.gz
/usr/share/doc/ispell/NEWS.Debian.gz
/usr/share/doc/ispell/README.gz
/usr/share/doc/ispell/WISHES
/usr/share/doc/ispell/changelog.Debian.gz
/usr/share/doc/ispell/changelog.gz
/usr/share/doc/ispell/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/ispell
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/defmt-c.1.gz
/usr/share/man/man1/ispell.1.gz
/usr/share/man/man5
/usr/share/man/man5/ispell.5.gz
/usr/share/man/man1/buildhash.1.gz
/usr/share/man/man1/defmt-sh.1.gz
/usr/share/man/man1/findaffix.1.gz
/usr/share/man/man1/icombine.1.gz
/usr/share/man/man1/ijoin.1.gz
/usr/share/man/man1/munchlist.1.gz
/usr/share/man/man1/tryaffix.1.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Package: ispell
Status: install reinstreq unpacked
Priority: optional
Section: text
Installed-Size: 381
Maintainer: Robert Luberda <robert@debian.org>
Architecture: amd64
Multi-Arch: foreign
Version: 3.4.05-1
Depends: libc6 (>= 2.33), libtinfo6 (>= 6)
Recommends: iamerican | ispell-dictionary, wamerican | wordlist
Suggests: spell
Breaks: ifinnish (<= 0.7-17.3), ifinnish-large (<= 0.7-17.3)
Description: International Ispell (an interactive spelling corrector)
 Ispell corrects spelling in plain text, LaTeX, sgml/html/xml, and nroff files.
 [x]Emacs and jed have nice interfaces to ispell, and ispell works from many
 other tools and from the command line as well.
 .
 No ispell dictionaries are included in this package; you must install
 at least one of them ("iamerican" is recommended by default for no good
 reason); install the "ispell-dictionary" package(s) for the language(s)
 you and your users will want to spell-check.
 .
 It's a good idea to install "word list" package(s) for the same language(s),
 because they'll be used by ispell's (L)ookup command.
Homepage: https://www.cs.hmc.edu/~geoff/ispell.html
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Package: ispell
Status: install ok unpacked
Priority: optional
Section: text
Installed-Size: 381
Maintainer: Robert Luberda <robert@debian.org>
Architecture: amd64
Multi-Arch: foreign
Version: 3.4.05-1
Depends: libc6 (>= 2.33), libtinfo6 (>= 6)
Recommends: iamerican | ispell-dictionary, wamerican | wordlist
Suggests: spell
Breaks: ifinnish (<= 0.7-17.3), ifinnish-large (<= 0.7-17.3)
Description: International Ispell (an interactive spelling corrector)
 Ispell corrects spelling in plain text, LaTeX, sgml/html/xml, and nroff files.
 [x]Emacs and jed have nice interfaces to ispell, and ispell works from many
 other tools and from the command line as well.
 .
 No ispell dictionaries are included in this package; you must install
 at least one of them ("iamerican" is recommended by default for no good
 reason); install the "ispell-dictionary" package(s) for the language(s)
 you and your users will want to spell-check.
 .
 It's a good idea to install "word list" package(s) for the same language(s),
 because they'll be used by ispell's (L)ookup command.
Homepage: https://www.cs.hmc.edu/~geoff/ispell.html
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     b164ed45ea9c4bdb4bb7c6d0e74675eb  usr/lib/ispell/english.aff
34fa0778eac985165f5fda72256b319d  usr/share/doc/ienglish-common/NEWS.Debian.gz
0d3d56576e8b39f1de73da924e52c3d6  usr/share/doc/ienglish-common/changelog.Debian.gz
380b65155daa2a746d456eec6fbaf433  usr/share/doc/ienglish-common/changelog.gz
63f1a245712b543e54809d66098bc7e3  usr/share/doc/ienglish-common/copyright
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Package: ienglish-common
Source: ispell
Version: 3.4.05-1
Architecture: all
Maintainer: Robert Luberda <robert@debian.org>
Installed-Size: 68
Depends: ispell (>= 3.4.05)
Recommends: iamerican | iamerican-small | iamerican-large | iamerican-huge | iamerican-insane | ibritish | ibritish-small | ibritish-large | ibritish-huge | ibritish-insane
Section: text
Priority: optional
Multi-Arch: foreign
Homepage: https://www.cs.hmc.edu/~geoff/ispell.html
Description: Common files for British and American ispell dictionaries
 This package provides common files and dependencies for all American and
 British ispell dictionary packages. The package is useless if none of the
 dictionaries is also installed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Package: ienglish-common
Status: install reinstreq half-installed
Priority: optional
Section: text
Architecture: all
Multi-Arch: foreign
Version: 3.4.05-1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     #
# $Id: english.aff,v 1.26 2020-12-30 22:20:19-08 geoff Exp $
#
# Copyright 1992, 1993, 1999, 2000, 2001, 2005, Geoff Kuenning, Claremont, CA
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All modifications to the source code must be clearly marked as
#    such.  Binary redistributions based on modified source code
#    must be clearly marked as modified versions in the documentation
#    and/or other materials provided with the distribution.
# 4. The code that causes the 'ispell -v' command to display a prominent
#    link to the official ispell Web site may not be removed.
# 5. The name of Geoff Kuenning may not be used to endorse or promote
#    products derived from this software without specific prior
#    written permission.
#
# THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#	Affix table for English
#

nroffchars	().\\*
texchars	()\[]{}<\>\\$*.%

# First we declare the character set.  Since it's English, it would be
# easy, except that English likes to borrow accents (notably
# acute/grave) from other languages.  To be safe, we'll declare a majority
# of ISO Latin-1.  However, we do not declare the German "eszett"
# (sharp S) in capitalized form, because ispell can't handle a capital
# letter that has a different length than a lowercase one (the capital
# sharp s was only added to German orthography in 2017).
#
# In keeping with the march of progress, UTF-8 is the default
# encoding.  This helps us avoid some of the more obviously difficult
# problems involving encoding acute and grave accents as apostrophes.
#
# We also declare the apostrophe, so that possessives can
# be handled.  We declare it as a boundary character, so that quoting with
# single quotes doesn't confuse things.  The apostrophe is the only
# character that gets such treatment.
#
# We declare the apostrophe first so that "Jon's" collates before "Jonas".
# (This is the way ASCII does it).

#
# UTF-8
#
defstringtype "utf8" "nroff" ".txt"

options raw_display squeeze_strings

boundarychars '

wordchars       a        A
stringchar      \xC3\xA0 \xC3\x80       # àÀ Latin letter A with grave
stringchar      \xC3\xA1 \xC3\x81       # áÁ Latin letter A with acute
stringchar      \xC3\xA2 \xC3\x82       # âÂ Latin letter A with circumflex
stringchar      \xC3\xA3 \xC3\x83       # ãÃ Latin letter A with tilde
stringchar      \xC3\xA4 \xC3\x84       # äÄ Latin letter A with diaeresis
stringchar      \xC3\xA5 \xC3\x85       # åÅ Latin letter A with ring above
stringchar      \xC3\xA6 \xC3\x86       # æÆ Latin letter AE
wordchars       [bc]     [BC]
stringchar      \xC3\xA7 \xC3\x87       # çÇ Latin letter C with cedilla
wordchars       [de]     [DE]
stringchar      \xC3\xA8 \xC3\x88       # èÈ Latin letter E with grave
stringchar      \xC3\xA9 \xC3\x89       # éÉ Latin letter E with acute
stringchar      \xC3\xAA \xC3\x8A       # êÊ Latin letter E with circumflex
stringchar      \xC3\xAB \xC3\x8B       # ëË Latin letter E with diaeresis
wordchars       [f-i]    [F-I]
stringchar      \xC3\xAC \xC3\x8C       # ìÌ Latin letter I with grave
stringchar      \xC3\xAD \xC3\x8D       # íÍ Latin letter I with acute
stringchar      \xC3\xAE \xC3\x8E       # îÎ Latin letter I with circumflex
stringchar      \xC3\xAF \xC3\x8F       # ïÏ Latin letter I with diaeresis
stringchar      \xC3\xB0 \xC3\x90       # ðÐ Latin letter eth
wordchars       [j-n]    [J-N]
stringchar      \xC3\xB1 \xC3\x91       # ñÑ Latin letter N with tilde
wordchars       o       O
stringchar      \xC3\xB2 \xC3\x92       # òÒ Latin letter O with grave
stringchar      \xC3\xB3 \xC3\x93       # óÓ Latin letter O with acute
stringchar      \xC3\xB4 \xC3\x94       # ôÔ Latin letter O with circumflex
stringchar      \xC3\xB5 \xC3\x95       # õÕ Latin letter O with tilde
stringchar      \xC3\xB6 \xC3\x96       # öÖ Latin letter O with diaeresis
stringchar      \xC3\xB8 \xC3\x98       # øØ Latin letter O with stroke
wordchars       [p-s]    [P-S]
# See comments about eszett above
# stringchar    \xC3\x9F SS             # ß Latin small letter sharp s
# stringchar    \xC3\x9F \xE1\xBA\x9E   # ß Latin letter sharp S
stringchar      \xC3\x9F                # ß Latin letter sharp S
wordchars       [tu]     [TU]
stringchar      \xC3\xB9 \xC3\x99       # ùÙ Latin letter U with grave
stringchar      \xC3\xBA \xC3\x9A       # úÚ Latin letter U with acute
stringchar      \xC3\xBB \xC3\x9B       # ûÛ Latin letter U with circumflex
stringchar      \xC3\xBC \xC3\x9C       # üÜ Latin letter U with diaeresis
wordchars       [v-y]    [V-Y]
stringchar      \xC3\xBD \xC3\x9D       # ýÝ Latin letter Y with acute
stringchar      \xC3\xBF \xC5\xB8       # ÿŸ Latin letter Y with diaeresis
wordchars       z        Z
stringchar      \xC3\xBE \xC3\x9E       # þÞ Latin letter Thorn

altstringtype "latin1" "nroff" ".list" ".txt"

altstringchar   \xE0    \xC3\xA0        # à Latin letter a with grave
altstringchar   \xC0    \xC3\x80        # À Latin letter A with grave
altstringchar   \xE1    \xC3\xA1        # á Latin letter a with acute
altstringchar   \xC1    \xC3\x81        # Á Latin letter A with acute
altstringchar   \xE2    \xC3\xA2        # â Latin letter a with circumflex
altstringchar   \xC2    \xC3\x82        # Â Latin letter A with circumflex
altstringchar   \xE3    \xC3\xA3        # ã Latin letter a with tilde
altstringchar   \xC3    \xC3\x83        # Ã Latin letter A with tilde
altstringchar   \xE4    \xC3\xA4        # ä Latin letter a with diaeresis
altstringchar   \xC4    \xC3\x84        # Ä Latin letter A with diaeresis
altstringchar   \xE5    \xC3\xA5        # å Latin letter a with ring above
altstringchar   \xC5    \xC3\x85        # Å Latin letter A with ring above
altstringchar   \xE6    \xC3\xA6        # æ Latin letter ae
altstringchar   \xC6    \xC3\x86        # Æ Latin letter AE
altstringchar   \xE7    \xC3\xA7        # ç Latin letter c with cedilla
altstringchar   \xC7    \xC3\x87        # Ç Latin letter C with cedilla
altstringchar   \xE8    \xC3\xA8        # è Latin letter e with grave
altstringchar   \xC8    \xC3\x88        # È Latin letter E with grave
altstringchar   \xE9    \xC3\xA9        # é Latin letter e with acute
altstringchar   \xC9    \xC3\x89        # É Latin letter E with acute
altstringchar   \xEA    \xC3\xAA        # ê Latin letter e with circumflex
altstringchar   \xCA    \xC3\x8A        # Ê Latin letter E with circumflex
altstringchar   \xEB    \xC3\xAB        # ë Latin letter e with diaeresis
altstringchar   \xCB    \xC3\x8B        # Ë Latin letter E with diaeresis
altstringchar   \xEC    \xC3\xAC        # ì Latin letter i with grave
altstringchar   \xCC    \xC3\x8C        # Ì Latin letter I with grave
altstringchar   \xED    \xC3\xAD        # í Latin letter i with acute
altstringchar   \xCD    \xC3\x8D        # Í Latin letter I with acute
altstringchar   \xEE    \xC3\xAE        # î Latin letter i with circumflex
altstringchar   \xCE    \xC3\x8E        # Î Latin letter I with circumflex
altstringchar   \xEF    \xC3\xAF        # ï Latin letter i with diaeresis
altstringchar   \xCF    \xC3\x8F        # Ï Latin letter I with diaeresis
altstringchar   \xF0    \xC3\xB0        # ð Latin letter eth
altstringchar   \xD0    \xC3\x90        # Ð Latin letter Eth
altstringchar   \xF1    \xC3\xB1        # ñ Latin letter n with tilde
altstringchar   \xD1    \xC3\x91        # Ñ Latin letter N with tilde
altstringchar   \xF2    \xC3\xB2        # ò Latin letter o with grave
altstringchar   \xD2    \xC3\x92        # Ò Latin letter O with grave
altstringchar   \xF3    \xC3\xB3        # ó Latin letter o with acute
altstringchar   \xD3    \xC3\x93        # Ó Latin letter O with acute
altstringchar   \xF4    \xC3\xB4        # ô Latin letter o with circumflex
altstringchar   \xD4    \xC3\x94        # Ô Latin letter O with circumflex
altstringchar   \xF5    \xC3\xB5        # õ Latin letter o with tilde
altstringchar   \xD5    \xC3\x95        # Õ Latin letter O with tilde
altstringchar   \xF6    \xC3\xB6        # ö Latin letter o with diaeresis
altstringchar   \xD6    \xC3\x96        # Ö Latin letter O with diaeresis
altstringchar   \xF8    \xC3\xB8        # ø Latin letter o with stroke
altstringchar   \xD8    \xC3\x98        # Ø Latin letter O with stroke
altstringchar   \xDF    \xC3\x9F        # ß Latin small letter sharp s
altstringchar   \xF9    \xC3\xB9        # ù Latin letter u with grave
altstringchar   \xD9    \xC3\x99        # Ù Latin letter U with grave
altstringchar   \xFA    \xC3\xBA        # ú Latin letter u with acute
altstringchar   \xDA    \xC3\x9A        # Ú Latin letter U with acute
altstringchar   \xFB    \xC3\xBB        # û Latin letter u with circumflex
altstringchar   \xDB    \xC3\x9B        # Û Latin letter U with circumflex
altstringchar   \xFC    \xC3\xBC        # ü Latin letter u with diaeresis
altstringchar   \xDC    \xC3\x9C        # Ü Latin letter U with diaeresis
altstringchar   \xFD    \xC3\xBD        # ý Latin letter y with acute
altstringchar   \xDD    \xC3\x9D        # Ý Latin letter Y with acute
altstringchar   \xFF    \xC3\xBF        # ÿ Latin letter y with diaeresis
altstringchar   Y       \xC5\xB8        # Ÿ Latin letter Y with diaeresis
altstringchar   \xFE    \xC3\xBE        # þ latin letter thorn
altstringchar   \xDE    \xC3\x9E        # Þ Latin letter Thorn

#
# TeX/LaTeX
#
altstringtype "tex" "TeX" ".tex" ".bib"

altstringchar   \\`a    \xC3\xA0
altstringchar   \\`A    \xC3\x80        # àÀ Latin letter A with grave
altstringchar   \\'a    \xC3\xA1
altstringchar   \\'A    \xC3\x81        # áÁ Latin letter A with acute
altstringchar   \\^a    \xC3\xA2
altstringchar   \\^A    \xC3\x82        # âÂ Latin letter A with circumflex
altstringchar   \\~a    \xC3\xA3
altstringchar   \\~A    \xC3\x83        # ãÃ Latin letter A with tilde
altstringchar   \\\"a   \xC3\xA4
altstringchar   \\\"A   \xC3\x84        # äÄ Latin letter A with diaeresis
altstringchar   {\\aa}  \xC3\xA5
altstringchar   {\\AA}  \xC3\x85        # åÅ Latin letter A with ring above
altstringchar   {\\ae}  \xC3\xA6
altstringchar   {\\AE}  \xC3\x86        # æÆ Latin letter AE
altstringchar   \\c{c}  \xC3\xA7
altstringchar   \\c{C}  \xC3\x87        # çÇ Latin letter C with cedilla
altstringchar   \\`e    \xC3\xA8
altstringchar   \\`E    \xC3\x88        # èÈ Latin letter E with grave
altstringchar   \\'e    \xC3\xA9
altstringchar   \\'E    \xC3\x89        # éÉ Latin letter E with acute
altstringchar   \\^e    \xC3\xAA
altstringchar   \\^E    \xC3\x8A        # êÊ Latin letter E with circumflex
altstringchar   \\\"e   \xC3\xAB
altstringchar   \\\"E   \xC3\x8B        # ëË Latin letter E with diaeresis
altstringchar   \\`{\\i} \xC3\xAC
altstringchar   \\`I    \xC3\x8C        # ìÌ Latin letter I with grave
altstringchar   \\'{\\i} \xC3\xAD
altstringchar   \\'I    \xC3\x8D        # íÍ Latin letter I with acute
altstringchar   \\^{\\i} \xC3\xAE
altstringchar   \\^I    \xC3\x8E        # îÎ Latin letter I with circumflex
altstringchar   \\\"{\\i} \xC3\xAF
altstringchar   \\\"I   \xC3\x8F        # ïÏ Latin letter I with diaeresis
# (not listed) Latin letter eth
# TeX doesn't define it, but ispell requires us to provide *something*.
altstringchar   {\\eth} \xC3\xB0
altstringchar   {\\Eth} \xC3\x90        # ðÐ Latin letter eth
altstringchar   \\~n    \xC3\xB1
altstringchar   \\~N    \xC3\x91        # ñÑ Latin letter N with tilde
altstringchar   \\`o    \xC3\xB2
altstringchar   \\`O    \xC3\x92        # òÒ Latin letter O with grave
altstringchar   \\'o    \xC3\xB3
altstringchar   \\'O    \xC3\x93        # óÓ Latin letter O with acute
altstringchar   \\^o    \xC3\xB4
altstringchar   \\^O    \xC3\x94        # ôÔ Latin letter O with circumflex
altstringchar   \\~o    \xC3\xB5
altstringchar   \\~O    \xC3\x95        # õÕ Latin letter O with tilde
altstringchar   \\\"o   \xC3\xB6
altstringchar   \\\"O   \xC3\x96        # öÖ Latin letter O with diaeresis
altstringchar   {\\o}   \xC3\xB8
altstringchar   {\\O}   \xC3\x98        # øØ Latin letter O with stroke
altstringchar   {\\ss}  \xC3\x9F        # ß Latin small letter sharp s
altstringchar   \\`u    \xC3\xB9
altstringchar   \\`U    \xC3\x99        # ùÙ Latin letter U with grave
altstringchar   \\'u    \xC3\xBA
altstringchar   \\'U    \xC3\x9A        # úÚ Latin letter U with acute
altstringchar   \\^u    \xC3\xBB
altstringchar   \\^U    \xC3\x9B        # ûÛ Latin letter U with circumflex
altstringchar   \\\"u   \xC3\xBC
altstringchar   \\\"U   \xC3\x9C        # üÜ Latin letter U with diaeresis
altstringchar   \\'y    \xC3\xBD
altstringchar   \\'Y    \xC3\x9D        # ýÝ Latin letter Y with acute
altstringchar   \\\"y   \xC3\xBF
altstringchar   \\\"Y   \xC3\xB8        # ÿŸ Latin letter Y with diaeresis
# (not listed) Latin letter thorn
# TeX doesn't define it, but ispell requires us to provide *something*.
altstringchar   {\\thorn} \xC3\xBE
altstringchar   {\\Thorn} \xC3\x9E      # þÞ Latin letter Thorn

#
# N/Troff with -ms/-me/man macro packages.  Some of these are only
# supported by the FSF versions of the packages.
#
altstringtype "nroff" "nroff" ".nr" ".ms" ".me" ".man"

altstringchar   a\\*`   \xC3\xA0
altstringchar   A\\*`   \xC3\x80        # àÀ Latin letter A with grave
altstringchar   a\\*'   \xC3\xA1
altstringchar   A\\*'   \xC3\x81        # áÁ Latin letter A with acute
altstringchar   a\\*^   \xC3\xA2
altstringchar   A\\*^   \xC3\x82        # âÂ Latin letter A with circumflex
altstringchar   a\\*~   \xC3\xA3
altstringchar   A\\*~   \xC3\x83        # ãÃ Latin letter A with tilde
altstringchar   a\\*\:  \xC3\xA4
altstringchar   A\\*\:  \xC3\x84        # äÄ Latin letter A with diaeresis
altstringchar   a\\*o   \xC3\xA5
altstringchar   A\\*o   \xC3\x85        # åÅ Latin letter A with ring above
altstringchar   \\(ae   \xC3\xA6
altstringchar   \\(AE   \xC3\x86        # æÆ Latin letter AE
altstringchar   c\\*\,  \xC3\xA7
altstringchar   C\\*\,  \xC3\x87        # çÇ Latin letter C with cedilla
altstringchar   e\\*`   \xC3\xA8
altstringchar   E\\*`   \xC3\x88        # èÈ Latin letter E with grave
altstringchar   e\\*'   \xC3\xA9
altstringchar   E\\*'   \xC3\x89        # éÉ Latin letter E with acute
altstringchar   e\\*^   \xC3\xAA
altstringchar   E\\*^   \xC3\x8A        # êÊ Latin letter E with circumflex
altstringchar   e\\*\:  \xC3\xAB
altstringchar   E\\*\:  \xC3\x8B        # ëË Latin letter E with diaeresis
altstringchar   i\\*`   \xC3\xAC
altstringchar   I\\*`   \xC3\x8C        # ìÌ Latin letter I with grave
altstringchar   i\\*'   \xC3\xAD
altstringchar   I\\*'   \xC3\x8D        # íÍ Latin letter I with acute
altstringchar   i\\*^   \xC3\xAE
altstringchar   I\\*^   \xC3\x8E        # îÎ Latin letter I with circumflex
altstringchar   i\\*\:  \xC3\xAF
altstringchar   I\\*\:  \xC3\x8F        # ïÏ Latin letter I with diaeresis
# (not listed) Latin letter eth
# nroff doesn't define it, but ispell requires us to provide *something*.
altstringchar   \*(et   \xC3\xB0
altstringchar   \*(ET   \xC3\x90        # ðÐ Latin letter eth
altstringchar   n\\*~   \xC3\xB1
altstringchar   N\\*~   \xC3\x91        # ñÑ Latin letter N with tilde
altstringchar   o\\*`   \xC3\xB2
altstringchar   O\\*`   \xC3\x92        # òÒ Latin letter O with grave
altstringchar   o\\*'   \xC3\xB3
altstringchar   O\\*'   \xC3\x93        # óÓ Latin letter O with acute
altstringchar   o\\*^   \xC3\xB4
altstringchar   O\\*^   \xC3\x94        # ôÔ Latin letter O with circumflex
altstringchar   o\\*~   \xC3\xB5
altstringchar   O\\*~   \xC3\x95        # õÕ Latin letter O with tilde
altstringchar   o\\*\:  \xC3\xB6
altstringchar   O\\*\:  \xC3\x96        # öÖ Latin letter O with diaeresis
altstringchar   o\\*/   \xC3\xB8
altstringchar   O\\*/   \xC3\x98        # øØ Latin letter O with stroke
altstringchar   \\*8    \xC3\x9F        # ß Latin small letter sharp s
altstringchar   u\\*`   \xC3\xB9
altstringchar   U\\*`   \xC3\x99        # ùÙ Latin letter U with grave
altstringchar   u\\*'   \xC3\xBA
altstringchar   U\\*'   \xC3\x9A        # úÚ Latin letter U with acute
altstringchar   u\\*^   \xC3\xBB
altstringchar   U\\*^   \xC3\x9B        # ûÛ Latin letter U with circumflex
altstringchar   u\\*\:  \xC3\xBC
altstringchar   U\\*\:  \xC3\x9C        # üÜ Latin letter U with diaeresis
altstringchar   y\\*'   \xC3\xBD
altstringchar   Y\\*'   \xC3\x9D        # ýÝ Latin letter Y with acute
altstringchar   y\\*\:  \xC3\xBF
altstringchar   Y\\*\:  \xC3\xB8        # ÿŸ Latin letter Y with diaeresis
# (not listed) Latin letter thorn
# nroff doesn't define it, but ispell requires us to provide *something*.
altstringchar   \*(th   \xC3\xBE
altstringchar   \*(TH   \xC3\x9E        # þÞ Latin letter Thorn

#
# N/Troff with -mm macros.  Some of these are not actually supported
# by nroff.
#
altstringtype "-mm" "nroff" ".mm"

altstringchar   a\\*`   \xC3\xA0
altstringchar   A\\*`   \xC3\x80        # àÀ Latin letter A with grave
altstringchar   a\\*'   \xC3\xA1
altstringchar   A\\*'   \xC3\x81        # áÁ Latin letter A with acute
altstringchar   a\\*^   \xC3\xA2
altstringchar   A\\*^   \xC3\x82        # âÂ Latin letter A with circumflex
altstringchar   a\\*~   \xC3\xA3
altstringchar   A\\*~   \xC3\x83        # ãÃ Latin letter A with tilde
altstringchar   a\\*\:  \xC3\xA4
altstringchar   A\\*;   \xC3\x84        # äÄ Latin letter A with diaeresis
altstringchar   a\\*o   \xC3\xA5
altstringchar   A\\*o   \xC3\x85        # åÅ Latin letter A with ring above
altstringchar   \\(ae   \xC3\xA6
altstringchar   \\(AE   \xC3\x86        # æÆ Latin letter AE
altstringchar   c\\*\,  \xC3\xA7
altstringchar   C\\*\,  \xC3\x87        # çÇ Latin letter C with cedilla
altstringchar   e\\*`   \xC3\xA8
altstringchar   E\\*`   \xC3\x88        # èÈ Latin letter E with grave
altstringchar   e\\*'   \xC3\xA9
altstringchar   E\\*'   \xC3\x89        # éÉ Latin letter E with acute
altstringchar   e\\*^   \xC3\xAA
altstringchar   E\\*^   \xC3\x8A        # êÊ Latin letter E with circumflex
altstringchar   e\\*\:  \xC3\xAB
altstringchar   E\\*;   \xC3\x8B        # ëË Latin letter E with diaeresis
altstringchar   i\\*`   \xC3\xAC
altstringchar   I\\*`   \xC3\x8C        # ìÌ Latin letter I with grave
altstringchar   i\\*'   \xC3\xAD
altstringchar   I\\*'   \xC3\x8D        # íÍ Latin letter I with acute
altstringchar   i\\*^   \xC3\xAE
altstringchar   I\\*^   \xC3\x8E        # îÎ Latin letter I with circumflex
altstringchar   i\\*\:  \xC3\xAF
altstringchar   I\\*;   \xC3\x8F        # ïÏ Latin letter I with diaeresis
# (not listed) Latin letter eth
# nroff doesn't define it, but ispell requires us to provide *something*.
altstringchar   \*(et   \xC3\xB0
altstringchar   \*(ET   \xC3\x90        # ðÐ Latin letter eth
altstringchar   n\\*~   \xC3\xB1
altstringchar   N\\*~   \xC3\x91        # ñÑ Latin letter N with tilde
altstringchar   o\\*`   \xC3\xB2
altstringchar   O\\*`   \xC3\x92        # òÒ Latin letter O with grave
altstringchar   o\\*'   \xC3\xB3
altstringchar   O\\*'   \xC3\x93        # óÓ Latin letter O with acute
altstringchar   o\\*^   \xC3\xB4
altstringchar   O\\*^   \xC3\x94        # ôÔ Latin letter O with circumflex
altstringchar   o\\*~   \xC3\xB5
altstringchar   O\\*~   \xC3\x95        # õÕ Latin letter O with tilde
altstringchar   o\\*\:  \xC3\xB6
altstringchar   O\\*;   \xC3\x96        # öÖ Latin letter O with diaeresis
altstringchar   o\\*/   \xC3\xB8
altstringchar   O\\*/   \xC3\x98        # øØ Latin letter O with stroke
altstringchar   \\*(ss  \xC3\x9F        # ß Latin small letter sharp s
altstringchar   u\\*`   \xC3\xB9
altstringchar   U\\*`   \xC3\x99        # ùÙ Latin letter U with grave
altstringchar   u\\*'   \xC3\xBA
altstringchar   U\\*'   \xC3\x9A        # úÚ Latin letter U with acute
altstringchar   u\\*^   \xC3\xBB
altstringchar   U\\*^   \xC3\x9B        # ûÛ Latin letter U with circumflex
altstringchar   u\\*\:  \xC3\xBC
altstringchar   U\\*;   \xC3\x9C        # üÜ Latin letter U with diaeresis
altstringchar   y\\*'   \xC3\xBD
altstringchar   Y\\*'   \xC3\x9D        # ýÝ Latin letter Y with acute
altstringchar   y\\*\:  \xC3\xBF
altstringchar   Y\\*\:  \xC3\xB8        # ÿŸ Latin letter Y with diaeresis
# (not listed) Latin letter thorn
# nroff doesn't define it, but ispell requires us to provide *something*.
altstringchar   \*(th   \xC3\xBE
altstringchar   \*(TH   \xC3\x9E        # þÞ Latin letter Thorn

#
# HTML/SGML/XML
#
altstringtype "html" "html" ".html" ".htm" ".shtml" ".xml"

altstringchar   &agrave;     \xC3\xA0
altstringchar   &Agrave;     \xC3\x80        # àÀ Latin letter A with grave
altstringchar   &aacute;     \xC3\xA1
altstringchar   &Aacute;     \xC3\x81        # áÁ Latin letter A with acute
altstringchar   &acirc;      \xC3\xA2
altstringchar   &Acirc;      \xC3\x82        # âÂ Latin letter A with circumflex
altstringchar   &atilde;     \xC3\xA3
altstringchar   &Atilde;     \xC3\x83        # ãÃ Latin letter A with tilde
altstringchar   &auml;       \xC3\xA4
altstringchar   &Auml;       \xC3\x84        # äÄ Latin letter A with diaeresis
altstringchar   &acirc;      \xC3\xA5
altstringchar   &Acirc;      \xC3\x85        # åÅ Latin letter A with ring above
altstringchar   &aelig;      \xC3\xA6
altstringchar   &AElig;      \xC3\x86        # æÆ Latin letter AE
altstringchar   &ccedil;     \xC3\xA7
altstringchar   &Ccedil;     \xC3\x87        # çÇ Latin letter C with cedilla
altstringchar   &egrave;     \xC3\xA8
altstringchar   &Egrave;     \xC3\x88        # èÈ Latin letter E with grave
altstringchar   &eacute;     \xC3\xA9
altstringchar   &Eacute;     \xC3\x89        # éÉ Latin letter E with acute
altstringchar   &ecirc;      \xC3\xAA
altstringchar   &Ecirc;      \xC3\x8A        # êÊ Latin letter E with circumflex
altstringchar   &euml;       \xC3\xAB
altstringchar   &Euml;       \xC3\x8B        # ëË Latin letter E with diaeresis
altstringchar   &igrave;     \xC3\xAC
altstringchar   &Igrave;     \xC3\x8C        # ìÌ Latin letter I with grave
altstringchar   &iacute;     \xC3\xAD
altstringchar   &Iacute;     \xC3\x8D        # íÍ Latin letter I with acute
altstringchar   &icirc;      \xC3\xAE
altstringchar   &Icirc;      \xC3\x8E        # îÎ Latin letter I with circumflex
altstringchar   &iuml;       \xC3\xAF
altstringchar   &Iuml;       \xC3\x8F        # ïÏ Latin letter I with diaeresis
altstringchar   &eth;        \xC3\xB0
altstringchar   &ETH;        \xC3\x90        # ðÐ Latin letter eth
altstringchar   &ntilde;     \xC3\xB1
altstringchar   &Ntilde;     \xC3\x91        # ñÑ Latin letter N with tilde
altstringchar   &ograve;     \xC3\xB2
altstringchar   &Ograve;     \xC3\x92        # òÒ Latin letter O with grave
altstringchar   &oacute;     \xC3\xB3
altstringchar   &Oacute;     \xC3\x93        # óÓ Latin letter O with acute
altstringchar   &ocirc;      \xC3\xB4
altstringchar   &Ocirc;      \xC3\x94        # ôÔ Latin letter O with circumflex
altstringchar   &otilde;     \xC3\xB5
altstringchar   &Otilde;     \xC3\x95        # õÕ Latin letter O with tilde
altstringchar   &ouml;       \xC3\xB6
altstringchar   &Ouml;       \xC3\x96        # öÖ Latin letter O with diaeresis
altstringchar   &oslash;     \xC3\xB8
altstringchar   &Oslash;     \xC3\x98        # øØ Latin letter O with stroke
altstringchar   &szlig;      \xC3\x9F        # ß Latin small letter sharp s
altstringchar   &ugrave;     \xC3\xB9
altstringchar   &Ugrave;     \xC3\x99        # ùÙ Latin letter U with grave
altstringchar   &uacute;     \xC3\xBA
altstringchar   &Uacute;     \xC3\x9A        # úÚ Latin letter U with acute
altstringchar   &ucirc;      \xC3\xBB
altstringchar   &Ucirc;      \xC3\x9B        # ûÛ Latin letter U with circumflex
altstringchar   &uuml;       \xC3\xBC
altstringchar   &Uuml;       \xC3\x9C        # üÜ Latin letter U with diaeresis
altstringchar   &yacute;     \xC3\xBD
altstringchar   &Yacute;     \xC3\x9D        # ýÝ Latin letter Y with acute
altstringchar   &yuml;       \xC3\xBF
altstringchar   &Yuml;       \xC3\xB8      # ÿŸ Latin letter Y with diaeresis
altstringchar   &thorn;      \xC3\xBE
altstringchar   &THORN;      \xC3\x9E        # þÞ Latin letter thorn

# Here's a record of flags used, in case you want to add new ones.
# Right now, we fit within the minimal MASKBITS definition.
#
#            ABCDEFGHIJKLMNOPQRSTUVWXYZ
# Used:      *  *  ****  ** * ***** ***
#            A  D  GHIJ  MN P RSTUV XYZ
# Available:  -- --    --  - -     -
#             BC EF    KL  O Q     W

# Now the prefix table.  There are only three prefixes that are truly
# frequent in English, and none of them seem to need conditional variations.
#
prefixes

flag *A:
    .		>	RE		# As in enter > reenter

flag *I:
    .		>	IN		# As in disposed > indisposed

flag *U:
    .		>	UN		# As in natural > unnatural

# Finally, the suffixes.  These are exactly the suffixes that came out
# with the original "ispell";  I haven't tried to improve them.  The only
# thing I did besides translate them was to add selected cross-product flags.
#
suffixes

flag V:
    E		>	-E,IVE		# As in create > creative
    [^E]	>	IVE		# As in prevent > preventive

flag *N:
    E		>	-E,ION		# As in create > creation
    Y		>	-Y,ICATION	# As in multiply > multiplication
    [^EY]	>	EN		# As in fall > fallen

flag *X:
    E		>	-E,IONS		# As in create > creations
    Y		>	-Y,ICATIONS	# As in multiply > multiplications
    [^EY]	>	ENS		# As in weak > weakens

flag H:
    Y		>	-Y,IETH		# As in twenty > twentieth
    [^Y]	>	TH		# As in hundred > hundredth

flag *Y:
    Y		>	-Y,ILY		# As in messy > messily
    [^Y]	>	LY		# As in quick > quickly

flag *G:
    E		>	-E,ING		# As in file > filing
    [^E]	>	ING		# As in cross > crossing

flag *J:
    E		>	-E,INGS		# As in file > filings
    [^E]	>	INGS		# As in cross > crossings

flag *D:
    E		>	D		# As in create > created
    [^AEIOU]Y	>	-Y,IED		# As in imply > implied
    [^EY]	>	ED		# As in cross > crossed
    [AEIOU]Y	>	ED		# As in convey > conveyed

flag T:
    E		>	ST		# As in late > latest
    [^AEIOU]Y	>	-Y,IEST		# As in dirty > dirtiest
    [AEIOU]Y	>	EST		# As in gray > grayest
    [^EY]	>	EST		# As in small > smallest

flag *R:
    E		>	R		# As in skate > skater
    [^AEIOU]Y	>	-Y,IER		# As in multiply > multiplier
    [AEIOU]Y	>	ER		# As in convey > conveyer
    [^EY]	>	ER		# As in build > builder

flag *Z:
    E		>	RS		# As in skate > skaters
    [^AEIOU]Y	>	-Y,IERS		# As in multiply > multipliers
    [AEIOU]Y	>	ERS		# As in convey > conveyers
    [^EY]	>	ERS		# As in build > builders

flag *S:
    [^AEIOU]Y	>	-Y,IES		# As in imply > implies
    [AEIOU]Y	>	S		# As in convey > conveys
    [CS]H	>	ES		# As in lash > lashes
    [^CS]H	>	S		# As in cough > coughs
    [SXZ]	>	ES		# As in fix > fixes
    [^SXZHY]	>	S		# As in bat > bats

flag *P:
    [^AEIOU]Y	>	-Y,INESS	# As in cloudy > cloudiness
    [AEIOU]Y	>	NESS		# As in gray > grayness
    [^Y]	>	NESS		# As in late > lateness

flag *M:
    .		>	'S		# As in dog > dog's

# $Log: english.aff,v $
# Revision 1.26  2020-12-30 22:20:19-08  geoff
# Add UTF-8 options to the default character set.
#
# Revision 1.25  2020-12-23 16:26:37-08  geoff
# Switch to UTF-8 as the default character encoding.
#
# Revision 1.24  2015-02-07 23:59:51-08  geoff
# Correct the suffix generation for words ending in TH.
#
# Revision 1.23  2005/04/21 14:06:40  geoff
# Add UTF-8 as an encoding option.
#
# Revision 1.22  2005/04/13 22:52:37  geoff
# Update the license.  Add expanded rules for LY and ES.
#
# Revision 1.21  2001/07/25 21:51:47  geoff
# *** empty log message ***
#
# Revision 1.20  2001/07/23 20:43:37  geoff
# *** empty log message ***
#
# Revision 1.19  2000/08/22 11:03:59  geoff
# Fix a typo in the previous checkin.  Provide dummy definitions for eth
# and thorn for tex/nroff, since ispell insists on having them.
#
# Revision 1.18  2000/08/22 10:52:25  geoff
# *** empty log message ***
#
# Revision 1.17  1999/01/07 01:58:15  geoff
# Update the copyright.
#
# Revision 1.16  1995/01/08  23:23:59  geoff
# Add a NeXT to the defstringtype statement so that nextispell can
# select it.
#
# Revision 1.15  1994/01/25  07:12:40  geoff
# Get rid of all old RCS log lines in preparation for the 3.1 release.
#
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SKk@W`ZBvq4=K@Ici>>⨿P
!,e~lsw]C?({ -{'
45htΖ2O.v>8B
O<[ .u8X_w =}+PT4pB^qf-4OT/A@5EK6pqfq`BUX.ֵ@,GQ!v~4)2O#Lu>KkTJD664Lhq *id?p{|BViy
ᢲ& J$au&ijǠ,P=qhu<2N</QagZ^F&o,_Ih9[+6E|j~5f`DZF*x"-]P@YӐ-Lҗ-L;/[m(
/aUm* 
TPF1';&[8*ZYB -I޻5eQ\_:XvxuQfEY@AJ*DɺcFI)b
M*uqY;kDEz6o'?(4=                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   [ےF}W8=H-ˣIV%ac
E 
. ݢ؏٧=YUQlKm=H X(de<Uu
e$Zezk.=b?3I'~~,xO%ljLQue٦x?3xkLɊrUYl4%DyT,OM(3^}f»JI9Sၳow|6e'yC"~g	YRfGSU
m,LcDl|
G/̨𺑥m,/]f\طdB9Df")?R;3䎫B_U27U[gxf'&hohQ5Q'7 a/[%k+h'E]%
65X(K<-ds%lLJXeC03~4Ӭb]qϴͥ-ثD1}Vk7`v}}HwSZ@mH*0i#E[a
3]6+exrkPx*XZ*wV2ci.k*˙/f(y+{59&9{PVD-[!Hte"?`
GL#F;U`2چՍH,v֔uH[ 0LOC-w<ȶyrYj&YZWM3gtJ^D`1/^l>S>ii+>h/)tB
|@ɬM87r.C\Wp(QJF6*iҽVe8@g]J?@1$b
q ^{IxL1fe:D|C4e+2C 8&8РYjDhD$ Pi[Tp͞Wg	Y`@ﰍd^`"ZG'-s\lδ34 @Unq<LJHd4vDC3D
ܲmY9YoZByî/eF:$gAQncME˪i]mu3|=>?1NL#Ho6Г$RyLeΑ$BQ/rbg癕ym$t(mz("=Z;۶	I:i^;3$ έLЍ*([ZB,P'QjYS
p I 6k&;9(*7	bhb0xi2{IvWutҭ]'[IFMW4
Y,MBϱ&98Z-w
Y={QNyRɇ	YͦuuIZ~
8]y ?W
^'z+!aOY~Nĥ}g**R;E>3ј\}Yʿ<zfYcwX뻟Փ͛o_?c_7QȜk.Լi+3Y,ð$L|LΓ[)2ދV;th2jCD/h~Qj#V23`?К/Pt!eFj::運UXAT 0 \AE*`$3<21KJ1ii2ʜ\;	;F]:I^'aEEsd_+XտhQeO{ܕz<\D(;uz=>L(jMnvm
eփ,^wB'Ӗp	`S%*r@JfF~0#XF<Dxq0%^t./b(/oHYꨉ?x^ ~Ԛ"Jֵqci[E$G۪B///{.r~-Q0rmӴDw5W;ј7%)fɗ\e `2`CKLs;]oGxn9<4
[JjLQy*
v3P)"[K7k]`(J86b/
.B/rpau8Dj_أ"$bv n	]3PF>\q_9ߖ4̀!pKr:P0FD7O|\=p(7^`2 lj%:* 1|2)MbӄˤZ^1t Mm9`++1B0r)X`$*Tq-<P!F8`j#dc,>gb^ts_+E̿f=|R:xވB2I*6|,K g2yľ0}TqĭN":F[#m=ɿ`bG
&Ѵr%PBnej-r1⨎ybۀ]P=I.
wuju&u˪]_s %(էeI(]wUYe$u&4OUg0/i
)|殛[[]e2m5}TqT
DHԔ.ol*]ҩ j24d}&d{͖Z}XčٓJQX{}	o
e&n<pQ\c!'KhݱʛYs5uBі:]+W Sux5*KI݌0=Z ݴ<R[kʐ	(9Vv%q4й|O w9ƁE &(#`iV15'[Q,Dh޵SiQT ]g2Qkp:@Fcc⒎8f]R|iF,\q.`Lxo=$c˝)Ɣ̶i+ٯl&ݗP&+\RM12DGJ%)KS0jF8nm	hOzKBZ)I=-LϮFB 5}RnʑdabR"`h_P([;sh_
/@A RѢn<}{5ӽ+#U-sBUCd07F=7+.u O_MYs(
iEGaiwv$ϿxwE?:RPWj7'df
MvB/уxMph(lT辣gn>n*Z˫Ni>ulU̉6=_}Sp&z(4fĐhv8Ώ٤r6:!}͆˼VYlj.~W.'^ӕ"ZP+ytgl%>J@$4$ZT6
$;PsXdo[X_[EJ'AzwNc"\f}H@sss1YoesubM}3@Xg'vL;:pO$gQeuiwq5e3PFv{<#N86&'w]D*tPdjHZLxq1g/z %Lc牙,9cCueXҒR8{N-<H|Љ%s@DԚlm+;xg?PGXQuk|ʵ}Ȝ=+C
 V_ZqǉXX>C1\l'n/s )a'hЈi<Fї =I.|=[~0̍r68g4f阡x}/['ɞhDf&-!y*i7:ӵA
Ęҿ>]3_URGPYY3m)	ݸFa9(\k`Ըԍ*7V9 2ZD۲J_hVp$>T"
ƛVFeG6hwLg0'چkQ#*	~ˤG8c l4
ݚVZ0Az_{󪝜ZT.}??1-ݾ`T5y\hdZZp30|`Y9%BDhE~?M!Akp.Pv<g)8AYRg"iD ?LfYxXԕl:3~0n7hX87ssVV<HCErzϷ-c-Acb$QWiW ¨$gL(^d[⨾NCDXr2Ԍ2WZLh#{)k7
X\!$1<)>ĝ&tF7v#+Iбw,Y7DMht*s䈠t΂TV\V.qFSmhXKAn~ft9ٔ	%>OQ&@sCw9-{,WP5q9NfݑAK'a<}PGr`)l/x
طXhTD%3a=U7^"K!QrCRP`rԂU(&Y#JQb
{Lux:O 72<a43T43qFvWJgS>s9Zˑ(2϶( V2?W7ȇDȀ%cCGfE< r+T1!A~w
Lu썔x#逥Tq^9
/9,G_B*0&r17N5RqpQrrz/X$zCwnV5~=Zsx F}3
ޕ7ZnGAduʪIMfǙ	:
e^i1>p*I pb͔!{wÛV0DOʮ͓f
 @V#A܏ (n5f!ƛ0S!uQ
v $chu2
K[
!NTCxqf6RǶ9r\hjăP،h7i-:jHw+oSrf.POyh4fKKfqr%_łSnZS3|h5։ksqGwݍS;~Ġ'q\ޞOgS!F^S9Kw㚲8 Z^v񬮇i[Db\4F(Qas-J1<"!/<ENe,ggd3cۮ/]o@+=Ąpؖl닷/$A	I0h*UewGL@:{J5x:[Ӟnҧ{NI	)/ݤw(r9
I$z0-enp5OHK#bƤxG*6UN0Hu>A{DkYݡ1ahI>@
UE%hGf^2{;niUj\W"+-v5p||U-?㙶DhI0i%&3ܙF(EYj;#
A*wУJ;K/28`/_=ӪB:FhY:eVj(KN 1cCG9S:]g2agzPewX7~2uB=7H%{ΟōKGGIn${ru4ߥƧBG8`G"HvT_md#'Pۺd^uzp`U\y
e d[,f?Eg|IM9q?n$"-f<PV2ش.ˍ<m4h\sL`^<c1@m5JRfKL;u9G䷒=^\qylO4HHXӷ/zBUGN<zr=[&LB!AAՆca nl@
h9_zb6(CjгNN?t548N`ԯa(@`A7Ļ!M1S+7y(?+x4x,ijCz
Vdb61hL0`Q!B4qcp%9EgԄEl0H3
ݟ {)oCA	bGJQ-9U;	; ZߨCEOo`t\0\P狉]2r#kDib0ꖲcC2 hװiؖP= H54ZC8j̎#똤+7#:gŷF*!z2Y7I%v |>i;;dfJS%րC	Ȟ/࿙"[>=ys0oscu`6KBhp_?ͮVzHo
C|"D1	^8.n4-:TCjtUظ:X%%C9,қ3
;FI[|yXJE_{sJ7T-EK[+R*,eiX!r3-0Y
FACCg^ZG"Y^<zfAaoh֌
g/6$L5I֠]@<^]y-"<mRWx<?fjDUC(5<kkT/d$sN5Kdwl@ts%HC
ɷwuoHʀs<.8jV9tz/rYR<֎1ʡO=}0;p"68/x Z.P_"=^ܧSdtBU4h@@8G<[$uã '?bzeʚeNz8`^tq_MRB&mtZd7#0nȰ{ؤ;T)A;I;9<9;״4?Ʌ$T}֙|
m
ѹz&ѕ^)SXrF!>6>A,w5j20jF|_M8UǿyNxmvӐξ{k?wƜn=FQꝣA0i${f
BgY*d>=xKnD«	ID Q1<uO?KKB)edC<:~	(LMg6gpL~O43iMrQ'g\bWdpˏ)4Tｇ|)A:ɲ9EBE+Ǎ0G%zQc"75k#}Xt1(+<KS?EEe$,>=HupY9is$k2QpwZOt=A8b`Ye5@
H]truag,hAG`ʮD
R(~ߏ֡;m& [Rktbqw`6~z}G]V(SuH#<g>}K<?{J
^ى;tlI3]QeGM""rW͊_I6U'diѬ|jLRMOJ<*"VN$&ֽV=(kfY&kDn.oBZp+u͛yN(D \Z2*_62`aOyqWWډ`ifdH7b4TMjmeYOMI<Q>hluզ=WTҬK/%
c׷.@XZ5WjLj#|n Mͬ
+M~탲2TFιVb=핶WK^NU6emc")WumEr%u볜_HQn"WwϻtǴHjB#Wx_%ˏ]"//)d+P%+p q,'>tx	Bs!fq)Loоa(e9.vi9,L&98BKy[jF`<+ϟN&Q:AMgɝ~CTc|*ۧξhG>]U^#n"frC6DkPmlW
<҄
{]We5#zپ\
Cb,hw8AE#a
/*a}b6.0e"f`8\D1e!cw'dƀMs~OjRӛQG2lU=vꭳ i|ˍ(C;*)O}9{Rrנ%CdJ+̀ޘ%fpN*u"ә.2fYl0/l&}!};&!V+oʛT;Xy$nźÙJa6s
qH
9K$az4<~ΌM6aFO^?hֿܖJqd0R$⽏ `24^
,aCLtL}ed`K/b[`'ܥ{|o`b7U?w7݇<:\vu}L: 0[qFcJ AynxmN#t6yďQ	11gוAJ;r0*wIH{OLEs	#<UZ	5熇?#j)]ecJ8OPWFkwtm(=&x!HKT!RL[ēX!`vHpMftwиB`3f\IE`3AVEkc䥕P"Jqe`U	1*׈3ƫYoiwzZPxdJ7۬ 9Lx~T"FզHcǐu9Ovԃv-?	lh D5K@ AM[fnߨ"fFlG([h;NWv	ojIIc9RƉ$L6E:/q :}LNvۦ

d1^75dmѨ5d}]|4z ^ C6)y3RPj	mW\0Pܳ:zbR
Ҋ!-3ǣunR@9Nˇ~>^a=ðR9sO4SW E=NS#Q^.u#XI22ڻ6mHqB뒬8G<9΋5avNdZ7鯹#Kd.'~QƄ}]wD}}V{dgQfic	۪s18s$#hp1'dcy-ݕߤ"ޮaPƋ&pn 7.
&=CR[(v#'T|̂:?.rC1	vdnp?d^Q\2UzAuwQײ[b ~SHX7@u 3/1ѿC
8^kN (E4NipxD*^Vx㖮xCoF(׉0+FS8`eE]=TC>vltJ8XG+SY:J!L;pqhZ)y"r1-D'wRh{
A@Ĳz(=KN@('&wP󲏙X2Ǟu)qZ[NKrq8pY|
tu@!R[Ux\y@5q
KJAzv.IsnGu1I}kvt|n4yjXz[z_._5j/,.^\" A?f'
8(J3
1|XKi)BJ%nP<QPrfS, |)}!}ޔcEcw
bv*uob*پ)fԩ4'q:&Uث{#Cpfİ,ɤFBDd|3;LIv4i[-{5'#\i gIH(g
R8gk݅*8H&lόvũhIE
#e%Enn#RюŚDNꄫR
@H i=ZԼ$Qp8t#oEIAD>%7Ԕ%UapYYIB@E;;Z!%Z!~Y 6DH\X }x
:Bޏ=t+`EwDJ;}CO#
mY&i@Msߴ$v&UxexC?2uH(ex09ܸ~L'yPٓaMscvuƻ~)ߤj>bC"\=G|oqC5%S5w)RE@;f~xHr	*# DiR
s`cٴ)0rT
,G|MxJϝT6(~7ױU0u` TQyn${u%
|-'r
76鳫g?>z{s}昹 Y*9-`S=4BAԳ؀q2F7VOpKK))'YؠRje\O@ibe8NqgT_>5.AXT溧J]<	RD*tXѪ vZ!\> 
.'[8A2|_YA'4jMӎf
q' gRICU:<w?Fmn'뱲3{VoZUg?D5h/_#GGas2i,'TZQc+EvKSRLlD`łfslx兒?g+P	=zȹ28DExPr,ȏKp V#PBpeS^@_,[hL0@Xy#U@H16y犬Q_@[goQU|i-
t-<	*	hX6fDG*zԹU,I/tE#5X)-"$\0ބ4[/BQc%kP)zO훟,pm&.1-QHθWbd6jQ=n[QyN`:E~_JyCb6vU(΍f`K);QON6dKuUڶ٣$xCvtJL
B"B0?o4QtF0u'.*HɕxNr[CZ wI
҃(%˯ߤÔ ȍ:q_Ym<5R 4-DqF^M+z_|C="<$bqn5`:ɛm-Yš"D_ KR;BttdC.9z'/A3˥2.I5]
YCGGIXp5tf"5μ/)*:WkEP颓yoh':_9aA?4굦 U9M[N`"bF
e1~B䅝Ǉ 4_ڍ"g"WS<QB|#xԗPFI Pq
[%M7\;jU}5%CgTwE_9poB>'ׄ?8#C2=5[obdiL3rl9'}uf
9%<&\E|kƜmǼ7GQtϘ~95i
N9ikll6Kigu)/ˌ'CӟO/<1ͱ(0}hjo!x5`%G~vLFH/*C"[;*7N&/s"3%ށ%{d
RԱ$1MK{G_\bN,%MQ.Mm/Ke*bl`I
a7Xm|PJS&oA2
Xͷ
ҤOA<V]DC4Iw` qP|=ѾLR	H{1s\X}
qa)lq!'/.^LY~lG͎$
0X{6ΓtE.KdȮWI#RK, wӷW/߽<}{eƥb=Hg;ts8lzmDgp*	רJ%j.(Y^mn0z05܃F1&aG!-+U]?X+on[})cEQ(B ^3~+Y?-PAzdi4Xs`h{Cc`\RtuIA-ʌ_DŃU/,Cȝ{8y+DNQ)x/ZӺUhD#ͧ':ʾ2 N}8B-<]g LvQ\)'QEsôJJCr]"3+M{^
`d 𜮮ԓbJ|1
ZG4HIUqNgP>8m]I`Zy/u]K*3FG?~~5!n.P	xm˨r]>ɫ3I̉|֜eh]ğXG}?_{f&eL'ypev 5j{FmJ:Q:s)+<X7)bUI1
̶^:h2b0kz殿j̆`{+xil`sny;Jxey,)6Mمď޻'y}!ٻONGhJܜ;h${b[juHmTޔ36#z<ݥw~ߧ痧'w5cl%<]
CO
甍ix|^HIjXJC"e撤7
)hSeQ3,o~mtu$FsB}NhVi9saк?!R81[%
`n
5UWP#9DDF\SvS!Ξ?7J2?*yjؒ-0.GyH(7i`0t-zG_;0d@~..IDlO0'Y7kA"
Ve/R~XeǢuR6KB4+-I-KpI~Dj:s(d֏|U0S;J
;^{佛NmƄğ/:7_b#}.e
w@+>VsNSÔnxu>p$/Q*9&_q_pRKƔg66
85QlZWAᬨ Ì$]!Fãdri*CA`9iaurEfb1*bKQ92+跔;AT[MN1G'>}d%*lUw%c~acЅfqC;8QT;?4Z?)ww/DSSb+9@b
jbh
M@=*'씭DJX+C.0=,'Eɘ[33R4A3[qM]KY?)%X-2X9CO!s%2`ki/gX[	9#̜6E-N>V@=xxyr
%awzL'EmE+x""-Dfz̯4]_{^_u&`p=ޏ`DӿԞԔBVvy;ЗNXzp
Ds$CJ Bc.pN`1?&(D0k(ݪvîwoF_VWTȫCLyvP{j^xM9JjerPwv9 &-}иs,tf=ug4>c\z\ZTXwA%mNQ/?;5xE<YgEd>;w;b;G=ۆ_bQ9NJ_jWNsoˋlj>t)%a1ƘLn2GaaTGc7L/A~%T(cOJp@1PDTNǑꚷc"4_cSJrK{JFՄΖeL5EZR-6!Rܣ+D:Yѩ!\98)Sm.EgfzzU%- ;"%]ø~yl'/CeՁ\V%>[GCG}k~˻nA.? 4Z@
>CEĲ<Q"HDix^űݠX
6^
(C]R1X7
6dHy&Sr^@eT\-Qql#_N&RN%#7vk
)(ZFpRUEib%dBIRSgׇSr	ـǘ>0[6
rB?6J1%ޕ+8vQirI6:.SIPMZR8VǻHVFA?v{O\5,QS'!W63S<iqD'8CPcWW/_={~u.^R8PV1}{;̱+fpǳ(Y|-=9~o';TS vd7ڬсpT9AG
',Zy;LkQ[o̃:E~:(ɡw'U?"iHIia >RFtTKH=ч^_4AQoP5C\U~hLخ@ 8	ױ7$+:tV<ZptMܢF.&z$x{L"tY8ٚxNmVyH;а:aYJn45ێGFc^:2Q= 0bjbbS7EU%q)?pm~3&nûi~
 *%#\x	2
Ę;1TT971zCRmTO:%kVS65RЭ^V͆ϳLNs
\t6Ni݊Ru:ϟp1ZոIDEWə)781,,c\*I-QtR(&{gD5OZl}fRڝHq 9P1#.D??voa(J~@TcEjqa<Ld:`a6}暈Qhe~)/-`	^M!ҭ8<kx;!HJ<)
r=iݢaJBrTԙe"|{S8@4u(/|ѾeZ)i&9x"s>tf^Exē`s}`%߳7 {=~<,S8}-R	ker$qjvKkB6Xfd2ڇ!dZ=#xVv.u%x~FȠ,afa`pZOdO
`ށSIyYu#*I2!h.;=n )$,?/)#,A 3cQhecűԉH>-iJfSBtp5bE[>b6+MHN>8
U]X'_?1˦bLny=ɏbſU2B4Lo1g?5̠"2YLNQqrdN%wA/+At:?wYQbq"I\ߐi97ֺ*	ȎlP:ZlLBR˜29|:aWE븬qψH:iy!gwO>wF3Kԯɡ1[5+?c U^LdTbl<}v`WYQ8d\{XDr.4@cs7ŗzA[7
CoY+'gָ[y.>gHt2#֪Xl=,,t6Z%K?OuzG6R鸲MrAYͺ]zB#	p[ICyDox\'UPL]kz>'B
֡a3.?fA(:-(ߞ[]y&uvB?G#)mMQAadM0jM0Ho|IyӥK
e^J*y3O)Q̈R[W̰?crWkOwS ()i3uBX	*Uy9#IY.Vp2EJH5BSvñw-|^ Tg
U6\.48D#5/(-
1\KNm<qal$db-+ό|&\ QjH {N2hƛvm	ߴoηC)n]2
<˖~:rHM!+"s)9	P^ԝ9xHu"Cg2SmKdU3,KF┧Kq.Ƥ/_8zY?jyN?bYS"8T!zh7uѭs1
A2~l4˥ZGت Cfq?{΍;ʰ+hШRYaYzK*pziT	VtS<p
bVkOXޕ.^^4)2V*!6\yKue*7Xoolݗo۴2oN$)696UL4^KR\#z\J|`+"t4wn*$V_}΂v
jx"ӿsBGL&`o qRk܂2O H	\@
XJ9]NԵBtj%#I'ƉqaK0<]7v&l",Ah>DXf\4p7sH٤2R.D(7F<ةu=d\8,VmJmExA=7QvRIv?*%QEEJnH3ACQ3umqG¨T3-JnQ,/몹^E~Yȃ:&No%ĸ%(wLyT2%(o98 v!;7nwd<3
SlnI9_b~P:+2j
U¹$nm`mT$x4ȷy$Ļ(ŇҲOyS)'6\-.l8w4eczVVtXg/Ԕ[m\{-/cj8&O'?`wsDKdGꇻNP"Xޓڐ:\-fVR2w}~iđ2<7P ,f
vy{Zna᭜Mh_JK`gfe2G'9}5?F27GZ;1g苨-ϠWM'.zK : BbH|K8#
5XR7AlxoL2-Qosir1Pt8|윹y
МxߝOFFY= 11Y&r^DOAsk	K kG|m&O,z~7P W0umjmj
{Wkիu:H9کt/:^4p@
|Yv+\@n]h︖ʰӉX
h.Sx,O&CތQEaA+jTj`!~!!;ZѨChø7ώ-Z8`zÈftI=S]>1K-uVKs_Zʰ)&9183nu:W}we% \i@d1N"n\VlEFX^c.6N9z޼9}{r^^<0CeHDA.n
lRa1 YR
E.Ckf%+[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Zmsl
˕R$eo쭔M^im%]'΀$d!Mt=
%Rw[F_~1[WM_L}GGjfԟ]Jٸ
kT[or6sMcf76)
]Z2^SS>nmTn-v}e[-Qn|hlֺH](h"sW붱^ֶn*lm#|[׍exnOjUXR-!W1KNr[ӽC}Emnb
I8&bJ©U^}vmښσNF2jmXT^d<0gTe
k$դ<10|:P!.TnB7_qz®6SE&ڷЭ
uIX5z).NA?|R޸&!~0

kBW%FmPK$@' ne7F(FmP1Z9(4S1mo\Cٳgj|ɝJ+CtVlR$qDb6X0f+x@Ym	Ζ,g(3<B!J}/>78`UX]5!bܒĈ-t 6X3d˚oփl%Wjy:I@"`8~MCQ7ncsX73
AdDhkڨ)fJxOATe[ekPu\5D"B (|0Wog'UK碯|rBg@\>ƫ-lSlM)	4K22'CtɁ<:ؘͮt-0QTC׌2a	
vIaGnG
>^ڵ󞲔Í
$[CJV	
[y" RiǕ0e!`AAekA+ϣEх:,NҔ?S:OXm*
 Ycj]y
T ,[P^6@%ʦ؏6ЭT@f#G{AKbJD?.VlnKJG\",fݓ
\1*I(U=!4H\6![wMmݙAJ! >nLeRpΐ֓I۸0S6.o3h,wd"tOf?OA4r
j=]nd (Kc%)ћ/>Niuv>;܃;H0ǰ!025ZÚꤓ?+ $(ҡ{Pd^`_^()4ȇ!,՛}[wf  vhM&@jdm+,ZWQrT;&b|LR)5t1Yie8-T~:v
cS1c8*貮ٝEh,5LVN@%L	@:ivF![!\g̑_j]I	!ĊE]O(4({Z	ߠZ-T^޿0{{>fhQ`u
i$}A6'yŲ*5)ɦnIv5xz%G\p
0#Gjm9,]ҿ0vq|]W7f3%
:s^uӓ>0˩Wq̨;In%bKo6iKdygFpHڠ4 Wڃmj6;}7l>;9H$s[ȱqsXs؎L@EI(w(0|1*eBR3ڭ!4;ǐ^@$ d6Q	QK
QPTbSV PX'Dfzfmf#u	/E)-%ZbIh;sfH}Mr|DX>AbA|ȶA=v9z@˃@JVc_jK@i*'AwZgR]UKfkGQ
0"3!D:">c
L,oon^ya[`PکkV|ut{d7oogWW*H6-_^VI:2"C?a{t)SELXdeJ	NDԂߓ[YouCgJ*uWmW2 /&WtwqU̪\Ф6H)V@{䟧^zzF3NЇm7~&uc=P ("`eҐ	GOxXYik-WĐ`7w7-D
wW#qt_I$]}hxDRgN˫Zػ;|vvu@![F㽞
B@2LY%< rdsyUA{z֒ D9b)bKg#̞~R~x2Gx?fV/iO3n7ިb(Go.2ˋ7ۿLq1STj6"F^e~$qy2F6]0cut-@nuQ-LLF
reD3M"rDAےa9A
C"tpvlQ/:,:RkIS<N`T%v4(ܣ퍸T̅l%ny\8d%
baDhj[q<I僩8m%tdgHveeOJw!`||uVsYyF 
vb8IؙD:ѩQ( h<%ĢQ̒ѭT.ȜO3ʝ72{DY
\sSw=ڞ+2L2
 M1@HJ#Oɥ_mmsu5]/
Fj~ȭL
'j
BWǾH"5G->8j$\[e6x9r*yuqp0(
Uσo	,9PJ~In^o//?	Ι76|ޡs9uC1>H0mIs
42&(;S ~Eps%cEk*׆#I(ejcvɺfo|C)sK_՚Gq4/|=owRs1Rނ	ɓ&
IzQ iEE<M0n85Y$VS!DCœ>&`,J|>C|ZLuCS:迸qcfY"	30ya-+9Kς
{V.#+jZ@Gh#J01gc51/Wʲ+px\ =b89({o/5ai(kȇl`K!Q÷&u|3x2<%t5{nufE5Nm3hO :e	
K|"puoF.TLР-?QCn W;č5֓U~s5ݜyP^g5^OuK<=A:g<WI
1i%hţ?dCu@> fNa|,KȏՃFrAs$<V]ytKD4)vC;M^KbmM%(fRz&[702ߙexȝ 0dnyЈ/~B襚dk OGӸb7짦Jtb4ڟ<yh	}cb	3D;õ1KY4Nh6Fa]U7L"o~L{&繚mC\X9O4hXNK_Fck0l^FW)'oE?=II7f%q+=&yڥzwDkv]\⠧csnten' >/aR$*B~g
Z~xjߚ6{#ۿ)M|zߢ[&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Contact: Geoff Kuenning <geoff@cs.hmc.edu>
Source: https://www.cs.hmc.edu/~geoff/ispell.html

Files: *
Copyright:
 (C) 1983 Pace Willisson
 (C) 1987, 1988, 1990-1995, 1999 Geoff Kuenning, Claremont, CA.
 (C) 2001, 2002, 2005, 2015, 2020 Geoff Kuenning, Claremont, CA.
License: Ispell
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 .
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above
    copyright notice, this list of conditions and the following
    disclaimer in the documentation and/or other materials provided
    with the distribution.
 3. All modifications to the source code must be clearly marked as
    such.  Binary redistributions based on modified source code
    must be clearly marked as modified versions in the documentation
    and/or other materials provided with the distribution.
 4. The code that causes the 'ispell -v' command to display a
    prominent link to the official ispell Web site may not be
    removed.
 5. The name of Geoff Kuenning may not be used to endorse or promote
    products derived from this software without specific prior
    written permission.
 .
 THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS
 IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF
 KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED

Files: debian/*
Copyright:
 (C) 1995 Kenneth MacDonald <K.MacDonald@ed.ac.uk>
 (C) 1997 Fabrizio Polacco <fpolacco@debian.org>
 (C) 1997 Martin Mitchell <martin@debian.org>
 (C) 1998 Stefan Bjornelund <stefanb@debian.org>
 (C) 1999 Vincent Renardias <vincent@waw.com>
 (C) 1999 Mark Brown <broonie@debian.org>
 (C) 1999-2004 David Coe <davidc@debian.org>
 (C) 2001, 2002, 2009 Agustin Martin Domingo <agmartin@debian.org>
 (C) 2002 Tollef Fog Heen <tfheen@debian.org>
 (C) 2006 Steinar H. Gunderson <sesse@debian.org>
 (C) 2006 Roland Rosenfeld <roland@debian.org>
 (C) 2006 Martin Michlmayr <tbm@cyrius.com>
 (C) 2007 Thijs Kinkhorst <thijs@debian.org>
 (C) 2009 Daniel Baumann <daniel@debian.org>
 (C) 2009 David Paleino <dapal@debian.org>
 (C) 2011-2022 Robert Luberda <robert@debian.org>
License: Expat
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
 "Software"), to deal in the Software without restriction, including
 without limitation the rights to use, copy, modify, merge, publish,
 distribute, sublicense, and/or sell copies of the Software, and to
 permit persons to whom the Software is furnished to do so, subject to
 the following conditions:
 .
 The above copyright notice and this permission notice shall be
 included in all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                                                                                                   /.
/usr
/usr/lib
/usr/lib/ispell
/usr/lib/ispell/english.aff
/usr/share
/usr/share/doc
/usr/share/doc/ienglish-common
/usr/share/doc/ienglish-common/NEWS.Debian.gz
/usr/share/doc/ienglish-common/changelog.Debian.gz
/usr/share/doc/ienglish-common/changelog.gz
/usr/share/doc/ienglish-common/copyright
/usr/share/ispell
/usr/share/ispell/english.aff
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Package: ienglish-common
Status: install reinstreq unpacked
Priority: optional
Section: text
Installed-Size: 68
Maintainer: Robert Luberda <robert@debian.org>
Architecture: all
Multi-Arch: foreign
Source: ispell
Version: 3.4.05-1
Depends: ispell (>= 3.4.05)
Recommends: iamerican | iamerican-small | iamerican-large | iamerican-huge | iamerican-insane | ibritish | ibritish-small | ibritish-large | ibritish-huge | ibritish-insane
Description: Common files for British and American ispell dictionaries
 This package provides common files and dependencies for all American and
 British ispell dictionary packages. The package is useless if none of the
 dictionaries is also installed.
Homepage: https://www.cs.hmc.edu/~geoff/ispell.html
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Package: iamerican
Status: install reinstreq half-installed
Priority: optional
Section: text
Architecture: all
Version: 3.4.05-1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Language:         american (American English)
Hash-Name:        american
Emacsen-Name:     american
Casechars:        [A-Za-z]
Not-Casechars:    [^A-Za-z]
Otherchars:       [']
Many-Otherchars:
Additionalchars:
Ispell-Args:      -B -d american
Extended-Character-Mode:
Coding-System:    utf-8
Auto-Compat:      american
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                /.
/usr
/usr/lib
/usr/lib/ispell
/usr/share
/usr/share/doc
/usr/share/ispell
/usr/share/ispell/american.med+.mwl.gz
/var
/var/lib
/var/lib/dictionaries-common
/var/lib/dictionaries-common/ispell
/var/lib/dictionaries-common/ispell/iamerican
/usr/lib/ispell/american.aff
/usr/share/doc/iamerican
/usr/share/ispell/american.mwl.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Package: iamerican
Status: install reinstreq unpacked
Priority: optional
Section: text
Installed-Size: 209
Maintainer: Robert Luberda <robert@debian.org>
Architecture: all
Source: ispell
Version: 3.4.05-1
Provides: ispell-dictionary
Depends: ienglish-common (= 3.4.05-1), dictionaries-common (>= 1.23~), ispell, debconf (>= 0.5) | debconf-2.0
Suggests: wamerican
Description: American English dictionary for ispell (standard version)
 This package provides the standard, medium-sized American English dictionary,
 based on the americanmed+ dictionary supplied with the source for ispell,
 with additional words added from the more comprehensive wamerican word
 list package.
 .
 There are also -small, -large, -huge, and -insane versions of this dictionary,
 and there are ibritish* packages as well.
 .
 The package also suggests wamerican because ispell's (L)ookup command
 needs a word list.
Homepage: https://www.cs.hmc.edu/~geoff/ispell.html
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE	dc=example,dc=com
#URI	ldap://ldap.example.com ldap://ldap-provider.example.com:666

#SIZELIMIT	12
#TIMELIMIT	15
#DEREF		never

# TLS certificates (needed for GnuTLS)
TLS_CACERT	/etc/ssl/certs/ca-certificates.crt

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       [rF 9%Dl
MnAT;}d⭭qD}~F4xv߅KJE/bWV+FUcY K"Z0*vUrQUmv1!DXT
Kk;83Ōt3qrHl&i?hj<.}+2ʋ.
ya,caGb7~n4ܰ_Tǜ1;9^p4s=f9y")/v<[/yb: 	NIU['q Qe>c~*,B%Y}8e3ϝ9[ywfQ|<Bp3wQA_*"M+EPDy) $;ˢYO7gf!_VX'#twNF̻I~IvYV!$Zk^fsbE<ejidwQ>sJ+AYqa,ןgX~Ȳ%y3\@0y=L笈ze:7
ϛhđH>wȃ1?ѝ_hͣ$c6lr,L2G,8-׫ ${p6vX	Fʬ<M3xdUppZPQ1~@jĿAr\E> Y6
AjmuP``c4reX]KpE7f_b1$8KW`BUesd.sA6C>芗VVD+K'R)'6_5GPzwDJ~SVQ2J2X,lIZE\FfQ)Vf>ӷWְybe2FxI|ǞB=$(YVD+%J#	u?B A#UT	y`UvslMCGAT
1y!>+n"`L{~~m!ׂJ#@ iV2,2x\WJ+@∇6eXr:npcpwo;
OIֳt7Bv/OtFHxį1;8~9n'?/˛Cִ)HNDhƈ-AY>NOoe+~,xUҮ؛׹Fb^}#Me75N+8T{1j6X((gZJi=|X5{'MáE .kZ1quJNВPxdX
-[;^ID3QQ09m4R)Ө#`|;}˃3vl{_;tpx͆v<v?W%%F	TD&28Mﾳ"6=	0LT2)`y
/[G+zmtwi2R(x
즀@]Z!d֨r~f~oA.d'.RN'
'A*$l49SfY,,W+8L%(H~RH,f`lkPjԠ
ZQcPڑr.0'+:Ʉwqml8yOllGUѽ}3{#Sx.NH	4KZUJLeynUS^OL:c0~qB`m1	zUE!7.uJWpSwh
M	9W KΎO.jtAb2K3A]'hxgcU@,?CH
K#'3]/%yyUJnÐyD("9Ȉ"C<q*% ZC]>Γ<dQ_8@yA
zK89F$(ώ^Ԯ	[Ew<!bA~j 1eNRI`Bg7Г7!àĽ)tAacB PzmgU* 	3lT!`nD^(0>F"Vx:Ax'Jp~^qkQL$76-A0,N[`Ja(ʹ	JYˠfv7#{C]WԜA&Q83YCVX2 
zQ!uvv|1(XJ"$Zۧ{keI@8~4JizX$P:OPcLхldqxr[ @NNPNNodyB@]Fê=D\.`"xE&B&lDTUHy-J+eeJ+NQ!ʯ)O٠?s  o)B93U#_"7PT^`	P8Uvq#Q&"	IcL~ "4Q	hݨ!6ؙxCG?0/d>ٓ70
Qiȍz2*޸5m[6	bȭ^v
43A\E0pTP4dbM\8|Ë[oNF$WFC)Z~@zk#]({kRSR^Jv"_l ᥏FԐryxrMVNUƈ]⼋v+Y"",4Ijڤb^cꉆdxALOgk}|(R;p>v;Hy*dh
[jkc11s=uU1k(Y!
a'HeQǰ[֞mNjy2ɏOXvh6
*4`j|S/Xl\uSM 3SتRyhYe#QTh2v<--67cP#*\kg;
_խYϑ,Ajz(%V [%&Qʅ%H#9}PXǃ+g{ph9ϻSYA(qJ쾓 KqAڤ<{UT)U` zfQ +/*;5[1T<KafsvCTαL<FR!BކE\T+5z9\;캔eX=;%;9z"ĢԲӾ>n;ݝ(!gA'$zyMAPƢ:Ng&$a9U1ZLS	nAR\`b=^%h/Sa,
-ЂOf緪!+7jeBΎ5d:FExc@܅bB[<qi]Ky
eDkx&R@6F#8.n.!9pӶe{Kҧl/r*&e1}cb(|hIcԐfu8N~cڤe%g!
Tޯo>_?\\3DH+.U>Jô~N3Ku,gAp:}3?98~w=<>3?z6&*7(g`TrF>AxoHl(ՉZk5 @HLzG5C,UI#9xѬ.^$v"*R"dZ?Ʋg:
6Mѫ۹
W֛d#:8:+R;[PP{i:O Ii݂Tm{{MSVη]N(-qals?6O[&~]4TJZ+:$9!+^+@S>pueoZP`p1R4P3 zӊ lMDP*Xe#?B6?<[l׿la(UQԩ:풯 CGkF)ѯh92 	Ѩ$/7c]ed^h|q.NVFZZo=!TcPWy<z1u3\YPQޤI@gLdvY$:]l2Y2臕/ߗ;T~[ߍj4CuA`y EʼD^ȦM3a`T<#a*Rm#w6ah1s1\LfI
韼ڡҞݼ91}<5)IM]7FvtTØGvbS7e:Si*ƭ%cC{" VZNPVcNek=;t'8|qk{:➍fo4)fOx{ǯq[/Vw8{i6aglz{ݛWYeMC=d	B}%(\q4$`8h.}7\pXpopJMsopM (TO~g΋p@S;f2Zw=Z"cl[V#3;|hD'?F@³(..
LlEy鵏𤴦W	 ^%:SvJs1O8Xw0t>KnGڟ 
GH,	u&bW/{GN+?o2+MZiA'cg&=3I+Jol=uf}vG:p(pXCeXvM?vM})m}a!<9ӸXyY©ueㅺ|ssucUYϜVVM}9JqvκZcsm_ <!{aNZP禓4yD㶹a& dK×4e?-f2z;1Ueevn.Sئ]uu:SoУ[OҤuRN=(|ZLTlVe,,?.he$Je`4t($up9yBbzl:-V=+9Х%T,(5?8WZ.$WyzT`rXۛ:W&R۠'"VbPD᥺itVĨeua,Eɪ)퉢Q_j5uzK*~ w?8H髻M:䠇b~?Ekzjn5+uOY},%n=ET@ŚʸF]ui<%&짥sѤM7;
g]3k򘲾)ʠW-b'Xd(Y[ EW`u]E94Oy9uD>A+1gTAV=ܽUcGdU:mdUL1P9>O]h)~jO{jG(5Z 2DZgenףx#;;d}ViӛwHV?/̍K3u0zU*4:t%'!2J0r#@"~gmt:kUn{"KUһ"Go+׶۶DlZQ!ɼBI 7ܴ<*EID(jѯ:gvv`/s9s4_*Uk|,{\ѾOݨd`=|MJi/03+I	:Wq?O.hrA
;i@Fz9@;\ͨΙa:+wg@.i-W1^9L}bRj2In~~Jܠ[[跃)K]RgUFpW#n@'^Y>>.)*ނ0+ F(ɀ̗{a r>`v;K+0@SA;GT-Tׅҥ)_%ÎGF@H!Hoq@3nK̑{;ڿeAI[ֿs$
rd
^[sIYkėߐj{wK32y9-REɷE
TX:|p~)s
kdy~UEo6ߺ}=%i{W>+n'LU<mNJ2rs\8ez3C˺F#y@)YkT+jvJ+U2PMzGTRs wz݅Ppvhq;'
t"K>aa0
ӽ( vH~BYhZ*6ɺV~4Z){3+LPzԫCJs^!0nm'ŏ4|,ri7h"mTLݟP2ug)+h%*
: YMߣ\ m7&*L=B_9SJa߶
	{X$S-",܌ho,8a#8ŎV0D	F!(ޢH)ʠ$U\g
G)ۉڕf]RuBۺuî/N462FynTaWb:[>BBn&w@qB/t"p1
{7%m[W}L7HxuG'yyC!!WRzxqrqMe+vQQIu&Di\߼O,9[9N<\A)+BdBXw빱@yɻ*k# %XY۸k-aN'j99X0S,;?9-Gmdj5hY{K'aƔJ6EtT;?$K
-;;9iN4aJT(WdFIud!jpO,qPPVQywh(
b~u~Fc	*-)[IjRy׆Jéw
_ε߰k}LCg4vef:EMYd6IA_0ŏv-??"`gTV]h9&QP/SzOt9Z9Wg'ԚK5t3C
H>=
>}V iA{^> >+`EʹsQ+.zsEܢh&nL,(Tc=rhySJWB-F߻nX1kRW>.cFLUS)X@j U"	$&D鍁ԗk#ı{b;D.}R	D%W,r9F1["-#$XA)ך%JX8#$x3|:ʴ	,N~Ou:Ly⦴^/*)!j|%;<\)PIǛ>ydZHJ4`ĸl3
þWwcc"Eq 	d5)7AM3ڧ;ixe
+A	lQ?^R':>`H></AaB%ƧK֢noGvirG(Y.y!"c
s^rHm
\`PP9Ht>&#~/k&V                                                                                                                                                                                                                                                                                                                                                                         Zn9}N}I0u؇Vv
8q`;T7%qݷi}S%yYbԩbTMbǋ`ۛSv+2`&d8o>gLkTK-X*\˲`%<ʄb6nd)X.~a8
Tƫ=шF0TUY--KE@	jT2XUPעdb-~z<yl3lE]A.Y۔5Sgx*jE~]~\ޭ>q4*<IRY2mf=)60YhQdoq_{䞪.z>O"1زL&ӞpSH\y(5c+C{dFN,eQeo߼O\5$,)qg;.+sto=qT,[phDG٧de)|k%C,Uo4ڥOe)R9o\T\w]D^؟؟Û̹|XL6"]nF6?N2i&
V{Hhy	?`	ɬ8|7ecT7.qS0\V>q"M4fӺ}py])לI$B>B8Eh
E5tk{PC` s$,J~Fq 3zB xq3'xꦰ z\%{2ǺQo-@(__ k5g &n
?3tlסd8
ތϏ%HDGų?t|ڛ˻s@EX:bIeBBT<C(Z>TInWeE}KBjD7V@vꏌnu5.XWR 呷J_ӗ"Ps06C8N6	&,H0 ]BeMBk:!66"3	))J'.60Cf-N+&s턌Mer ʵc xxBHD9"!\&It2~F2A`CLV%̥?0\܌f<0ubF9(|iEZ#6I BgxQkl+C\d\)&RPa6NK<99T$~(ܩ!xRx#&W{bv)jALթ`TD
=:!nnԗDT
@_1a
BtEyFzN<j=kɛdV#cZ}&:ޞ4UJR&c60xҵnSd@EQ(XQ6F'[m EðmQ9O䲸v5M907f؈3E===0RZxqE*{&'!hak"8˳j_LMeFr1U O$ww	uв+q)0LEiU lj<?^Ե6p+
`%kC:yzEi!A>'ۿ_)J<v톭ܢ24Զ>Sh8TIf( lf:5T 2vqpDdN8k3rO`*R{oNADދZwdDnu[|_[}[.o/^yt ]*5b{agyNk}:;R6|6RY]%2ov5뱔4/mx^~:s݀1 4); [Цņ,l%xjxsuH)uT\]&(d/,qMa3kNH7`̜V$h"hrbkzrÊU*Մ؞Eǋ+3;Ot(Mʘ5BC%R턝}rϦ6Z/ C.`pt5 f4՜T˵o&TC--qALÐ!̤DU&Vщ̝jgU=4b~
0imN"73JNwB)NEڍ
 _yl_į޳|ڗ!<HKU6!(E	<QH"TUvIFqTOt lӄșBVvTڟi ejihG7ᾢ1{ԉ⃙r{K҇"0i@
zQSهvNLNnw Li"꽻7b8nK4o#>s2;1
$$(8<ir Y*7-0Zf4U8<~B2H\7@Pn4>naX"XյG}c/H4b}2or3Wh
A6,g4:<Gh`H1z@gOet-Eu{
'nj]7ԗ@I]8ܫ t;Oytj٭qCmb։BoZX#d_2(>qFq񣧣excn~_ܚYXؽn),]qћf$e8gy
 FR$|o7>Л
/JJ]5>\cFK41ܤ.ˬuQ$>h
֠ٔV
QzH@$G@=7/M{eU 6
zDԵ5$_o߁:UnyL16Rzٲ~=ռh4=E2kCjCvf'а8F(kVL2_pWR$0hNGΦ2,	Z˲%50HȢ׼(u*]ŋE!?88` b_dzޏhhʲ^~]_}Y|}T17'w6<jOK~ZξVIsI;tĂ\]fcweW)``[0'b B!vG>rI4Ԋ!Me\.?Z͗AgSȊ?P*'c$Yԇ]je>D<C=ORyeާ)=)~GQvHCo"l.ÒrVaSnMu2k
Ԏ[<:$R
"2zoZ|»g~1gne\/{cRf3XP+@7T+M}3ZR9#=BI-QM3?'Da5ezk#î!mLu'`
+7RP=
x-z[3K~uHa2o:WxP3j~lFl^Y+
ܗ0r?VkOC3+qP;Ö}&}|UPfγ~
h9<5bA(                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: OpenLDAP
Source: https://openldap.org/
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2013 Kurt D. Zeilenga.
           Portions Copyright 1998-2006 Net Boolean Incorporated.
           Portions Copyright 2001-2006 IBM Corporation.
           Portions Copyright 1999-2008 Howard Y.H. Chu.
           Portions Copyright 1999-2008 Symas Corporation.
           Portions Copyright 1998-2003 Hallvard B. Furuseth.
           Portions Copyright 2007-2011 Gavin Henry.
           Portions Copyright 2007-2011 Suretec Systems Ltd.
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
License: OpenLDAP-2.8
Comment:
 Redistribution and use in source and binary forms, with or without
 modification, are permitted only as authorized by the OpenLDAP
 Public License.
 .
 A copy of this license is available in the file LICENSE in the
 top-level directory of the distribution or, alternatively, at
 <http://www.OpenLDAP.org/license.html>.
 .
 OpenLDAP is a registered trademark of the OpenLDAP Foundation.
 .
 Individual files and/or contributed packages may be copyright by
 other parties and/or subject to additional restrictions.
 .
 This work is derived from the University of Michigan LDAP v3.3
 distribution.  Information concerning this software is available
 at <http://www.umich.edu/~dirsvcs/ldap/ldap.html>.
 .
 This work also contains materials derived from public sources.
 .
 Additional information about OpenLDAP can be obtained at
 <http://www.openldap.org/>.
Files-Excluded: doc/drafts/*
                doc/rfc/*
                servers/slapd/schema/collective.schema
                servers/slapd/schema/corba.schema
                servers/slapd/schema/core.ldif
                servers/slapd/schema/core.schema
                servers/slapd/schema/cosine.schema
                servers/slapd/schema/duaconf.schema
                servers/slapd/schema/inetorgperson.schema
                servers/slapd/schema/java.schema
                servers/slapd/schema/namedobject.schema
                servers/slapd/schema/pmi.schema

Files: *
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           All rights reserved.
License: OpenLDAP-2.8

Files: aclocal.m4
Copyright: Copyright (C) 1996-2018 Free Software Foundation, Inc.
           Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
           Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
License: FSF-unlimited and GPL-2+ with Autoconf exception

Files: contrib/ldapc++/*
Copyright: Copyright 2000-2022 The OpenLDAP Foundation.
License: OpenLDAP-2.8

Files: build/config.guess
       build/config.sub
       contrib/ldapc++/config.guess
       contrib/ldapc++/config.sub
Copyright: Copyright 1992-2020 Free Software Foundation, Inc.
License: GPL-3+ with Autoconf exception

Files: build/libtool.m4
Copyright: Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
License: FSF-unlimited

Files: build/ltmain.sh
       contrib/ldapc++/ltmain.sh
Copyright: Copyright (C) 1996-2015 Free Software Foundation, Inc.
           Copyright (C) 2004-2015 Free Software Foundation, Inc.
           Copyright (C) 2010-2015 Free Software Foundation, Inc.
License: GPL-2+ with Libtool exception and GPL-3+ with Libtool exception and GPL-3+

Files: build/lt~obsolete.m4
       build/ltoptions.m4
       build/ltsugar.m4
       build/ltversion.m4
Copyright: Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software Foundation, Inc.
License: FSF-unlimited

Files: build/missing
       contrib/ldapc++/missing
Copyright: Copyright (C) 1996-2014 Free Software Foundation, Inc.
License: GPL-2+ with Autoconf exception

Files: build/shtool
Copyright: Copyright (c) 1994-2008 Ralf S. Engelschall <rse@engelschall.com>
License: GPL-2+
Comment:
 NOTICE: Given that you include this file verbatim into your own
 source tree, you are justified in saying that it remains separate
 from your package, and that this way you are simply just using GNU
 shtool. So, in this situation, there is no requirement that your
 package itself is licensed under the GNU General Public License in
 order to take advantage of GNU shtool.

Files: clients/tools/common.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2003 Kurt D. Zeilenga.
           Portions Copyright 2003 IBM Corporation.
License: OpenLDAP-2.8

Files: clients/tools/ldapcompare.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright 1998-2001 Net Boolean Incorporated.
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
           Portions Copyright 2002, F5 Networks, Inc, All rights reserved.
License: OpenLDAP-2.8 and UMich and F5

Files: clients/tools/ldapdelete.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: clients/tools/ldapexop.c
Copyright: Copyright 2005-2022 The OpenLDAP Foundation.
License: OpenLDAP-2.8

Files: clients/tools/ldapmodify.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2006 Howard Chu.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright 1998-2001 Net Boolean Incorporated.
           Portions Copyright 2001-2003 IBM Corporation.
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: clients/tools/ldapmodrdn.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright 1998-2001 Net Boolean Incorporated.
           Portions Copyright 2001-2003 IBM Corporation.
           Portions Copyright 1999, Juan C. Gomez.
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
License: OpenLDAP-2.8 and JCG and UMich

Files: clients/tools/ldappasswd.c
       clients/tools/ldapsearch.c
       clients/tools/ldapwhoami.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright 1998-2001 Net Boolean Incorporated.
           Portions Copyright 2001-2003 IBM Corporation.
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: clients/tools/ldapurl.c
Copyright: Copyright 2008-2022 The OpenLDAP Foundation.
           Portions Copyright 2008 Pierangelo Masarati, SysNet
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: clients/tools/ldapvc.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2010 Kurt D. Zeilenga.
           Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: configure
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
           Copyright (C) 2012 Free Software Foundation, Inc.
           Copyright (C) 2014 Free Software Foundation, Inc.
License: OpenLDAP-2.8 and FSF-unlimited and GPL-2+ with Libtool exception

Files: contrib/ldapc++/aclocal.m4
Copyright: Copyright (C) 1996-2017 Free Software Foundation, Inc.
           Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
           Copyright (C) 2014 Free Software Foundation, Inc.
License: FSF-unlimited and GPL-2+ with Libtool exception

Files: contrib/ldapc++/configure
Copyright: Copyright 2000-2022 The OpenLDAP Foundation.
           Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
           Copyright (C) 2012 Free Software Foundation, Inc.
           Copyright (C) 2014 Free Software Foundation, Inc.
License: OpenLDAP-2.8 and FSF-unlimited and GPL-2+ with Libtool exception

Files: contrib/ldapc++/depcomp
Copyright: Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
License: GPL-2+ with Autoconf exception

Files: contrib/ldapc++/examples/Makefile.in
       contrib/ldapc++/Makefile.in
Copyright: Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
           Copyright 2003-2022 The OpenLDAP Foundation.
License: FSF-unlimited and OpenLDAP-2.8

Files: contrib/ldapc++/install-sh
Copyright: Copyright (C) 1994 X Consortium
License: MIT-XC
Comment:
 FSF changes to this file are in the public domain.

Files: contrib/ldaptcl/configure
Copyright: Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
License: FSF-unlimited

Files: contrib/ldaptcl/ldaperr.tcl
       contrib/ldaptcl/ldap.n
       contrib/ldaptcl/Makefile.in
       contrib/ldaptcl/man.macros
       contrib/ldaptcl/neoXldap.c
       contrib/ldaptcl/pkgIndex.tcl.in
       contrib/ldaptcl/tclAppInit.c
       contrib/ldaptcl/tkAppInit.c
Copyright: Copyright (c) 1998-1999 NeoSoft, Inc.
           All Rights Reserved.
License: NeoSoft-permissive
 This software may be used, modified, copied, distributed, and sold,
 in both source and binary form provided that these copyrights are
 retained and their terms are followed.
 .
 Under no circumstances are the authors or NeoSoft Inc. responsible
 for the proper functioning of this software, nor do the authors
 assume any liability for damages incurred with its use.
 .
 Redistribution and use in source and binary forms are permitted
 provided that this notice is preserved and that due credit is given
 to NeoSoft, Inc.
 .
 NeoSoft, Inc. may not be used to endorse or promote products derived
 from this software without specific prior written permission. This
 software is provided ``as is'' without express or implied warranty.
 .
 Requests for permission may be sent to NeoSoft Inc, 1770 St. James Place,
 Suite 500, Houston, TX, 77056.

Files: contrib/slapd-modules/acl/gssacl.c
Copyright: Copyright 2011 PADL Software Pty Ltd.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/addpartial/*
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright (C) 2004 Virginia Tech, David Hawes.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/adremap/*
Copyright: Copyright 2015 Howard Chu <hyc@symas.com>.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/autogroup/*
Copyright: Copyright 2007-2022 The OpenLDAP Foundation.
           Portions Copyright 2007 Michał Szulczyński.
           Portions Copyright 2009 Howard Chu.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/cloak/cloak.c
Copyright: Copyright 2008-2022 The OpenLDAP Foundation.
           Portions Copyright 2008 Emmanuel Dreyfus
License: OpenLDAP-2.8

Files: contrib/slapd-modules/comp_match/*
Copyright: Copyright 2004 Sang Seok Lim, IBM . All rights reserved.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/datamorph/Makefile
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright 2017 Ondřej Kuzník, Symas Corp. All Rights Reserved.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/datamorph/slapo-datamorph.5
Copyright: Copyright 2016-2017 Symas Corp. All Rights Reserved.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/lastbind/*
Copyright: Copyright 2009 Jonathan Clarke <jonathan@phillipoux.net>.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/nops/*
Copyright: Copyright 2008-2022 The OpenLDAP Foundation.
           Copyright 2008 Emmanuel Dreyfus.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/nssov/*
       libraries/libldap/tavl.c
       libraries/liblmdb/mdb_load.c
       libraries/liblmdb/mtest6.c
       libraries/liblmdb/midl.h
       libraries/liblmdb/mdb_copy.1
       libraries/liblmdb/mdb_stat.c
       libraries/liblmdb/mtest3.c
       libraries/liblmdb/intro.doc
       libraries/liblmdb/mdb_copy.c
       libraries/liblmdb/mdb_dump.c
       libraries/liblmdb/midl.c
       libraries/liblmdb/mtest4.c
       libraries/liblmdb/sample-bdb.txt
       libraries/liblmdb/mdb_load.1
       libraries/liblmdb/mdb_stat.1
       libraries/liblmdb/sample-mdb.txt
       libraries/liblmdb/mtest5.c
       libraries/liblmdb/mtest2.c
       libraries/liblmdb/mtest.c
       libraries/liblmdb/mdb_dump.1
Copyright: Copyright 2008-2022 The OpenLDAP Foundation.
           Portions Copyright 2004-2022 by Howard Chu, Symas Corp.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/nssov/nssov.*
       contrib/slapd-modules/nssov/pam.c
Copyright: Copyright 2008-2022 The OpenLDAP Foundation.
           Portions Copyright 2008 by Howard Chu, Symas Corp.
           Portions Copyright 2013 by Ted C. Cheng, Symas Corp.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/nssov/nss-pam-ldapd/attrs.h
       contrib/slapd-modules/nssov/nss-pam-ldapd/README
       contrib/slapd-modules/nssov/nss-pam-ldapd/tio.c
       contrib/slapd-modules/nssov/nss-pam-ldapd/tio.h
Copyright: Copyright (C) 2007, 2008, 2012 Arthur de Jong
License: OpenLDAP-2.8

Files: contrib/slapd-modules/nssov/nss-pam-ldapd/nslcd.h
       contrib/slapd-modules/nssov/nss-pam-ldapd/nslcd-prot.h
Copyright: Copyright (C) 2006 West Consulting
           Copyright (C) 2006, 2007, 2009, 2010, 2011, 2012, 2013, 2014 Arthur de Jong
License: OpenLDAP-2.8

Files: contrib/slapd-modules/passwd/totp/*
Copyright: Copyright 2015-2022 The OpenLDAP Foundation.
           Portions Copyright 2015 by Howard Chu, Symas Corp.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/passwd/sha2/*
Copyright: Copyright 2009-2022 The OpenLDAP Foundation.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/passwd/sha2/sha2.*
Copyright: Copyright (c) 2000-2001, Aaron D. Gifford
License: BSD-3-clause

Files: contrib/slapd-modules/passwd/kerberos.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright (c) 1997, 1998, 1999 Kungliga Tekniska H\xf6gskolan
           (Royal Institute of Technology, Stockholm, Sweden).
           Copyright (c) 1989 Regents of the University of California.
License: OpenLDAP-2.8 and BSD-3-clause

Files: contrib/slapd-modules/passwd/apr1.c
Copyright: Copyright 2011 Devin J. Pohly
           Portions Copyright 2011 Howard Chu
           Poul-Henning Kamp <phk@FreeBSD.ORG>
License: OpenLDAP-2.8 and Beerware

Files: contrib/slapd-modules/passwd/apr1-*.pl
Copyright: (C) 2011 Devin J. Pohly
License: public-domain

Files: contrib/slapd-modules/proxyOld/*
Copyright: Copyright 2005-2022 The OpenLDAP Foundation.
           Portions Copyright 2005 by Howard Chu, Symas Corp.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/rbac/slapo-rbac.5
Copyright: Copyright 1999-2021 SYMAS Corporation All Rights Reserved.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/samba4/*
       libraries/libldap/stctrl.c
       libraries/librewrite/Makefile.in
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2008 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/samba4/Makefile
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/smbk5pwd/smbk5pwd.c
       contrib/slapd-modules/smbk5pwd/Makefile
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright 2004-2005 by Howard Chu, Symas Corp.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/variant/*
Copyright: Copyright 2016-2021 Symas Corporation.
License: OpenLDAP-2.8

Files: contrib/slapd-modules/variant/tests/*
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
License: OpenLDAP-2.8

Files: contrib/slapd-tools/*
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2004 Hallvard B. Furuseth.
License: OpenLDAP-2.8

Files: contrib/slapi-plugins/addrdnvalues/*
Copyright: Copyright 2003-2022 The OpenLDAP Foundation.
           Copyright 2003-2004 PADL Software Pty Ltd.
License: OpenLDAP-2.8

Files: doc/man/man5/slapo-remoteauth.5
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright 2004-2017 Howard Chu, Symas Corporation.
           Portions Copyright 2017-2021 Ondřej Kuzník, Symas Corporation.
           Portions Copyright 2004 Hewlett-Packard Company
License: OpenLDAP-2.8

Files: doc/man/man5/slapo-rwm.5
Copyright: Copyright 1998-2022 The OpenLDAP Foundation, All Rights Reserved.
           Copyright 2004, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
License: OpenLDAP-2.8

Files: doc/man/man5/slapd-asyncmeta.5
Copyright: Copyright 2016-2022 The OpenLDAP Foundation.
           Portions Copyright 2016 Symas Corporation.
License: OpenLDAP-2.8

Files: doc/man/man5/slapo-otp.5
Copyright: Copyright 2015-2022 The OpenLDAP Foundation.
           Portions Copyright 2015 by Howard Chu, Symas Corp. All rights reserved.
           Portions Copyright 2018 by Ondřej Kuzník, Symas Corp. All rights reserved.
License: OpenLDAP-2.8

Files: doc/man/man5/slapd-meta.5
       doc/man/man5/slapo-pcache.5
       doc/man/man5/slapo-retcode.5
Copyright: Copyright 1998-2022 The OpenLDAP Foundation, All Rights Reserved.
           Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
License: OpenLDAP-2.8

Files: doc/man/man5/slapo-autoca.5
Copyright: Copyright 2009-2022 The OpenLDAP Foundation All Rights Reserved.
           Copyright 2009-2018 Howard Chu All Rights Reserved.
License: OpenLDAP-2.8

Files: doc/man/man5/slapo-constraint.5
Copyright: Copyright 2005-2006 Hewlett-Packard Company
           Copyright 2006-2022 The OpenLDAP Foundation All Rights Reserved.
License: OpenLDAP-2.8

Files: doc/man/man5/slapo-sssvlv.5
Copyright: Copyright 2009-2022 The OpenLDAP Foundation All Rights Reserved.
           Copyright 2009 Symas Corporation All Rights Reserved.
License: OpenLDAP-2.8

Files: doc/man/man1/ldapexop.1
Copyright: Copyright 2009 Peter Marschall
License: OpenLDAP-2.8

Files: include/ldap_queue.h
Copyright: Copyright 2001-2022 The OpenLDAP Foundation.
           Copyright (c) 1991, 1993 The Regents of the University of California.  All rights reserved.
License: OpenLDAP-2.8 and BSD-4-clause-California

Files: include/slapi-plugin.h
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1997,2002,2003 IBM Corporation.
License: OpenLDAP-2.8

Files: include/rewrite.h
Copyright: Copyright 2000-2022 The OpenLDAP Foundation.
           Portions Copyright 2000-2003 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: include/ldap_utf8.h
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright (C) 2000 Novell, Inc. All Rights Reserved.
License: OpenLDAP-2.8

Files: include/sysexits-compat.h
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (c) 1987 Regents of the University of California.
License: OpenLDAP-2.8 and BSD-3-clause-variant

Files: include/lutil_meter.h
Copyright: Copyright (c) 2009 by Emily Backes, Symas Corp.
License: OpenLDAP-2.8

Files: include/ldap_avl.h
       include/ldap.h
       include/ldap_defaults.h
       include/ldif.h
       include/ldap_log.h
       include/lber.h
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (c) 1993 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: libraries/liblutil/getopt.c
       libraries/liblutil/hash.c
       libraries/liblutil/entropy.c
       libraries/libldap/apitest.c
       libraries/libldap/fetch.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
License: OpenLDAP-2.8

Files: libraries/liblutil/meter.c
Copyright: Copyright (c) 2009 by Emily Backes, Symas Corp.
License: OpenLDAP-2.8

Files: libraries/liblutil/base64.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright 1995 IBM Corporation.
           Copyright (c) 1996, 1998 by Internet Software Consortium.
License: OpenLDAP-2.8 and Expat-ISC

Files: libraries/liblutil/detach.c
       libraries/libldap/testtavl.c
       libraries/libldap/filter.c
       libraries/libldap/search.c
       libraries/libldap/open.c
       libraries/libldap/add.c
       libraries/libldap/avl.c
       libraries/libldap/abandon.c
       libraries/libldap/sbind.c
       libraries/libldap/getentry.c
       libraries/libldap/url.c
       libraries/libldap/sort.c
       libraries/libldap/getvalues.c
       libraries/libldap/delete.c
       libraries/libldap/testavl.c
       libraries/libldap/ldifutil.c
       libraries/libldap/bind.c
       libraries/libldap/compare.c
       libraries/libldap/getattr.c
       libraries/libldap/unbind.c
       libraries/libldap/free.c
       libraries/libldap/lbase64.c
       libraries/libldap/getdn.c
       libraries/liblber/io.c
       libraries/liblber/lber-int.h
       libraries/liblber/bprint.c
       libraries/liblber/idtest.c
       libraries/liblber/decode.c
       libraries/liblber/dtest.c
       libraries/liblber/encode.c
       libraries/liblber/etest.c
       libraries/libldap/addentry.c
       libraries/libldap/ldif.c
       libraries/libldap/ldap-int.h
       libraries/libldap/modify.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright (c) 1990, 1994 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: libraries/liblutil/getpass.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright 2009 Howard Chu.
           Portions Copyright (c) 1992, 1993  Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: libraries/liblutil/uuid.c
Copyright: Copyright 2000-2022 The OpenLDAP Foundation.
           Portions Copyright 2000-2003 Kurt D. Zeilenga.
License: OpenLDAP-2.8

Files: libraries/liblunicode/ucdata/MUTTUCData.txt
       libraries/liblunicode/ucdata/ucpgba.h
       libraries/liblunicode/ucdata/ucdata.h
       libraries/liblunicode/ucdata/ucdata.c
       libraries/liblunicode/ucdata/ucpgba.c
       libraries/liblunicode/ucdata/ucgendat.c
       libraries/liblunicode/ure/README
       libraries/liblunicode/ure/urestubs.c
       libraries/liblunicode/ure/ure.c
       libraries/liblunicode/ure/ure.h
       libraries/liblunicode/utbm/utbm.h
       libraries/liblunicode/utbm/utbmstub.c
       libraries/liblunicode/utbm/utbm.c
       libraries/liblunicode/utbm/README
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright 1997-2001 Computing Research Labs
License: OpenLDAP-2.8 and Expat-UNM

Files: libraries/libldap/pagectrl.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright 2006 Hans Leidekker
License: OpenLDAP-2.8

Files: libraries/libldap/utf-8-conv.c
       libraries/libldap/result.c
       libraries/libldap/vlvctrl.c
       libraries/libldap/controls.c
       libraries/libldap/sortctrl.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (C) 1999, 2000 Novell, Inc. All Rights Reserved.
License: OpenLDAP-2.8

Files: libraries/libldap/deref.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2008 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: libraries/libldap/modrdn.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (c) 1990 Regents of the University of Michigan.
           Copyright 1999, Juan C. Gomez, All rights reserved.
License: OpenLDAP-2.8 and Expat

Files: libraries/libldap/os-local.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (c) 1995 Regents of the University of Michigan.
           Portions (C) Copyright PADL Software Pty Ltd. 1999
License: OpenLDAP-2.8 and Expat

Files: libraries/libldap/msctrl.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2018 Howard Chu.
License: OpenLDAP-2.8

Files: libraries/libldap/dds.c
Copyright: Copyright 2005-2022 The OpenLDAP Foundation.
           Portions Copyright 2005-2006 SysNet s.n.c.
License: OpenLDAP-2.8

Files: libraries/libldap/os-ip.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999 Lars Uffmann.
           Portions Copyright (c) 1995 Regents of the University of Michigan.
License: OpenLDAP-2.8

Files: libraries/libldap/ppolicy.c
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright 2004 Hewlett-Packard Company.
           Portions Copyright 2004 Howard Chu, Symas Corp.
License: OpenLDAP-2.8

Files: libraries/libldap/rq.c
Copyright: Copyright 2003-2022 The OpenLDAP Foundation.
           Portions Copyright 2003 IBM Corporation.
License: OpenLDAP-2.8

Files: libraries/libldap/request.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (c) 1995 Regents of the University of Michigan.
           Copyright (C) 1999, 2000 Novell, Inc. All Rights Reserved.
License: OpenLDAP-2.8

Files: libraries/libldap/account_usability.c
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright 2004 Hewlett-Packard Company.
           Portions Copyright 2004 Howard Chu, Symas Corp.
License: OpenLDAP-2.8

Files: libraries/libldap/util-int.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998 A. Hartgers.
License: OpenLDAP-2.8

Files: libraries/liblmdb/mdb.c
       libraries/liblmdb/lmdb.h
Copyright: Copyright 2011-2021 Howard Chu, Symas Corp.
           Copyright (c) 2009, 2010 Martin Hedenfalk <martin@bzero.se>
License: OpenLDAP-2.8 and Expat

Files: servers/slapd/back-asyncmeta/Makefile.in
       servers/slapd/back-asyncmeta/search.c
       servers/slapd/back-asyncmeta/init.c
       servers/slapd/back-asyncmeta/message_queue.c
       servers/slapd/back-asyncmeta/modrdn.c
       servers/slapd/back-asyncmeta/add.c
       servers/slapd/back-asyncmeta/config.c
       servers/slapd/back-asyncmeta/back-asyncmeta.h
       servers/slapd/back-asyncmeta/conn.c
       servers/slapd/back-asyncmeta/delete.c
       servers/slapd/back-asyncmeta/bind.c
       servers/slapd/back-asyncmeta/candidates.c
       servers/slapd/back-asyncmeta/compare.c
       servers/slapd/back-asyncmeta/dncache.c
       servers/slapd/back-asyncmeta/proto-asyncmeta.h
       servers/slapd/back-asyncmeta/modify.c
       servers/slapd/back-asyncmeta/meta_result.c
Copyright: Copyright 2016-2022 The OpenLDAP Foundation.
           Copyright 2016 Symas Corporation.
           All rights reserved.
License: OpenLDAP-2.8

Files: servers/slapd/back-asyncmeta/map.c
Copyright: Copyright 2016-2022 The OpenLDAP Foundation.
           Copyright 2016 Symas Corporation.
           Copyright 1999, Howard Chu <hyc@highlandsun.com>
           All rights reserved.
License: OpenLDAP-2.8

Files: servers/slapd/back-dnssrv/Makefile.in
       servers/slapd/back-dnssrv/search.c
       servers/slapd/back-dnssrv/init.c
       servers/slapd/back-dnssrv/config.c
       servers/slapd/back-dnssrv/referral.c
       servers/slapd/back-dnssrv/bind.c
       servers/slapd/back-dnssrv/compare.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright 1998-2003 Kurt D. Zeilenga.
License: OpenLDAP-2.8

Files: servers/slapd/back-ldap/monitor.c
       servers/slapd/back-ldap/search.c
       servers/slapd/back-ldap/init.c
       servers/slapd/back-ldap/modrdn.c
       servers/slapd/back-ldap/add.c
       servers/slapd/back-ldap/back-ldap.h
       servers/slapd/back-ldap/config.c
       servers/slapd/back-ldap/delete.c
       servers/slapd/back-ldap/bind.c
       servers/slapd/back-ldap/compare.c
       servers/slapd/back-ldap/unbind.c
       servers/slapd/back-ldap/modify.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999-2003 Howard Chu.
           Portions Copyright 2000-2003 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/back-ldap/chain.c
       servers/slapd/back-ldap/distproc.c
       servers/slapd/back-ldap/pbind.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999-2003 Howard Chu.
License: OpenLDAP-2.8

Files: servers/slapd/back-meta/search.c
       servers/slapd/back-meta/init.c
       servers/slapd/back-meta/suffixmassage.c
       servers/slapd/back-meta/modrdn.c
       servers/slapd/back-meta/add.c
       servers/slapd/back-meta/config.c
       servers/slapd/back-meta/conn.c
       servers/slapd/back-meta/delete.c
       servers/slapd/back-meta/bind.c
       servers/slapd/back-meta/candidates.c
       servers/slapd/back-meta/map.c
       servers/slapd/back-meta/proto-meta.h
       servers/slapd/back-meta/compare.c
       servers/slapd/back-meta/dncache.c
       servers/slapd/back-meta/back-meta.h
       servers/slapd/back-meta/unbind.c
       servers/slapd/back-meta/modify.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2001-2003 Pierangelo Masarati.
           Portions Copyright 1999-2003 Howard Chu.
License: OpenLDAP-2.8

Files: servers/slapd/back-monitor/time.c
       servers/slapd/back-monitor/search.c
       servers/slapd/back-monitor/proto-back-monitor.h
       servers/slapd/back-monitor/init.c
       servers/slapd/back-monitor/backend.c
       servers/slapd/back-monitor/conn.c
       servers/slapd/back-monitor/overlay.c
       servers/slapd/back-monitor/cache.c
       servers/slapd/back-monitor/back-monitor.h
       servers/slapd/back-monitor/log.c
       servers/slapd/back-monitor/sent.c
       servers/slapd/back-monitor/bind.c
       servers/slapd/back-monitor/rww.c
       servers/slapd/back-monitor/operational.c
       servers/slapd/back-monitor/database.c
       servers/slapd/back-monitor/compare.c
       servers/slapd/back-monitor/listener.c
       servers/slapd/back-monitor/thread.c
       servers/slapd/back-monitor/entry.c
       servers/slapd/back-monitor/operation.c
       servers/slapd/back-monitor/modify.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2001-2003 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/back-passwd/search.c
       servers/slapd/back-passwd/config.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (c) 1995 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: servers/slapd/back-perl/close.c
       servers/slapd/back-perl/search.c
       servers/slapd/back-perl/init.c
       servers/slapd/back-perl/proto-perl.h
       servers/slapd/back-perl/modrdn.c
       servers/slapd/back-perl/add.c
       servers/slapd/back-perl/config.c
       servers/slapd/back-perl/delete.c
       servers/slapd/back-perl/bind.c
       servers/slapd/back-perl/compare.c
       servers/slapd/back-perl/perl_back.h
       servers/slapd/back-perl/modify.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999 John C. Quillan.
           Portions Copyright 2002 myinternet Limited.
License: OpenLDAP-2.8

Files: servers/slapd/back-perl/Makefile.in
       servers/slapd/back-perl/SampleLDAP.pm
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999 John C. Quillan.
License: OpenLDAP-2.8

Files: servers/slapd/back-relay/init.c
       servers/slapd/back-relay/back-relay.h
       servers/slapd/back-relay/op.c
       servers/slapd/back-relay/proto-back-relay.h
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2004 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/back-sql/entry-id.c
       servers/slapd/back-sql/search.c
       servers/slapd/back-sql/back-sql.h
       servers/slapd/back-sql/add.c
       servers/slapd/back-sql/config.c
       servers/slapd/back-sql/sql-wrap.c
       servers/slapd/back-sql/schema-map.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999 Dmitry Kovalev.
           Portions Copyright 2002 Pierangelo Masarati.
           Portions Copyright 2004 Mark Adamson.
License: OpenLDAP-2.8

Files: servers/slapd/back-sql/rdbms_depend/*
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2002 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/back-sql/rdbms_depend/timesten/dnreverse/Makefile
       servers/slapd/back-sql/rdbms_depend/timesten/dnreverse/dnreverse.cpp
Copyright: 1997-2022 The OpenLDAP Foundation.
           (c) Copyright 1996-1998, TimesTen Performance Software.
License: OpenLDAP-2.8

Files: servers/slapd/back-sql/init.c
       servers/slapd/back-sql/modrdn.c
       servers/slapd/back-sql/api.c
       servers/slapd/back-sql/delete.c
       servers/slapd/back-sql/bind.c
       servers/slapd/back-sql/operational.c
       servers/slapd/back-sql/compare.c
       servers/slapd/back-sql/proto-sql.h
       servers/slapd/back-sql/util.c
       servers/slapd/back-sql/modify.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999 Dmitry Kovalev.
           Portions Copyright 2002 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/abandon.c
       servers/slapd/aci.c
       servers/slapd/acl.c
       servers/slapd/aclparse.c
       servers/slapd/add.c
       servers/slapd/attr.c
       servers/slapd/ava.c
       servers/slapd/backend.c
       servers/slapd/bind.c
       servers/slapd/ch_malloc.c
       servers/slapd/compare.c
       servers/slapd/config.c
       servers/slapd/connection.c
       servers/slapd/delete.c
       servers/slapd/dn.c
       servers/slapd/entry.c
       servers/slapd/filter.c
       servers/slapd/filterentry.c
       servers/slapd/frontend.c
       servers/slapd/init.c
       servers/slapd/lock.c
       servers/slapd/main.c
       servers/slapd/modify.c
       servers/slapd/mods.c
       servers/slapd/operation.c
       servers/slapd/phonetic.c
       servers/slapd/proto-slap.h
       servers/slapd/result.c
       servers/slapd/slap.h
       servers/slapd/value.c
       servers/slapd/search.c
       servers/slapd/str2filter.c
       servers/slapd/unbind.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright (c) 1995 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: servers/slapd/daemon.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2007 by Howard Chu, Symas Corporation.
           Portions Copyright (c) 1995 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: servers/slapd/syncrepl.c
Copyright: Copyright 2003-2022 The OpenLDAP Foundation.
           Portions Copyright 2003 by IBM Corporation.
           Portions Copyright 2003-2008 by Howard Chu, Symas Corporation.
License: OpenLDAP-2.8

Files: servers/slapd/modrdn.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999, Juan C. Gomez, All rights reserved.
           Portions Copyright (c) 1995 Regents of the University of Michigan.
License: OpenLDAP-2.8 and UMich

Files: servers/slapd/saslauthz.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2000 Mark Adamson, Carnegie Mellon.
License: OpenLDAP-2.8

Files: servers/slapd/slapacl.c
       servers/slapd/slapadd.c
       servers/slapd/slapauth.c
       servers/slapd/slapcat.c
       servers/slapd/slapcommon.c
       servers/slapd/slapmodify.c
       servers/slapd/slapschema.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
           Portions Copyright 2003 IBM Corporation.
License: OpenLDAP-2.8

Files: servers/slapd/slapindex.c
       servers/slapd/slappasswd.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1998-2003 Kurt D. Zeilenga.
License: OpenLDAP-2.8

Files: servers/slapd/slapdn.c
       servers/slapd/slaptest.c
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright 2004 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/user.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 1999 PM Lashley.
License: OpenLDAP-2.8

Files: servers/slapd/component.c
       servers/slapd/component.h
       servers/slapd/ctxcsn.c
       servers/slapd/ldapsync.c
       servers/slapd/zn_malloc.c
Copyright: Copyright 2003-2022 The OpenLDAP Foundation.
           Portions Copyright 2003 by IBM Corporation.
License: OpenLDAP-2.8

Files: servers/slapd/syslog.c
Copyright: Copyright (c) 1983, 1988, 1993 The Regents of the University of California.  All rights reserved.
License: BSD-3-clause-California

Files: servers/slapd/overlays/dynlist.c
Copyright: Copyright 2003-2022 The OpenLDAP Foundation.
           Portions Copyright 2004-2005 Pierangelo Masarati.
           Portions Copyright 2008 Emmanuel Dreyfus.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/sssvlv.c
       servers/slapd/overlays/translucent.c
       servers/slapd/overlays/auditlog.c
       servers/slapd/overlays/homedir.c
       servers/slapd/overlays/accesslog.c
       servers/slapd/overlays/refint.c
       servers/slapd/overlays/valsort.c
       servers/slapd/overlays/unique.c
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright 2004,2006-2007 Symas Corporation.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/rwmdn.c
       servers/slapd/overlays/rwmmap.c
       servers/slapd/overlays/rwm.c
       servers/slapd/overlays/rwm.h
       servers/slapd/overlays/rwmconf.c
Copyright: Copyright 1999-2022 The OpenLDAP Foundation.
           Portions Copyright 1999-2003 Howard Chu.
           Portions Copyright 2000-2003 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/deref.c
       servers/slapd/overlays/memberof.c
       servers/slapd/overlays/retcode.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2005-2008 Pierangelo Masarati.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/remoteauth.c
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Portions Copyright 2017-2021 Ondřej Kuzník, Symas Corporation.
           Portions Copyright 2004-2017 Howard Chu, Symas Corporation.
           Portions Copyright 2004 Hewlett-Packard Company.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/constraint.c
Copyright: Copyright 2003-2004 Hewlett-Packard Company
           Copyright 2007 Emmanuel Dreyfus
License: OpenLDAP-2.8

Files: servers/slapd/overlays/pcache.c
Copyright: Copyright 2003-2022 The OpenLDAP Foundation.
           Copyright 2003 IBM Corporation.
           Copyright 2003-2009 Symas Corporation.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/dyngroup.c
       servers/slapd/overlays/collect.c
       servers/slapd/overlays/overlays.c
       servers/slapd/overlays/autoca.c
Copyright: Copyright 2003-2022 The OpenLDAP Foundation.
           Copyright 2003-2018 by Howard Chu.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/otp.c
Copyright: Copyright 2015-2022 The OpenLDAP Foundation.
           Portions Copyright 2015 by Howard Chu, Symas Corp.
           Portions Copyright 2016-2017 by Michael Ströder <michael@stroeder.com>
           Portions Copyright 2018 by Ondřej Kuzník, Symas Corp.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/dds.c
Copyright: Copyright 2005-2022 The OpenLDAP Foundation.
           Portions Copyright 2005-2006 SysNet s.n.c.
License: OpenLDAP-2.8

Files: servers/slapd/overlays/ppolicy.c
Copyright: Copyright 2004-2022 The OpenLDAP Foundation.
           Copyright 2004-2005 Howard Chu, Symas Corporation.
           Copyright 2004 Hewlett-Packard Company.
License: OpenLDAP-2.8

Files: servers/slapd/slapi/Makefile.in
       servers/slapd/slapi/plugin.c
       servers/slapd/slapi/printmsg.c
       servers/slapd/slapi/slapi_pblock.c
       servers/slapd/slapi/proto-slapi.h
       servers/slapd/slapi/slapi_ext.c
       servers/slapd/slapi/slapi.h
       servers/slapd/slapi/slapi_utils.c
       servers/slapd/slapi/slapi_ops.c
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright IBM Corp. 1997,2002,2003
License: OpenLDAP-2.8







Files: tests/scripts/test057-memberof-refint
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Portions Copyright 2008 Red Hat, Inc.
           All rights reserved.
License: OpenLDAP-2.8

Files: tests/scripts/test080-hotp
       tests/scripts/test082-remoteauth
       tests/scripts/test081-totp
       tests/scripts/test081-totp.py
Copyright: Copyright 1998-2022 The OpenLDAP Foundation.
           Copyright 2016-2021 Ondřej Kuzník, Symas Corp.
           All rights reserved.
License: OpenLDAP-2.8

Files: debian/*
Copyright: Bastian Blank <waldi@debian.org>
           Ben Collins <bcollins@debian.org>
           Giuseppe Iuculano <iuculano@debian.org>
           Helmut Grohne <helmut@subdivi.de>
           Jelmer Vernooij <jelmer@debian.org>
           Matthijs Möhlmann <matthijs@cacholong.nl>
           Michael Gilbert <mgilbert@debian.org>
           Nico Golde <nion@debian.org>
           Petter Reinholdtsen <pere@debian.org>
           Roland Bauerschmidt <rb@debian.org>
           Russ Allbery <rra@debian.org>
           Ryan Tandy <ryan@nardis.ca>
           Sergio Durigan Junior <sergiodj@debian.org>
           Stephen Frost <sfrost@debian.org>
           Steve Langasek <vorlon@debian.org>
           Thijs Kinkhorst <thijs@debian.org>
           Timo Aaltonen <tjaalton@debian.org>
           Torsten Landschoff <torsten@debian.org>
           Wichert Akkerman <wakkerma@debian.org>
           Canonical Ltd
License: OpenLDAP-2.8

License: F5
 This software is not subject to any license of F5 Networks.
 This is free software; you can redistribute and use it
 under the same terms as OpenLDAP itself.

License: FSF-unlimited
 This file is free software; the Free Software Foundation
 gives unlimited permission to copy and/or distribute it,
 with or without modifications, as long as this notice is preserved.
 .
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY, to the extent permitted by law; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 PARTICULAR PURPOSE.

License: GPL-2+
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 .
 This program is distributed in the hope that it will be useful
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 General Public License for more details.
 .
 On Debian systems, the complete text of the GNU General Public License
 version 2 can be found in the file `/usr/share/common-licenses/GPL-2'.

License: GPL-2+ with Autoconf exception
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
 any later version.
 .
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 .
 As a special exception to the GNU General Public License, if you
 distribute this file as part of a program that contains a
 configuration script generated by Autoconf, you may include it under
 the same distribution terms that you use for the rest of that program.
 .
 On Debian systems, the complete text of the GNU General Public License
 version 2 can be found in the file `/usr/share/common-licenses/GPL-2'.

License: GPL-2+ with Libtool exception
 GNU Libtool is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 .
 As a special exception to the GNU General Public License,
 if you distribute this file as part of a program or library that
 is built using GNU Libtool, you may include this file under the
 same distribution terms that you use for the rest of that program.
 .
 GNU Libtool is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.
 .
 On Debian systems, the complete text of the GNU General Public License
 version 2 can be found in the file `/usr/share/common-licenses/GPL-2'.

License: GPL-3+
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
 .
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 On Debian systems, the complete text of the GNU General Public License
 version 3 can be found in the file `/usr/share/common-licenses/GPL-3'.

License: GPL-3+ with Autoconf exception
 This file is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 3 of the License, or
 (at your option) any later version.
 .
 This program is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.
 .
 You should have received a copy of the GNU General Public License
 along with this program; if not, see <https://www.gnu.org/licenses/>.
 .
 As a special exception to the GNU General Public License, if you
 distribute this file as part of a program that contains a
 configuration script generated by Autoconf, you may include it under
 the same distribution terms that you use for the rest of that
 program.  This Exception is an additional permission under section
 of the GNU General Public License, version 3 ("GPLv3").
 .
 On Debian systems, the complete text of the GNU General Public License
 version 3 can be found in the file `/usr/share/common-licenses/GPL-3'.

License: GPL-3+ with Libtool exception
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 3 of the License, or
 (at your option) any later version.
 .
 As a special exception to the GNU General Public License, if you distribute
 this file as part of a program or library that is built using GNU Libtool,
 you may include this file under the same distribution terms that you use
 for the rest of that program.
 .
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
 General Public License for more details.
 .
 On Debian systems, the complete text of the GNU General Public License
 version 3 can be found in the file `/usr/share/common-licenses/GPL-3'.

License: JCG
 This software is not subject to any license of Silicon Graphics
 Inc. or Purdue University.
 .
 Redistribution and use in source and binary forms are permitted
 without restriction or fee of any kind as long as this notice
 is preserved.
Comment:
 The following is additional information from Juan C. Gomez on how
 this license is to be interpreted:
 .
 Local-Date: Fri, 06 Jun 2003 13:18:52 -0400
 Date: Fri, 6 Jun 2003 10:18:52 -0700
 From: Juan Gomez <juang@us.ibm.com>
 To: Stephen Frost <sfrost@debian.org>
 X-Mailer: Lotus Notes Release 5.0.2a (Intl) 23 November 1999
 Subject: Re: Juan C. Gomez license in OpenLDAP Source
 .
 Stephen,
 .
 "There is no restriction on modifications and derived works" on the work I
 did for the openldap server as long as this is consistent with the openldap
 license. Please forward this email to Kurt so he does the appropriate
 changes to the files to reflect this.
 .
 Regards, Juan

License: MIT-XC
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to
 deal in the Software without restriction, including without limitation the
 rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 sell copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
 TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 .
 Except as contained in this notice, the name of the X Consortium shall not
 be used in advertising or otherwise to promote the sale, use or other deal-
 ings in this Software without prior written authorization from the X Consor-
 tium.

License: OpenLDAP-2.8
 The OpenLDAP Public License
 Version 2.8, 17 August 2003
 .
 Redistribution and use of this software and associated documentation
 ("Software"), with or without modification, are permitted provided
 that the following conditions are met:
 .
 1. Redistributions in source form must retain copyright statements
 and notices,
 .
 2. Redistributions in binary form must reproduce applicable copyright
 statements and notices, this list of conditions, and the following
 disclaimer in the documentation and/or other materials provided
 with the distribution, and
 .
 3. Redistributions must contain a verbatim copy of this document.
 .
 The OpenLDAP Foundation may revise this license from time to time.
 Each revision is distinguished by a version number.  You may use
 this Software under terms of this license revision or under the
 terms of any subsequent revision of the license.
 .
 THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS
 CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT
 SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S)
 OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGE.
 .
 The names of the authors and copyright holders must not be used in
 advertising or otherwise to promote the sale, use or other dealing
 in this Software without specific, written prior permission.  Title
 to copyright in this Software shall at all times remain with copyright
 holders.
 .
 OpenLDAP is a registered trademark of the OpenLDAP Foundation.
 .
 Copyright 1999-2003 The OpenLDAP Foundation, Redwood City,
 California, USA.  All Rights Reserved.  Permission to copy and
 distribute verbatim copies of this document is granted.

License: UMich
 Redistribution and use in source and binary forms are permitted
 provided that this notice is preserved and that due credit is given
 to the University of Michigan at Ann Arbor.  The name of the
 University may not be used to endorse or promote products derived
 from this software without specific prior written permission.  This
 software is provided ``as is'' without express or implied warranty.
Comment:
 After discussing this license with the OpenLDAP Foundation we received
 clarification on it:
 .
 To: Stephen Frost <sfrost@snowman.net>
 Subject: Re: OpenLDAP Licenseing issues
 From: "Kurt D. Zeilenga" <Kurt@OpenLDAP.org>
 Date: Wed, 28 May 2003 10:55:44 -0700
 Cc: Steve Langasek <vorlon@netexpress.net>,debian-legal@lists.debian.org, openldap-devel@OpenLDAP.org
 In-reply-to: <20030528162613.GB8524@ns.snowman.net>
 Message-id: <5.2.0.9.0.20030528094229.02924780@127.0.0.1>
 Old-return-path: <Kurt@OpenLDAP.org>
 .
 Steven,
 .
 The OpenLDAP Foundation believes it the Regents' statement grants a
 license to redistribute derived works and is confident that the University,
 who is quite aware of our actions (as they actively participate in them),
 does not consider our actions to infringe on their rights.  You are
 welcomed to your opinions. I suggest, however, that before you rely
 on your or other people's opinions (including ours), that you consult
 with a lawyer familiar with applicable law and the particulars of your
 situation.
 .
 The Foundation sees no reason for it to expend its limited resources
 seeking clarifications which it believes are unnecessary.  You are,
 of course, welcomed to expend time and energy seeking clarifications
 you think are necessary.  I suggest you contact University's general
 counsel office (http://www.umich.edu/~vpgc/).
 .
 Regards, Kurt

License: Beerware
 <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you
 can do whatever you want with this stuff. If we meet some day, and you think
 this stuff is worth it, you can buy me a beer in return Poul-Henning Kamp

License: BSD-3-clause-variant
 Redistribution and use in source and binary forms are permitted
 provided that the above copyright notice and this paragraph are
 duplicated in all such forms and that any documentation,
 advertising materials, and other materials related to such
 distribution and use acknowledge that the software was developed
 by the University of California, Berkeley.  The name of the
 University may not be used to endorse or promote products derived
 from this software without specific prior written permission.
 THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

License: Expat-ISC
 Permission to use, copy, modify, and distribute this software for any
 purpose with or without fee is hereby granted, provided that the above
 copyright notice and this permission notice appear in all copies.
 .
 THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
 ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
 OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
 CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
 ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 SOFTWARE.

License: Expat-UNM
 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
 to deal in the Software without restriction, including without limitation
 the rights to use, copy, modify, merge, publish, distribute, sublicense,
 and/or sell copies of the Software, and to permit persons to whom the
 Software is furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
 OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
 THE USE OR OTHER DEALINGS IN THE SOFTWARE.

License: Expat
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
 "Software"), to deal in the Software without restriction, including
 without limitation the rights to use, copy, modify, merge, publish,
 distribute, sublicense, and/or sell copies of the Software, and to
 permit persons to whom the Software is furnished to do so, subject to
 the following conditions:
 .
 The above copyright notice and this permission notice shall be
 included in all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

License: BSD-3-clause-California
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
 3. Neither the name of the University nor the names of its contributors
    may be used to endorse or promote products derived from this software
    without specific prior written permission.
 .
 THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 SUCH DAMAGE.

License: BSD-4-clause-California
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
 3. All advertising materials mentioning features or use of this software
    must display the following acknowledgement:
        This product includes software developed by the University of
        California, Berkeley and its contributors.
 4. Neither the name of the University nor the names of its contributors
    may be used to endorse or promote products derived from this software
    without specific prior written permission.
 .
 THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 SUCH DAMAGE.

License: BSD-3-clause
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
 3. Neither the name of the copyright holder nor the names of contributors
    may be used to endorse or promote products derived from this software
    without specific prior written permission.
 . 
 THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 SUCH DAMAGE.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                [msF+߅P-ǾQ\ES
EjII6J@`(b\ ~Od;T%~}gЉy%3;E?/>@*7B8Ľ|?zE7\>-,IM$(Md/j9QZew*DFfJY`-:t*%_'޻Yw gr;8ם Mm١@^$=n,bU]J%ȟJ3鯣ԛʃ.QHmV8ID(W5S9LbG[طZ!7fWiE-8qNbWi$ᅀEǓ%{bw4*y*ʥ\PIKZӻbAGyTȊ$*ɵYJrod)?D	a,iRCm%$(tLymE,}[on2Zۋ(BvH2Wme,#
ܧ-	ZcZfo/we?VA F+YՒgb$t&}z;bkILd17Ӹcra߶ieZ!'2s_+}7v}h`P
(Rael/nX=sVnv两ABۘrAΰ4J舷؂0qbMvQemyq7ɪ&T1,.Ɣ$dfFrGibcn@m
ʭR1]*oDD:3.FP4{Rq2J76˥YW$)EN<"_iD?'}$iNzų.徰̣H!>.H۟eЖj>1>vTߝUcI^,]֍5ĻT浌)Z߈#WQOp&ӄ"V/lhPZ(J`:"A˦5%|cH]dcob?wj^31suq$^fv+[ׇtE^T{?+?4m1}TQ$	mJw ;FRɢ<W		fFa[
c`:]B2* WTAƲnvw(ұƋ)?Xw~^!do9OoUaE@6i0ZȌ=y=-RF(LOA}CЖ=a)J4hLƤ{P
rkHd3
(Jz#$>">j_.'GW.<?d zdXmn!1FIM|6B
vA&J'%/	@>KYbN<:h?^N~=8N:3.!h욜4`t	-&
FV|%G8%hX%`
(8z
%Co4>ҶpB
+csS8+( !Iٙ2@*,j")і
c31W~#3&9~b*Mh3zb<efor	o:yoit:ԦZ  .K#:yCYyI,J 'uP7d˕/b;%ˑXN5N9sϽl]_duܪ\#`۔BW'{}8a0tt|HP3EB]ovh_}mB0j(H&j̦֫@
Y`%McƬy:l[S <ӌ+ZϿـҖ/,Pd94=D
-	]ֈ$tɭI{
ۈRWhlq9!뤼8NV&;)c&aHB5κqqhAY$[n	o!?~i/O1~=\i㼖	iKD.%0E*
82rllab%HoɃEfj+A$%l
,u9w@ ςeGr㍣/j|Ur6BCddl'z&њW)wYy=u*$7]̱Ey56twC"A1֠̚ҿ(:Y
XIُ~x_s>oΉLf-x:'t/[/.deٟgľ<`	ge}Q0GpR8@B{?N*DuFVކS,͓PIXF{8GE\14N}ԁsTb
v?t!ZgTF۴c(e0fp(ACqb<f{fAXYl4<t=K86<Z)GZ՚,ǭîF-KTACeyI0	EyxlJ?lҌg88ɒӺjI><6ǨV!"&p*OҤgnEwZu#v2Pa LmE/[7fvQ
QV$Z4%6PRwHWY#0z6Pϑh^k_I4)a1a2	*ΗQi)4i3
\й
gizr>8,u46z~GUlUex1TkUզ]:vaD׫W2DW,Rzz(t+"aThWeA"VDIC<8▏7WG4l6J$m6TLfMf<`vMwz
OpbۉuZdޅ=bg6}E[~GJJPe#{u!b}VVrh7͚o_V6-wL1ӢL?M<lS;VUc~0z>im
r![ Zi\=<P6?(3Л$XfiB={6gIĉ9\\#]szlTv15G=|9KtW.1mòQ-nhswxJAR^%kBQ2Ȑlߐy:6&HdSL8`J&O6ٶ3&Ҥ0$S~:i]ީ<A\Q=onƉ.>z,#k?lx4s-?t@I8H7lE檑\JMi<7f(Z%]^abW㭃$AgIm	p:Е@AtG.j,|kMs?5J*է2##T@1+$U㤰mWoX7Qe2'~i1hSVЊ6;Đ>
q𔆒AmQL$636NaHqZ/~<Y{-kk(H|Lryg*Ad3Ytr $8dsLDJlc\QʧEРJ}2ME=ca:JGN߶Ҕ20(n5~8~$
Pe`[5|QIjOI?D,8VYn^,~ÒsMct![Ś*9o^xech7BNS>,.k6*6b3FOccr0[,1O'`y$?US9c%*>7ke3)]PR
!k_+B n:(N%*
8L j0Y"Ko ZzԧX0
0w=ލ>
Z}Vʻ޻,Qsy".CaX[ɏ??gԵF}7\N͍-dɑ`iݴ:)?mɢpql2L<~
,03DLt:sau$j ni%ۢ-rP;ןlO#M:x62
0:eo=P}IkGZ/&Hr .En=mtNuZ):n%^@-;d61+6ߔ@&gHiNz'z掔6)\Sod\^) Ֆnh0eA'ߝ*m*f߷FѴhwnns%ZNO-	hAnS	fF}ZU/oz18^\՚΁3no@tøꕼl:Rl$isDR*1'zg9SDyY=mRKpVh~bman5R{ߠˍ&{BA'0!9"8/I .R
nNWěEǛϱ䀳zz`AFG,#sRCiAi]V3HԕPsĥpז5,*P);EuuԻ<
9)/'WLݏon[Ӂf `C<V6Chp˹WGw{Aϕ|pH۫]}\LAnp,`~@WG<':0f󮎮`Zέ0,]0ضZaY[V
EvL霯mZu% (&\bXIl= ȕw!uNN5/pU'%-
F}d/u9[Ժ,JD̷E&㨗2P{Ղʳret9KUFi}a[M]Qα6s߱ĳ0݊6{snP`.ߛg,6v'ҺILw*Ƣ64y-P_ytU§|䐻u+FocY&ufh+9賏1[}\厩tQE=ޝv/&w)M~SL޴A{)jPkv)ͮ
x6*m#ܵKKܻmWw,Ξ8WG[]R:Liww@8T"ÈWOV48;	݂k( YjBt0xէ
,,ԹP"Wcs2x4ټDBG+Fedh׀z16-:4ƷG|2X]/Hb`ij\4ɪ+S&5g̚ߖ5*3G}R~`j_rg(&cP]h5=󷘤nR=c.FYJ0Bnp%Ht43bTJ_I3b|: a܌ׂEזFFeq#W]eZw]ɰ6'xE;9Qw[~XdzKP֏0οSd>2,qv\4BDidct`9J%dr)&;
S}vQ+M#WQrk`i`I'6	HӶ2([_ClƯ{{o2F37zooҝpr;EoWI_?qnI\M0WAA:exAtxcbASsҿo^V8kdMJRދC"kհqRngɻe2lOu2١
y
A=&x YT{:.mQQ$sSM<ؼbzo@-\Dqrm}Yk>$"x_n!)j@)*->R,)SC$*=d|֤63@"S~RMtOyZǓL$ɟd a̕}wTӖPBݝU4x	C                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   /.
/etc
/etc/ldap
/etc/ldap/ldap.conf
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libldap-common
/usr/share/doc/libldap-common/changelog.Debian.gz
/usr/share/doc/libldap-common/changelog.gz
/usr/share/doc/libldap-common/copyright
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/ldap.conf.5.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  