#!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!/usr/bin/perl

BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
use Getopt::Long;
use Encode ();

use JSON::PP ();

# imported from JSON-XS/bin/json_xs

my %allow_json_opt = map { $_ => 1 } qw(
    ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
    allow_singlequote allow_barekey allow_bignum loose escape_slash indent_length
);


GetOptions(
   'v'   => \( my $opt_verbose ),
   'f=s' => \( my $opt_from = 'json' ),
   't=s' => \( my $opt_to = 'json' ),
   'json_opt=s' => \( my $json_opt = 'pretty' ),
   'V'   => \( my $version ),
) or die "Usage: $0 [-V] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]\n";


if ( $version ) {
    print "$JSON::PP::VERSION\n";
    exit;
}


$json_opt = '' if $json_opt eq '-';

my %json_opt;
for my $opt (split /,/, $json_opt) {
    my ($key, $value) = split /=/, $opt, 2;
    $value = 1 unless defined $value;
    die "'$_' is not a valid json option" unless $allow_json_opt{$key};
    $json_opt{$key} = $value;
}

my %F = (
   'json' => sub {
      my $json = JSON::PP->new;
      my $enc =
         /^\x00\x00\x00/s  ? "utf-32be"
       : /^\x00.\x00/s     ? "utf-16be"
       : /^.\x00\x00\x00/s ? "utf-32le"
       : /^.\x00.\x00/s    ? "utf-16le"
       :                     "utf-8";
      for my $key (keys %json_opt) {
        next if $key eq 'utf8';
        $json->$key($json_opt{$key});
      }
      $json->decode( Encode::decode($enc, $_) );
   },
   'eval' => sub {
        my $v = eval "no strict;\n#line 1 \"input\"\n$_";
        die "$@" if $@;
        return $v;
    },
);


my %T = (
   'null' => sub { "" },
   'json' => sub {
      my $json = JSON::PP->new->utf8;
      for my $key (keys %json_opt) {
        $json->$key($json_opt{$key});
      }
      $json->canonical if $json_opt{pretty};
      $json->encode( $_ );
   },
   'dumper' => sub {
      require Data::Dumper;
      local $Data::Dumper::Terse     = 1;
      local $Data::Dumper::Indent    = 1;
      local $Data::Dumper::Useqq     = 1;
      local $Data::Dumper::Quotekeys = 0;
      local $Data::Dumper::Sortkeys  = 1;
      Data::Dumper::Dumper($_)
   },
);



$F{$opt_from}
   or die "$opt_from: not a valid fromformat\n";

$T{$opt_to}
   or die "$opt_from: not a valid toformat\n";

{
  local $/;
  binmode STDIN;
  $_ = <STDIN>;
}

$_ = $F{$opt_from}->();
$_ = $T{$opt_to}->();

print $_;


__END__

=pod

=encoding utf8

=head1 NAME

json_pp - JSON::PP command utility

=head1 SYNOPSIS

    json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

=head1 DESCRIPTION

json_pp converts between some input and output formats (one of them is JSON).
This program was copied from L<json_xs> and modified.

The default input format is json and the default output format is json with pretty option.

=head1 OPTIONS

=head2 -f

    -f from_format

Reads a data in the given format from STDIN.

Format types:

=over

=item json

as JSON

=item eval

as Perl code

=back

=head2 -t

Writes a data in the given format to STDOUT.

=over

=item null

no action.

=item json

as JSON

=item dumper

as Data::Dumper

=back

=head2 -json_opt

options to JSON::PP

Acceptable options are:

    ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
    allow_singlequote allow_barekey allow_bignum loose escape_slash indent_length

Multiple options must be separated by commas:

    Right: -json_opt pretty,canonical

    Wrong: -json_opt pretty -json_opt canonical

=head2 -v

Verbose option, but currently no action in fact.

=head2 -V

Prints version and exits.


=head1 EXAMPLES

    $ perl -e'print q|{"foo":"あい","bar":1234567890000000000000000}|' |\
       json_pp -f json -t dumper -json_opt pretty,utf8,allow_bignum
    
    $VAR1 = {
              'bar' => bless( {
                                'value' => [
                                             '0000000',
                                             '0000000',
                                             '5678900',
                                             '1234'
                                           ],
                                'sign' => '+'
                              }, 'Math::BigInt' ),
              'foo' => "\x{3042}\x{3044}"
            };

    $ perl -e'print q|{"foo":"あい","bar":1234567890000000000000000}|' |\
       json_pp -f json -t dumper -json_opt pretty
    
    $VAR1 = {
              'bar' => '1234567890000000000000000',
              'foo' => "\x{e3}\x{81}\x{82}\x{e3}\x{81}\x{84}"
            };

=head1 SEE ALSO

L<JSON::PP>, L<json_xs>

=head1 AUTHOR

Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>


=head1 COPYRIGHT AND LICENSE

Copyright 2010 by Makamaka Hannyaharamitu

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself. 

=cut

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell

=head1 NAME

libnetcfg - configure libnet

=head1 DESCRIPTION

The libnetcfg utility can be used to configure the libnet.
Starting from perl 5.8 libnet is part of the standard Perl
distribution, but the libnetcfg can be used for any libnet
installation.

=head1 USAGE

Without arguments libnetcfg displays the current configuration.

    $ libnetcfg
    # old config ./libnet.cfg
    daytime_hosts        ntp1.none.such
    ftp_int_passive      0
    ftp_testhost         ftp.funet.fi
    inet_domain          none.such
    nntp_hosts           nntp.none.such
    ph_hosts             
    pop3_hosts           pop.none.such
    smtp_hosts           smtp.none.such
    snpp_hosts           
    test_exist           1
    test_hosts           1
    time_hosts           ntp.none.such
    # libnetcfg -h for help
    $ 

It tells where the old configuration file was found (if found).

The C<-h> option will show a usage message.

To change the configuration you will need to use either the C<-c> or
the C<-d> options.

The default name of the old configuration file is by default
"libnet.cfg", unless otherwise specified using the -i option,
C<-i oldfile>, and it is searched first from the current directory,
and then from your module path.

The default name of the new configuration file is "libnet.cfg", and by
default it is written to the current directory, unless otherwise
specified using the -o option, C<-o newfile>.

=head1 SEE ALSO

L<Net::Config>, L<libnetFAQ>

=head1 AUTHORS

Graham Barr, the original Configure script of libnet.

Jarkko Hietaniemi, conversion into libnetcfg for inclusion into Perl 5.8.

=cut

# $Id: Configure,v 1.8 1997/03/04 09:22:32 gbarr Exp $

BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
use IO::File;
use Getopt::Std;
use ExtUtils::MakeMaker qw(prompt);
use File::Spec;

use vars qw($opt_d $opt_c $opt_h $opt_o $opt_i);

##
##
##

my %cfg = ();
my @cfg = ();

my($libnet_cfg_in,$libnet_cfg_out,$msg,$ans,$def,$have_old);

##
##
##

sub valid_host
{
 my $h = shift;

 defined($h) && (($cfg{'test_exist'} == 0) || gethostbyname($h));
}

##
##
##

sub test_hostnames (\@)
{
 my $hlist = shift;
 my @h = ();
 my $host;
 my $err = 0;

 foreach $host (@$hlist)
  {
   if(valid_host($host))
    {
     push(@h, $host);
     next;
    }
   warn "Bad hostname: '$host'\n";
   $err++;
  }
 @$hlist = @h;
 $err ? join(" ",@h) : undef;
}

##
##
##

sub Prompt
{
 my($prompt,$def) = @_;

 $def = "" unless defined $def;

 chomp($prompt);

 if($opt_d)
  {
   print $prompt,," [",$def,"]\n";
   return $def;
  }
 prompt($prompt,$def);
}

##
##
##

sub get_host_list
{
 my($prompt,$def) = @_;

 $def = join(" ",@$def) if ref($def);

 my @hosts;

 do
  {
   my $ans = Prompt($prompt,$def);

   $ans =~ s/(\A\s+|\s+\Z)//g;

   @hosts = split(/\s+/, $ans);
  }
 while(@hosts && defined($def = test_hostnames(@hosts)));

 \@hosts;
}

##
##
##

sub get_hostname
{
 my($prompt,$def) = @_;

 my $host;

 while(1)
  {
   my $ans = Prompt($prompt,$def);
   $host = ($ans =~ /(\S*)/)[0];
   last
	if(!length($host) || valid_host($host));

   $def =""
	if $def eq $host;

   print <<"EDQ";

*** ERROR:
    Hostname '$host' does not seem to exist, please enter again
    or a single space to clear any default

EDQ
  }

 length $host
	? $host
	: undef;
}

##
##
##

sub get_bool ($$)
{
 my($prompt,$def) = @_;

 chomp($prompt);

 my $val = Prompt($prompt,$def ? "yes" : "no");

 $val =~ /^y/i ? 1 : 0;
}

##
##
##

sub get_netmask ($$)
{
 my($prompt,$def) = @_;

 chomp($prompt);

 my %list;
 @list{@$def} = ();

MASK:
 while(1) {
   my $bad = 0;
   my $ans = Prompt($prompt) or last;

   if($ans eq '*') {
     %list = ();
     next;
   }

   if($ans eq '=') {
     print "\n",( %list ? join("\n", sort keys %list) : 'none'),"\n\n";
     next;
   }

   unless ($ans =~ m{^\s*(?:(-?\s*)(\d+(?:\.\d+){0,3})/(\d+))}) {
     warn "Bad netmask '$ans'\n";
     next;
   }

   my($remove,$bits,@ip) = ($1,$3,split(/\./, $2),0,0,0);
   if ( $ip[0] < 1 || $bits < 1 || $bits > 32) {
     warn "Bad netmask '$ans'\n";
     next MASK;
   }
   foreach my $byte (@ip) {
     if ( $byte > 255 ) {
       warn "Bad netmask '$ans'\n";
       next MASK;
     }
   } 

   my $mask = sprintf("%d.%d.%d.%d/%d",@ip[0..3],$bits); 

   if ($remove) {
     delete $list{$mask};
   }
   else {
     $list{$mask} = 1;
   }

  }

 [ keys %list ];
}

##
##
##

sub default_hostname
{
 my $host;
 my @host;

 foreach $host (@_)
  {
   if(defined($host) && valid_host($host))
    {
     return $host
	unless wantarray;
     push(@host,$host);
    }
  }

 return wantarray ? @host : undef;
}

##
##
##

getopts('dcho:i:');

$libnet_cfg_in = "libnet.cfg"
	unless(defined($libnet_cfg_in  = $opt_i));

$libnet_cfg_out = "libnet.cfg"
	unless(defined($libnet_cfg_out = $opt_o));

my %oldcfg = ();

$Net::Config::CONFIGURE = 1; # Suppress load of user overrides
if( -f $libnet_cfg_in )
 {
  %oldcfg = ( %{ local @INC = '.'; do $libnet_cfg_in } );
 }
elsif (eval { require Net::Config }) 
 {
  $have_old = 1;
  %oldcfg = %Net::Config::NetConfig;
 }

map { $cfg{lc $_} = $cfg{$_}; delete $cfg{$_} if /[A-Z]/ } keys %cfg;

#---------------------------------------------------------------------------

if ($opt_h) {
 print <<EOU;
$0: Usage: $0 [-c] [-d] [-i oldconfigile] [-o newconfigfile] [-h]
Without options, the old configuration is shown.

   -c change the configuration
   -d use defaults from the old config (implies -c, non-interactive)
   -i use a specific file as the old config file
   -o use a specific file as the new config file
   -h show this help

The default name of the old configuration file is by default
"libnet.cfg", unless otherwise specified using the -i option,
C<-i oldfile>, and it is searched first from the current directory,
and then from your module path.

The default name of the new configuration file is "libnet.cfg", and by
default it is written to the current directory, unless otherwise
specified using the -o option.

EOU
 exit(0);
}

#---------------------------------------------------------------------------

{
   my $oldcfgfile;
   my @inc;
   push @inc, $ENV{PERL5LIB} if exists $ENV{PERL5LIB};
   push @inc, $ENV{PERLLIB}  if exists $ENV{PERLLIB};
   push @inc, @INC;
   for (@inc) {
    my $trycfgfile = File::Spec->catfile($_, $libnet_cfg_in);
    if (-f $trycfgfile && -r $trycfgfile) {
     $oldcfgfile = $trycfgfile;
     last;
    }
   }
   print "# old config $oldcfgfile\n" if defined $oldcfgfile;
   for (sort keys %oldcfg) {
	printf "%-20s %s\n", $_,
               ref $oldcfg{$_} ? @{$oldcfg{$_}} : $oldcfg{$_};
   }
   unless ($opt_c || $opt_d) {
    print "# $0 -h for help\n";
    exit(0);
   }
}

#---------------------------------------------------------------------------

$oldcfg{'test_exist'} = 1 unless exists $oldcfg{'test_exist'};
$oldcfg{'test_hosts'} = 1 unless exists $oldcfg{'test_hosts'};

#---------------------------------------------------------------------------

if($have_old && !$opt_d)
 {
  $msg = <<EDQ;

Ah, I see you already have installed libnet before.

Do you want to modify/update your configuration (y|n) ?
EDQ

 $opt_d = 1
	unless get_bool($msg,0);
 }

#---------------------------------------------------------------------------

$msg = <<EDQ;

This script will prompt you to enter hostnames that can be used as
defaults for some of the modules in the libnet distribution.

To ensure that you do not enter an invalid hostname, I can perform a
lookup on each hostname you enter. If your internet connection is via
a dialup line then you may not want me to perform these lookups, as
it will require you to be on-line.

Do you want me to perform hostname lookups (y|n) ?
EDQ

$cfg{'test_exist'} = get_bool($msg, $oldcfg{'test_exist'});

print <<EDQ unless $cfg{'test_exist'};

*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***

OK I will not check if the hostnames you give are valid
so be very cafeful

*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***
EDQ


#---------------------------------------------------------------------------

print <<EDQ;

The following questions all require a list of host names, separated
with spaces. If you do not have a host available for any of the
services, then enter a single space, followed by <CR>. To accept the
default, hit <CR>

EDQ

$msg = 'Enter a list of available NNTP hosts :';

$def = $oldcfg{'nntp_hosts'} ||
	[ default_hostname($ENV{NNTPSERVER},$ENV{NEWSHOST},'news') ];

$cfg{'nntp_hosts'} = get_host_list($msg,$def);

#---------------------------------------------------------------------------

$msg = 'Enter a list of available SMTP hosts :';

$def = $oldcfg{'smtp_hosts'} ||
	[ default_hostname(split(/:/,$ENV{SMTPHOSTS} || ""), 'mailhost') ];

$cfg{'smtp_hosts'} = get_host_list($msg,$def);

#---------------------------------------------------------------------------

$msg = 'Enter a list of available POP3 hosts :';

$def = $oldcfg{'pop3_hosts'} || [];

$cfg{'pop3_hosts'} = get_host_list($msg,$def);

#---------------------------------------------------------------------------

$msg = 'Enter a list of available SNPP hosts :';

$def = $oldcfg{'snpp_hosts'} || [];

$cfg{'snpp_hosts'} = get_host_list($msg,$def);

#---------------------------------------------------------------------------

$msg = 'Enter a list of available PH Hosts   :'  ;

$def = $oldcfg{'ph_hosts'} ||
	[ default_hostname('dirserv') ];

$cfg{'ph_hosts'}   =  get_host_list($msg,$def);

#---------------------------------------------------------------------------

$msg = 'Enter a list of available TIME Hosts   :'  ;

$def = $oldcfg{'time_hosts'} || [];

$cfg{'time_hosts'} = get_host_list($msg,$def);

#---------------------------------------------------------------------------

$msg = 'Enter a list of available DAYTIME Hosts   :'  ;

$def = $oldcfg{'daytime_hosts'} || $oldcfg{'time_hosts'};

$cfg{'daytime_hosts'} = get_host_list($msg,$def);

#---------------------------------------------------------------------------

$msg = <<EDQ;

Do you have a firewall/ftp proxy  between your machine and the internet 

If you use a SOCKS firewall answer no

(y|n) ?
EDQ

if(get_bool($msg,0)) {

  $msg = <<'EDQ';
What series of FTP commands do you need to send to your
firewall to connect to an external host.

user/pass     => external user & password
fwuser/fwpass => firewall user & password

0) None
1) -----------------------
     USER user@remote.host
     PASS pass
2) -----------------------
     USER fwuser
     PASS fwpass
     USER user@remote.host
     PASS pass
3) -----------------------
     USER fwuser
     PASS fwpass
     SITE remote.site
     USER user
     PASS pass
4) -----------------------
     USER fwuser
     PASS fwpass
     OPEN remote.site
     USER user
     PASS pass
5) -----------------------
     USER user@fwuser@remote.site
     PASS pass@fwpass
6) -----------------------
     USER fwuser@remote.site
     PASS fwpass
     USER user
     PASS pass
7) -----------------------
     USER user@remote.host
     PASS pass
     AUTH fwuser
     RESP fwpass

Choice:
EDQ
 $def = exists $oldcfg{'ftp_firewall_type'}  ? $oldcfg{'ftp_firewall_type'} : 1;
 $ans = Prompt($msg,$def);
 $cfg{'ftp_firewall_type'} = 0+$ans;
 $def = $oldcfg{'ftp_firewall'} || $ENV{FTP_FIREWALL};

 $cfg{'ftp_firewall'} = get_hostname("FTP proxy hostname :", $def);
}
else {
 delete $cfg{'ftp_firewall'};
}


#---------------------------------------------------------------------------

if (defined $cfg{'ftp_firewall'})
 {
  print <<EDQ;

By default Net::FTP assumes that it only needs to use a firewall if it
cannot resolve the name of the host given. This only works if your DNS
system is setup to only resolve internal hostnames. If this is not the
case and your DNS will resolve external hostnames, then another method
is needed. Net::Config can do this if you provide the netmasks that
describe your internal network. Each netmask should be entered in the
form x.x.x.x/y, for example 127.0.0.0/8 or 214.8.16.32/24

EDQ
$def = [];
if(ref($oldcfg{'local_netmask'}))
 {
  $def = $oldcfg{'local_netmask'};
   print "Your current netmasks are :\n\n\t",
	join("\n\t",@{$def}),"\n\n";
 }

print "
Enter one netmask at each prompt, prefix with a - to remove a netmask
from the list, enter a '*' to clear the whole list, an '=' to show the
current list and an empty line to continue with Configure.

";

  my $mask = get_netmask("netmask :",$def);
  $cfg{'local_netmask'} = $mask if ref($mask) && @$mask;
 }

#---------------------------------------------------------------------------

###$msg =<<EDQ;
###
###SOCKS is a commonly used firewall protocol. If you use SOCKS firewalls
###then enter a list of hostames
###
###Enter a list of available SOCKS hosts :
###EDQ
###
###$def = $cfg{'socks_hosts'} ||
###	[ default_hostname($ENV{SOCKS5_SERVER},
###			   $ENV{SOCKS_SERVER},
###			   $ENV{SOCKS4_SERVER}) ];
###
###$cfg{'socks_hosts'}   =  get_host_list($msg,$def);

#---------------------------------------------------------------------------

print <<EDQ;

Normally when FTP needs a data connection the client tells the server
a port to connect to, and the server initiates a connection to the client.

Some setups, in particular firewall setups, can/do not work using this
protocol. In these situations the client must make the connection to the
server, this is called a passive transfer.
EDQ

if (defined $cfg{'ftp_firewall'}) {
  $msg = "\nShould all FTP connections via a firewall/proxy be passive (y|n) ?";

  $def = $oldcfg{'ftp_ext_passive'} || 0;

  $cfg{'ftp_ext_passive'} = get_bool($msg,$def);

  $msg = "\nShould all other FTP connections be passive (y|n) ?";

}
else {
  $msg = "\nShould all FTP connections be passive (y|n) ?";
}

$def = $oldcfg{'ftp_int_passive'} || 0;

$cfg{'ftp_int_passive'} = get_bool($msg,$def);


#---------------------------------------------------------------------------

$def = $oldcfg{'inet_domain'} || $ENV{LOCALDOMAIN};

$ans = Prompt("\nWhat is your local internet domain name :",$def);

$cfg{'inet_domain'} = ($ans =~ /(\S+)/)[0];

#---------------------------------------------------------------------------

$msg = <<EDQ;

If you specified some default hosts above, it is possible for me to
do some basic tests when you run 'make test'

This will cause 'make test' to be quite a bit slower and, if your
internet connection is via dialup, will require you to be on-line
unless the hosts are local.

Do you want me to run these tests (y|n) ?
EDQ

$cfg{'test_hosts'} = get_bool($msg,$oldcfg{'test_hosts'});

#---------------------------------------------------------------------------

$msg = <<EDQ;

To allow Net::FTP to be tested I will need a hostname. This host
should allow anonymous access and have a /pub directory

What host can I use :
EDQ

$cfg{'ftp_testhost'} = get_hostname($msg,$oldcfg{'ftp_testhost'})
	if $cfg{'test_hosts'};


print "\n";

#---------------------------------------------------------------------------

my $fh = IO::File->new($libnet_cfg_out, "w") or
	die "Cannot create '$libnet_cfg_out': $!";

print "Writing $libnet_cfg_out\n";

print $fh "{\n";

my $key;
foreach $key (keys %cfg) {
    my $val = $cfg{$key};
    if(!defined($val)) {
	$val = "undef";
    }
    elsif(ref($val)) {
	$val = '[' . join(",",
	    map {
		my $v = "undef";
		if(defined $_) {
		    ($v = $_) =~ s/'/\'/sog;
		    $v = "'" . $v . "'";
		}
		$v;
	    } @$val ) . ']';
    }
    else {
	$val =~ s/'/\'/sog;
	$val = "'" . $val . "'" if $val =~ /\D/;
    }
    print $fh "\t'",$key,"' => ",$val,",\n";
}

print $fh "}\n";

$fh->close;

############################################################################
############################################################################

exit 0;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell

my $config_tag1 = '5.36.0 - Sat Apr 12 15:16:31 UTC 2025';

my $patchlevel_date = 1744470969;
my @patches = Config::local_patches();
my $patch_tags = join "", map /(\S+)/ ? "+$1 " : (), @patches;

BEGIN { pop @INC if $INC[-1] eq '.' }
use warnings;
use strict;
use Config;
use File::Spec;		# keep perlbug Perl 5.005 compatible
use Getopt::Std;
use File::Basename 'basename';

$Getopt::Std::STANDARD_HELP_VERSION = 1;

sub paraprint;

BEGIN {
    eval { require Mail::Send;};
    $::HaveSend = ($@ eq "");
    eval { require Mail::Util; } ;
    $::HaveUtil = ($@ eq "");
    # use secure tempfiles wherever possible
    eval { require File::Temp; };
    $::HaveTemp = ($@ eq "");
    eval { require Module::CoreList; };
    $::HaveCoreList = ($@ eq "");
    eval { require Text::Wrap; };
    $::HaveWrap = ($@ eq "");
};

our $VERSION = "1.42";

#TODO:
#       make sure failure (transmission-wise) of Mail::Send is accounted for.
#       (This may work now. Unsure of the original author's issue -JESSE 2008-06-08)
#       - Test -b option

my( $file, $usefile, $cc, $address, $thanksaddress,
    $filename, $messageid, $domain, $subject, $from, $verbose, $ed, $outfile,
    $fh, $me, $body, $andcc, %REP, $ok, $thanks, $progname,
    $Is_MSWin32, $Is_Linux, $Is_VMS, $Is_OpenBSD,
    $report_about_module, $category, $severity,
    %opt, $have_attachment, $attachments, $has_patch, $mime_boundary
);

my $running_noninteractively = !-t STDIN;

my $perl_version = $^V ? sprintf("%vd", $^V) : $];

my $config_tag2 = "$perl_version - $Config{cf_time}";

Init();

if ($opt{h}) { Help(); exit; }
if ($opt{d}) { Dump(*STDOUT); exit; }
if ($running_noninteractively && !$opt{t} && !($ok and not $opt{n})) {
    paraprint <<"EOF";
Please use $progname interactively. If you want to
include a file, you can use the -f switch.
EOF
    die "\n";
}

Query();
Edit() unless $usefile || ($ok and not $opt{n});
NowWhat();
if ($address) {
    Send();
    if ($thanks) {
	print "\nThank you for taking the time to send a thank-you message!\n\n";

	paraprint <<EOF
Please note that mailing lists are moderated, your message may take a while to
show up.
EOF
    } else {
	print "\nThank you for taking the time to file a bug report!\n\n";

	paraprint <<EOF
Please note that mailing lists are moderated, your message may take a while to
show up. Please consider submitting your report directly to the issue tracker
at https://github.com/Perl/perl5/issues
EOF
    }

} else {
    save_message_to_disk($outfile);
}

exit;

sub ask_for_alternatives { # (category|severity)
    my $name = shift;
    my %alts = (
	'category' => {
	    'default' => 'core',
	    'ok'      => 'install',
	    # Inevitably some of these will end up in RT whatever we do:
	    'thanks'  => 'thanks',
	    'opts'    => [qw(core docs install library utilities)], # patch, notabug
	},
	'severity' => {
	    'default' => 'low',
	    'ok'      => 'none',
	    'thanks'  => 'none',
	    'opts'    => [qw(critical high medium low wishlist none)], # zero
	},
    );
    die "Invalid alternative ($name) requested\n" unless grep(/^$name$/, keys %alts);
    my $alt = "";
    my $what = $ok || $thanks;
    if ($what) {
	$alt = $alts{$name}{$what};
    } else {
 	my @alts = @{$alts{$name}{'opts'}};
    print "\n\n";
	paraprint <<EOF;
Please pick a $name from the following list:

    @alts
EOF
	my $err = 0;
	do {
	    if ($err++ > 5) {
		die "Invalid $name: aborting.\n";
	    }
        $alt = _prompt('', "\u$name", $alts{$name}{'default'});
		$alt ||= $alts{$name}{'default'};
	} while !((($alt) = grep(/^$alt/i, @alts)));
    }
    lc $alt;
}

sub HELP_MESSAGE { Help(); exit; }
sub VERSION_MESSAGE { print "perlbug version $VERSION\n"; }

sub Init {
    # -------- Setup --------

    $Is_MSWin32 = $^O eq 'MSWin32';
    $Is_VMS = $^O eq 'VMS';
    $Is_Linux = lc($^O) eq 'linux';
    $Is_OpenBSD = lc($^O) eq 'openbsd';

    # Thanks address
    $thanksaddress = 'perl-thanks@perl.org';

    # Defaults if getopts fails.
    $outfile = (basename($0) =~ /^perlthanks/i) ? "perlthanks.rep" : "perlbug.rep";
    $cc = $::Config{'perladmin'} || $::Config{'cf_email'} || $::Config{'cf_by'} || '';

    HELP_MESSAGE() unless getopts("Adhva:s:b:f:F:r:e:SCc:to:n:T:p:", \%opt);

    # This comment is needed to notify metaconfig that we are
    # using the $perladmin, $cf_by, and $cf_time definitions.
    # -------- Configuration ---------

    if (basename ($0) =~ /^perlthanks/i) {
	# invoked as perlthanks
	$opt{T} = 1;
	$opt{C} = 1; # don't send a copy to the local admin
    }

    if ($opt{T}) {
	$thanks = 'thanks';
    }
    
    $progname = $thanks ? 'perlthanks' : 'perlbug';
    # Target address
    $address = $opt{a} || ($thanks ? $thanksaddress : "");

    # Users address, used in message and in From and Reply-To headers
    $from = $opt{r} || "";

    # Include verbose configuration information
    $verbose = $opt{v} || 0;

    # Subject of bug-report message
    $subject = $opt{s} || "";

    # Send a file
    $usefile = ($opt{f} || 0);

    # File to send as report
    $file = $opt{f} || "";

    # We have one or more attachments
    $have_attachment = ($opt{p} || 0);
    $mime_boundary = ('-' x 12) . "$VERSION.perlbug" if $have_attachment;

    # Comma-separated list of attachments
    $attachments = $opt{p} || "";
    $has_patch = 0; # TBD based on file type

    for my $attachment (split /\s*,\s*/, $attachments) {
        unless (-f $attachment && -r $attachment) {
            die "The attachment $attachment is not a readable file: $!\n";
        }
        $has_patch = 1 if $attachment =~ m/\.(patch|diff)$/;
    }

    # File to output to
    $outfile = $opt{F} || "$progname.rep";

    # Body of report
    $body = $opt{b} || "";
	
    # Editor
    $ed = $opt{e} || $ENV{VISUAL} || $ENV{EDITOR} || $ENV{EDIT}
	|| ($Is_VMS && "edit/tpu")
	|| ($Is_MSWin32 && "notepad")
	|| "editor";

    # Not OK - provide build failure template by finessing OK report
    if ($opt{n}) {
	if (substr($opt{n}, 0, 2) eq 'ok' )	{
	    $opt{o} = substr($opt{n}, 1);
	} else {
	    Help();
	    exit();
	}
    }

    # OK - send "OK" report for build on this system
    $ok = '';
    if ($opt{o}) {
	if ($opt{o} eq 'k' or $opt{o} eq 'kay') {
	    my $age = time - $patchlevel_date;
	    if ($opt{o} eq 'k' and $age > 60 * 24 * 60 * 60 ) {
		my $date = localtime $patchlevel_date;
		print <<"EOF";
"perlbug -ok" and "perlbug -nok" do not report on Perl versions which
are more than 60 days old.  This Perl version was constructed on
$date.  If you really want to report this, use
"perlbug -okay" or "perlbug -nokay".
EOF
		exit();
	    }
	    # force these options
	    unless ($opt{n}) {
		$opt{S} = 1; # don't prompt for send
		$opt{b} = 1; # we have a body
		$body = "Perl reported to build OK on this system.\n";
	    }
	    $opt{C} = 1; # don't send a copy to the local admin
	    $opt{s} = 1; # we have a subject line
	    $subject = ($opt{n} ? 'Not ' : '')
		    . "OK: perl $perl_version ${patch_tags}on"
		    ." $::Config{'archname'} $::Config{'osvers'} $subject";
	    $ok = 'ok';
	} else {
	    Help();
	    exit();
	}
    }

    # Possible administrator addresses, in order of confidence
    # (Note that cf_email is not mentioned to metaconfig, since
    # we don't really want it. We'll just take it if we have to.)
    #
    # This has to be after the $ok stuff above because of the way
    # that $opt{C} is forced.
    $cc = $opt{C} ? "" : (
	$opt{c} || $::Config{'perladmin'}
	|| $::Config{'cf_email'} || $::Config{'cf_by'}
    );

    if ($::HaveUtil) {
		$domain = Mail::Util::maildomain();
    } elsif ($Is_MSWin32) {
		$domain = $ENV{'USERDOMAIN'};
    } else {
		require Sys::Hostname;
		$domain = Sys::Hostname::hostname();
    }

    # Message-Id - rjsf
    $messageid = "<$::Config{'version'}_${$}_".time."\@$domain>"; 

    # My username
    $me = $Is_MSWin32 ? $ENV{'USERNAME'}
	    : $^O eq 'os2' ? $ENV{'USER'} || $ENV{'LOGNAME'}
	    : eval { getpwuid($<) };	# May be missing

    $from = $::Config{'cf_email'}
       if !$from && $::Config{'cf_email'} && $::Config{'cf_by'} && $me &&
               ($me eq $::Config{'cf_by'});
} # sub Init

sub Query {
    # Explain what perlbug is
    unless ($ok) {
	if ($thanks) {
	    paraprint <<'EOF';
This program provides an easy way to send a thank-you message back to the
authors and maintainers of perl.

If you wish to generate a bug report, please run it without the -T flag
(or run the program perlbug rather than perlthanks)
EOF
	} else {
	    paraprint <<"EOF";
This program provides an easy way to generate a bug report for the core
perl distribution (along with tests or patches).  To send a thank-you
note to $thanksaddress instead of a bug report, please run 'perlthanks'.

The GitHub issue tracker at https://github.com/Perl/perl5/issues is the
best place to submit your report so it can be tracked and resolved.

Please do not use $0 to report bugs in perl modules from CPAN.

Suggestions for how to find help using Perl can be found at
https://perldoc.perl.org/perlcommunity.html
EOF
	}
    }

    # Prompt for subject of message, if needed
    
    if ($subject && TrivialSubject($subject)) {
	$subject = '';
    }

    unless ($subject) {
	    print 
"First of all, please provide a subject for the report.\n";
	if ( not $thanks)  {
	    paraprint <<EOF;
This should be a concise description of your bug or problem
which will help the volunteers working to improve perl to categorize
and resolve the issue.  Be as specific and descriptive as
you can. A subject like "perl bug" or "perl problem" will make it
much less likely that your issue gets the attention it deserves.
EOF
	}

	my $err = 0;
	do {
        $subject = _prompt('','Subject');
	    if ($err++ == 5) {
		if ($thanks) {
		    $subject = 'Thanks for Perl';
		} else {
		    die "Aborting.\n";
		}
	    }
	} while (TrivialSubject($subject));
    }
    $subject = '[PATCH] ' . $subject
        if $has_patch && ($subject !~ m/^\[PATCH/i);

    # Prompt for return address, if needed
    unless ($opt{r}) {
	# Try and guess return address
	my $guess;

	$guess = $ENV{'REPLY-TO'} || $ENV{'REPLYTO'} || $ENV{'EMAIL'}
	    || $from || '';

	unless ($guess) {
		# move $domain to where we can use it elsewhere	
        if ($domain) {
		if ($Is_VMS && !$::Config{'d_socket'}) {
		    $guess = "$domain\:\:$me";
		} else {
		    $guess = "$me\@$domain" if $domain;
		}
	    }
	}

	if ($guess) {
	    unless ($ok) {
		paraprint <<EOF;
Perl's developers may need your email address to contact you for
further information about your issue or to inform you when it is
resolved.  If the default shown is not your email address, please
correct it.
EOF
	    }
	} else {
	    paraprint <<EOF;
Please enter your full internet email address so that Perl's
developers can contact you with questions about your issue or to
inform you that it has been resolved.
EOF
	}

	if ($ok && $guess) {
	    # use it
	    $from = $guess;
	} else {
	    # verify it
        $from = _prompt('','Your address',$guess);
	    $from = $guess if $from eq '';
	}
    }

    if ($from eq $cc or $me eq $cc) {
	# Try not to copy ourselves
	$cc = "yourself";
    }

    # Prompt for administrator address, unless an override was given
    if( $address and !$opt{C} and !$opt{c} ) {
	my $description =  <<EOF;
$0 can send a copy of this report to your local perl
administrator.  If the address below is wrong, please correct it,
or enter 'none' or 'yourself' to not send a copy.
EOF
	my $entry = _prompt($description, "Local perl administrator", $cc);

	if ($entry ne "") {
	    $cc = $entry;
	    $cc = '' if $me eq $cc;
	}
    }

    $cc = '' if $cc =~ /^(none|yourself|me|myself|ourselves)$/i;
    if ($cc) { 
        $andcc = " and $cc" 
    } else {
        $andcc = ''
    }

    # Prompt for editor, if no override is given
editor:
    unless ($opt{e} || $opt{f} || $opt{b}) {

    my $description;

	chomp (my $common_end = <<"EOF");
You will probably want to use a text editor to enter the body of
your report. If "$ed" is the editor you want to use, then just press
Enter, otherwise type in the name of the editor you would like to
use.

If you have already composed the body of your report, you may enter
"file", and $0 will prompt you to enter the name of the file
containing your report.
EOF

	if ($thanks) {
	    $description = <<"EOF";
It's now time to compose your thank-you message.

Some information about your local perl configuration will automatically
be included at the end of your message, because we're curious about
the different ways that people build and use perl. If you'd rather
not share this information, you're welcome to delete it.

$common_end
EOF
	} else {
	    $description =  <<"EOF";
It's now time to compose your bug report. Try to make the report
concise but descriptive. Please include any detail which you think
might be relevant or might help the volunteers working to improve
perl. If you are reporting something that does not work as you think
it should, please try to include examples of the actual result and of
what you expected.

Some information about your local perl configuration will automatically
be included at the end of your report. If you are using an unusual
version of perl, it would be useful if you could confirm that you
can replicate the problem on a standard build of perl as well.

$common_end
EOF
	}

    my $entry = _prompt($description, "Editor", $ed);
	$usefile = 0;
	if ($entry eq "file") {
	    $usefile = 1;
	} elsif ($entry ne "") {
	    $ed = $entry;
	}
    }
    if ($::HaveCoreList && !$ok && !$thanks) {
	my $description =  <<EOF;
If your bug is about a Perl module rather than a core language
feature, please enter its name here. If it's not, just hit Enter
to skip this question.
EOF

    my $entry = '';
	while ($entry eq '') {
        $entry = _prompt($description, 'Module');
	    my $first_release = Module::CoreList->first_release($entry);
	    if ($entry and not $first_release) {
		paraprint <<EOF;
$entry is not a "core" Perl module. Please check that you entered
its name correctly. If it is correct, quit this program, try searching
for $entry on https://rt.cpan.org, and report your issue there.
EOF

            $entry = '';
	} elsif (my $bug_tracker = $Module::CoreList::bug_tracker{$entry}) {
		paraprint <<"EOF";
$entry included with core Perl is copied directly from the CPAN distribution.
Please report bugs in $entry directly to its maintainers using $bug_tracker
EOF
            $entry = '';
        } elsif ($entry) {
	        $category ||= 'library';
	        $report_about_module = $entry;
            last;
        } else {
            last;
        }
	}
    }

    # Prompt for category of bug
    $category ||= ask_for_alternatives('category');

    # Prompt for severity of bug
    $severity ||= ask_for_alternatives('severity');

    # Generate scratch file to edit report in
    $filename = filename();

    # Prompt for file to read report from, if needed
    if ($usefile and !$file) {
filename:
	my $description = <<EOF;
What is the name of the file that contains your report?
EOF
	my $entry = _prompt($description, "Filename");

	if ($entry eq "") {
	    paraprint <<EOF;
It seems you didn't enter a filename. Please choose to use a text
editor or enter a filename.
EOF
	    goto editor;
	}

	unless (-f $entry and -r $entry) {
	    paraprint <<EOF;
'$entry' doesn't seem to be a readable file.  You may have mistyped
its name or may not have permission to read it.

If you don't want to use a file as the content of your report, just
hit Enter and you'll be able to select a text editor instead.
EOF
	    goto filename;
	}
	$file = $entry;
    }

    # Generate report
    open(REP, '>:raw', $filename) or die "Unable to create report file '$filename': $!\n";
    binmode(REP, ':raw :crlf') if $Is_MSWin32;

    my $reptype = !$ok ? ($thanks ? 'thank-you' : 'bug')
	: $opt{n} ? "build failure" : "success";

    print REP <<EOF;
This is a $reptype report for perl from $from,
generated with the help of perlbug $VERSION running under perl $perl_version.

EOF

    if ($body) {
	print REP $body;
    } elsif ($usefile) {
	open(F, '<:raw', $file)
		or die "Unable to read report file from '$file': $!\n";
	binmode(F, ':raw :crlf') if $Is_MSWin32;
	while (<F>) {
	    print REP $_
	}
	close(F) or die "Error closing '$file': $!";
    } else {
	if ($thanks) {
	    print REP <<'EOF';

-----------------------------------------------------------------
[Please enter your thank-you message here]



[You're welcome to delete anything below this line]
-----------------------------------------------------------------
EOF
	} else {
	    print REP <<'EOF';

-----------------------------------------------------------------
[Please describe your issue here]



[Please do not change anything below this line]
-----------------------------------------------------------------
EOF
	}
    }
    Dump(*REP);
    close(REP) or die "Error closing report file: $!";

    # Set up an initial report fingerprint so we can compare it later
    _fingerprint_lines_in_report();

} # sub Query

sub Dump {
    local(*OUT) = @_;

    # these won't have been set if run with -d
    $category ||= 'core';
    $severity ||= 'low';

    print OUT <<EFF;
---
Flags:
    category=$category
    severity=$severity
EFF

    if ($has_patch) {
        print OUT <<EFF;
    Type=Patch
    PatchStatus=HasPatch
EFF
    }

    if ($report_about_module ) { 
        print OUT <<EFF;
    module=$report_about_module
EFF
    }
    print OUT <<EFF;
---
EFF
    print OUT "This perlbug was built using Perl $config_tag1\n",
	    "It is being executed now by  Perl $config_tag2.\n\n"
	if $config_tag2 ne $config_tag1;

    print OUT <<EOF;
Site configuration information for perl $perl_version:

EOF
    if ($::Config{cf_by} and $::Config{cf_time}) {
	print OUT "Configured by $::Config{cf_by} at $::Config{cf_time}.\n\n";
    }
    print OUT Config::myconfig;

    if (@patches) {
	print OUT join "\n    ", "Locally applied patches:", @patches;
	print OUT "\n";
    };

    print OUT <<EOF;

---
\@INC for perl $perl_version:
EOF
    for my $i (@INC) {
	print OUT "    $i\n";
    }

    print OUT <<EOF;

---
Environment for perl $perl_version:
EOF
    my @env =
        qw(PATH LD_LIBRARY_PATH LANG PERL_BADLANG SHELL HOME LOGDIR LANGUAGE);
    push @env, $Config{ldlibpthname} if $Config{ldlibpthname} ne '';
    push @env, grep /^(?:PERL|LC_|LANG|CYGWIN)/, keys %ENV;
    my %env;
    @env{@env} = @env;
    for my $env (sort keys %env) {
	print OUT "    $env",
		exists $ENV{$env} ? "=$ENV{$env}" : ' (unset)',
		"\n";
    }
    if ($verbose) {
	print OUT "\nComplete configuration data for perl $perl_version:\n\n";
	my $value;
	foreach (sort keys %::Config) {
	    $value = $::Config{$_};
	    $value = '' unless defined $value;
	    $value =~ s/'/\\'/g;
	    print OUT "$_='$value'\n";
	}
    }
} # sub Dump

sub Edit {
    # Edit the report
    if ($usefile || $body) {
	my $description = "Please make sure that the name of the editor you want to use is correct.";
	my $entry = _prompt($description, 'Editor', $ed);
	$ed = $entry unless $entry eq '';
    }

    _edit_file($ed) unless $running_noninteractively;
}

sub _edit_file {
    my $editor = shift;

    my $report_written = 0;

    while ( !$report_written ) {
        my $exit_status = system("$editor $filename");
        if ($exit_status) {
            my $desc = <<EOF;
The editor you chose ('$editor') could not be run!

If you mistyped its name, please enter it now, otherwise just press Enter.
EOF
            my $entry = _prompt( $desc, 'Editor', $editor );
            if ( $entry ne "" ) {
                $editor = $entry;
                next;
            } else {
                paraprint <<EOF;
You can edit your report after saving it to a file.
EOF
                return;
            }
        }
        return if ( $ok and not $opt{n} ) || $body;

        # Check that we have a report that has some, eh, report in it.

        unless ( _fingerprint_lines_in_report() ) {
            my $description = <<EOF;
It looks like you didn't enter a report. You may [r]etry your edit
or [c]ancel this report.
EOF
            my $action = _prompt( $description, "Action (Retry/Cancel) " );
            if ( $action =~ /^[re]/i ) {    # <R>etry <E>dit
                next;
            } elsif ( $action =~ /^[cq]/i ) {    # <C>ancel, <Q>uit
                Cancel();                        # cancel exits
            }
        }
        # Ok. the user did what they needed to;
        return;

    }
}


sub Cancel {
    1 while unlink($filename);  # remove all versions under VMS
    print "\nQuitting without generating a report.\n";
    exit(0);
}

sub NowWhat {
    # Report is done, prompt for further action
    if( !$opt{S} ) {
	while(1) {
	    my $send_to = $address || 'the Perl developers';
	    my $menu = <<EOF;


You have finished composing your report. At this point, you have 
a few options. You can:

    * Save the report to a [f]ile
    * [Se]nd the report to $send_to$andcc
    * [D]isplay the report on the screen
    * [R]e-edit the report
    * Display or change the report's [su]bject
    * [Q]uit without generating the report

EOF
      retry:
        print $menu;
	    my $action =  _prompt('', "Action (Save/Send/Display/Edit/Subject/Quit)",
	        $opt{t} ? 'q' : '');
        print "\n";
	    if ($action =~ /^(f|sa)/i) { # <F>ile/<Sa>ve
            if ( SaveMessage() ) { exit }
	    } elsif ($action =~ /^(d|l|sh)/i ) { # <D>isplay, <L>ist, <Sh>ow
		# Display the message
		print _read_report($filename);
		if ($have_attachment) {
		    print "\n\n---\nAttachment(s):\n";
		    for my $att (split /\s*,\s*/, $attachments) { print "    $att\n"; }
		}
	    } elsif ($action =~ /^su/i) { # <Su>bject
		my $reply = _prompt( "Subject: $subject", "If the above subject is fine, press Enter. Otherwise, type a replacement now\nSubject");
		if ($reply ne '') {
		    unless (TrivialSubject($reply)) {
			$subject = $reply;
			print "Subject: $subject\n";
		    }
		}
	    } elsif ($action =~ /^se/i) { # <S>end
		# Send the message
		if (not $thanks) {
		    print <<EOF
To ensure your issue can be best tracked and resolved,
you should submit it to the GitHub issue tracker at
https://github.com/Perl/perl5/issues
EOF
		}
		my $reply =  _prompt( "Are you certain you want to send this report to $send_to$andcc?", 'Please type "yes" if you are','no');
		if ($reply =~ /^yes$/) {
		    $address ||= 'perl5-porters@perl.org';
		    last;
		} else {
		    paraprint <<EOF;
You didn't type "yes", so your report has not been sent.
EOF
		}
	    } elsif ($action =~ /^[er]/i) { # <E>dit, <R>e-edit
		# edit the message
		Edit();
	    } elsif ($action =~ /^[qc]/i) { # <C>ancel, <Q>uit
		Cancel();
	    } elsif ($action =~ /^s/i) {
		paraprint <<EOF;
The command you entered was ambiguous. Please type "send", "save" or "subject".
EOF
	    }
	}
    }
} # sub NowWhat

sub TrivialSubject {
    my $subject = shift;
    if ($subject =~
	/^(y(es)?|no?|help|perl( (bug|problem))?|bug|problem)$/i ||
	length($subject) < 4 ||
	($subject !~ /\s/ && ! $opt{t})) { # non-whitespace is accepted in test mode
	print "\nThe subject you entered wasn't very descriptive. Please try again.\n\n";
        return 1;
    } else {
	return 0;
    }
}

sub SaveMessage {
    my $file = _prompt( '', "Name of file to save report in", $outfile );
    save_message_to_disk($file) || return undef;
    return 1;
}

sub Send {

    # Message has been accepted for transmission -- Send the message

    # on linux certain "mail" implementations won't accept the subject
    # as "~s subject" and thus the Subject header will be corrupted
    # so don't use Mail::Send to be safe
    eval {
        if ( $::HaveSend && !$Is_Linux && !$Is_OpenBSD ) {
            _send_message_mailsend();
        } elsif ($Is_VMS) {
            _send_message_vms();
        } else {
            _send_message_sendmail();
        }
    };

    if ( my $error = $@ ) {
        paraprint <<EOF;
$0 has detected an error while trying to send your message: $error.

Your message may not have been sent. You will now have a chance to save a copy to disk.
EOF
        SaveMessage();
        return;
    }

    1 while unlink($filename);    # remove all versions under VMS
}    # sub Send

sub Help {
    print <<EOF;

This program is designed to help you generate bug reports
(and thank-you notes) about perl5 and the modules which ship with it.

In most cases, you can just run "$0" interactively from a command
line without any special arguments and follow the prompts.

Advanced usage:

$0  [-v] [-a address] [-s subject] [-b body | -f inpufile ] [ -F outputfile ]
    [-r returnaddress] [-e editor] [-c adminaddress | -C] [-S] [-t] [-h]
    [-p patchfile ]
$0  [-v] [-r returnaddress] [-ok | -okay | -nok | -nokay]


Options:

  -v    Include Verbose configuration data in the report
  -f    File containing the body of the report. Use this to
        quickly send a prepared report.
  -p    File containing a patch or other text attachment. Separate
        multiple files with commas.
  -F    File to output the resulting report to. Defaults to
        '$outfile'.
  -S    Save or send the report without asking for confirmation.
  -a    Send the report to this address, instead of saving to a file.
  -c    Address to send copy of report to. Defaults to '$cc'.
  -C    Don't send copy to administrator.
  -s    Subject to include with the report. You will be prompted
        if you don't supply one on the command line.
  -b    Body of the report. If not included on the command line, or
        in a file with -f, you will get a chance to edit the report.
  -r    Your return address. The program will ask you to confirm
        this if you don't give it here.
  -e    Editor to use.
  -t    Test mode.
  -T    Thank-you mode. The target address defaults to '$thanksaddress'.
  -d    Data mode.  This prints out your configuration data, without mailing
        anything. You can use this with -v to get more complete data.
  -ok   Report successful build on this system to perl porters
        (use alone or with -v). Only use -ok if *everything* was ok:
        if there were *any* problems at all, use -nok.
  -okay As -ok but allow report from old builds.
  -nok  Report unsuccessful build on this system to perl porters
        (use alone or with -v). You must describe what went wrong
        in the body of the report which you will be asked to edit.
  -nokay As -nok but allow report from old builds.
  -h    Print this help message.

EOF
}

sub filename {
    if ($::HaveTemp) {
	# Good. Use a secure temp file
	my ($fh, $filename) = File::Temp::tempfile(UNLINK => 1);
	close($fh);
	return $filename;
    } else {
	# Bah. Fall back to doing things less securely.
	my $dir = File::Spec->tmpdir();
	$filename = "bugrep0$$";
	$filename++ while -e File::Spec->catfile($dir, $filename);
	$filename = File::Spec->catfile($dir, $filename);
    }
}

sub paraprint {
    my @paragraphs = split /\n{2,}/, "@_";
    for (@paragraphs) {   # implicit local $_
	s/(\S)\s*\n/$1 /g;
	write;
	print "\n";
    }
}

sub _prompt {
    my ($explanation, $prompt, $default) = (@_);
    if ($explanation) {
        print "\n\n";
        paraprint $explanation;
    }
    print $prompt. ($default ? " [$default]" :''). ": ";
	my $result = scalar(<>);
    return $default if !defined $result; # got eof
    chomp($result);
	$result =~ s/^\s*(.*?)\s*$/$1/s;
    if ($default && $result eq '') {
        return $default;
    } else {
        return $result;
    }
}

sub _build_header {
    my %attr = (@_);

    my $head = '';
    for my $header (keys %attr) {
        $head .= "$header: ".$attr{$header}."\n";
    }
    return $head;
}

sub _message_headers {
    my %headers = ( To => $address || 'perl5-porters@perl.org', Subject => $subject );
    $headers{'Cc'}         = $cc        if ($cc);
    $headers{'Message-Id'} = $messageid if ($messageid);
    $headers{'Reply-To'}   = $from      if ($from);
    $headers{'From'}       = $from      if ($from);
    if ($have_attachment) {
        $headers{'MIME-Version'} = '1.0';
        $headers{'Content-Type'} = qq{multipart/mixed; boundary=\"$mime_boundary\"};
    }
    return \%headers;
}

sub _add_body_start {
    my $body_start = <<"BODY_START";
This is a multi-part message in MIME format.
--$mime_boundary
Content-Type: text/plain; format=fixed
Content-Transfer-Encoding: 8bit

BODY_START
    return $body_start;
}

sub _add_attachments {
    my $attach = '';
    for my $attachment (split /\s*,\s*/, $attachments) {
        my $attach_file = basename($attachment);
        $attach .= <<"ATTACHMENT";

--$mime_boundary
Content-Type: text/x-patch; name="$attach_file"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="$attach_file"

ATTACHMENT

        open my $attach_fh, '<:raw', $attachment
            or die "Couldn't open attachment '$attachment': $!\n";
        while (<$attach_fh>) { $attach .= $_; }
        close($attach_fh) or die "Error closing attachment '$attachment': $!";
    }

    $attach .= "\n--$mime_boundary--\n";
    return $attach;
}

sub _read_report {
    my $fname = shift;
    my $content;
    open( REP, "<:raw", $fname ) or die "Couldn't open file '$fname': $!\n";
    binmode(REP, ':raw :crlf') if $Is_MSWin32;
    # wrap long lines to make sure the report gets delivered
    local $Text::Wrap::columns = 900;
    local $Text::Wrap::huge = 'overflow';
    while (<REP>) {
        if ($::HaveWrap && /\S/) { # wrap() would remove empty lines
            $content .= Text::Wrap::wrap(undef, undef, $_);
        } else {
            $content .= $_;
        }
    }
    close(REP) or die "Error closing report file '$fname': $!";
    return $content;
}

sub build_complete_message {
    my $content = _build_header(%{_message_headers()}) . "\n\n";
    $content .= _add_body_start() if $have_attachment;
    $content .= _read_report($filename);
    $content .= _add_attachments() if $have_attachment;
    return $content;
}

sub save_message_to_disk {
    my $file = shift;

        if (-e $file) {
            my $response = _prompt( '', "Overwrite existing '$file'", 'n' );
            return undef unless $response =~ / yes | y /xi;
        }
        open OUTFILE, '>:raw', $file or do { warn  "Couldn't open '$file': $!\n"; return undef};
        binmode(OUTFILE, ':raw :crlf') if $Is_MSWin32;

        print OUTFILE build_complete_message();
        close(OUTFILE) or do { warn  "Error closing $file: $!"; return undef };
	    print "\nReport saved to '$file'. Please submit it to https://github.com/Perl/perl5/issues\n";
        return 1;
}

sub _send_message_vms {

    my $mail_from  = $from;
    my $rcpt_to_to = $address;
    my $rcpt_to_cc = $cc;

    map { $_ =~ s/^[^<]*<//;
          $_ =~ s/>[^>]*//; } ($mail_from, $rcpt_to_to, $rcpt_to_cc);

    if ( open my $sff_fh, '|-:raw', 'MCR TCPIP$SYSTEM:TCPIP$SMTP_SFF.EXE SYS$INPUT:' ) {
        print $sff_fh "MAIL FROM:<$mail_from>\n";
        print $sff_fh "RCPT TO:<$rcpt_to_to>\n";
        print $sff_fh "RCPT TO:<$rcpt_to_cc>\n" if $rcpt_to_cc;
        print $sff_fh "DATA\n";
        print $sff_fh build_complete_message();
        my $success = close $sff_fh;
        if ($success ) {
            print "\nMessage sent\n";
            return;
        }
    }
    die "Mail transport failed (leaving bug report in $filename): $^E\n";
}

sub _send_message_mailsend {
    my $msg = Mail::Send->new();
    my %headers = %{_message_headers()};
    for my $key ( keys %headers) {
        $msg->add($key => $headers{$key});
    }

    $fh = $msg->open;
    binmode($fh, ':raw');
    print $fh _add_body_start() if $have_attachment;
    print $fh _read_report($filename);
    print $fh _add_attachments() if $have_attachment;
    $fh->close or die "Error sending mail: $!";

    print "\nMessage sent.\n";
}

sub _probe_for_sendmail {
    my $sendmail = "";
    for (qw(/usr/lib/sendmail /usr/sbin/sendmail /usr/ucblib/sendmail)) {
        $sendmail = $_, last if -e $_;
    }
    if ( $^O eq 'os2' and $sendmail eq "" ) {
        my $path = $ENV{PATH};
        $path =~ s:\\:/:;
        my @path = split /$Config{'path_sep'}/, $path;
        for (@path) {
            $sendmail = "$_/sendmail",     last if -e "$_/sendmail";
            $sendmail = "$_/sendmail.exe", last if -e "$_/sendmail.exe";
        }
    }
    return $sendmail;
}

sub _send_message_sendmail {
    my $sendmail = _probe_for_sendmail();
    unless ($sendmail) {
        my $message_start = !$Is_Linux && !$Is_OpenBSD ? <<'EOT' : <<'EOT';
It appears that there is no program which looks like "sendmail" on
your system and that the Mail::Send library from CPAN isn't available.
EOT
It appears that there is no program which looks like "sendmail" on
your system.
EOT
        paraprint(<<"EOF"), die "\n";
$message_start
Because of this, there's no easy way to automatically send your
report.

A copy of your report has been saved in '$filename' for you to
send to '$address' with your normal mail client.
EOF
    }

    open( SENDMAIL, "|-:raw", $sendmail, "-t", "-oi", "-f", $from )
        || die "'|$sendmail -t -oi -f $from' failed: $!";
    print SENDMAIL build_complete_message();
    if ( close(SENDMAIL) ) {
        print "\nMessage sent\n";
    } else {
        warn "\nSendmail returned status '", $? >> 8, "'\n";
    }
}



# a strange way to check whether any significant editing
# has been done: check whether any new non-empty lines
# have been added.

sub _fingerprint_lines_in_report {
    my $new_lines = 0;
    # read in the report template once so that
    # we can track whether the user does any editing.
    # yes, *all* whitespace is ignored.

    open(REP, '<:raw', $filename) or die "Unable to open report file '$filename': $!\n";
    binmode(REP, ':raw :crlf') if $Is_MSWin32;
    while (my $line = <REP>) {
        $line =~ s/\s+//g;
        $new_lines++ if (!$REP{$line});

    }
    close(REP) or die "Error closing report file '$filename': $!";
    # returns the number of lines with content that wasn't there when last we looked
    return $new_lines;
}



format STDOUT =
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
$_
.

__END__

=head1 NAME

perlbug - how to submit bug reports on Perl

=head1 SYNOPSIS

B<perlbug>

B<perlbug> S<[ B<-v> ]> S<[ B<-a> I<address> ]> S<[ B<-s> I<subject> ]>
S<[ B<-b> I<body> | B<-f> I<inputfile> ]> S<[ B<-F> I<outputfile> ]>
S<[ B<-r> I<returnaddress> ]>
S<[ B<-e> I<editor> ]> S<[ B<-c> I<adminaddress> | B<-C> ]>
S<[ B<-S> ]> S<[ B<-t> ]>  S<[ B<-d> ]>  S<[ B<-h> ]> S<[ B<-T> ]>

B<perlbug> S<[ B<-v> ]> S<[ B<-r> I<returnaddress> ]>
 S<[ B<-ok> | B<-okay> | B<-nok> | B<-nokay> ]>

B<perlthanks>

=head1 DESCRIPTION


This program is designed to help you generate bug reports
(and thank-you notes) about perl5 and the modules which ship with it.

In most cases, you can just run it interactively from a command
line without any special arguments and follow the prompts.

If you have found a bug with a non-standard port (one that was not
part of the I<standard distribution>), a binary distribution, or a
non-core module (such as Tk, DBI, etc), then please see the
documentation that came with that distribution to determine the
correct place to report bugs.

Bug reports should be submitted to the GitHub issue tracker at
L<https://github.com/Perl/perl5/issues>. The B<perlbug@perl.org>
address no longer automatically opens tickets. You can use this tool
to compose your report and save it to a file which you can then submit
to the issue tracker.

In extreme cases, B<perlbug> may not work well enough on your system
to guide you through composing a bug report. In those cases, you
may be able to use B<perlbug -d> or B<perl -V> to get system
configuration information to include in your issue report.


When reporting a bug, please run through this checklist:

=over 4

=item What version of Perl you are running?

Type C<perl -v> at the command line to find out.

=item Are you running the latest released version of perl?

Look at L<http://www.perl.org/> to find out.  If you are not using the
latest released version, please try to replicate your bug on the
latest stable release.

Note that reports about bugs in old versions of Perl, especially
those which indicate you haven't also tested the current stable
release of Perl, are likely to receive less attention from the
volunteers who build and maintain Perl than reports about bugs in
the current release.

=item Are you sure what you have is a bug?

A significant number of the bug reports we get turn out to be
documented features in Perl.  Make sure the issue you've run into
isn't intentional by glancing through the documentation that comes
with the Perl distribution.

Given the sheer volume of Perl documentation, this isn't a trivial
undertaking, but if you can point to documentation that suggests
the behaviour you're seeing is I<wrong>, your issue is likely to
receive more attention. You may want to start with B<perldoc>
L<perltrap> for pointers to common traps that new (and experienced)
Perl programmers run into.

If you're unsure of the meaning of an error message you've run
across, B<perldoc> L<perldiag> for an explanation.  If the message
isn't in perldiag, it probably isn't generated by Perl.  You may
have luck consulting your operating system documentation instead.

If you are on a non-UNIX platform B<perldoc> L<perlport>, as some
features may be unimplemented or work differently.

You may be able to figure out what's going wrong using the Perl
debugger.  For information about how to use the debugger B<perldoc>
L<perldebug>.

=item Do you have a proper test case?

The easier it is to reproduce your bug, the more likely it will be
fixed -- if nobody can duplicate your problem, it probably won't be 
addressed.

A good test case has most of these attributes: short, simple code;
few dependencies on external commands, modules, or libraries; no
platform-dependent code (unless it's a platform-specific bug);
clear, simple documentation.

A good test case is almost always a good candidate to be included in
Perl's test suite.  If you have the time, consider writing your test case so
that it can be easily included into the standard test suite.

=item Have you included all relevant information?

Be sure to include the B<exact> error messages, if any.
"Perl gave an error" is not an exact error message.

If you get a core dump (or equivalent), you may use a debugger
(B<dbx>, B<gdb>, etc) to produce a stack trace to include in the bug
report.

NOTE: unless your Perl has been compiled with debug info
(often B<-g>), the stack trace is likely to be somewhat hard to use
because it will most probably contain only the function names and not
their arguments.  If possible, recompile your Perl with debug info and
reproduce the crash and the stack trace.

=item Can you describe the bug in plain English?

The easier it is to understand a reproducible bug, the more likely
it will be fixed.  Any insight you can provide into the problem
will help a great deal.  In other words, try to analyze the problem
(to the extent you can) and report your discoveries.

=item Can you fix the bug yourself?

If so, that's great news; bug reports with patches are likely to
receive significantly more attention and interest than those without
patches.  Please submit your patch via the GitHub Pull Request workflow
as described in B<perldoc> L<perlhack>.  You may also send patches to
B<perl5-porters@perl.org>.  When sending a patch, create it using
C<git format-patch> if possible, though a unified diff created with
C<diff -pu> will do nearly as well.

Your patch may be returned with requests for changes, or requests for more
detailed explanations about your fix.

Here are a few hints for creating high-quality patches:

Make sure the patch is not reversed (the first argument to diff is
typically the original file, the second argument your changed file).
Make sure you test your patch by applying it with C<git am> or the
C<patch> program before you send it on its way.  Try to follow the
same style as the code you are trying to patch.  Make sure your patch
really does work (C<make test>, if the thing you're patching is covered
by Perl's test suite).

=item Can you use C<perlbug> to submit a thank-you note?

Yes, you can do this by either using the C<-T> option, or by invoking
the program as C<perlthanks>. Thank-you notes are good. It makes people
smile. 

=back

Please make your issue title informative.  "a bug" is not informative.
Neither is "perl crashes" nor is "HELP!!!".  These don't help.  A compact
description of what's wrong is fine.

Having done your bit, please be prepared to wait, to be told the
bug is in your code, or possibly to get no reply at all.  The
volunteers who maintain Perl are busy folks, so if your problem is
an obvious bug in your own code, is difficult to understand or is
a duplicate of an existing report, you may not receive a personal
reply.

If it is important to you that your bug be fixed, do monitor the
issue tracker (you will be subscribed to notifications for issues you
submit or comment on) and the commit logs to development
versions of Perl, and encourage the maintainers with kind words or
offers of frosty beverages.  (Please do be kind to the maintainers.
Harassing or flaming them is likely to have the opposite effect of the
one you want.)

Feel free to update the ticket about your bug on
L<https://github.com/Perl/perl5/issues>
if a new version of Perl is released and your bug is still present.

=head1 OPTIONS

=over 8

=item B<-a>

Address to send the report to instead of saving to a file.

=item B<-b>

Body of the report.  If not included on the command line, or
in a file with B<-f>, you will get a chance to edit the report.

=item B<-C>

Don't send copy to administrator when sending report by mail.

=item B<-c>

Address to send copy of report to when sending report by mail.
Defaults to the address of the
local perl administrator (recorded when perl was built).

=item B<-d>

Data mode (the default if you redirect or pipe output).  This prints out
your configuration data, without saving or mailing anything.  You can use
this with B<-v> to get more complete data.

=item B<-e>

Editor to use.

=item B<-f>

File containing the body of the report.  Use this to quickly send a
prepared report.

=item B<-F>

File to output the results to.  Defaults to B<perlbug.rep>.

=item B<-h>

Prints a brief summary of the options.

=item B<-ok>

Report successful build on this system to perl porters. Forces B<-S>
and B<-C>. Forces and supplies values for B<-s> and B<-b>. Only
prompts for a return address if it cannot guess it (for use with
B<make>). Honors return address specified with B<-r>.  You can use this
with B<-v> to get more complete data.   Only makes a report if this
system is less than 60 days old.

=item B<-okay>

As B<-ok> except it will report on older systems.

=item B<-nok>

Report unsuccessful build on this system.  Forces B<-C>.  Forces and
supplies a value for B<-s>, then requires you to edit the report
and say what went wrong.  Alternatively, a prepared report may be
supplied using B<-f>.  Only prompts for a return address if it
cannot guess it (for use with B<make>). Honors return address
specified with B<-r>.  You can use this with B<-v> to get more
complete data.  Only makes a report if this system is less than 60
days old.

=item B<-nokay>

As B<-nok> except it will report on older systems.

=item B<-p>

The names of one or more patch files or other text attachments to be
included with the report.  Multiple files must be separated with commas.

=item B<-r>

Your return address.  The program will ask you to confirm its default
if you don't use this option.

=item B<-S>

Save or send the report without asking for confirmation.

=item B<-s>

Subject to include with the report.  You will be prompted if you don't
supply one on the command line.

=item B<-t>

Test mode.  Makes it possible to command perlbug from a pipe or file, for
testing purposes.

=item B<-T>

Send a thank-you note instead of a bug report. 

=item B<-v>

Include verbose configuration data in the report.

=back

=head1 AUTHORS

Kenneth Albanowski (E<lt>kjahds@kjahds.comE<gt>), subsequently
I<doc>tored by Gurusamy Sarathy (E<lt>gsar@activestate.comE<gt>),
Tom Christiansen (E<lt>tchrist@perl.comE<gt>), Nathan Torkington
(E<lt>gnat@frii.comE<gt>), Charles F. Randall (E<lt>cfr@pobox.comE<gt>),
Mike Guy (E<lt>mjtg@cam.ac.ukE<gt>), Dominic Dunlop
(E<lt>domo@computer.orgE<gt>), Hugo van der Sanden (E<lt>hv@crypt.orgE<gt>),
Jarkko Hietaniemi (E<lt>jhi@iki.fiE<gt>), Chris Nandor
(E<lt>pudge@pobox.comE<gt>), Jon Orwant (E<lt>orwant@media.mit.eduE<gt>,
Richard Foley (E<lt>richard.foley@rfi.netE<gt>), Jesse Vincent
(E<lt>jesse@bestpractical.comE<gt>), and Craig A. Berry (E<lt>craigberry@mac.comE<gt>).

=head1 SEE ALSO

perl(1), perldebug(1), perldiag(1), perlport(1), perltrap(1),
diff(1), patch(1), dbx(1), gdb(1)

=head1 BUGS

None known (guess what must have been used to report them?)

=cut

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; # ^ Run only under a shell

# perlivp v5.36.0

BEGIN { pop @INC if $INC[-1] eq '.' }

sub usage {
    warn "@_\n" if @_;
    print << "    EOUSAGE";
Usage:

    $0 [-p] [-v] | [-h]

    -p Print a preface before each test telling what it will test.
    -v Verbose mode in which extra information about test results
       is printed.  Test failures always print out some extra information
       regardless of whether or not this switch is set.
    -h Prints this help message.
    EOUSAGE
    exit;
}

use vars qw(%opt); # allow testing with older versions (do not use our)

@opt{ qw/? H h P p V v/ } = qw(0 0 0 0 0 0 0);

while ($ARGV[0] =~ /^-/) {
    $ARGV[0] =~ s/^-//; 
    for my $flag (split(//,$ARGV[0])) {
        usage() if '?' =~ /\Q$flag/;
        usage() if 'h' =~ /\Q$flag/;
        usage() if 'H' =~ /\Q$flag/;
        usage("unknown flag: '$flag'") unless 'HhPpVv' =~ /\Q$flag/;
        warn "$0: '$flag' flag already set\n" if $opt{$flag}++;
    } 
    shift;
}

$opt{p}++ if $opt{P};
$opt{v}++ if $opt{V};

my $pass__total = 0;
my $error_total = 0;
my $tests_total = 0;

my $perlpath = '/usr/bin/perl';
my $useithreads = 'define';

print "## Checking Perl binary via variable '\$perlpath' = $perlpath.\n" if $opt{'p'};

my $label = 'Executable perl binary';

if (-x $perlpath) {
    print "## Perl binary '$perlpath' appears executable.\n" if $opt{'v'};
    print "ok 1 $label\n";
    $pass__total++;
}
else {
    print "# Perl binary '$perlpath' does not appear executable.\n";
    print "not ok 1 $label\n";
    $error_total++;
}
$tests_total++;


print "## Checking Perl version via variable '\$]'.\n" if $opt{'p'};

my $ivp_VERSION = "5.036000";


$label = 'Perl version correct';
if ($ivp_VERSION eq $]) {
    print "## Perl version '$]' appears installed as expected.\n" if $opt{'v'};
    print "ok 2 $label\n";
    $pass__total++;
}
else {
    print "# Perl version '$]' installed, expected $ivp_VERSION.\n";
    print "not ok 2 $label\n";
    $error_total++;
}
$tests_total++;

# We have the right perl and version, so now reset @INC so we ignore
# PERL5LIB and '.'
{
    local $ENV{PERL5LIB};
    my $perl_V = qx($perlpath -V);
    $perl_V =~ s{.*\@INC:\n}{}ms;
    @INC = grep { length && $_ ne '.' } split ' ', $perl_V;
}

print "## Checking roots of the Perl library directory tree via variable '\@INC'.\n" if $opt{'p'};

my $INC_total = 0;
my $INC_there = 0;
foreach (@INC) {
    next if $_ eq '.'; # skip -d test here
    next if m|/usr/local|; # not shipped on Debian
    if (-d $_) {
        print "## Perl \@INC directory '$_' exists.\n" if $opt{'v'};
        $INC_there++;
    }
    else {
        print "# Perl \@INC directory '$_' does not appear to exist.\n";
    }
    $INC_total++;
}

$label = '@INC directories exist';
if ($INC_total == $INC_there) {
    print "ok 3 $label\n";
    $pass__total++;
}
else {
    print "not ok 3 $label\n";
    $error_total++;
}
$tests_total++;


print "## Checking installations of modules necessary for ivp.\n" if $opt{'p'};

my $needed_total = 0;
my $needed_there = 0;
foreach (qw(Config.pm ExtUtils/Installed.pm)) {
    $@ = undef;
    $needed_total++;
    eval "require \"$_\";";
    if (!$@) {
        print "## Module '$_' appears to be installed.\n" if $opt{'v'};
        $needed_there++;
    }
    else {
        print "# Needed module '$_' does not appear to be properly installed.\n";
    }
    $@ = undef;
}
$label = 'Modules needed for rest of perlivp exist';
if ($needed_total == $needed_there) {
    print "ok 4 $label\n";
    $pass__total++;
}
else {
    print "not ok 4 $label\n";
    $error_total++;
}
$tests_total++;


print "## Checking installations of extensions built with perl.\n" if $opt{'p'};

use Config;

my $extensions_total = 0;
my $extensions_there = 0;
if (defined($Config{'extensions'})) {
    my @extensions = split(/\s+/,$Config{'extensions'});
    foreach (@extensions) {
        next if ($_ eq '');
        if ( $useithreads !~ /define/i ) {
            next if ($_ eq 'threads');
            next if ($_ eq 'threads/shared');
        }
        # that's a distribution name, not a module name
        next if $_ eq 'IO/Compress';
        next if $_ eq 'Devel/DProf';
        next if $_ eq 'libnet';
        next if $_ eq 'Locale/Codes';
        next if $_ eq 'podlators';
        next if $_ eq 'perlfaq';
        # test modules
        next if $_ eq 'XS/APItest';
        next if $_ eq 'XS/Typemap';
           # VMS$ perl  -e "eval ""require \""Devel/DProf.pm\"";"" print $@"
           # \NT> perl  -e "eval \"require './Devel/DProf.pm'\"; print $@"
           # DProf: run perl with -d to use DProf.
           # Compilation failed in require at (eval 1) line 1.
        eval " require \"$_.pm\"; ";
        if (!$@) {
            print "## Module '$_' appears to be installed.\n" if $opt{'v'};
            $extensions_there++;
        }
        else {
            print "# Required module '$_' does not appear to be properly installed.\n";
            $@ = undef;
        }
        $extensions_total++;
    }

    # A silly name for a module (that hopefully won't ever exist).
    # Note that this test serves more as a check of the validity of the
    # actual required module tests above.
    my $unnecessary = 'bLuRfle';

    if (!grep(/$unnecessary/, @extensions)) {
        $@ = undef;
        eval " require \"$unnecessary.pm\"; ";
        if ($@) {
            print "## Unnecessary module '$unnecessary' does not appear to be installed.\n" if $opt{'v'};
        }
        else {
            print "# Unnecessary module '$unnecessary' appears to be installed.\n";
            $extensions_there++;
        }
    }
    $@ = undef;
}
$label = 'All (and only) expected extensions installed';
if ($extensions_total == $extensions_there) {
    print "ok 5 $label\n";
    $pass__total++;
}
else {
    print "not ok 5 $label\n";
    $error_total++;
}
$tests_total++;


print "## Checking installations of later additional extensions.\n" if $opt{'p'};

use ExtUtils::Installed;

my $installed_total = 0;
my $installed_there = 0;
my $version_check = 0;
my $installed = ExtUtils::Installed -> new();
my @modules = $installed -> modules();
my @missing = ();
my $version = undef;
for (@modules) {
    $installed_total++;
    # Consider it there if it contains one or more files,
    # and has zero missing files,
    # and has a defined version
    $version = undef;
    $version = $installed -> version($_);
    if ($version) {
        print "## $_; $version\n" if $opt{'v'};
        $version_check++;
    }
    else {
        print "# $_; NO VERSION\n" if $opt{'v'};
    }
    $version = undef;
    @missing = ();
    @missing = $installed -> validate($_);

    # .bs files are optional
    @missing = grep { ! /\.bs$/ } @missing;
    # man files are often compressed
    @missing = grep { ! ( -s "$_.gz" || -s "$_.bz2" ) } @missing;

    if ($#missing >= 0) {
        print "# file",+($#missing == 0) ? '' : 's'," missing from installation:\n";
        print '# ',join(' ',@missing),"\n";
    }
    elsif ($#missing == -1) {
        $installed_there++;
    }
    @missing = ();
}
$label = 'Module files correctly installed';
if (($installed_total == $installed_there) && 
    ($installed_total == $version_check)) {
    print "ok 6 $label\n";
    $pass__total++;
}
else {
    print "not ok 6 $label\n";
    $error_total++;
}
$tests_total++;

# Final report (rather than feed ousrselves to Test::Harness::runtests()
# we simply format some output on our own to keep things simple and
# easier to "fix" - at least for now.

if ($error_total == 0 && $tests_total) {
    print "All tests successful.\n";
} elsif ($tests_total==0){
        die "FAILED--no tests were run for some reason.\n";
} else {
    my $rate = 0.0;
    if ($tests_total > 0) { $rate = sprintf "%.2f", 100.0 * ($pass__total / $tests_total); }
    printf " %d/%d subtests failed, %.2f%% okay.\n",
                              $error_total, $tests_total, $rate;
}

=head1 NAME

perlivp - Perl Installation Verification Procedure

=head1 SYNOPSIS

B<perlivp> [B<-p>] [B<-v>] [B<-h>]

=head1 DESCRIPTION

The B<perlivp> program is set up at Perl source code build time to test the
Perl version it was built under.  It can be used after running:

    make install

(or your platform's equivalent procedure) to verify that B<perl> and its
libraries have been installed correctly.  A correct installation is verified
by output that looks like:

    ok 1
    ok 2

etc.

=head1 OPTIONS

=over 5

=item B<-h> help

Prints out a brief help message.

=item B<-p> print preface

Gives a description of each test prior to performing it.

=item B<-v> verbose

Gives more detailed information about each test, after it has been performed.
Note that any failed tests ought to print out some extra information whether
or not -v is thrown.

=back

=head1 DIAGNOSTICS

=over 4

=item * print "# Perl binary '$perlpath' does not appear executable.\n";

Likely to occur for a perl binary that was not properly installed.
Correct by conducting a proper installation.

=item * print "# Perl version '$]' installed, expected $ivp_VERSION.\n";

Likely to occur for a perl that was not properly installed.
Correct by conducting a proper installation.

=item * print "# Perl \@INC directory '$_' does not appear to exist.\n";

Likely to occur for a perl library tree that was not properly installed.
Correct by conducting a proper installation.

=item * print "# Needed module '$_' does not appear to be properly installed.\n";

One of the two modules that is used by perlivp was not present in the 
installation.  This is a serious error since it adversely affects perlivp's
ability to function.  You may be able to correct this by performing a
proper perl installation.

=item * print "# Required module '$_' does not appear to be properly installed.\n";

An attempt to C<eval "require $module"> failed, even though the list of 
extensions indicated that it should succeed.  Correct by conducting a proper 
installation.

=item * print "# Unnecessary module 'bLuRfle' appears to be installed.\n";

This test not coming out ok could indicate that you have in fact installed 
a bLuRfle.pm module or that the C<eval " require \"$module_name.pm\"; ">
test may give misleading results with your installation of perl.  If yours
is the latter case then please let the author know.

=item * print "# file",+($#missing == 0) ? '' : 's'," missing from installation:\n";

One or more files turned up missing according to a run of 
C<ExtUtils::Installed -E<gt> validate()> over your installation.
Correct by conducting a proper installation.

=back

For further information on how to conduct a proper installation consult the 
INSTALL file that comes with the perl source and the README file for your 
platform.

=head1 AUTHOR

Peter Prymmer

=cut

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!./perl
# $Id: piconv,v 2.8 2016/08/04 03:15:58 dankogai Exp $
#
BEGIN { pop @INC if $INC[-1] eq '.' }
use 5.8.0;
use strict;
use Encode ;
use Encode::Alias;
my %Scheme =  map {$_ => 1} qw(from_to decode_encode perlio);

use File::Basename;
my $name = basename($0);

use Getopt::Long qw(:config no_ignore_case);

my %Opt;

help()
    unless
      GetOptions(\%Opt,
         'from|f=s',
         'to|t=s',
         'list|l',
         'string|s=s',
         'check|C=i',
         'c',
         'perlqq|p',
         'htmlcref',
         'xmlcref',
         'debug|D',
         'scheme|S=s',
         'resolve|r=s',
         'help',
         );

$Opt{help} and help();
$Opt{list} and list_encodings();
my $locale = $ENV{LC_CTYPE} || $ENV{LC_ALL} || $ENV{LANG};
defined $Opt{resolve} and resolve_encoding($Opt{resolve});
$Opt{from} || $Opt{to} || help();
my $from = $Opt{from} || $locale or help("from_encoding unspecified");
my $to   = $Opt{to}   || $locale or help("to_encoding unspecified");
$Opt{string} and Encode::from_to($Opt{string}, $from, $to) and print $Opt{string} and exit;
my $scheme = do {
    if (defined $Opt{scheme}) {
	if (!exists $Scheme{$Opt{scheme}}) {
	    warn "Unknown scheme '$Opt{scheme}', fallback to 'from_to'.\n";
	    'from_to';
	} else {
	    $Opt{scheme};
	}
    } else {
	'from_to';
    }
};

$Opt{check} ||= $Opt{c};
$Opt{perlqq}   and $Opt{check} = Encode::PERLQQ;
$Opt{htmlcref} and $Opt{check} = Encode::HTMLCREF;
$Opt{xmlcref}  and $Opt{check} = Encode::XMLCREF;

my $efrom = Encode->getEncoding($from) || die "Unknown encoding '$from'";
my $eto   = Encode->getEncoding($to)   || die "Unknown encoding '$to'";

my $cfrom = $efrom->name;
my $cto   = $eto->name;

if ($Opt{debug}){
    print <<"EOT";
Scheme: $scheme
From:   $from => $cfrom
To:     $to => $cto
EOT
}

my %use_bom =
  map { $_ => 1 } qw/UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE/;

# we do not use <> (or ARGV) for the sake of binmode()
@ARGV or push @ARGV, \*STDIN;

unless ( $scheme eq 'perlio' ) {
    binmode STDOUT;
    my $need2slurp = $use_bom{ $eto } || $use_bom{ $efrom };
    for my $argv (@ARGV) {
        my $ifh = ref $argv ? $argv : undef;
	$ifh or open $ifh, "<", $argv or warn "Can't open $argv: $!" and next;
        $ifh or open $ifh, "<", $argv or next;
        binmode $ifh;
        if ( $scheme eq 'from_to' ) {    # default
	    if ($need2slurp){
		local $/;
		$_ = <$ifh>;
		Encode::from_to( $_, $from, $to, $Opt{check} );
		print;
	    }else{
		while (<$ifh>) {
		    Encode::from_to( $_, $from, $to, $Opt{check} );
		    print;
		}
	    }
        }
        elsif ( $scheme eq 'decode_encode' ) {    # step-by-step
	    if ($need2slurp){
		local $/;
		$_ = <$ifh>;
                my $decoded = decode( $from, $_, $Opt{check} );
                my $encoded = encode( $to, $decoded );
                print $encoded;
	    }else{
		while (<$ifh>) {
		    my $decoded = decode( $from, $_, $Opt{check} );
		    my $encoded = encode( $to, $decoded );
		    print $encoded;
		}
	    }
	}
	else {                                    # won't reach
            die "$name: unknown scheme: $scheme";
        }
    }
}
else {

    # NI-S favorite
    binmode STDOUT => "raw:encoding($to)";
    for my $argv (@ARGV) {
        my $ifh = ref $argv ? $argv : undef;
	$ifh or open $ifh, "<", $argv or warn "Can't open $argv: $!" and next;
        $ifh or open $ifh, "<", $argv or next;
        binmode $ifh => "raw:encoding($from)";
        print while (<$ifh>);
    }
}

sub list_encodings {
    print join( "\n", Encode->encodings(":all") ), "\n";
    exit 0;
}

sub resolve_encoding {
    if ( my $alias = Encode::resolve_alias( $_[0] ) ) {
        print $alias, "\n";
        exit 0;
    }
    else {
        warn "$name: $_[0] is not known to Encode\n";
        exit 1;
    }
}

sub help {
    my $message = shift;
    $message and print STDERR "$name error: $message\n";
    print STDERR <<"EOT";
$name [-f from_encoding] [-t to_encoding]
      [-p|--perlqq|--htmlcref|--xmlcref] [-C N|-c] [-D] [-S scheme]
      [-s string|file...]
$name -l
$name -r encoding_alias
$name -h
Common options:
  -l,--list
     lists all available encodings
  -r,--resolve encoding_alias
    resolve encoding to its (Encode) canonical name
  -f,--from from_encoding  
     when omitted, the current locale will be used
  -t,--to to_encoding    
     when omitted, the current locale will be used
  -s,--string string         
     "string" will be the input instead of STDIN or files
The following are mainly of interest to Encode hackers:
  -C N | -c           check the validity of the input
  -D,--debug          show debug information
  -S,--scheme scheme  use the scheme for conversion
Those are handy when you can only see ASCII characters:
  -p,--perlqq         transliterate characters missing in encoding to \\x{HHHH}
                      where HHHH is the hexadecimal Unicode code point
  --htmlcref          transliterate characters missing in encoding to &#NNN;
                      where NNN is the decimal Unicode code point
  --xmlcref           transliterate characters missing in encoding to &#xHHHH;
                      where HHHH is the hexadecimal Unicode code point

EOT
    exit;
}

__END__

=head1 NAME

piconv -- iconv(1), reinvented in perl

=head1 SYNOPSIS

  piconv [-f from_encoding] [-t to_encoding]
         [-p|--perlqq|--htmlcref|--xmlcref] [-C N|-c] [-D] [-S scheme]
         [-s string|file...]
  piconv -l
  piconv -r encoding_alias
  piconv -h

=head1 DESCRIPTION

B<piconv> is perl version of B<iconv>, a character encoding converter
widely available for various Unixen today.  This script was primarily
a technology demonstrator for Perl 5.8.0, but you can use piconv in the
place of iconv for virtually any case.

piconv converts the character encoding of either STDIN or files
specified in the argument and prints out to STDOUT.

Here is the list of options.  Some options can be in short format (-f)
or long (--from) one.

=over 4

=item -f,--from I<from_encoding>

Specifies the encoding you are converting from.  Unlike B<iconv>,
this option can be omitted.  In such cases, the current locale is used.

=item -t,--to I<to_encoding>

Specifies the encoding you are converting to.  Unlike B<iconv>,
this option can be omitted.  In such cases, the current locale is used.

Therefore, when both -f and -t are omitted, B<piconv> just acts
like B<cat>.

=item -s,--string I<string>

uses I<string> instead of file for the source of text.

=item -l,--list

Lists all available encodings, one per line, in case-insensitive
order.  Note that only the canonical names are listed; many aliases
exist.  For example, the names are case-insensitive, and many standard
and common aliases work, such as "latin1" for "ISO-8859-1", or "ibm850"
instead of "cp850", or "winlatin1" for "cp1252".  See L<Encode::Supported>
for a full discussion.

=item -r,--resolve I<encoding_alias>

Resolve I<encoding_alias> to Encode canonical encoding name.

=item -C,--check I<N>

Check the validity of the stream if I<N> = 1.  When I<N> = -1, something
interesting happens when it encounters an invalid character.

=item -c

Same as C<-C 1>.

=item -p,--perlqq

Transliterate characters missing in encoding to \x{HHHH} where HHHH is the
hexadecimal Unicode code point.

=item --htmlcref

Transliterate characters missing in encoding to &#NNN; where NNN is the
decimal Unicode code point.

=item --xmlcref

Transliterate characters missing in encoding to &#xHHHH; where HHHH is the
hexadecimal Unicode code point.

=item -h,--help

Show usage.

=item -D,--debug

Invokes debugging mode.  Primarily for Encode hackers.

=item -S,--scheme I<scheme>

Selects which scheme is to be used for conversion.  Available schemes
are as follows:

=over 4

=item from_to

Uses Encode::from_to for conversion.  This is the default.

=item decode_encode

Input strings are decode()d then encode()d.  A straight two-step
implementation.

=item perlio

The new perlIO layer is used.  NI-S' favorite.

You should use this option if you are using UTF-16 and others which
linefeed is not $/.

=back

Like the I<-D> option, this is also for Encode hackers.

=back

=head1 SEE ALSO

L<iconv(1)>
L<locale(3)>
L<Encode>
L<Encode::Supported>
L<Encode::Alias>
L<PerlIO>

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell

=head1 NAME

pl2pm - Rough tool to translate Perl4 .pl files to Perl5 .pm modules.

=head1 SYNOPSIS

B<pl2pm> F<files>

=head1 DESCRIPTION

B<pl2pm> is a tool to aid in the conversion of Perl4-style .pl
library files to Perl5-style library modules.  Usually, your old .pl
file will still work fine and you should only use this tool if you
plan to update your library to use some of the newer Perl 5 features,
such as AutoLoading.

=head1 LIMITATIONS

It's just a first step, but it's usually a good first step.

=head1 AUTHOR

Larry Wall <larry@wall.org>

=cut

use strict;
use warnings;

my %keyword = ();

while (<DATA>) {
    chomp;
    $keyword{$_} = 1;
}

local $/;

while (<>) {
    my $newname = $ARGV;
    $newname =~ s/\.pl$/.pm/ || next;
    $newname =~ s#(.*/)?(\w+)#$1\u$2#;
    if (-f $newname) {
	warn "Won't overwrite existing $newname\n";
	next;
    }
    my $oldpack = $2;
    my $newpack = "\u$2";
    my @export = ();

    s/\bstd(in|out|err)\b/\U$&/g;
    s/(sub\s+)(\w+)(\s*\{[ \t]*\n)\s*package\s+$oldpack\s*;[ \t]*\n+/${1}main'$2$3/ig;
    if (/sub\s+\w+'/) {
	@export = m/sub\s+\w+'(\w+)/g;
	s/(sub\s+)main'(\w+)/$1$2/g;
    }
    else {
	@export = m/sub\s+([A-Za-z]\w*)/g;
    }
    my @export_ok = grep($keyword{$_}, @export);
    @export = grep(!$keyword{$_}, @export);

    my %export = ();
    @export{@export} = (1) x @export;

    s/(^\s*);#/$1#/g;
    s/(#.*)require ['"]$oldpack\.pl['"]/$1use $newpack/;
    s/(package\s*)($oldpack)\s*;[ \t]*\n+//ig;
    s/([\$\@%&*])'(\w+)/&xlate($1,"",$2,$newpack,$oldpack,\%export)/eg;
    s/([\$\@%&*]?)(\w+)'(\w+)/&xlate($1,$2,$3,$newpack,$oldpack,\%export)/eg;
    if (!/\$\[\s*\)?\s*=\s*[^0\s]/) {
	s/^\s*(local\s*\()?\s*\$\[\s*\)?\s*=\s*0\s*;[ \t]*\n//g;
	s/\$\[\s*\+\s*//g;
	s/\s*\+\s*\$\[//g;
	s/\$\[/0/g;
    }
    s/open\s+(\w+)/open($1)/g;
 
    my $export_ok = '';
    my $carp      ='';


    if (s/\bdie\b/croak/g) {
	$carp = "use Carp;\n";
	s/croak "([^"]*)\\n"/croak "$1"/g;
    }

    if (@export_ok) {
	$export_ok = "\@EXPORT_OK = qw(@export_ok);\n";
    }

    if ( open(PM, ">", $newname) ) {
        print PM <<"END";
package $newpack;
use 5.006;
require Exporter;
$carp
\@ISA = qw(Exporter);
\@EXPORT = qw(@export);
$export_ok
$_
END
    }
    else {
      warn "Can't create $newname: $!\n";
    }
}

sub xlate {
    my ($prefix, $pack, $ident,$newpack,$oldpack,$export) = @_;

    my $xlated ;
    if ($prefix eq '' && $ident =~ /^(t|s|m|d|ing|ll|ed|ve|re)$/) {
	$xlated = "${pack}'$ident";
    }
    elsif ($pack eq '' || $pack eq 'main') {
	if ($export->{$ident}) {
	    $xlated = "$prefix$ident";
	}
	else {
	    $xlated = "$prefix${pack}::$ident";
	}
    }
    elsif ($pack eq $oldpack) {
	$xlated = "$prefix${newpack}::$ident";
    }
    else {
	$xlated = "$prefix${pack}::$ident";
    }

    return $xlated;
}
__END__
AUTOLOAD
BEGIN
CHECK
CORE
DESTROY
END
INIT
UNITCHECK
abs
accept
alarm
and
atan2
bind
binmode
bless
caller
chdir
chmod
chomp
chop
chown
chr
chroot
close
closedir
cmp
connect
continue
cos
crypt
dbmclose
dbmopen
defined
delete
die
do
dump
each
else
elsif
endgrent
endhostent
endnetent
endprotoent
endpwent
endservent
eof
eq
eval
exec
exists
exit
exp
fcntl
fileno
flock
for
foreach
fork
format
formline
ge
getc
getgrent
getgrgid
getgrnam
gethostbyaddr
gethostbyname
gethostent
getlogin
getnetbyaddr
getnetbyname
getnetent
getpeername
getpgrp
getppid
getpriority
getprotobyname
getprotobynumber
getprotoent
getpwent
getpwnam
getpwuid
getservbyname
getservbyport
getservent
getsockname
getsockopt
glob
gmtime
goto
grep
gt
hex
if
index
int
ioctl
join
keys
kill
last
lc
lcfirst
le
length
link
listen
local
localtime
lock
log
lstat
lt
m
map
mkdir
msgctl
msgget
msgrcv
msgsnd
my
ne
next
no
not
oct
open
opendir
or
ord
our
pack
package
pipe
pop
pos
print
printf
prototype
push
q
qq
qr
quotemeta
qw
qx
rand
read
readdir
readline
readlink
readpipe
recv
redo
ref
rename
require
reset
return
reverse
rewinddir
rindex
rmdir
s
scalar
seek
seekdir
select
semctl
semget
semop
send
setgrent
sethostent
setnetent
setpgrp
setpriority
setprotoent
setpwent
setservent
setsockopt
shift
shmctl
shmget
shmread
shmwrite
shutdown
sin
sleep
socket
socketpair
sort
splice
split
sprintf
sqrt
srand
stat
study
sub
substr
symlink
syscall
sysopen
sysread
sysseek
system
syswrite
tell
telldir
tie
tied
time
times
tr
truncate
uc
ucfirst
umask
undef
unless
unlink
unpack
unshift
untie
until
use
utime
values
vec
wait
waitpid
wantarray
warn
while
write
x
xor
y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
=pod

=head1 NAME

pod2html - convert .pod files to .html files

=head1 SYNOPSIS

    pod2html --help --htmldir=<name> --htmlroot=<URL>
             --infile=<name> --outfile=<name>
             --podpath=<name>:...:<name> --podroot=<name>
             --cachedir=<name> --flush --recurse --norecurse
             --quiet --noquiet --verbose --noverbose
             --index --noindex --backlink --nobacklink
             --header --noheader --poderrors --nopoderrors
             --css=<URL> --title=<name>

=head1 DESCRIPTION

Converts files from pod format (see L<perlpod>) to HTML format.

=head1 ARGUMENTS

pod2html takes the following arguments:

=over 4

=item help

  --help

Displays the usage message.

=item htmldir

  --htmldir=name

Sets the directory to which all cross references in the resulting HTML file
will be relative. Not passing this causes all links to be absolute since this
is the value that tells Pod::Html the root of the documentation tree.

Do not use this and --htmlroot in the same call to pod2html; they are mutually
exclusive.

=item htmlroot

  --htmlroot=URL

Sets the base URL for the HTML files.  When cross-references are made, the
HTML root is prepended to the URL.

Do not use this if relative links are desired: use --htmldir instead.

Do not pass both this and --htmldir to pod2html; they are mutually exclusive.

=item infile

  --infile=name

Specify the pod file to convert.  Input is taken from STDIN if no
infile is specified.

=item outfile

  --outfile=name

Specify the HTML file to create.  Output goes to STDOUT if no outfile
is specified.

=item podroot

  --podroot=name

Specify the base directory for finding library pods.

=item podpath

  --podpath=name:...:name

Specify which subdirectories of the podroot contain pod files whose
HTML converted forms can be linked-to in cross-references.

=item cachedir

  --cachedir=name

Specify which directory is used for storing cache. Default directory is the
current working directory.

=item flush

  --flush

Flush the cache.

=item backlink

  --backlink

Turn =head1 directives into links pointing to the top of the HTML file.

=item nobacklink

  --nobacklink

Do not turn =head1 directives into links pointing to the top of the HTML file
(default behaviour).

=item header

  --header

Create header and footer blocks containing the text of the "NAME" section.

=item noheader

  --noheader

Do not create header and footer blocks containing the text of the "NAME"
section (default behaviour).

=item poderrors

  --poderrors

Include a "POD ERRORS" section in the outfile if there were any POD errors in
the infile (default behaviour).

=item nopoderrors

  --nopoderrors

Do not include a "POD ERRORS" section in the outfile if there were any POD
errors in the infile.

=item index

  --index

Generate an index at the top of the HTML file (default behaviour).

=item noindex

  --noindex

Do not generate an index at the top of the HTML file.


=item recurse

  --recurse

Recurse into subdirectories specified in podpath (default behaviour).

=item norecurse

  --norecurse

Do not recurse into subdirectories specified in podpath.

=item css

  --css=URL

Specify the URL of cascading style sheet to link from resulting HTML file.
Default is none style sheet.

=item title

  --title=title

Specify the title of the resulting HTML file.

=item quiet

  --quiet

Don't display mostly harmless warning messages.

=item noquiet

  --noquiet

Display mostly harmless warning messages (default behaviour). But this is not
the same as "verbose" mode.

=item verbose

  --verbose

Display progress messages.

=item noverbose

  --noverbose

Do not display progress messages (default behaviour).

=back

=head1 AUTHOR

Tom Christiansen, E<lt>tchrist@perl.comE<gt>.

=head1 BUGS

See L<Pod::Html> for a list of known bugs in the translator.

=head1 SEE ALSO

L<perlpod>, L<Pod::Html>

=head1 COPYRIGHT

This program is distributed under the Artistic License.

=cut

BEGIN { pop @INC if $INC[-1] eq '.' }
use Pod::Html;

pod2html @ARGV;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if $running_under_some_shell;

# Convert POD data to formatted *roff input.
#
# The driver script for Pod::Man.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl

use 5.006;
use strict;
use warnings;

use Getopt::Long qw(GetOptions);
use Pod::Man ();
use Pod::Usage qw(pod2usage);

use strict;

# Clean up $0 for error reporting.
$0 =~ s%.*/%%;

# Insert -- into @ARGV before any single dash argument to hide it from
# Getopt::Long; we want to interpret it as meaning stdin.
my $stdin;
@ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;

# Parse our options, trying to retain backward compatibility with pod2man but
# allowing short forms as well.  --lax is currently ignored.
my %options;
Getopt::Long::config ('bundling_override');
GetOptions (\%options, 'center|c=s', 'date|d=s', 'errors=s', 'fixed=s',
            'fixedbold=s', 'fixeditalic=s', 'fixedbolditalic=s', 'help|h',
            'lax|l', 'lquote=s', 'name|n=s', 'nourls', 'official|o',
            'quotes|q=s', 'release|r=s', 'rquote=s', 'section|s=s', 'stderr',
            'verbose|v', 'utf8|u')
    or exit 1;
pod2usage (0) if $options{help};

# Official sets --center, but don't override things explicitly set.
if ($options{official} && !defined $options{center}) {
    $options{center} = 'Perl Programmers Reference Guide';
}

# Verbose is only our flag, not a Pod::Man flag.
my $verbose = $options{verbose};
delete $options{verbose};

# This isn't a valid Pod::Man option and is only accepted for backward
# compatibility.
delete $options{lax};

# If neither stderr nor errors is set, default to errors = die.
if (!defined $options{stderr} && !defined $options{errors}) {
    $options{errors} = 'die';
}

# Initialize and run the formatter, pulling a pair of input and output off at
# a time.  For each file, we check whether the document was completely empty
# and, if so, will remove the created file and exit with a non-zero exit
# status.
my $parser = Pod::Man->new (%options);
my $status = 0;
my @files;
do {
    @files = splice (@ARGV, 0, 2);
    print "  $files[1]\n" if $verbose;
    $parser->parse_from_file (@files);
    if ($parser->{CONTENTLESS}) {
        $status = 1;
        if (defined $files[0]) {
            warn "$0: unable to format $files[0]\n";
        } else {
            warn "$0: unable to format standard input\n";
        }
        if (defined ($files[1]) and $files[1] ne '-') {
            unlink $files[1] unless (-s $files[1]);
        }
    }
} while (@ARGV);
exit $status;

__END__

=for stopwords
en em --stderr stderr --utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris URL
troff troff-specific formatters uppercased Christiansen --nourls UTC prepend
lquote rquote

=head1 NAME

pod2man - Convert POD data to formatted *roff input

=head1 SYNOPSIS

pod2man [B<--center>=I<string>] [B<--date>=I<string>] [B<--errors>=I<style>]
    [B<--fixed>=I<font>] [B<--fixedbold>=I<font>] [B<--fixeditalic>=I<font>]
    [B<--fixedbolditalic>=I<font>] [B<--name>=I<name>] [B<--nourls>]
    [B<--official>] [B<--release>=I<version>] [B<--section>=I<manext>]
    [B<--quotes>=I<quotes>] [B<--lquote>=I<quote>] [B<--rquote>=I<quote>]
    [B<--stderr>] [B<--utf8>] [B<--verbose>] [I<input> [I<output>] ...]

pod2man B<--help>

=head1 DESCRIPTION

B<pod2man> is a front-end for Pod::Man, using it to generate *roff input
from POD source.  The resulting *roff code is suitable for display on a
terminal using nroff(1), normally via man(1), or printing using troff(1).

I<input> is the file to read for POD source (the POD can be embedded in
code).  If I<input> isn't given, it defaults to C<STDIN>.  I<output>, if
given, is the file to which to write the formatted output.  If I<output>
isn't given, the formatted output is written to C<STDOUT>.  Several POD
files can be processed in the same B<pod2man> invocation (saving module
load and compile times) by providing multiple pairs of I<input> and
I<output> files on the command line.

B<--section>, B<--release>, B<--center>, B<--date>, and B<--official> can
be used to set the headers and footers to use; if not given, Pod::Man will
assume various defaults.  See below or L<Pod::Man> for details.

B<pod2man> assumes that your *roff formatters have a fixed-width font
named C<CW>.  If yours is called something else (like C<CR>), use
B<--fixed> to specify it.  This generally only matters for troff output
for printing.  Similarly, you can set the fonts used for bold, italic, and
bold italic fixed-width output.

Besides the obvious pod conversions, Pod::Man, and therefore pod2man also
takes care of formatting func(), func(n), and simple variable references
like $foo or @bar so you don't have to use code escapes for them; complex
expressions like C<$fred{'stuff'}> will still need to be escaped, though.
It also translates dashes that aren't used as hyphens into en dashes, makes
long dashes--like this--into proper em dashes, fixes "paired quotes," and
takes care of several other troff-specific tweaks.  See L<Pod::Man> for
complete information.

=head1 OPTIONS

=over 4

=item B<-c> I<string>, B<--center>=I<string>

Sets the centered page header for the C<.TH> macro to I<string>.  The
default is "User Contributed Perl Documentation", but also see
B<--official> below.

=item B<-d> I<string>, B<--date>=I<string>

Set the left-hand footer string for the C<.TH> macro to I<string>.  By
default, the modification date of the input file will be used, or the
current date if input comes from C<STDIN>, and will be based on UTC (so
that the output will be reproducible regardless of local time zone).

=item B<--errors>=I<style>

Set the error handling style.  C<die> says to throw an exception on any
POD formatting error.  C<stderr> says to report errors on standard error,
but not to throw an exception.  C<pod> says to include a POD ERRORS
section in the resulting documentation summarizing the errors.  C<none>
ignores POD errors entirely, as much as possible.

The default is C<die>.

=item B<--fixed>=I<font>

The fixed-width font to use for verbatim text and code.  Defaults to
C<CW>.  Some systems may want C<CR> instead.  Only matters for troff(1)
output.

=item B<--fixedbold>=I<font>

Bold version of the fixed-width font.  Defaults to C<CB>.  Only matters
for troff(1) output.

=item B<--fixeditalic>=I<font>

Italic version of the fixed-width font (actually, something of a misnomer,
since most fixed-width fonts only have an oblique version, not an italic
version).  Defaults to C<CI>.  Only matters for troff(1) output.

=item B<--fixedbolditalic>=I<font>

Bold italic (probably actually oblique) version of the fixed-width font.
Pod::Man doesn't assume you have this, and defaults to C<CB>.  Some
systems (such as Solaris) have this font available as C<CX>.  Only matters
for troff(1) output.

=item B<-h>, B<--help>

Print out usage information.

=item B<-l>, B<--lax>

No longer used.  B<pod2man> used to check its input for validity as a
manual page, but this should now be done by L<podchecker(1)> instead.
Accepted for backward compatibility; this option no longer does anything.

=item B<--lquote>=I<quote>

=item B<--rquote>=I<quote>

Sets the quote marks used to surround CE<lt>> text.  B<--lquote> sets the
left quote mark and B<--rquote> sets the right quote mark.  Either may also
be set to the special value C<none>, in which case no quote mark is added
on that side of CE<lt>> text (but the font is still changed for troff
output).

Also see the B<--quotes> option, which can be used to set both quotes at once.
If both B<--quotes> and one of the other options is set, B<--lquote> or
B<--rquote> overrides B<--quotes>.

=item B<-n> I<name>, B<--name>=I<name>

Set the name of the manual page for the C<.TH> macro to I<name>.  Without
this option, the manual name is set to the uppercased base name of the
file being converted unless the manual section is 3, in which case the
path is parsed to see if it is a Perl module path.  If it is, a path like
C<.../lib/Pod/Man.pm> is converted into a name like C<Pod::Man>.  This
option, if given, overrides any automatic determination of the name.

Although one does not have to follow this convention, be aware that the
convention for UNIX man pages for commands is for the man page title to be
in all-uppercase, even if the command isn't.

This option is probably not useful when converting multiple POD files at
once.

When converting POD source from standard input, the name will be set to
C<STDIN> if this option is not provided.  Providing this option is strongly
recommended to set a meaningful manual page name.

=item B<--nourls>

Normally, LZ<><> formatting codes with a URL but anchor text are formatted
to show both the anchor text and the URL.  In other words:

    L<foo|http://example.com/>

is formatted as:

    foo <http://example.com/>

This flag, if given, suppresses the URL when anchor text is given, so this
example would be formatted as just C<foo>.  This can produce less
cluttered output in cases where the URLs are not particularly important.

=item B<-o>, B<--official>

Set the default header to indicate that this page is part of the standard
Perl release, if B<--center> is not also given.

=item B<-q> I<quotes>, B<--quotes>=I<quotes>

Sets the quote marks used to surround CE<lt>> text to I<quotes>.  If
I<quotes> is a single character, it is used as both the left and right
quote.  Otherwise, it is split in half, and the first half of the string
is used as the left quote and the second is used as the right quote.

I<quotes> may also be set to the special value C<none>, in which case no
quote marks are added around CE<lt>> text (but the font is still changed for
troff output).

Also see the B<--lquote> and B<--rquote> options, which can be used to set the
left and right quotes independently.  If both B<--quotes> and one of the other
options is set, B<--lquote> or B<--rquote> overrides B<--quotes>.

=item B<-r> I<version>, B<--release>=I<version>

Set the centered footer for the C<.TH> macro to I<version>.  By default,
this is set to the version of Perl you run B<pod2man> under.  Setting this
to the empty string will cause some *roff implementations to use the
system default value.

Note that some system C<an> macro sets assume that the centered footer
will be a modification date and will prepend something like "Last
modified: ".  If this is the case for your target system, you may want to
set B<--release> to the last modified date and B<--date> to the version
number.

=item B<-s> I<string>, B<--section>=I<string>

Set the section for the C<.TH> macro.  The standard section numbering
convention is to use 1 for user commands, 2 for system calls, 3 for
functions, 4 for devices, 5 for file formats, 6 for games, 7 for
miscellaneous information, and 8 for administrator commands.  There is a lot
of variation here, however; some systems (like Solaris) use 4 for file
formats, 5 for miscellaneous information, and 7 for devices.  Still others
use 1m instead of 8, or some mix of both.  About the only section numbers
that are reliably consistent are 1, 2, and 3.

By default, section 1 will be used unless the file ends in C<.pm>, in
which case section 3 will be selected.

=item B<--stderr>

By default, B<pod2man> dies if any errors are detected in the POD input.
If B<--stderr> is given and no B<--errors> flag is present, errors are
sent to standard error, but B<pod2man> does not abort.  This is equivalent
to C<--errors=stderr> and is supported for backward compatibility.

=item B<-u>, B<--utf8>

By default, B<pod2man> produces the most conservative possible *roff
output to try to ensure that it will work with as many different *roff
implementations as possible.  Many *roff implementations cannot handle
non-ASCII characters, so this means all non-ASCII characters are converted
either to a *roff escape sequence that tries to create a properly accented
character (at least for troff output) or to C<X>.

This option says to instead output literal UTF-8 characters.  If your
*roff implementation can handle it, this is the best output format to use
and avoids corruption of documents containing non-ASCII characters.
However, be warned that *roff source with literal UTF-8 characters is not
supported by many implementations and may even result in segfaults and
other bad behavior.

Be aware that, when using this option, the input encoding of your POD
source should be properly declared unless it's US-ASCII.  Pod::Simple will
attempt to guess the encoding and may be successful if it's Latin-1 or
UTF-8, but it will warn, which by default results in a B<pod2man> failure.
Use the C<=encoding> command to declare the encoding.  See L<perlpod(1)>
for more information.

=item B<-v>, B<--verbose>

Print out the name of each output file as it is being generated.

=back

=head1 EXIT STATUS

As long as all documents processed result in some output, even if that
output includes errata (a C<POD ERRORS> section generated with
C<--errors=pod>), B<pod2man> will exit with status 0.  If any of the
documents being processed do not result in an output document, B<pod2man>
will exit with status 1.  If there are syntax errors in a POD document
being processed and the error handling style is set to the default of
C<die>, B<pod2man> will abort immediately with exit status 255.

=head1 DIAGNOSTICS

If B<pod2man> fails with errors, see L<Pod::Man> and L<Pod::Simple> for
information about what those errors might mean.

=head1 EXAMPLES

    pod2man program > program.1
    pod2man SomeModule.pm /usr/perl/man/man3/SomeModule.3
    pod2man --section=7 note.pod > note.7

If you would like to print out a lot of man page continuously, you probably
want to set the C and D registers to set contiguous page numbering and
even/odd paging, at least on some versions of man(7).

    troff -man -rC1 -rD1 perl.1 perldata.1 perlsyn.1 ...

To get index entries on C<STDERR>, turn on the F register, as in:

    troff -man -rF1 perl.1

The indexing merely outputs messages via C<.tm> for each major page,
section, subsection, item, and any C<XE<lt>E<gt>> directives.  See
L<Pod::Man> for more details.

=head1 BUGS

Lots of this documentation is duplicated from L<Pod::Man>.

=head1 AUTHOR

Russ Allbery <rra@cpan.org>, based I<very> heavily on the original
B<pod2man> by Larry Wall and Tom Christiansen.

=head1 COPYRIGHT AND LICENSE

Copyright 1999-2001, 2004, 2006, 2008, 2010, 2012-2019 Russ Allbery
<rra@cpan.org>

This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.

=head1 SEE ALSO

L<Pod::Man>, L<Pod::Simple>, L<man(1)>, L<nroff(1)>, L<perlpod(1)>,
L<podchecker(1)>, L<perlpodstyle(1)>, L<troff(1)>, L<man(7)>

The man page documenting the an macro set may be L<man(5)> instead of
L<man(7)> on your system.

The current version of this script is always available from its web site at
L<https://www.eyrie.org/~eagle/software/podlators/>.  It is also part of the
Perl core distribution as of 5.6.0.

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if $running_under_some_shell;

# Convert POD data to formatted ASCII text.
#
# The driver script for Pod::Text, Pod::Text::Termcap, and Pod::Text::Color,
# invoked by perldoc -t among other things.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl

use 5.006;
use strict;
use warnings;

use Getopt::Long qw(GetOptions);
use Pod::Text ();
use Pod::Usage qw(pod2usage);

# Clean up $0 for error reporting.
$0 =~ s%.*/%%;

# Take an initial pass through our options, looking for one of the form
# -<number>.  We turn that into -w <number> for compatibility with the
# original pod2text script.
for (my $i = 0; $i < @ARGV; $i++) {
    last if $ARGV[$i] =~ /^--$/;
    if ($ARGV[$i] =~ /^-(\d+)$/) {
        splice (@ARGV, $i++, 1, '-w', $1);
    }
}

# Insert -- into @ARGV before any single dash argument to hide it from
# Getopt::Long; we want to interpret it as meaning stdin (which Pod::Simple
# does correctly).
my $stdin;
@ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;

# Parse our options.  Use the same names as Pod::Text for simplicity.
my %options;
Getopt::Long::config ('bundling');
GetOptions (\%options, 'alt|a', 'code', 'color|c', 'errors=s', 'help|h',
            'indent|i=i', 'loose|l', 'margin|left-margin|m=i', 'nourls',
            'overstrike|o', 'quotes|q=s', 'sentence|s', 'stderr', 'termcap|t',
            'utf8|u', 'width|w=i')
    or exit 1;
pod2usage (1) if $options{help};

# Figure out what formatter we're going to use.  -c overrides -t.
my $formatter = 'Pod::Text';
if ($options{color}) {
    $formatter = 'Pod::Text::Color';
    eval { require Term::ANSIColor };
    if ($@) { die "-c (--color) requires Term::ANSIColor be installed\n" }
    require Pod::Text::Color;
} elsif ($options{termcap}) {
    $formatter = 'Pod::Text::Termcap';
    require Pod::Text::Termcap;
} elsif ($options{overstrike}) {
    $formatter = 'Pod::Text::Overstrike';
    require Pod::Text::Overstrike;
}
delete @options{'color', 'termcap', 'overstrike'};

# If neither stderr nor errors is set, default to errors = die.
if (!defined $options{stderr} && !defined $options{errors}) {
    $options{errors} = 'die';
}

# Initialize and run the formatter.
my $parser = $formatter->new (%options);
my $status = 0;
do {
    my ($input, $output) = splice (@ARGV, 0, 2);
    $parser->parse_from_file ($input, $output);
    if ($parser->{CONTENTLESS}) {
        $status = 1;
        if (defined $input) {
            warn "$0: unable to format $input\n";
        } else {
            warn "$0: unable to format standard input\n";
        }
        if (defined ($output) and $output ne '-') {
            unlink $output unless (-s $output);
        }
    }
} while (@ARGV);
exit $status;

__END__

=for stopwords
-aclostu --alt --stderr Allbery --overstrike overstrike --termcap --utf8
UTF-8 subclasses --nourls

=head1 NAME

pod2text - Convert POD data to formatted ASCII text

=head1 SYNOPSIS

pod2text [B<-aclostu>] [B<--code>] [B<--errors>=I<style>] [B<-i> I<indent>]
    S<[B<-q> I<quotes>]> [B<--nourls>] [B<--stderr>] S<[B<-w> I<width>]>
    [I<input> [I<output> ...]]

pod2text B<-h>

=head1 DESCRIPTION

B<pod2text> is a front-end for Pod::Text and its subclasses.  It uses them
to generate formatted ASCII text from POD source.  It can optionally use
either termcap sequences or ANSI color escape sequences to format the text.

I<input> is the file to read for POD source (the POD can be embedded in
code).  If I<input> isn't given, it defaults to C<STDIN>.  I<output>, if
given, is the file to which to write the formatted output.  If I<output>
isn't given, the formatted output is written to C<STDOUT>.  Several POD
files can be processed in the same B<pod2text> invocation (saving module
load and compile times) by providing multiple pairs of I<input> and
I<output> files on the command line.

=head1 OPTIONS

=over 4

=item B<-a>, B<--alt>

Use an alternate output format that, among other things, uses a different
heading style and marks C<=item> entries with a colon in the left margin.

=item B<--code>

Include any non-POD text from the input file in the output as well.  Useful
for viewing code documented with POD blocks with the POD rendered and the
code left intact.

=item B<-c>, B<--color>

Format the output with ANSI color escape sequences.  Using this option
requires that Term::ANSIColor be installed on your system.

=item B<--errors>=I<style>

Set the error handling style.  C<die> says to throw an exception on any
POD formatting error.  C<stderr> says to report errors on standard error,
but not to throw an exception.  C<pod> says to include a POD ERRORS
section in the resulting documentation summarizing the errors.  C<none>
ignores POD errors entirely, as much as possible.

The default is C<die>.

=item B<-i> I<indent>, B<--indent=>I<indent>

Set the number of spaces to indent regular text, and the default indentation
for C<=over> blocks.  Defaults to 4 spaces if this option isn't given.

=item B<-h>, B<--help>

Print out usage information and exit.

=item B<-l>, B<--loose>

Print a blank line after a C<=head1> heading.  Normally, no blank line is
printed after C<=head1>, although one is still printed after C<=head2>,
because this is the expected formatting for manual pages; if you're
formatting arbitrary text documents, using this option is recommended.

=item B<-m> I<width>, B<--left-margin>=I<width>, B<--margin>=I<width>

The width of the left margin in spaces.  Defaults to 0.  This is the margin
for all text, including headings, not the amount by which regular text is
indented; for the latter, see B<-i> option.

=item B<--nourls>

Normally, LZ<><> formatting codes with a URL but anchor text are formatted
to show both the anchor text and the URL.  In other words:

    L<foo|http://example.com/>

is formatted as:

    foo <http://example.com/>

This flag, if given, suppresses the URL when anchor text is given, so this
example would be formatted as just C<foo>.  This can produce less
cluttered output in cases where the URLs are not particularly important.

=item B<-o>, B<--overstrike>

Format the output with overstrike printing.  Bold text is rendered as
character, backspace, character.  Italics and file names are rendered as
underscore, backspace, character.  Many pagers, such as B<less>, know how
to convert this to bold or underlined text.

=item B<-q> I<quotes>, B<--quotes>=I<quotes>

Sets the quote marks used to surround CE<lt>> text to I<quotes>.  If
I<quotes> is a single character, it is used as both the left and right
quote.  Otherwise, it is split in half, and the first half of the string
is used as the left quote and the second is used as the right quote.

I<quotes> may also be set to the special value C<none>, in which case no
quote marks are added around CE<lt>> text.

=item B<-s>, B<--sentence>

Assume each sentence ends with two spaces and try to preserve that spacing.
Without this option, all consecutive whitespace in non-verbatim paragraphs
is compressed into a single space.

=item B<--stderr>

By default, B<pod2text> dies if any errors are detected in the POD input.
If B<--stderr> is given and no B<--errors> flag is present, errors are
sent to standard error, but B<pod2text> does not abort.  This is
equivalent to C<--errors=stderr> and is supported for backward
compatibility.

=item B<-t>, B<--termcap>

Try to determine the width of the screen and the bold and underline
sequences for the terminal from termcap, and use that information in
formatting the output.  Output will be wrapped at two columns less than the
width of your terminal device.  Using this option requires that your system
have a termcap file somewhere where Term::Cap can find it and requires that
your system support termios.  With this option, the output of B<pod2text>
will contain terminal control sequences for your current terminal type.

=item B<-u>, B<--utf8>

By default, B<pod2text> tries to use the same output encoding as its input
encoding (to be backward-compatible with older versions).  This option
says to instead force the output encoding to UTF-8.

Be aware that, when using this option, the input encoding of your POD
source should be properly declared unless it's US-ASCII.  Pod::Simple
will attempt to guess the encoding and may be successful if it's
Latin-1 or UTF-8, but it will warn, which by default results in a
B<pod2text> failure.  Use the C<=encoding> command to declare the
encoding.  See L<perlpod(1)> for more information.

=item B<-w>, B<--width=>I<width>, B<->I<width>

The column at which to wrap text on the right-hand side.  Defaults to 76,
unless B<-t> is given, in which case it's two columns less than the width of
your terminal device.

=back

=head1 EXIT STATUS

As long as all documents processed result in some output, even if that
output includes errata (a C<POD ERRORS> section generated with
C<--errors=pod>), B<pod2text> will exit with status 0.  If any of the
documents being processed do not result in an output document, B<pod2text>
will exit with status 1.  If there are syntax errors in a POD document
being processed and the error handling style is set to the default of
C<die>, B<pod2text> will abort immediately with exit status 255.

=head1 DIAGNOSTICS

If B<pod2text> fails with errors, see L<Pod::Text> and L<Pod::Simple> for
information about what those errors might mean.  Internally, it can also
produce the following diagnostics:

=over 4

=item -c (--color) requires Term::ANSIColor be installed

(F) B<-c> or B<--color> were given, but Term::ANSIColor could not be
loaded.

=item Unknown option: %s

(F) An unknown command line option was given.

=back

In addition, other L<Getopt::Long> error messages may result from invalid
command-line options.

=head1 ENVIRONMENT

=over 4

=item COLUMNS

If B<-t> is given, B<pod2text> will take the current width of your screen
from this environment variable, if available.  It overrides terminal width
information in TERMCAP.

=item TERMCAP

If B<-t> is given, B<pod2text> will use the contents of this environment
variable if available to determine the correct formatting sequences for your
current terminal device.

=back

=head1 AUTHOR

Russ Allbery <rra@cpan.org>.

=head1 COPYRIGHT AND LICENSE

Copyright 1999-2001, 2004, 2006, 2008, 2010, 2012-2019 Russ Allbery
<rra@cpan.org>

This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.

=head1 SEE ALSO

L<Pod::Text>, L<Pod::Text::Color>, L<Pod::Text::Overstrike>,
L<Pod::Text::Termcap>, L<Pod::Simple>, L<perlpod(1)>

The current version of this script is always available from its web site at
L<https://www.eyrie.org/~eagle/software/podlators/>.  It is also part of the
Perl core distribution as of 5.6.0.

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #!/usr/bin/perl
    eval 'exec perl -S $0 "$@"'
        if 0;

#############################################################################
# pod2usage -- command to print usage messages from embedded pod docs
#
# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
# Copyright (c) 2001-2016 by Marek Rouchal.
# This file is part of "Pod-Usage". Pod-Usage is free software;
# you can redistribute it and/or modify it under the same terms
# as Perl itself.
#############################################################################

use strict;
#use diagnostics;

=head1 NAME

pod2usage - print usage messages from embedded pod docs in files

=head1 SYNOPSIS

=over 12

=item B<pod2usage>

[B<-help>]
[B<-man>]
[B<-exit>S< >I<exitval>]
[B<-output>S< >I<outfile>]
[B<-verbose> I<level>]
[B<-pathlist> I<dirlist>]
[B<-formatter> I<module>]
[B<-utf8>]
I<file>

=back

=head1 OPTIONS AND ARGUMENTS

=over 8

=item B<-help>

Print a brief help message and exit.

=item B<-man>

Print this command's manual page and exit.

=item B<-exit> I<exitval>

The exit status value to return.

=item B<-output> I<outfile>

The output file to print to. If the special names "-" or ">&1" or ">&STDOUT"
are used then standard output is used. If ">&2" or ">&STDERR" is used then
standard error is used.

=item B<-verbose> I<level>

The desired level of verbosity to use:

    1 : print SYNOPSIS only
    2 : print SYNOPSIS sections and any OPTIONS/ARGUMENTS sections
    3 : print the entire manpage (similar to running pod2text)

=item B<-pathlist> I<dirlist>

Specifies one or more directories to search for the input file if it
was not supplied with an absolute path. Each directory path in the given
list should be separated by a ':' on Unix (';' on MSWin32 and DOS).

=item B<-formatter> I<module>

Which text formatter to use. Default is L<Pod::Text>, or for very old
Perl versions L<Pod::PlainText>. An alternative would be e.g. 
L<Pod::Text::Termcap>.

=item B<-utf8>

This option assumes that the formatter (see above) understands the option
"utf8". It turns on generation of utf8 output.

=item I<file>

The pathname of a file containing pod documentation to be output in
usage message format. If omitted, standard input is read - but the
output is then formatted with L<Pod::Text> only - unless a specific
formatter has been specified with B<-formatter>.

=back

=head1 DESCRIPTION

B<pod2usage> will read the given input file looking for pod
documentation and will print the corresponding usage message.
If no input file is specified then standard input is read.

B<pod2usage> invokes the B<pod2usage()> function in the B<Pod::Usage>
module. Please see L<Pod::Usage/pod2usage()>.

=head1 SEE ALSO

L<Pod::Usage>, L<pod2text>, L<Pod::Text>, L<Pod::Text::Termcap>,
L<perldoc>

=head1 AUTHOR

Please report bugs using L<http://rt.cpan.org>.

Brad Appleton E<lt>bradapp@enteract.comE<gt>

Based on code for B<pod2text(1)> written by
Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>

=cut

use Getopt::Long;

## Define options
my %options = ();
my @opt_specs = (
    'help',
    'man',
    'exit=i',
    'output=s',
    'pathlist=s',
    'formatter=s',
    'verbose=i',
    'utf8!'
);

## Parse options
GetOptions(\%options, @opt_specs)  ||  pod2usage(2);
$Pod::Usage::Formatter = $options{formatter} if $options{formatter};
require Pod::Usage;
Pod::Usage->import();
pod2usage(1)  if ($options{help});
pod2usage(VERBOSE => 2)  if ($options{man});

## Dont default to STDIN if connected to a terminal
pod2usage(2) if ((@ARGV == 0) && (-t STDIN));

if (@ARGV > 1) {
    print STDERR "pod2usage: Too many filenames given\n\n";
    pod2usage(2);
}

my %usage = ();
$usage{-input}    = shift(@ARGV) || \*STDIN;
$usage{-exitval}  = $options{'exit'}      if (defined $options{'exit'});
$usage{-output}   = $options{'output'}    if (defined $options{'output'});
$usage{-verbose}  = $options{'verbose'}   if (defined $options{'verbose'});
$usage{-pathlist} = $options{'pathlist'}  if (defined $options{'pathlist'});
$usage{-utf8}     = $options{'utf8'}      if (defined $options{'utf8'});

pod2usage(\%usage);


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!/usr/bin/perl -w

BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
use warnings;
use App::Prove;

my $app = App::Prove->new;
$app->process_args(@ARGV);
exit( $app->run ? 0 : 1 );

__END__

=head1 NAME

prove - Run tests through a TAP harness.

=head1 USAGE

 prove [options] [files or directories]

=head1 OPTIONS

Boolean options:

 -v,  --verbose         Print all test lines.
 -l,  --lib             Add 'lib' to the path for your tests (-Ilib).
 -b,  --blib            Add 'blib/lib' and 'blib/arch' to the path for
                        your tests
 -s,  --shuffle         Run the tests in random order.
 -c,  --color           Colored test output (default).
      --nocolor         Do not color test output.
      --count           Show the X/Y test count when not verbose
                        (default)
      --nocount         Disable the X/Y test count.
 -D   --dry             Dry run. Show test that would have run.
 -f,  --failures        Show failed tests.
 -o,  --comments        Show comments.
      --ignore-exit     Ignore exit status from test scripts.
 -m,  --merge           Merge test scripts' STDERR with their STDOUT.
 -r,  --recurse         Recursively descend into directories.
      --reverse         Run the tests in reverse order.
 -q,  --quiet           Suppress some test output while running tests.
 -Q,  --QUIET           Only print summary results.
 -p,  --parse           Show full list of TAP parse errors, if any.
      --directives      Only show results with TODO or SKIP directives.
      --timer           Print elapsed time after each test.
      --trap            Trap Ctrl-C and print summary on interrupt.
      --normalize       Normalize TAP output in verbose output
 -T                     Enable tainting checks.
 -t                     Enable tainting warnings.
 -W                     Enable fatal warnings.
 -w                     Enable warnings.
 -h,  --help            Display this help
 -?,                    Display this help
 -V,  --version         Display the version
 -H,  --man             Longer manpage for prove
      --norc            Don't process default .proverc

Options that take arguments:

 -I                     Library paths to include.
 -P                     Load plugin (searches App::Prove::Plugin::*.)
 -M                     Load a module.
 -e,  --exec            Interpreter to run the tests ('' for compiled
                        tests.)
      --ext             Set the extension for tests (default '.t')
      --harness         Define test harness to use.  See TAP::Harness.
      --formatter       Result formatter to use. See FORMATTERS.
      --source          Load and/or configure a SourceHandler. See
                        SOURCE HANDLERS.
 -a,  --archive out.tgz Store the resulting TAP in an archive file.
 -j,  --jobs N          Run N test jobs in parallel (try 9.)
      --state=opts      Control prove's persistent state.
      --statefile=file  Use `file` instead of `.prove` for state
      --rc=rcfile       Process options from rcfile
      --rules           Rules for parallel vs sequential processing.

=head1 NOTES

=head2 .proverc

If F<~/.proverc> or F<./.proverc> exist they will be read and any
options they contain processed before the command line options. Options
in F<.proverc> are specified in the same way as command line options:

    # .proverc
    --state=hot,fast,save
    -j9

Additional option files may be specified with the C<--rc> option.
Default option file processing is disabled by the C<--norc> option.

Under Windows and VMS the option file is named F<_proverc> rather than
F<.proverc> and is sought only in the current directory.

=head2 Reading from C<STDIN>

If you have a list of tests (or URLs, or anything else you want to test) in a
file, you can add them to your tests by using a '-':

 prove - < my_list_of_things_to_test.txt

See the C<README> in the C<examples> directory of this distribution.

=head2 Default Test Directory

If no files or directories are supplied, C<prove> looks for all files
matching the pattern C<t/*.t>.

=head2 Colored Test Output

Colored test output using L<TAP::Formatter::Color> is the default, but
if output is not to a terminal, color is disabled. You can override this by
adding the C<--color> switch.

Color support requires L<Term::ANSIColor> and, on windows platforms, also
L<Win32::Console::ANSI>. If the necessary module(s) are not installed
colored output will not be available.

=head2 Exit Code

If the tests fail C<prove> will exit with non-zero status.

=head2 Arguments to Tests

It is possible to supply arguments to tests. To do so separate them from
prove's own arguments with the arisdottle, '::'. For example

 prove -v t/mytest.t :: --url http://example.com

would run F<t/mytest.t> with the options '--url http://example.com'.
When running multiple tests they will each receive the same arguments.

=head2 C<--exec>

Normally you can just pass a list of Perl tests and the harness will know how
to execute them.  However, if your tests are not written in Perl or if you
want all tests invoked exactly the same way, use the C<-e>, or C<--exec>
switch:

 prove --exec '/usr/bin/ruby -w' t/
 prove --exec '/usr/bin/perl -Tw -mstrict -Ilib' t/
 prove --exec '/path/to/my/customer/exec'

=head2 C<--merge>

If you need to make sure your diagnostics are displayed in the correct
order relative to test results you can use the C<--merge> option to
merge the test scripts' STDERR into their STDOUT.

This guarantees that STDOUT (where the test results appear) and STDERR
(where the diagnostics appear) will stay in sync. The harness will
display any diagnostics your tests emit on STDERR.

Caveat: this is a bit of a kludge. In particular note that if anything
that appears on STDERR looks like a test result the test harness will
get confused. Use this option only if you understand the consequences
and can live with the risk.

=head2 C<--trap>

The C<--trap> option will attempt to trap SIGINT (Ctrl-C) during a test
run and display the test summary even if the run is interrupted

=head2 C<--state>

You can ask C<prove> to remember the state of previous test runs and
select and/or order the tests to be run based on that saved state.

The C<--state> switch requires an argument which must be a comma
separated list of one or more of the following options.

=over

=item C<last>

Run the same tests as the last time the state was saved. This makes it
possible, for example, to recreate the ordering of a shuffled test.

    # Run all tests in random order
    $ prove -b --state=save --shuffle

    # Run them again in the same order
    $ prove -b --state=last

=item C<failed>

Run only the tests that failed on the last run.

    # Run all tests
    $ prove -b --state=save

    # Run failures
    $ prove -b --state=failed

If you also specify the C<save> option newly passing tests will be
excluded from subsequent runs.

    # Repeat until no more failures
    $ prove -b --state=failed,save

=item C<passed>

Run only the passed tests from last time. Useful to make sure that no
new problems have been introduced.

=item C<all>

Run all tests in normal order. Multiple options may be specified, so to
run all tests with the failures from last time first:

    $ prove -b --state=failed,all,save

=item C<hot>

Run the tests that most recently failed first. The last failure time of
each test is stored. The C<hot> option causes tests to be run in most-recent-
failure order.

    $ prove -b --state=hot,save

Tests that have never failed will not be selected. To run all tests with
the most recently failed first use

    $ prove -b --state=hot,all,save

This combination of options may also be specified thus

    $ prove -b --state=adrian

=item C<todo>

Run any tests with todos.

=item C<slow>

Run the tests in slowest to fastest order. This is useful in conjunction
with the C<-j> parallel testing switch to ensure that your slowest tests
start running first.

    $ prove -b --state=slow -j9

=item C<fast>

Run test tests in fastest to slowest order.

=item C<new>

Run the tests in newest to oldest order based on the modification times
of the test scripts.

=item C<old>

Run the tests in oldest to newest order.

=item C<fresh>

Run those test scripts that have been modified since the last test run.

=item C<save>

Save the state on exit. The state is stored in a file called F<.prove>
(F<_prove> on Windows and VMS) in the current directory.

=back

The C<--state> switch may be used more than once.

    $ prove -b --state=hot --state=all,save

=head2 --rules

The C<--rules> option is used to control which tests are run sequentially and
which are run in parallel, if the C<--jobs> option is specified. The option may
be specified multiple times, and the order matters.

The most practical use is likely to specify that some tests are not
"parallel-ready".  Since mentioning a file with --rules doesn't cause it to
be selected to run as a test, you can "set and forget" some rules preferences in
your .proverc file. Then you'll be able to take maximum advantage of the
performance benefits of parallel testing, while some exceptions are still run
in parallel.

=head3 --rules examples

    # All tests are allowed to run in parallel, except those starting with "p"
    --rules='seq=t/p*.t' --rules='par=**'

    # All tests must run in sequence except those starting with "p", which should be run parallel
    --rules='par=t/p*.t'

=head3 --rules resolution

=over 4

=item * By default, all tests are eligible to be run in parallel. Specifying any of your own rules removes this one.

=item * "First match wins". The first rule that matches a test will be the one that applies.

=item * Any test which does not match a rule will be run in sequence at the end of the run.

=item * The existence of a rule does not imply selecting a test. You must still specify the tests to run.

=item * Specifying a rule to allow tests to run in parallel does not make them run in parallel. You still need specify the number of parallel C<jobs> in your Harness object.

=back

=head3 --rules Glob-style pattern matching

We implement our own glob-style pattern matching for --rules. Here are the
supported patterns:

    ** is any number of characters, including /, within a pathname
    * is zero or more characters within a filename/directory name
    ? is exactly one character within a filename/directory name
    {foo,bar,baz} is any of foo, bar or baz.
    \ is an escape character

=head3 More advanced specifications for parallel vs sequence run rules

If you need more advanced management of what runs in parallel vs in sequence, see
the associated 'rules' documentation in L<TAP::Harness> and L<TAP::Parser::Scheduler>.
If what's possible directly through C<prove> is not sufficient, you can write your own
harness to access these features directly.

=head2 @INC

prove introduces a separation between "options passed to the perl which
runs prove" and "options passed to the perl which runs tests"; this
distinction is by design. Thus the perl which is running a test starts
with the default C<@INC>. Additional library directories can be added
via the C<PERL5LIB> environment variable, via -Ifoo in C<PERL5OPT> or
via the C<-Ilib> option to F<prove>.

=head2 Taint Mode

Normally when a Perl program is run in taint mode the contents of the
C<PERL5LIB> environment variable do not appear in C<@INC>.

Because C<PERL5LIB> is often used during testing to add build
directories to C<@INC> prove passes the names of any directories found
in C<PERL5LIB> as -I switches. The net effect of this is that
C<PERL5LIB> is honoured even when prove is run in taint mode.


=head1 FORMATTERS

You can load a custom L<TAP::Parser::Formatter>:

  prove --formatter MyFormatter

=head1 SOURCE HANDLERS

You can load custom L<TAP::Parser::SourceHandler>s, to change the way the
parser interprets particular I<sources> of TAP.

  prove --source MyHandler --source YetAnother t

If you want to provide config to the source you can use:

  prove --source MyCustom \
        --source Perl --perl-option 'foo=bar baz' --perl-option avg=0.278 \
        --source File --file-option extensions=.txt --file-option extensions=.tmp t
        --source pgTAP --pgtap-option pset=format=html --pgtap-option pset=border=2

Each C<--$source-option> option must specify a key/value pair separated by an
C<=>. If an option can take multiple values, just specify it multiple times,
as with the C<extensions=> examples above. If the option should be a hash
reference, specify the value as a second pair separated by a C<=>, as in the
C<pset=> examples above (escape C<=> with a backslash).

All C<--sources> are combined into a hash, and passed to L<TAP::Harness/new>'s
C<sources> parameter.

See L<TAP::Parser::IteratorFactory> for more details on how configuration is
passed to I<SourceHandlers>.

=head1 PLUGINS

Plugins can be loaded using the C<< -PI<plugin> >> syntax, eg:

  prove -PMyPlugin

This will search for a module named C<App::Prove::Plugin::MyPlugin>, or failing
that, C<MyPlugin>.  If the plugin can't be found, C<prove> will complain & exit.

You can pass arguments to your plugin by appending C<=arg1,arg2,etc> to the
plugin name:

  prove -PMyPlugin=fou,du,fafa

Please check individual plugin documentation for more details.

=head2 Available Plugins

For an up-to-date list of plugins available, please check CPAN:

L<http://search.cpan.org/search?query=App%3A%3AProve+Plugin>

=head2 Writing Plugins

Please see L<App::Prove/PLUGINS>.

=cut

# vim:ts=4:sw=4:et:sta
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!/usr/bin/perl
use strict;
use warnings;

BEGIN { pop @INC if $INC[-1] eq '.' }
use File::Find;
use Getopt::Std;
use Archive::Tar;
use Data::Dumper;

# Allow historic support for dashless bundled options
#  tar cvf file.tar
# is valid (GNU) tar style
@ARGV && $ARGV[0] =~ m/^[DdcvzthxIC]+[fT]?$/ and
    unshift @ARGV, map { "-$_" } split m// => shift @ARGV;
my $opts = {};
getopts('Ddcvzthxf:ICT:', $opts) or die usage();

### show the help message ###
die usage() if $opts->{h};

### enable debugging (undocumented feature)
local $Archive::Tar::DEBUG                  = 1 if $opts->{d};

### enable insecure extracting.
local $Archive::Tar::INSECURE_EXTRACT_MODE  = 1 if $opts->{I};

### sanity checks ###
unless ( 1 == grep { defined $opts->{$_} } qw[x t c] ) {
    die "You need exactly one of 'x', 't' or 'c' options: " . usage();
}

my $compress    = $opts->{z} ? 1 : 0;
my $verbose     = $opts->{v} ? 1 : 0;
my $file        = $opts->{f} ? $opts->{f} : 'default.tar';
my $tar         = Archive::Tar->new();

if( $opts->{c} ) {
    my @files;
    my @src = @ARGV;
    if( $opts->{T} ) {
      if( $opts->{T} eq "-" ) {
        chomp( @src = <STDIN> );
	} elsif( open my $fh, "<", $opts->{T} ) {
	    chomp( @src = <$fh> );
	} else {
	    die "$0: $opts->{T}: $!\n";
	}
    }

    find( sub { push @files, $File::Find::name;
                print $File::Find::name.$/ if $verbose }, @src );

    if ($file eq '-') {
        use IO::Handle;
        $file = IO::Handle->new();
        $file->fdopen(fileno(STDOUT),"w");
    }

    my $tar = Archive::Tar->new;
    $tar->add_files(@files);
    if( $opts->{C} ) {
        for my $f ($tar->get_files) {
            $f->mode($f->mode & ~022); # chmod go-w
        }
    }
    $tar->write($file, $compress);
} else {
    if ($file eq '-') {
        use IO::Handle;
        $file = IO::Handle->new();
        $file->fdopen(fileno(STDIN),"r");
    }

    ### print the files we're finding?
    my $print = $verbose || $opts->{'t'} || 0;

    my $iter = Archive::Tar->iter( $file );

    while( my $f = $iter->() ) {
        print $f->full_path . $/ if $print;

        ### data dumper output
        print Dumper( $f ) if $opts->{'D'};

        ### extract it
        $f->extract if $opts->{'x'};
    }
}

### pod & usage in one
sub usage {
    my $usage .= << '=cut';
=pod

=head1 NAME

ptar - a tar-like program written in perl

=head1 DESCRIPTION

ptar is a small, tar look-alike program that uses the perl module
Archive::Tar to extract, create and list tar archives.

=head1 SYNOPSIS

    ptar -c [-v] [-z] [-C] [-f ARCHIVE_FILE | -] FILE FILE ...
    ptar -c [-v] [-z] [-C] [-T index | -] [-f ARCHIVE_FILE | -]
    ptar -x [-v] [-z] [-f ARCHIVE_FILE | -]
    ptar -t [-z] [-f ARCHIVE_FILE | -]
    ptar -h

=head1 OPTIONS

    c   Create ARCHIVE_FILE or STDOUT (-) from FILE
    x   Extract from ARCHIVE_FILE or STDIN (-)
    t   List the contents of ARCHIVE_FILE or STDIN (-)
    f   Name of the ARCHIVE_FILE to use. Default is './default.tar'
    z   Read/Write zlib compressed ARCHIVE_FILE (not always available)
    v   Print filenames as they are added or extracted from ARCHIVE_FILE
    h   Prints this help message
    C   CPAN mode - drop 022 from permissions
    T   get names to create from file

=head1 SEE ALSO

L<tar(1)>, L<Archive::Tar>.

=cut

    ### strip the pod directives
    $usage =~ s/=pod\n//g;
    $usage =~ s/=head1 //g;

    ### add some newlines
    $usage .= $/.$/;

    return $usage;
}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!/usr/bin/perl

BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
use warnings;
use Archive::Tar;
use Getopt::Std;

my $opts = {};
getopts('h:', $opts) or die usage();

die usages() if $opts->{h};

### need Text::Diff -- give a polite error (not a standard prereq)
unless ( eval { require Text::Diff; Text::Diff->import; 1 } ) {
    die "\n\t This tool requires the 'Text::Diff' module to be installed\n";
}

my $arch = shift                        or die usage();
my $tar  = Archive::Tar->new( $arch )   or die "Couldn't read '$arch': $!";


foreach my $file ( $tar->get_files ) {
    next unless $file->is_file;
    my $prefix = $file->prefix;
    my $name = $file->name;
    if (defined $prefix) {
        $name = File::Spec->catfile($prefix, $name);
    }

    diff(   \($file->get_content), $name,
            {   FILENAME_A  => $name,
                MTIME_A     => $file->mtime,
                OUTPUT      => \*STDOUT
            }
    );
}




sub usage {
    return q[

Usage:  ptardiff ARCHIVE_FILE
        ptardiff -h

    ptardiff is a small program that diffs an extracted archive
    against an unextracted one, using the perl module Archive::Tar.

    This effectively lets you view changes made to an archives contents.

    Provide the progam with an ARCHIVE_FILE and it will look up all
    the files with in the archive, scan the current working directory
    for a file with the name and diff it against the contents of the
    archive.


Options:
    h   Prints this help message


Sample Usage:

    $ tar -xzf Acme-Buffy-1.3.tar.gz
    $ vi Acme-Buffy-1.3/README

    [...]

    $ ptardiff Acme-Buffy-1.3.tar.gz > README.patch


See Also:
    tar(1)
    ptar
    Archive::Tar

    ] . $/;
}



=head1 NAME

ptardiff - program that diffs an extracted archive against an unextracted one

=head1 DESCRIPTION

    ptardiff is a small program that diffs an extracted archive
    against an unextracted one, using the perl module Archive::Tar.

    This effectively lets you view changes made to an archives contents.

    Provide the progam with an ARCHIVE_FILE and it will look up all
    the files with in the archive, scan the current working directory
    for a file with the name and diff it against the contents of the
    archive.

=head1 SYNOPSIS

    ptardiff ARCHIVE_FILE
    ptardiff -h

    $ tar -xzf Acme-Buffy-1.3.tar.gz
    $ vi Acme-Buffy-1.3/README
    [...]
    $ ptardiff Acme-Buffy-1.3.tar.gz > README.patch


=head1 OPTIONS

    h   Prints this help message

=head1 SEE ALSO

tar(1), L<Archive::Tar>.

=cut
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!/usr/bin/perl
##############################################################################
# Tool for using regular expressions against the contents of files in a tar
# archive.  See 'ptargrep --help' for more documentation.
#

BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
use warnings;

use Pod::Usage   qw(pod2usage);
use Getopt::Long qw(GetOptions);
use Archive::Tar qw();
use File::Path   qw(mkpath);

my(%opt, $pattern);

if(!GetOptions(\%opt,
    'basename|b',
    'ignore-case|i',
    'list-only|l',
    'verbose|v',
    'help|?',
)) {
    pod2usage(-exitval => 1,  -verbose => 0);
}


pod2usage(-exitstatus => 0, -verbose => 2) if $opt{help};

pod2usage(-exitval => 1,  -verbose => 0,
    -message => "No pattern specified",
) unless @ARGV;
make_pattern( shift(@ARGV) );

pod2usage(-exitval => 1,  -verbose => 0,
    -message => "No tar files specified",
) unless @ARGV;

process_archive($_) foreach @ARGV;

exit 0;


sub make_pattern {
    my($pat) = @_;

    if($opt{'ignore-case'}) {
        $pattern = qr{(?im)$pat};
    }
    else {
        $pattern = qr{(?m)$pat};
    }
}


sub process_archive {
    my($filename) = @_;

    _log("Processing archive: $filename");
    my $next = Archive::Tar->iter($filename);
    while( my $f = $next->() ) {
        next unless $f->is_file;
        match_file($f) if $f->size > 0;
    }
}


sub match_file {
    my($f)   = @_;
    my $path = $f->name;
    my $prefix = $f->prefix;
    if (defined $prefix) {
        $path = File::Spec->catfile($prefix, $path);
    }

    _log("filename: %s  (%d bytes)", $path, $f->size);

    my $body = $f->get_content();
    if($body !~ $pattern) {
        _log("  no match");
        return;
    }

    if($opt{'list-only'}) {
        print $path, "\n";
        return;
    }

    save_file($path, $body);
}


sub save_file {
    my($path, $body) = @_;

    _log("  found match - extracting");
    my($fh);
    my($dir, $file) = $path =~ m{\A(?:(.*)/)?([^/]+)\z};
    if($dir and not $opt{basename}) {
        _log("  writing to $dir/$file");
        $dir =~ s{\A/}{./};
        mkpath($dir) unless -d $dir;
        open $fh, '>', "$dir/$file" or die "open($dir/$file): $!";
    }
    else {
        _log("  writing to ./$file");
        open $fh, '>', $file or die "open($file): $!";
    }
    print $fh $body;
    close($fh);
}


sub _log {
    return unless $opt{verbose};
    my($format, @args) = @_;
    warn sprintf($format, @args) . "\n";
}


__END__

=head1 NAME

ptargrep - Apply pattern matching to the contents of files in a tar archive

=head1 SYNOPSIS

  ptargrep [options] <pattern> <tar file> ...

  Options:

   --basename|-b     ignore directory paths from archive
   --ignore-case|-i  do case-insensitive pattern matching
   --list-only|-l    list matching filenames rather than extracting matches
   --verbose|-v      write debugging message to STDERR
   --help|-?         detailed help message

=head1 DESCRIPTION

This utility allows you to apply pattern matching to B<the contents> of files
contained in a tar archive.  You might use this to identify all files in an
archive which contain lines matching the specified pattern and either print out
the pathnames or extract the files.

The pattern will be used as a Perl regular expression (as opposed to a simple
grep regex).

Multiple tar archive filenames can be specified - they will each be processed
in turn.

=head1 OPTIONS

=over 4

=item B<--basename> (alias -b)

When matching files are extracted, ignore the directory path from the archive
and write to the current directory using the basename of the file from the
archive.  Beware: if two matching files in the archive have the same basename,
the second file extracted will overwrite the first.

=item B<--ignore-case> (alias -i)

Make pattern matching case-insensitive.

=item B<--list-only> (alias -l)

Print the pathname of each matching file from the archive to STDOUT.  Without
this option, the default behaviour is to extract each matching file.

=item B<--verbose> (alias -v)

Log debugging info to STDERR.

=item B<--help> (alias -?)

Display this documentation.

=back

=head1 COPYRIGHT

Copyright 2010 Grant McLean E<lt>grantm@cpan.orgE<gt>

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut



                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!perl

	## shasum: filter for computing SHA digests (ref. sha1sum/md5sum)
	##
	## Copyright (C) 2003-2018 Mark Shelor, All Rights Reserved
	##
	## Version: 6.02
	## Fri Apr 20 16:25:30 MST 2018

	## shasum SYNOPSIS adapted from GNU Coreutils sha1sum. Add
	## "-a" option for algorithm selection,
	## "-U" option for Universal Newlines support, and
	## "-0" option for reading bit strings.

BEGIN { pop @INC if $INC[-1] eq '.' }

use strict;
use warnings;
use Fcntl;
use Getopt::Long;
use Digest::SHA qw($errmsg);

my $POD = <<'END_OF_POD';

=head1 NAME

shasum - Print or Check SHA Checksums

=head1 SYNOPSIS

 Usage: shasum [OPTION]... [FILE]...
 Print or check SHA checksums.
 With no FILE, or when FILE is -, read standard input.

   -a, --algorithm   1 (default), 224, 256, 384, 512, 512224, 512256
   -b, --binary      read in binary mode
   -c, --check       read SHA sums from the FILEs and check them
       --tag         create a BSD-style checksum
   -t, --text        read in text mode (default)
   -U, --UNIVERSAL   read in Universal Newlines mode
                         produces same digest on Windows/Unix/Mac
   -0, --01          read in BITS mode
                         ASCII '0' interpreted as 0-bit,
                         ASCII '1' interpreted as 1-bit,
                         all other characters ignored

 The following five options are useful only when verifying checksums:
       --ignore-missing  don't fail or report status for missing files
   -q, --quiet           don't print OK for each successfully verified file
   -s, --status          don't output anything, status code shows success
       --strict          exit non-zero for improperly formatted checksum lines
   -w, --warn            warn about improperly formatted checksum lines

   -h, --help        display this help and exit
   -v, --version     output version information and exit

 When verifying SHA-512/224 or SHA-512/256 checksums, indicate the
 algorithm explicitly using the -a option, e.g.

   shasum -a 512224 -c checksumfile

 The sums are computed as described in FIPS PUB 180-4.  When checking,
 the input should be a former output of this program.  The default
 mode is to print a line with checksum, a character indicating type
 (`*' for binary, ` ' for text, `U' for UNIVERSAL, `^' for BITS),
 and name for each FILE.  The line starts with a `\' character if the
 FILE name contains either newlines or backslashes, which are then
 replaced by the two-character sequences `\n' and `\\' respectively.

 Report shasum bugs to mshelor@cpan.org

=head1 DESCRIPTION

Running I<shasum> is often the quickest way to compute SHA message
digests.  The user simply feeds data to the script through files or
standard input, and then collects the results from standard output.

The following command shows how to compute digests for typical inputs
such as the NIST test vector "abc":

	perl -e "print qq(abc)" | shasum

Or, if you want to use SHA-256 instead of the default SHA-1, simply say:

	perl -e "print qq(abc)" | shasum -a 256

Since I<shasum> mimics the behavior of the combined GNU I<sha1sum>,
I<sha224sum>, I<sha256sum>, I<sha384sum>, and I<sha512sum> programs,
you can install this script as a convenient drop-in replacement.

Unlike the GNU programs, I<shasum> encompasses the full SHA standard by
allowing partial-byte inputs.  This is accomplished through the BITS
option (I<-0>).  The following example computes the SHA-224 digest of
the 7-bit message I<0001100>:

	perl -e "print qq(0001100)" | shasum -0 -a 224

=head1 AUTHOR

Copyright (C) 2003-2018 Mark Shelor <mshelor@cpan.org>.

=head1 SEE ALSO

I<shasum> is implemented using the Perl module L<Digest::SHA>.

=cut

END_OF_POD

my $VERSION = "6.02";

sub usage {
	my($err, $msg) = @_;

	$msg = "" unless defined $msg;
	if ($err) {
		warn($msg . "Type shasum -h for help\n");
		exit($err);
	}
	my($USAGE) = $POD =~ /SYNOPSIS(.+?)^=/sm;
	$USAGE =~ s/^\s*//;
	$USAGE =~ s/\s*$//;
	$USAGE =~ s/^ //gm;
	print $USAGE, "\n";
	exit($err);
}


	## Sync stdout and stderr by forcing a flush after every write

select((select(STDOUT), $| = 1)[0]);
select((select(STDERR), $| = 1)[0]);


	## Collect options from command line

my ($alg, $binary, $check, $text, $status, $quiet, $warn, $help);
my ($version, $BITS, $UNIVERSAL, $tag, $strict, $ignore_missing);

eval { Getopt::Long::Configure ("bundling") };
GetOptions(
	'b|binary' => \$binary, 'c|check' => \$check,
	't|text' => \$text, 'a|algorithm=i' => \$alg,
	's|status' => \$status, 'w|warn' => \$warn,
	'q|quiet' => \$quiet,
	'h|help' => \$help, 'v|version' => \$version,
	'0|01' => \$BITS,
	'U|UNIVERSAL' => \$UNIVERSAL,
	'tag' => \$tag,
	'strict' => \$strict,
	'ignore-missing' => \$ignore_missing,
) or usage(1, "");


	## Deal with help requests and incorrect uses

usage(0)
	if $help;
usage(1, "shasum: Ambiguous file mode\n")
	if scalar(grep {defined $_}
		($binary, $text, $BITS, $UNIVERSAL)) > 1;
usage(1, "shasum: --warn option used only when verifying checksums\n")
	if $warn && !$check;
usage(1, "shasum: --status option used only when verifying checksums\n")
	if $status && !$check;
usage(1, "shasum: --quiet option used only when verifying checksums\n")
	if $quiet && !$check;
usage(1, "shasum: --ignore-missing option used only when verifying checksums\n")
	if $ignore_missing && !$check;
usage(1, "shasum: --strict option used only when verifying checksums\n")
	if $strict && !$check;
usage(1, "shasum: --tag does not support --text mode\n")
	if $tag && $text;
usage(1, "shasum: --tag does not support Universal Newlines mode\n")
	if $tag && $UNIVERSAL;
usage(1, "shasum: --tag does not support BITS mode\n")
	if $tag && $BITS;


	## Default to SHA-1 unless overridden by command line option

my %isAlg = map { $_ => 1 } (1, 224, 256, 384, 512, 512224, 512256);
$alg = 1 unless defined $alg;
usage(1, "shasum: Unrecognized algorithm\n") unless $isAlg{$alg};

my %Tag = map { $_ => "SHA$_" } (1, 224, 256, 384, 512);
$Tag{512224} = "SHA512/224";
$Tag{512256} = "SHA512/256";


	## Display version information if requested

if ($version) {
	print "$VERSION\n";
	exit(0);
}


	## Try to figure out if the OS is DOS-like.  If it is,
	## default to binary mode when reading files, unless
	## explicitly overridden by command line "--text" or
	## "--UNIVERSAL" options.

my $isDOSish = ($^O =~ /^(MSWin\d\d|os2|dos|mint|cygwin)$/);
if ($isDOSish) { $binary = 1 unless $text || $UNIVERSAL }

my $modesym = $binary ? '*' : ($UNIVERSAL ? 'U' : ($BITS ? '^' : ' '));


	## Read from STDIN (-) if no files listed on command line

@ARGV = ("-") unless @ARGV;


	## sumfile($file): computes SHA digest of $file

sub sumfile {
	my $file = shift;

	my $mode = $binary ? 'b' : ($UNIVERSAL ? 'U' : ($BITS ? '0' : ''));
	my $digest = eval { Digest::SHA->new($alg)->addfile($file, $mode) };
	if ($@) { warn "shasum: $file: $errmsg\n"; return }
	$digest->hexdigest;
}


	## %len2alg: maps hex digest length to SHA algorithm

my %len2alg = (40 => 1, 56 => 224, 64 => 256, 96 => 384, 128 => 512);
$len2alg{56} = 512224 if $alg == 512224;
$len2alg{64} = 512256 if $alg == 512256;


	## unescape: convert backslashed filename to plain filename

sub unescape {
	$_ = shift;
	s/\\\\/\0/g;
	s/\\n/\n/g;
	s/\0/\\/g;
	return $_;
}


	## verify: confirm the digest values in a checksum file

sub verify {
	my $checkfile = shift;
	my ($err, $fmt_errs, $read_errs, $match_errs) = (0, 0, 0, 0);
	my ($num_fmt_OK, $num_OK) = (0, 0);
	my ($bslash, $sum, $fname, $rsp, $digest, $isOK);

	local *FH;
	$checkfile eq '-' and open(FH, '< -')
		and $checkfile = 'standard input'
	or sysopen(FH, $checkfile, O_RDONLY)
		or die "shasum: $checkfile: $!\n";
	while (<FH>) {
		next if /^#/;
		if (/^[ \t]*\\?SHA/) {
			$modesym = '*';
			($bslash, $alg, $fname, $sum) =
			/^[ \t]*(\\?)SHA(\S+) \((.+)\) = ([\da-fA-F]+)/;
			$alg =~ tr{/}{}d if defined $alg;
		}
		else {
			($bslash, $sum, $modesym, $fname) =
			/^[ \t]*(\\?)([\da-fA-F]+)[ \t]([ *^U])(.+)/;
			$alg = defined $sum ? $len2alg{length($sum)} : undef;
		}
		if (grep { ! defined $_ } ($alg, $sum, $modesym, $fname) or
			! $isAlg{$alg}) {
			warn("shasum: $checkfile: $.: improperly " .
				"formatted SHA checksum line\n") if $warn;
			$fmt_errs++;
			$err = 1 if $strict;
			next;
		}
		$num_fmt_OK++;
		$fname = unescape($fname) if $bslash;
		next if $ignore_missing && ! -e $fname;
		$rsp = "$fname: ";
		($binary, $text, $UNIVERSAL, $BITS) =
			map { $_ eq $modesym } ('*', ' ', 'U', '^');
		$isOK = 0;
		unless ($digest = sumfile($fname)) {
			$rsp .= "FAILED open or read\n";
			$err = 1; $read_errs++;
		}
		elsif (lc($sum) eq $digest) {
			$rsp .= "OK\n";
			$isOK = 1;
			$num_OK++;
		}
		else { $rsp .= "FAILED\n"; $err = 1; $match_errs++ }
		print $rsp unless ($status || ($quiet && $isOK));
	}
	close(FH);
	if (! $num_fmt_OK) {
		warn("shasum: $checkfile: no properly formatted " .
			"SHA checksum lines found\n");
		$err = 1;
	}
	elsif (! $status) {
		warn("shasum: WARNING: $fmt_errs line" . ($fmt_errs>1?
		's are':' is') . " improperly formatted\n") if $fmt_errs;
		warn("shasum: WARNING: $read_errs listed file" .
		($read_errs>1?'s':'') . " could not be read\n") if $read_errs;
		warn("shasum: WARNING: $match_errs computed checksum" .
		($match_errs>1?'s':'') . " did NOT match\n") if $match_errs;
	}
	if ($ignore_missing && ! $num_OK && $num_fmt_OK) {
		warn("shasum: $checkfile: no file was verified\n")
			unless $status;
		$err = 1;
	}
	return($err == 0);
}


	## Verify or compute SHA checksums of requested files

my($file, $digest);
my $STATUS = 0;
for $file (@ARGV) {
	if ($check) { $STATUS = 1 unless verify($file) }
	elsif ($digest = sumfile($file)) {
		if ($file =~ /[\n\\]/) {
			$file =~ s/\\/\\\\/g; $file =~ s/\n/\\n/g;
			print "\\";
		}
		unless ($tag) { print "$digest $modesym$file\n" }
		else          { print "$Tag{$alg} ($file) = $digest\n" }
	}
	else { $STATUS = 1 }
}
exit($STATUS);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell

BEGIN { pop @INC if $INC[-1] eq '.' }


=head1 NAME

diagnostics, splain - produce verbose warning diagnostics

=head1 SYNOPSIS

Using the C<diagnostics> pragma:

    use diagnostics;
    use diagnostics -verbose;

    enable  diagnostics;
    disable diagnostics;

Using the C<splain> standalone filter program:

    perl program 2>diag.out
    splain [-v] [-p] diag.out

Using diagnostics to get stack traces from a misbehaving script:

    perl -Mdiagnostics=-traceonly my_script.pl

=head1 DESCRIPTION

=head2 The C<diagnostics> Pragma

This module extends the terse diagnostics normally emitted by both the
perl compiler and the perl interpreter (from running perl with a -w 
switch or C<use warnings>), augmenting them with the more
explicative and endearing descriptions found in L<perldiag>.  Like the
other pragmata, it affects the compilation phase of your program rather
than merely the execution phase.

To use in your program as a pragma, merely invoke

    use diagnostics;

at the start (or near the start) of your program.  (Note 
that this I<does> enable perl's B<-w> flag.)  Your whole
compilation will then be subject(ed :-) to the enhanced diagnostics.
These still go out B<STDERR>.

Due to the interaction between runtime and compiletime issues,
and because it's probably not a very good idea anyway,
you may not use C<no diagnostics> to turn them off at compiletime.
However, you may control their behaviour at runtime using the 
disable() and enable() methods to turn them off and on respectively.

The B<-verbose> flag first prints out the L<perldiag> introduction before
any other diagnostics.  The $diagnostics::PRETTY variable can generate nicer
escape sequences for pagers.

Warnings dispatched from perl itself (or more accurately, those that match
descriptions found in L<perldiag>) are only displayed once (no duplicate
descriptions).  User code generated warnings a la warn() are unaffected,
allowing duplicate user messages to be displayed.

This module also adds a stack trace to the error message when perl dies.
This is useful for pinpointing what
caused the death.  The B<-traceonly> (or
just B<-t>) flag turns off the explanations of warning messages leaving just
the stack traces.  So if your script is dieing, run it again with

  perl -Mdiagnostics=-traceonly my_bad_script

to see the call stack at the time of death.  By supplying the B<-warntrace>
(or just B<-w>) flag, any warnings emitted will also come with a stack
trace.

=head2 The I<splain> Program

Another program, I<splain> is actually nothing
more than a link to the (executable) F<diagnostics.pm> module, as well as
a link to the F<diagnostics.pod> documentation.  The B<-v> flag is like
the C<use diagnostics -verbose> directive.
The B<-p> flag is like the
$diagnostics::PRETTY variable.  Since you're post-processing with 
I<splain>, there's no sense in being able to enable() or disable() processing.

Output from I<splain> is directed to B<STDOUT>, unlike the pragma.

=head1 EXAMPLES

The following file is certain to trigger a few errors at both
runtime and compiletime:

    use diagnostics;
    print NOWHERE "nothing\n";
    print STDERR "\n\tThis message should be unadorned.\n";
    warn "\tThis is a user warning";
    print "\nDIAGNOSTIC TESTER: Please enter a <CR> here: ";
    my $a, $b = scalar <STDIN>;
    print "\n";
    print $x/$y;

If you prefer to run your program first and look at its problem
afterwards, do this:

    perl -w test.pl 2>test.out
    ./splain < test.out

Note that this is not in general possible in shells of more dubious heritage, 
as the theoretical 

    (perl -w test.pl >/dev/tty) >& test.out
    ./splain < test.out

Because you just moved the existing B<stdout> to somewhere else.

If you don't want to modify your source code, but still have on-the-fly
warnings, do this:

    exec 3>&1; perl -w test.pl 2>&1 1>&3 3>&- | splain 1>&2 3>&- 

Nifty, eh?

If you want to control warnings on the fly, do something like this.
Make sure you do the C<use> first, or you won't be able to get
at the enable() or disable() methods.

    use diagnostics; # checks entire compilation phase 
	print "\ntime for 1st bogus diags: SQUAWKINGS\n";
	print BOGUS1 'nada';
	print "done with 1st bogus\n";

    disable diagnostics; # only turns off runtime warnings
	print "\ntime for 2nd bogus: (squelched)\n";
	print BOGUS2 'nada';
	print "done with 2nd bogus\n";

    enable diagnostics; # turns back on runtime warnings
	print "\ntime for 3rd bogus: SQUAWKINGS\n";
	print BOGUS3 'nada';
	print "done with 3rd bogus\n";

    disable diagnostics;
	print "\ntime for 4th bogus: (squelched)\n";
	print BOGUS4 'nada';
	print "done with 4th bogus\n";

=head1 INTERNALS

Diagnostic messages derive from the F<perldiag.pod> file when available at
runtime.  Otherwise, they may be embedded in the file itself when the
splain package is built.   See the F<Makefile> for details.

If an extant $SIG{__WARN__} handler is discovered, it will continue
to be honored, but only after the diagnostics::splainthis() function 
(the module's $SIG{__WARN__} interceptor) has had its way with your
warnings.

There is a $diagnostics::DEBUG variable you may set if you're desperately
curious what sorts of things are being intercepted.

    BEGIN { $diagnostics::DEBUG = 1 } 


=head1 BUGS

Not being able to say "no diagnostics" is annoying, but may not be
insurmountable.

The C<-pretty> directive is called too late to affect matters.
You have to do this instead, and I<before> you load the module.

    BEGIN { $diagnostics::PRETTY = 1 } 

I could start up faster by delaying compilation until it should be
needed, but this gets a "panic: top_level" when using the pragma form
in Perl 5.001e.

While it's true that this documentation is somewhat subserious, if you use
a program named I<splain>, you should expect a bit of whimsy.

=head1 AUTHOR

Tom Christiansen <F<tchrist@mox.perl.com>>, 25 June 1995.

=cut

use strict;
use 5.009001;
use Carp;
$Carp::Internal{__PACKAGE__.""}++;

our $VERSION = '1.39';
our $DEBUG;
our $VERBOSE;
our $PRETTY;
our $TRACEONLY = 0;
our $WARNTRACE = 0;

use Config;
use Text::Tabs 'expand';
my $privlib = $Config{privlibexp};
if ($^O eq 'VMS') {
    require VMS::Filespec;
    $privlib = VMS::Filespec::unixify($privlib);
}
my @trypod = (
	   "$privlib/pod/perldiag.pod",
	   "$privlib/pods/perldiag.pod",
	  );
# handy for development testing of new warnings etc
unshift @trypod, "./pod/perldiag.pod" if -e "pod/perldiag.pod";
(my $PODFILE) = ((grep { -e } @trypod), $trypod[$#trypod])[0];

$DEBUG ||= 0;

local $| = 1;
local $_;
local $.;

my $standalone;
my(%HTML_2_Troff, %HTML_2_Latin_1, %HTML_2_ASCII_7);

CONFIG: {
    our $opt_p = our $opt_d = our $opt_v = our $opt_f = '';

    unless (caller) {
	$standalone++;
	require Getopt::Std;
	Getopt::Std::getopts('pdvf:')
	    or die "Usage: $0 [-v] [-p] [-f splainpod]";
	$PODFILE = $opt_f if $opt_f;
	$DEBUG = 2 if $opt_d;
	$VERBOSE = $opt_v;
	$PRETTY = $opt_p;
    }

    if (open(POD_DIAG, '<', $PODFILE)) {
	warn "Happy happy podfile from real $PODFILE\n" if $DEBUG;
	last CONFIG;
    } 

    if (caller) {
	INCPATH: {
	    for my $file ( (map { "$_/".__PACKAGE__.".pm" } @INC), $0) {
		warn "Checking $file\n" if $DEBUG;
		if (open(POD_DIAG, '<', $file)) {
		    while (<POD_DIAG>) {
			next unless
			    /^__END__\s*# wish diag dbase were more accessible/;
			print STDERR "podfile is $file\n" if $DEBUG;
			last INCPATH;
		    }
		}
	    } 
	}
    } else { 
	print STDERR "podfile is <DATA>\n" if $DEBUG;
	*POD_DIAG = *main::DATA;
    }
}
if (eof(POD_DIAG)) { 
    die "couldn't find diagnostic data in $PODFILE @INC $0";
}


%HTML_2_Troff = (
    'amp'	=>	'&',	#   ampersand
    'lt'	=>	'<',	#   left chevron, less-than
    'gt'	=>	'>',	#   right chevron, greater-than
    'quot'	=>	'"',	#   double quote
    'sol'	=>	'/',	#   forward slash / solidus
    'verbar'    =>	'|',	#   vertical bar

    "Aacute"	=>	"A\\*'",	#   capital A, acute accent
    # etc

);

%HTML_2_Latin_1 = (
    'amp'	=>	'&',	#   ampersand
    'lt'	=>	'<',	#   left chevron, less-than
    'gt'	=>	'>',	#   right chevron, greater-than
    'quot'	=>	'"',	#   double quote
    'sol'	=>	'/',	#   Forward slash / solidus
    'verbar'    =>	'|',	#   vertical bar

    #                           #   capital A, acute accent
    "Aacute"	=>	chr utf8::unicode_to_native(0xC1)

    # etc
);

%HTML_2_ASCII_7 = (
    'amp'	=>	'&',	#   ampersand
    'lt'	=>	'<',	#   left chevron, less-than
    'gt'	=>	'>',	#   right chevron, greater-than
    'quot'	=>	'"',	#   double quote
    'sol'	=>	'/',	#   Forward slash / solidus
    'verbar'    =>	'|',	#   vertical bar

    "Aacute"	=>	"A"	#   capital A, acute accent
    # etc
);

our %HTML_Escapes;
*HTML_Escapes = do {
    if ($standalone) {
	$PRETTY ? \%HTML_2_Latin_1 : \%HTML_2_ASCII_7; 
    } else {
	\%HTML_2_Latin_1; 
    }
}; 

*THITHER = $standalone ? *STDOUT : *STDERR;

my %transfmt = (); 
my $transmo = <<EOFUNC;
sub transmo {
    #local \$^W = 0;  # recursive warnings we do NOT need!
EOFUNC

my %msg;
my $over_level = 0;     # We look only at =item lines at the first =over level
{
    print STDERR "FINISHING COMPILATION for $_\n" if $DEBUG;
    local $/ = '';
    local $_;
    my $header;
    my @headers;
    my $for_item;
    my $seen_body;
    while (<POD_DIAG>) {

	sub _split_pod_link {
	    $_[0] =~ m'(?:([^|]*)\|)?([^/]*)(?:/("?)(.*)\3)?'s;
	    ($1,$2,$4);
	}

	unescape();
	if ($PRETTY) {
	    sub noop   { return $_[0] }  # spensive for a noop
	    sub bold   { my $str =$_[0];  $str =~ s/(.)/$1\b$1/g; return $str; } 
	    sub italic { my $str = $_[0]; $str =~ s/(.)/_\b$1/g;  return $str; } 
	    s/C<<< (.*?) >>>|C<< (.*?) >>|[BC]<(.*?)>/bold($+)/ges;
	    s/[IF]<(.*?)>/italic($1)/ges;
	    s/L<(.*?)>/
	       my($text,$page,$sect) = _split_pod_link($1);
	       defined $text
	        ? $text
	        : defined $sect
	           ? italic($sect) . ' in ' . italic($page)
	           : italic($page)
	     /ges;
	     s/S<(.*?)>/
               $1
             /ges;
	} else {
	    s/C<<< (.*?) >>>|C<< (.*?) >>|[BC]<(.*?)>/$+/gs;
	    s/[IF]<(.*?)>/$1/gs;
	    s/L<(.*?)>/
	       my($text,$page,$sect) = _split_pod_link($1);
	       defined $text
	        ? $text
	        : defined $sect
	           ? qq '"$sect" in $page'
	           : $page
	     /ges;
	    s/S<(.*?)>/
               $1
             /ges;
	} 
	unless (/^=/) {
	    if (defined $header) { 
		if ( $header eq 'DESCRIPTION' && 
		    (   /Optional warnings are enabled/ 
		     || /Some of these messages are generic./
		    ) )
		{
		    next;
		}
		$_ = expand $_;
		s/^/    /gm;
		$msg{$header} .= $_;
		for my $h(@headers) { $msg{$h} .= $_ }
		++$seen_body;
	 	undef $for_item;	
	    }
	    next;
	} 

	# If we have not come across the body of the description yet, then
	# the previous header needs to share the same description.
	if ($seen_body) {
	    @headers = ();
	}
	else {
	    push @headers, $header if defined $header;
	}

	if ( ! s/=item (.*?)\s*\z//s || $over_level != 1) {

	    if ( s/=head1\sDESCRIPTION//) {
		$msg{$header = 'DESCRIPTION'} = '';
		undef $for_item;
	    }
	    elsif( s/^=for\s+diagnostics\s*\n(.*?)\s*\z// ) {
		$for_item = $1;
	    }
	    elsif( /^=over\b/ ) {
                $over_level++;
            }
	    elsif( /^=back\b/ ) { # Stop processing body here
                $over_level--;
                if ($over_level == 0) {
                    undef $header;
                    undef $for_item;
                    $seen_body = 0;
                    next;
                }
	    }
	    next;
	}

	if( $for_item ) { $header = $for_item; undef $for_item } 
	else {
	    $header = $1;

	    $header =~ s/\n/ /gs; # Allow multi-line headers
	}

	# strip formatting directives from =item line
	$header =~ s/[A-Z]<(.*?)>/$1/g;

	# Since we strip "(\.\s*)\n" when we search a warning, strip it here as well
	$header =~ s/(\.\s*)?$//;

        my @toks = split( /(%l?[dxX]|%[ucp]|%(?:\.\d+)?[fs])/, $header );
	if (@toks > 1) {
            my $conlen = 0;
            for my $i (0..$#toks){
                if( $i % 2 ){
                    if(      $toks[$i] eq '%c' ){
                        $toks[$i] = '.';
                    } elsif( $toks[$i] =~ /^%(?:d|u)$/ ){
                        $toks[$i] = '\d+';
                    } elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){
                        $toks[$i] = $i == $#toks ? '.*' : '.*?';
                    } elsif( $toks[$i] =~ '%.(\d+)s' ){
                        $toks[$i] = ".{$1}";
                    } elsif( $toks[$i] =~ '^%l*([pxX])$' ){
                        $toks[$i] = $1 eq 'X' ? '[\dA-F]+' : '[\da-f]+';
                    }
                } elsif( length( $toks[$i] ) ){
                    $toks[$i] = quotemeta $toks[$i];
                    $conlen += length( $toks[$i] );
                }
            }  
            my $lhs = join( '', @toks );
            $lhs =~ s/(\\\s)+/\\s+/g; # Replace lit space with multi-space match
	    $transfmt{$header}{pat} =
              "    s^\\s*$lhs\\s*\Q$header\Es\n\t&& return 1;\n";
            $transfmt{$header}{len} = $conlen;
	} else {
            my $lhs = "\Q$header\E";
            $lhs =~ s/(\\\s)+/\\s+/g; # Replace lit space with multi-space match
            $transfmt{$header}{pat} =
	      "    s^\\s*$lhs\\s*\Q$header\E\n\t && return 1;\n";
            $transfmt{$header}{len} = length( $header );
	} 

	print STDERR __PACKAGE__.": Duplicate entry: \"$header\"\n"
	    if $msg{$header};

	$msg{$header} = '';
	$seen_body = 0;
    } 


    close POD_DIAG unless *main::DATA eq *POD_DIAG;

    die "No diagnostics?" unless %msg;

    # Apply patterns in order of decreasing sum of lengths of fixed parts
    # Seems the best way of hitting the right one.
    for my $hdr ( sort { $transfmt{$b}{len} <=> $transfmt{$a}{len} }
                  keys %transfmt ){
        $transmo .= $transfmt{$hdr}{pat};
    }
    $transmo .= "    return 0;\n}\n";
    print STDERR $transmo if $DEBUG;
    eval $transmo;
    die $@ if $@;
}

if ($standalone) {
    if (!@ARGV and -t STDIN) { print STDERR "$0: Reading from STDIN\n" } 
    while (defined (my $error = <>)) {
	splainthis($error) || print THITHER $error;
    } 
    exit;
} 

my $olddie;
my $oldwarn;

sub import {
    shift;
    $^W = 1; # yup, clobbered the global variable; 
	     # tough, if you want diags, you want diags.
    return if defined $SIG{__WARN__} && ($SIG{__WARN__} eq \&warn_trap);

    for (@_) {

	/^-d(ebug)?$/ 	   	&& do {
				    $DEBUG++;
				    next;
				   };

	/^-v(erbose)?$/ 	&& do {
				    $VERBOSE++;
				    next;
				   };

	/^-p(retty)?$/ 		&& do {
				    print STDERR "$0: I'm afraid it's too late for prettiness.\n";
				    $PRETTY++;
				    next;
			       };
	# matches trace and traceonly for legacy doc mixup reasons
	/^-t(race(only)?)?$/	&& do {
				    $TRACEONLY++;
				    next;
			       };
	/^-w(arntrace)?$/ 	&& do {
				    $WARNTRACE++;
				    next;
			       };

	warn "Unknown flag: $_";
    } 

    $oldwarn = $SIG{__WARN__};
    $olddie = $SIG{__DIE__};
    $SIG{__WARN__} = \&warn_trap;
    $SIG{__DIE__} = \&death_trap;
} 

sub enable { &import }

sub disable {
    shift;
    return unless $SIG{__WARN__} eq \&warn_trap;
    $SIG{__WARN__} = $oldwarn || '';
    $SIG{__DIE__} = $olddie || '';
} 

sub warn_trap {
    my $warning = $_[0];
    if (caller eq __PACKAGE__ or !splainthis($warning)) {
	if ($WARNTRACE) {
	    print STDERR Carp::longmess($warning);
	} else {
	    print STDERR $warning;
	}
    } 
    goto &$oldwarn if defined $oldwarn and $oldwarn and $oldwarn ne \&warn_trap;
};

sub death_trap {
    my $exception = $_[0];

    # See if we are coming from anywhere within an eval. If so we don't
    # want to explain the exception because it's going to get caught.
    my $in_eval = 0;
    my $i = 0;
    while (my $caller = (caller($i++))[3]) {
      if ($caller eq '(eval)') {
	$in_eval = 1;
	last;
      }
    }

    splainthis($exception) unless $in_eval;
    if (caller eq __PACKAGE__) {
	print STDERR "INTERNAL EXCEPTION: $exception";
    } 
    &$olddie if defined $olddie and $olddie and $olddie ne \&death_trap;

    return if $in_eval;

    # We don't want to unset these if we're coming from an eval because
    # then we've turned off diagnostics.

    # Switch off our die/warn handlers so we don't wind up in our own
    # traps.
    $SIG{__DIE__} = $SIG{__WARN__} = '';

    $exception =~ s/\n(?=.)/\n\t/gas;

    die Carp::longmess("__diagnostics__")
	  =~ s/^__diagnostics__.*?line \d+\.?\n/
		  "Uncaught exception from user code:\n\t$exception"
	      /re;
	# up we go; where we stop, nobody knows, but i think we die now
	# but i'm deeply afraid of the &$olddie guy reraising and us getting
	# into an indirect recursion loop
};

my %exact_duplicate;
my %old_diag;
my $count;
my $wantspace;
sub splainthis {
  return 0 if $TRACEONLY;
  for (my $tmp = shift) {
    local $\;
    local $!;
    ### &finish_compilation unless %msg;
    s/(\.\s*)?\n+$//;
    my $orig = $_;
    # return unless defined;

    # get rid of the where-are-we-in-input part
    s/, <.*?> (?:line|chunk).*$//;

    # Discard 1st " at <file> line <no>" and all text beyond
    # but be aware of messages containing " at this-or-that"
    my $real = 0;
    my @secs = split( / at / );
    return unless @secs;
    $_ = $secs[0];
    for my $i ( 1..$#secs ){
        if( $secs[$i] =~ /.+? (?:line|chunk) \d+/ ){
            $real = 1;
            last;
        } else {
            $_ .= ' at ' . $secs[$i];
	}
    }

    # remove parenthesis occurring at the end of some messages 
    s/^\((.*)\)$/$1/;

    if ($exact_duplicate{$orig}++) {
	return &transmo;
    } else {
	return 0 unless &transmo;
    }

    my $short = shorten($orig);
    if ($old_diag{$_}) {
	autodescribe();
	print THITHER "$short (#$old_diag{$_})\n";
	$wantspace = 1;
    } elsif (!$msg{$_} && $orig =~ /\n./s) {
	# A multiline message, like "Attempt to reload /
	# Compilation failed"
	my $found;
	for (split /^/, $orig) {
	    splainthis($_) and $found = 1;
	}
	return $found;
    } else {
	autodescribe();
	$old_diag{$_} = ++$count;
	print THITHER "\n" if $wantspace;
	$wantspace = 0;
	print THITHER "$short (#$old_diag{$_})\n";
	if ($msg{$_}) {
	    print THITHER $msg{$_};
	} else {
	    if (0 and $standalone) { 
		print THITHER "    **** Error #$old_diag{$_} ",
			($real ? "is" : "appears to be"),
			" an unknown diagnostic message.\n\n";
	    }
	    return 0;
	} 
    }
    return 1;
  }
} 

sub autodescribe {
    if ($VERBOSE and not $count) {
	print THITHER &{$PRETTY ? \&bold : \&noop}("DESCRIPTION OF DIAGNOSTICS"),
		"\n$msg{DESCRIPTION}\n";
    } 
} 

sub unescape { 
    s {
            E<  
            ( [A-Za-z]+ )       
            >   
    } { 
         do {   
             exists $HTML_Escapes{$1}
                ? do { $HTML_Escapes{$1} }
                : do {
                    warn "Unknown escape: E<$1> in $_";
                    "E<$1>";
                } 
         } 
    }egx;
}

sub shorten {
    my $line = $_[0];
    if (length($line) > 79 and index($line, "\n") == -1) {
	my $space_place = rindex($line, ' ', 79);
	if ($space_place != -1) {
	    substr($line, $space_place, 1) = "\n\t";
	} 
    } 
    return $line;
} 


1 unless $standalone;  # or it'll complain about itself
__END__ # wish diag dbase were more accessible
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!/usr/bin/perl

# Streaming zip

use strict;
use warnings;

use IO::Compress::Zip qw(zip
                         ZIP_CM_STORE
                         ZIP_CM_DEFLATE
                         ZIP_CM_BZIP2 ) ;

use Getopt::Long;

my $VERSION = '1.002';

my $compression_method = ZIP_CM_DEFLATE;
my $stream = 0;
my $zipfile = '-';
my $memberName = '-' ;
my $zip64 = 0 ;
my $level ;

GetOptions("zip64"          => \$zip64,
           "method=s"       => \&lookupMethod,
           "0"              => sub { $level = 0 },
           "1"              => sub { $level = 1 },
           "2"              => sub { $level = 2 },
           "3"              => sub { $level = 3 },
           "4"              => sub { $level = 4 },
           "5"              => sub { $level = 5 },
           "6"              => sub { $level = 6 },
           "7"              => sub { $level = 7 },
           "8"              => sub { $level = 8 },
           "9"              => sub { $level = 9 },
           "stream"         => \$stream,
           "zipfile=s"      => \$zipfile,
           "member-name=s"  => \$memberName,
           'version'        => sub { print "$VERSION\n"; exit 0 },
           'help'           => \&Usage,
          )
    or Usage();

Usage()
    if @ARGV;

my @extraOpts = ();

if ($compression_method == ZIP_CM_DEFLATE && defined $level)
{
    push @extraOpts, (Level => $level)
}

zip '-' => $zipfile,
           Name   => $memberName,
           Zip64  => $zip64,
           Method => $compression_method,
           Stream => $stream,
           @extraOpts
    or die "Error creating zip file '$zipfile': $\n" ;

exit 0;

sub lookupMethod
{
    my $name  = shift;
    my $value = shift ;

    my %valid = ( store   => ZIP_CM_STORE,
                  deflate => ZIP_CM_DEFLATE,
                  bzip2   => ZIP_CM_BZIP2,
                  lzma    => 14,
                  xz      => 95,
                  zstd    => 93,
                );

    my $method = $valid{ lc $value };

    Usage("Unknown method '$value'")
        if ! defined $method;

    installModule("Lzma")
        if $method == 14 ;

    installModule("Xz")
        if $method == 95 ;

    installModule("Zstd")
        if $method == 93;

    $compression_method =  $method;
}

sub installModule
{
    my $name = shift ;

    eval " use IO::Compress::$name; use IO::Compress::Adapter::$name ; " ;
    die "Method '$name' needs IO::Compress::$name\n"
        if $@;
}

sub Usage
{
    print <<EOM;
Usage:
  producer | streamzip [OPTIONS] | consumer
  producer | streamzip [OPTIONS] -zipfile output.zip

Stream data from stdin, compress into a Zip container, and stream to stdout.

OPTIONS

  -zipfile=F      Write zip container to the filename 'F'
                  Outputs to stdout if zipfile not specified.
  -member-name=M  Set member name to 'M' [Default '-']
  -0 ... -9       Set compression level for Deflate
                  [Default: 6]
  -zip64          Create a Zip64-compliant zip file [Default: No]
                  Enable Zip64 if input is greater than 4Gig.
  -stream         Force a streamed zip file when 'zipfile' option is also enabled.
                  Only applies when 'zipfile' option is used. [Default: No]
                  Stream is always enabled when writing to stdout.
  -method=M       Compress using method 'M'.
                  Valid methods are
                    store    Store without compression
                    deflate  Use Deflate compression [Deflault]
                    bzip2    Use Bzip2 compression
                    lzma     Use LZMA compression [needs IO::Compress::Lzma]
                    xz       Use LZMA compression [needs IO::Compress::Xz]
                    zstd     Use LZMA compression [needs IO::Compress::Zstd]
  -version        Display version number [$VERSION]

Copyright (c) 2019-2021 Paul Marquess. All rights reserved.

This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

EOM
    exit;
}


__END__
=head1 NAME

streamzip - create a zip file from stdin

=head1 SYNOPSIS

    producer | streamzip [opts] | consumer
    producer | streamzip [opts] -zipfile=output.zip

=head1 DESCRIPTION

This program will read data from C<stdin>, compress it into a zip container
and, by default, write a I<streamed> zip file to C<stdout>. No temporary
files are created.

The zip container written to C<stdout> is, by necessity, written in
streaming format. Most programs that read Zip files can cope with a
streamed zip file, but if interoperability is important, and your workflow
allows you to write the zip file directly to disk you can create a
non-streamed zip file using the C<zipfile> option.

=head2 OPTIONS

=over 5

=item -zip64

Create a Zip64-compliant zip container. Use this option if the input is
greater than 4Gig.

Default is disabled.

=item  -zipfile=F

Write zip container to the filename C<F>.

Use the C<Stream> option to force the creation of a streamed zip file.

=item  -member-name=M

This option is used to name the "file" in the zip container.

Default is '-'.

=item  -stream

Ignored when writing to C<stdout>.

If the C<zipfile> option is specified, including this option will trigger
the creation of a streamed zip file.

Default: Always enabled when writing to C<stdout>, otherwise disabled.

=item  -method=M

Compress using method C<M>.

Valid method names are

    * store    Store without compression
    * deflate  Use Deflate compression [Deflault]
    * bzip2    Use Bzip2 compression
    * lzma     Use LZMA compression
    * xz       Use xz compression
    * zstd     Use Zstandard compression

Note that Lzma compress needs C<IO::Compress::Lzma> to be installed.

Note that Zstd compress needs C<IO::Compress::Zstd> to be installed.

Default is C<deflate>.

=item -0, -1, -2, -3, -4, -5, -6, -7, -8, -9

Sets the compression level for C<deflate>. Ignored for all other compression methods.

C<-0> means no compression and C<-9> for maximum compression.

Default is 6

=item  -version

Display version number

=item -help

Display help

=back

=head2 Examples

Create a zip file bt reading daa from stdin

    $ echo Lorem ipsum dolor sit | perl ./bin/streamzip >abcd.zip

Check the contents of C<abcd,zip> with the standard C<unzip> utility

    Archive:  abcd.zip
      Length      Date    Time    Name
    ---------  ---------- -----   ----
           22  2021-01-08 19:45   -
    ---------                     -------
           22                     1 file

Notice how the C<Name> is set to C<->.
That is the default for a few zip utilities whwre the member name is not given.

If you want to explicitly name the file, use the C<-member-name> option as follows

    $ echo Lorem ipsum dolor sit | perl ./bin/streamzip -member-name latin >abcd.zip

    $ unzip -l abcd.zip
    Archive:  abcd.zip
      Length      Date    Time    Name
    ---------  ---------- -----   ----
           22  2021-01-08 19:47   latin
    ---------                     -------
           22                     1 file


=head2 When to write a Streamed Zip File

A Streamed Zip File is useful in situations where you cannot seek
backwards/forwards in the file.

A good examples is when you are serving dynamic content from a Web Server
straight into a socket without needing to create a temporary zip file in
the filesystsm.

Similarly if your workfow uses a Linux pipelined commands.

=head1 SUPPORT

General feedback/questions/bug reports should be sent to
L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.


=head1 AUTHOR

Paul Marquess F<pmqs@cpan.org>.

=head1 COPYRIGHT

Copyright (c) 2019-2021 Paul Marquess. All rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
                                                                                                                                                                                                                                                           #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if 0; # ^ Run only under a shell
#!perl
use 5.006;
BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
eval {
  require ExtUtils::ParseXS;
  1;
}
or do {
  my $err = $@ || 'Zombie error';
  my $v = $ExtUtils::ParseXS::VERSION;
  $v = '<undef>' if not defined $v;
  die "Failed to load or import from ExtUtils::ParseXS (version $v). Please check that ExtUtils::ParseXS is installed correctly and that the newest version will be found in your \@INC path: $err";
};

use Getopt::Long;

my %args = ();

my $usage = "Usage: xsubpp [-v] [-csuffix csuffix] [-except] [-prototypes] [-noversioncheck] [-nolinenumbers] [-nooptimize] [-noinout] [-noargtypes] [-strip|s pattern] [-typemap typemap]... file.xs\n";

Getopt::Long::Configure qw(no_auto_abbrev no_ignore_case);

@ARGV = grep {$_ ne '-C++'} @ARGV;  # Allow -C++ for backward compatibility
GetOptions(\%args, qw(hiertype!
		      prototypes!
		      versioncheck!
		      linenumbers!
		      optimize!
		      inout!
		      argtypes!
		      object_capi!
		      except!
		      v
		      typemap=s@
		      output=s
		      s|strip=s
		      csuffix=s
		     ))
  or die $usage;

if ($args{v}) {
  print "xsubpp version $ExtUtils::ParseXS::VERSION\n";
  exit;
}

@ARGV == 1 or die $usage;

$args{filename} = shift @ARGV;

my $pxs = ExtUtils::ParseXS->new;
$pxs->process_file(%args);
exit( $pxs->report_error_count() ? 1 : 0 );

__END__

=head1 NAME

xsubpp - compiler to convert Perl XS code into C code

=head1 SYNOPSIS

B<xsubpp> [B<-v>] [B<-except>] [B<-s pattern>] [B<-prototypes>] [B<-noversioncheck>] [B<-nolinenumbers>] [B<-nooptimize>] [B<-typemap typemap>] [B<-output filename>]... file.xs

=head1 DESCRIPTION

This compiler is typically run by the makefiles created by L<ExtUtils::MakeMaker>
or by L<Module::Build> or other Perl module build tools.

I<xsubpp> will compile XS code into C code by embedding the constructs
necessary to let C functions manipulate Perl values and creates the glue
necessary to let Perl access those functions.  The compiler uses typemaps to
determine how to map C function parameters and variables to Perl values.

The compiler will search for typemap files called I<typemap>.  It will use
the following search path to find default typemaps, with the rightmost
typemap taking precedence.

	../../../typemap:../../typemap:../typemap:typemap

It will also use a default typemap installed as C<ExtUtils::typemap>.

=head1 OPTIONS

Note that the C<XSOPT> MakeMaker option may be used to add these options to
any makefiles generated by MakeMaker.

=over 5

=item B<-hiertype>

Retains '::' in type names so that C++ hierarchical types can be mapped.

=item B<-except>

Adds exception handling stubs to the C code.

=item B<-typemap typemap>

Indicates that a user-supplied typemap should take precedence over the
default typemaps.  This option may be used multiple times, with the last
typemap having the highest precedence.

=item B<-output filename>

Specifies the name of the output file to generate.  If no file is
specified, output will be written to standard output.

=item B<-v>

Prints the I<xsubpp> version number to standard output, then exits.

=item B<-prototypes>

By default I<xsubpp> will not automatically generate prototype code for
all xsubs. This flag will enable prototypes.

=item B<-noversioncheck>

Disables the run time test that determines if the object file (derived
from the C<.xs> file) and the C<.pm> files have the same version
number.

=item B<-nolinenumbers>

Prevents the inclusion of '#line' directives in the output.

=item B<-nooptimize>

Disables certain optimizations.  The only optimization that is currently
affected is the use of I<target>s by the output C code (see L<perlguts>).
This may significantly slow down the generated code, but this is the way
B<xsubpp> of 5.005 and earlier operated.

=item B<-noinout>

Disable recognition of C<IN>, C<OUT_LIST> and C<INOUT_LIST> declarations.

=item B<-noargtypes>

Disable recognition of ANSI-like descriptions of function signature.

=item B<-C++>

Currently doesn't do anything at all.  This flag has been a no-op for
many versions of perl, at least as far back as perl5.003_07.  It's
allowed here for backwards compatibility.

=item B<-s=...> or B<-strip=...>

I<This option is obscure and discouraged.>

If specified, the given string will be stripped off from the beginning
of the C function name in the generated XS functions (if it starts with that prefix).
This only applies to XSUBs without C<CODE> or C<PPCODE> blocks.
For example, the XS:

  void foo_bar(int i);

when C<xsubpp> is invoked with C<-s foo_> will install a C<foo_bar>
function in Perl, but really call C<bar(i)> in C. Most of the time,
this is the opposite of what you want and failure modes are somewhat
obscure, so please avoid this option where possible.

=back

=head1 ENVIRONMENT

No environment variables are used.

=head1 AUTHOR

Originally by Larry Wall.  Turned into the C<ExtUtils::ParseXS> module
by Ken Williams.

=head1 MODIFICATION HISTORY

See the file F<Changes>.

=head1 SEE ALSO

perl(1), perlxs(1), perlxstut(1), ExtUtils::ParseXS

=cut

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Perl Packages for Debian
========================

  perl             - Larry Wall's Practical Extracting and Report Language.
  perl-base        - The Pathologically Eclectic Rubbish Lister.
  perl-doc         - Perl documentation.
  perl-debug       - Debug-enabled Perl interpreter.
  libperl5.36      - Shared Perl library.
  perl-modules-5.36 - Architecture independent core Perl modules.
  libperl-dev      - Perl library: development files.

To provide a minimal working perl, the ``perl-base'' package provides
the /usr/bin/perl binary plus a basic set of libraries.

The remainder of the application is included in the perl, perl-modules-5.36
and perl-doc packages.

See the 'README.source' file in the perl source package for information
on building the package.

perl-suid removed
=================

suidperl was removed upstream with 5.12, so the perl-suid package which
used to be distributed in Debian has been removed too. Possible alternatives
include using a simple setuid C wrapper to execute a perl script from a
hard-coded location, or using a more general tool like sudo.

Credits
-------

Previous maintainers of Debian Perl packages:

  Ray Dassen <jdassen@WI.LeidenUniv.NL>,
  Carl Streeter <streeter@cae.wisc.edu>,
  Robert Sanders <Robert.Sanders@linux.org> and
  Darren Stalder <torin@daft.com>.

 -- Brendan O'Dea <bod@debian.org>  Tue,  8 Mar 2005 19:30:38 +1100
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ZksƱ_1bLx׹elGDʩܔ2w' |Vszbw!*[b})JgcͿNb{W̪D(Y?kZß2&{?]:?^YV8Y^{V͍PVq+MZܱ;YoXΰer[\o|$B+^2c/JŰzE"e_;<{Vmm`ݾ`<a3bS,XSaKH\ETs=?OJT넳y0;YmqKE2
l;	kTo|V<6e|;'}F`QtdXEdzÝx3oLI2g~y?Q0lN&]8n,{t<9BdGn1G
sB ASV5:/F}_"OX
XPP,I'bD/wϖ'VK<fjThv6"etx[6z?FjbUTyU6nd
t<MW
8@l|7
9?x/
̛Δ+XJye~,ӂ'n.[QDb~&D^tk\I)V}wo?}ߨDo#6\.Eȋ._+Z"ؑVV$
\,'EY]<bWBfI%
|!U?5~z6޿?g9'=<
p'zo4TgDE1R)c`F'YФ	nI[8Q0٨).X&0q.vQls͞'q1љ;GSr=L"ȏ[$*DjVbXA!IQur=?:1CX>1h,'!VG"1Y"+!+"XE0zDs,qU U\sHLw7g/5r`l_(ʱ.6PEYsx# m tv'(j~^+^cUdQ.DnE~#l(-wȜT*MiY	
%W08fP3ۊl6W1Oȭw-NNdz\YVW{TJ[藫e(o#<krXv{;s'br-	*?څTD*L&իM @r)wHVT0@js<OEsnk4HZhSI'ʤVTz?"wZp/TzSPEC<R	݊wv9ѡd:D+n;#!v#͑lҌWGN"w	6Ck$;AlLe1~_f={oUѨx^xʾ_vD|(,9zt'ehC?#'y9ݞ&9m(t>8_ɪʏ%.:*öhH|9
N8=@(/*a%6/$_w5f{^'b_|֛x\e̾
M>I[XRoTv өze}Yq5e*cXUE*+<d[IEꃈ(}jǡH|Prz#e$9uعӠ@0^_0K%niaB뮓ŜijnҸ!p<*~).g~~QϣӠ[R4FGE͟nRQ7M"cוyώ~U(#L	Hȳ )%`f1R\Qo!ky	1
SHR׽៓D՚*1?QP:{Bwzp:tsyW&7p]UR2һYzʶ4?4VUiZjEbͬ:.pBǄVӕ͓$K B3h'7/tvmtg^	8팺w$T(}U-+}zҪ<n=*d6
](IW_\h,;=viٕwUoEm]gogZ|pHGWXDAzN3дIh  9LkJmQV=rä.Hn4N
/0yw,LNhfXUv%,pvx¤eP~(69{ϛn~f%v>N6[lh3uڞh+5"+,_{y(9i;ׄBv6:q\:cSFĎGVbI*:Qc
'&>!4
Dp,˷4C4)jr\!;iTL\xGWC`j5,wGShMsJS&}Q՟r']LOKW= /3ov/hǓ~¢ςQtA (>ھ!Eޟ̬UU)byOhCԂ Q'4k[)kbreζeZNӳz+2ߙԝ-gY~J!HG쪝3*,)^+EGxO3.#;'{CDsnTqX# 40^_0g5A2T4S=q!6wU]bEPSmS>qi*
ut)҉*qNɩ<9!3Cό;+oqk^kR8>؞eN$Щ&	&iUֵ >3L P%aEs`5waFZF3OiL)5't'4a<1|A;ЍLB64]}1_D2z<]xJCZP7վVޯS'h;Exb{0Bq5S+Aæ~'UwF"VRWK٬n*۩i;uRVwGUPvEz0U۝Ah.Lv~1\55튮҂V> .V!'^?cG43?݃ÿ;?أp>x/8mPنW_eiHL;M#

kRcڱi̸_gI
ˤUS!U٘y^7og8"pW7ꇿqPt*IFKsO8?}>7"Xϼ]L*D%B24;l[=d&keSh{'޼z.
=3xTv,݋3m=b
z45u{:inA[۵E\;)u;l2ݐiq4=)aQ']]8A9VEZy.92}7#r}	 B_tR
?С~y7UFޠĀEOoNk^f7>ԛ7=[%2,:<ڍ~2}cw1:!n=a3(v3IM IBrJl '3ȑ 4('uw
$/ڸi,PqP>ݚT%gy^ZD`!{~+QK{ѿnx;9 #:%o/0벊Ψ_u<#]p
M/	(#g>GN56Y2,D)/ nuX9-.ˋ]."nz{pT?q&DEun=~cl-khs	pTfFnsת}]z/O6(z˔Y OTቮF;}oyp1|dlB_b7
E_/J4z*w^փ(:u[kr2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      }U]o6|ׯ 6\AqJJRIaN{2^]4E{VƋ̉
g텣[Dm\YP7$A$

J:;"hS.U&4Ҋ.KEUu	C}^s3e2(DF =b/S(Q54MLVpN??3ŋm!TG1U@ ~iIUsrM}+"eV6pYN uwl9[SjCBj=NLh
$nG¶U~a=}Qm\lkL<YUS$ҞݝQzF䇝\%	QenJyb.<UMeD9E%WyN>?k7>փ5Պjxy۸~T.ceSPW;`?IDcwxe徳3~	1R<#VO=+xr'3ģCq*fVQ.^P*{V$(b91d'` M߆Lkwv跌hgT(`ЗL*tfcmʼVFZw.x	<{g$ؖ-8t=Br.3ND➏6L1b#<chmLUr@)l cdf4H_EK%=׭fQuH:;nײeG^<X5\zyg
.2m:Gs762a>e9o]iO0FI^B
B D媌Ǜygef={@׍yPx +8	l\!g	W3ŲF}OMC61pD$6-пEQnq"uCfN~kG"3,5gnW1}E+ ~EP!߮oyFy=l	`3l	`;	`7	`<!6kaL9kW  kyM=Y']l&[l'_&U!}a@1-E1>,B.&
fk@:<.V~I&'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  # corner case; this perldoc is just a stub, not a full implementation,
# so no point in trying to provide a manpage here.
binary-without-manpage usr/bin/perldoc
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Y{sFմXbŮ5m	{J\J)Cr~%EwSMpX 7(Ӫesy+J_F"6W4^Vtl#wzq0(-"Hؓ=}7}Ӗ4
	$PL$53RDX9B0ס8$dV>T~37rןS"tj?Im{}H+s߮BdmHHR!LDbȈHcźuD?M"FIK@C%[ĳCFF
]VI'Q 峟 =7#w:K60@NpM`\w*ȍ
6%(-d&#eBf|?$B^:l~8ΡD*_XɌ/`$"ïM2Է^ԭYVȞ_Xq.$Bֿ-̔6`+[qz}=?☢I&j@+*ɵN&)1I^oΫ8c!֗ CXfSQ^bT⒳2U<v͝1f{.b_G9Q0)[p B
>07XuSϐN|拐d5ÞI!;!LC%ˏŖO$}2{@|98r8rSF½:>E*g2#"K9[ΡIF1"{,L L+aLd M4a,`{Pij.}:Gk\.\E%B<bkկ:e>G]SKxVi+xtS>=?o^k6~L4`8g[eYI
NM	7u~$˹wMb4"\X>Dջ~bMNsl#á<ZS吗(Fb>gﻗrSRR'SJ'i,(n{-*.U3e~`_dmtͼ0P]|
_^Ռ	*d5Qo&m~'RׂNm~lMը?>kEި9*GKSn86vHpVS|Z{/QStqD5LxfX#\A(&e5f^|pqc;rtIz}r.eۅc藟	YP*l9Zc0@GЬQtEɧbF
oEǇ*)PDl@rǻXfvPh[+WK2h^>uՍl)d'([Ǯ2e+:fkV8TU5`I
2yǓmYvqϪn~Vy{l}I&vK{v;?<ѩt58trv*@
ЭTHխbޭbޭbޭbޭf~R8(>ݱyW{>Yݪ'*TkoZfUg%+ȝ3D]gʰE>ca?8jhqE%f.7[B='eQX<X3P1pY2d	9Q%7&3O%K,,
H){S#
[ϋr6_83Pc˹?Tu/!%̗jfZ;=p`b^#1LzvDhb4ds~!;PURRՎ-c2gs\3|5WZ^C'Pn
uEňLنӈhZj,*3ZN뷿+{pI]|a`Sjt̉C!OBxhd)pUoT2$N%)}lʓ[Q嫠6yo ȍ̈́\`,!ְіgLu#=VHh
T$3DVުTgf&n$t* )&3uڔ&:9Հm^\{CⰁ]gU_aW|x&b aԁ!au~o&qv@gl#5qw#F	d5JS*J

Ճ̗ -11q[iu>0
dvކ +;sMj$N{Nq:wUG|Nиd/v12DpSffLe)ȳF>[!\Ny_~+PؓR H~N%~#llpy;|w5=vK#ɷPrryzLR}},QI8*Wݽu嗭V/?"~sW5 "!!]z}s_<~wJ:(}ϑ_>Rjp𫧄.'(ׁ=<Kw,Hu~I{F|&?*D,(MWxr$vɵ8_ޢ
t/7c/<GԛU"U&a֯&Z7	OO3򿕡zYqc1:)p![U)UpK8	@0tϞ woePчH:{nw?<lv?WG:Vj%Roģo,Z?"4ɛr*
(կy}b5?yiє=I	˿	S.J~seq"rMS%I;:Iq&!]K\	t/#/qb*=                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Zs8ηg$1Ֆn:EٖʖT1_!H)@QnMj<6AПnY,'Pe1}4tnd"^g/?އq)cϟЏ/d<Yd<T_I<?P> N̪Й)q^DVX8u&+~J}nJިEʧ8~,
y!z=?G/g"EIgD'i2Be#,K- .UaY"xnuELj&2BM
x<v}P"R	iIkiZ=&mOŲؚidH$Gfd"Ԥ@)(LX\\uJJ͵~v~>P[y)%ihQlX/"߷J
Eo:lg}Nt'O}׵0!oBd	#ho_(zt:,ca6)Sqv
Zl,oV;2AtןpOUԔ'G*.7am.n(}=zuƨIQ_"7#yiPe
OeW
>D`iu;"?;zXm<eK49.,i sHbP	 gidzƼ"#%J-=ӣ.Z`C8WL'o&Yl~yM
/ \2짴$6n
_t#1,Y͉TdyH`̯$]!v9ͨ	\)U;<49"VC!/;lWN7/7l6{,b1 u'd0)p~Ly o69v~ >c|3FF~ONGI~AɆAoԽgoqp~z}NTKO8Q.rduwjM/0PFH(DF(u_4qnOz~!"fj{K1<f@olpYÖJX+n7oPRG}VX(ӳ8&O`}~ponkܛ
Y/gxI*RieDFf
<N]#<O;w7޳n#%"#94vmҞ/øgPK&I{L-!%yJ$06Jͽ"deiQIicAH`ZE4feGR4jwW&օad|~d1H|0i)}:2Uwq=}j߻ƃio/,â+7aWs֌	/ &.܋Sb)AB0`t
mC[/a^3xU|z1сx ^9fgmp)QL"0tIwWose`׀B	`Nv~fGU]IŃL+fgk;T9k[넽oLJOwbf={@wm~7Áh#Ml9A8EFْv:oޑMxZ2ra&yTְ\
FY3c&RsE)*Dw-d˰
)Ͼt5of~!jÁ,SR-'LYisJxд:ءtL@V1ZD9#G
Z-Rv lכA$oSX_;:2O`@?0N2M
2!]6t	 t6#dI/%e<BO\<#bĦO@ql`#}uP3eT1%vISB5PSy&luΈrV9jQea<\'{.'?\O*0j27]'{1b]n,ĉa2'j(̣avyͿ+~fn7Mvܿ o#sz>Z(2	M3'58BA}gTLaW_3kV>0>72 yN^|O qWVF	VFˆ0ވ,#Zf(ŇQ_â
pB
$țSjX0iw*U<ߥfyoCxO\pčGgUL
k27i8"yDxT[bT3cdǀTS
Eպ$º*F=v{ _<BT=-9~TZiBva@ޥBr$hwڿ5i.6i&NՁmW QgT2|FHyowHõJܔ M)AY
bb85
5[ԪEEl7$-5KcK=7lhM\o|i{]Re~@9^Tm2i.2"bcOzcHvQsTa*erXD PoP3$
~
v nd
'LQǎA|XKwݍ`ƺ04d҇0aV^8BRS+O#AʸQ5b-z8olRPqG^]|6`nPGyC plUA1-3QB$5v\]qYTV%!)BlsSHۘ%)Q6hCȡ7Rcr$E8	/nyȇj"ˬvv>i~XkWBG];GT(&X0i}R2ClhLBMJ-V2)YLbf*C~ED'f4iD"v2fןE):GލOr%L>͌Gm㧌T>zaLQՖ֮K+k*]Pp4v;0˲:>le81Q\؞U$lӴi9g{ݖR*+w6Tkk]:bdsY;oaa3#`*38%[tmIGMeZ)w:7lbgӘ2
RDwfPM~$]_`xxq&KVa&ܜ%X}ژnI%	~NĠFT@x(Hw#~ra׼yÓ"[VtY:"0"F< =qMEUS4[JJ&F޵Lf0#~YE;''˗ԇ0NtHLD<vW'(L$r'홣kw2՝٠ ?Ty!
Ɖ"$wH;I~3jO4Xp*X$dGgTqWg4\&]\+o%WP+JV%S7c"VFOOxG{ 1)UDBC־87}X_9yh|s
Z~H} -64EaqP
M:뗲
Uէu]z/9X
lֲ!nhWH o!050u@..^59IUp(ED(5K dp^Ո1hթñQo^\<\{1߽ƷZAvw;^ugj0to/vTU{gTD*ʀJ@0ZMs[,z[,0K9
i`,uM@uQyjRR|4e8wɸ=ngp&ڳBY]n;TDų<
BbD[
]]Őkow8Oaէ5kR)S#][>26Rhؼk9cB
&9M3	3lfA^-ڒaeuMo3Ws|<mۡ9zκ7>*6lʌ9'&	'^78،ޤp_s9}0JnMAۖElާ/Ç6~\w
M@$DL;dsߦ$:8	,6Z2vJc/G
ߌvs}<nCP1|_A˛J`C%׎{H+]b0nUfKE-H8)<*
"Lԥ!*?Bu@G5ś&GԲa!^!gWf"5<Zj7tVIPpkYqj7Gg?=t:L]]rJO		՟F݇ݶ gy_FOj2}\7ٓVhv,OO&ӳ-aiVoq -LX[|S@
h]EsT5/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Zms8_fFv"ђLfص,d'=f 
H -"ٛڪsʎ 4F/;,2=k1WJdbhztt%Cq.G28pwCbp*%@qJbU¢
KOBb'Z*2;@0&RXyq]yBNţJ&8R)uY*_7WMxHCp#C I,t\H/UH EPjf~]4ùvm4f5EN	Պԋ:Lhb.w*sRj2iѳ߲(UuMğ/
J#Pݶ@"=(2S;tSFBnGgNB%j%J"	>J? Z﹠ݚPO1
I4ՙSfS`˶Ӆ~:Uj.Zm=ƋZƺ~g?&+0!؁lB27#8u/w[6>|Zs#jW-)lUvxfS#:Ѩ6I*xW-U%@W7*UvɷӞи5]p×ǈY-Ŝn2.n|tD;[+62ŹH}Ҭdj*!T=	BHhLϘXuo/b$Vi8&Zy
05εA?30|LYlNH3f&(K4<{e$BM+qyJk:4Ru0#SK%Csb7`nccWEEBN.Xy@f11LDr.2	Sv+d[W?x^l|.ETvD=NqA{u|dG?sk\92MpGߋ[!ӻGN~h῱J=mb8 \.j
32W{4@*,	?23X2OZu˫a`sfµXhQYy4%YyPSFbsq fIqc|^~}M3(h?2:`OۘE?p?
Q(f+Z?x]XI7ǳy|<Ii΅AY=,;)L:9ulJ1oP&{<n=-Z<~uNkZZ r7PX:"F*gW8C9˼q@NaD
IsFB#u#F@M犸#GMevCa%o, ISڇ)Xbc2)`2T8$2*䭳# `H/4er1i5GGzIN!k v8d! s;%+f[fH|E|+J&s
Ч!`ޢJG Y)o) Jf-BK!a 5u(taJ)^
ad{t~<9'ɥDѪ.w5#3za˵Ԟ< YI;f/ᴏ,'wAΰeLmv7" <f.u);}3/Z.I#Yce]uΝl&@広Kk7~A?uήz۳Pp8'(e'+AJi|=i6/#QQBO(2i?(着"6KZD=s"RJYzlԍ/6Ӑ~a?N
MekXEdІi}P
w7
G||/ool~ BIƺN5kq`|-h-M32KoK3':G{;o@Ǩ-LS?a|ti|s}F>FH@\C$*TfP(BԘ*It
8$NI[.΂1[pq%eld9=]K@8
C
3ի9)M@ыNOnKtD[su7blxG>0YhP**v퇽
@űON+6lYe)
僟?	
LM8RrڦBQՎ)ט͓*o7?[,J'7L)hb.`\)JK-r؈éCD7Es-HN$'9i5L 2|mFlʂذ[&ِ9xd22DĢDWdz˯g_o/;B UT$cez~ttR4$vL]]X|Qyߺix؁7ry45VIqv]&`=<9gF슦;xG[Өd|wpWO[WS2| i}Is5a6P#&l 9#	,U}0$X:Ei8fY<^GΪ3~I&Tl 	u 3!%Q@Y0 ЙqsAl'UeO'7WmM@ jEY!|f[#2%޳91G
JkYbJKBQ)qe{GQ8ރ++$r1#FFSk#Jkc,PO\B*!DQ$I#ì4X.~|m
X*
748b1ez#-[_2TW&?qA}
QѸnշytTԠtK~+K?<A<?Bǭ͇ˇ䓋Pr$'0O!tp؈bru&gɻUg`5<Mģϝ-CmC~D˔soxv.eW3C4rq+ww[iϐ/*|kb
Mp=ޝdpm2M+UUdj*JM	Ks7f^
ZF6?̀`~@e4-0 K $ºd9oL~mYӃZӃ'`LA:N,QT >Nضh"FnJagb(NTNf	iP=i$Q1y"5)Ucc
27kďzY4B8)㰣ܫDD`)"7mŘz|5,M)j+	?tfOjiV	s?RԨzsl$tdjoՆYcH j)?Hn)Zjvm)>ㇽuYEWN>xx7APB̐
wԎ?e]\O3xl4@Ppc	ʖ'O&$QjV=ag"ruOطB]p86yΐX:ܷSec\*J0,*<,Wa,XiqZ{nmqKn;nn;V* 2RR|Z+3l|g@&
b"lT3bnP08L~>vu(XI,TNSF=>nEŵ]3Gɚ;f$Η՚ϋD{a(B	ȠFu!ٗ;-IRg	W"PN<SNKl<T;+jiG?B$w=w)R䔱׹̠.Hs
#Rs;]w|/;\+ʓNSuBp/T$wyC-/tQB#P/nON7ql9(jYPlpk݈yA6-良ԝ|סuh_PHt#v4.fMTJ5M_R'c4:l1b&FZB"Q^r[7TYvխ~
jU'7?o'̨5W벚;>7sP(J8DYD~xE!$.T0/Ju _NU?烚J%|[77_F&!]5 `kpƼaP{²k)OltP< dȼ*kj-J.R?2
/CWq:7os^Fmoq'ΛE9^:S|=Oe$$X"O_
v_/cJ	a6L{o&IhANL/ȑP Bi)^(	^0t6O3
O
 EB{yBӈ/7}'I1&	xmgSh@Q6I_`@xիئ)Do66_,KuA_O4W:nIlF|;<^~uּl9jDܗ,	SM* 'P/ }xlܠ`.epbPf%Ŭrݡ |e<O+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        WoIeq$/6Z?y43=2FW=w"a]юW¤0QLd.hq7"{BMtUEペKI \xɾ%EHr32΄/Ʉ|4Z30!Gg会U«XY',w9U	e>c2ԜCIB|%yދI20	~rdoHXNc5"Dž
dZ\%Sy/6-TYQS58LE2g\KгP,EXAAZ0"5e\Mgfdip J+
qb 2e\w*HiB@&V\i.ir&;*+_*C
O/ K$Oðe%%}L5JkPfF7o|PjNoh;yÛ5ݬvploB`d L++r5\?7i?ٰYqRJd6^_wVp$Usd?? mE_l+j4miT*P"
)1iLSzC;2ETbƍ]7:7V<
tA9vZ(2
NU}-|"X&(y+LpuТK]LR biXQX,o޲;wp]H~ZL6s&ȕ,O}5_ɊJOt[b)3,"
0Y{l*h9r8	!ū*XQG[:
~x~ѷHv6f/6kR~41e}ٞ'Ախ9dvv.1H
qcϏ>c廡R+ڬ^;'H~p&毜_c^t8f57A߼,T ^VŔL'đZhBY(n{-Rog}R[i8ܥ$KޱYv N՘E@.	ʓ{E۳a3CkScJ6ӐBn|?wGwlm9b*9uc#;GQGn+yLB)J-Ekw+?È|Dh=]ap5tyJD@jw8ߞ85Bՠ:5=KHs:T""q*.ǥI_K+v!tfh2Lrb@UA-6-i(7t.o6{:&*regnR0};I욅[ v
Y*;Wʊ=e\Pd@,|H	 O2dǳ0T*V͉yi6d@`?[<M-\r$NL51v-mW+I,rǟm,ceNɆGTBU֯e@Qg;y՞W\p/rn[lZ<b\#AD;бǟ
_/rc+;+s;w)93A
r5,gdቃsd3pdwX%\bZڜe#_ZqaRyK;-оRZac kw9:!qɿ8Lx"*) `uк.Bc̕*BLeÂj1TqlG(W:D(Ih.B:v3ٵ{n!+n9F2Zף9
ƟGW92He^nZ0&kqtvs8n0x<Ygs	嵐(N&b8HOFoʧk<B8s:}mvR2ӷƾóSBm9H}^}}D4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Xms6_ӵ،$w7IGkͤb9/2@$(B %[rM=,bg_(J"esU+#Jl)&:}YG#1ᴨRѣ{AOLSiR%Y_DF@+eXUa(1U-Hd:Z%p"/xT("jFyQ23_	> ʜ:ßqjMu-7,x!I#W.L2Ytm"R5FB(K5/
E[π{	hE*mO'c^5=lIQ̱TCf{)ZUHEFcH6G`\R4$}bY˕Q6Jir(imw^Q(ǆ.p[mtZѬY̅bO3"{} WZ(.F"<aGMۃ=㍧Oq ݄MMG0ɣvQur/"ZocmT~-!%w奭o6d0XnF}s(KrPUMCyлwAGt&Q¯=-9,K>bDft%ЊFrU~#h'?!tqF ;X
\0}$Bˏ%U454J1D=Ox0n/E$pJCάJ|*SJ,&"8&g:nEd/uKjaXiNdҭkZGHJxfm)2)V.tS98xVO7k#̅8<90=9'Dqs>?99[oX6^~?tdO(g.c7xJ ourr-~܅8^IgȄ78$ǓKqKΉGznL)1pbȪ"ݨF-Rz铨py߭uEJԄ\|٠ӧ`,^YuLh@O8#$b:i+pF}A@Ubpu ȏ\ t2ޅ

):r2z2O=lC=C~R{,
R[zfg!{ɟ9*<o߼
8ZOG7j[˘t}T &F%/mS](}EQuBI[3-ڥk7ZkuR)ulI3:^=ٓtkSvijŻ(BF_r4#[ӥ9DєS#rIr51
h8ѱF!eg5E9KtEiq`}gk)@:
~*qĺذChMG>(tmY5Yf'5Sj1ءe 1|y0C֖K"flQBԵ%_IP3$zgl8zHY1
9,}	{Qoݮ5a(vh[SJ^:#u7"!E'=kFB9hљtvkrP\QoKd xoi${
ֵ|Ss{e1Pz%_t82mEO2ɵ#]A	D7+X;46"@FKt` kICM )w )tYtY$TzgDߦLPeKrlb~;Nx-hՀ|VV(%ٰWjΣĪlH@}#
/@7MUNC,K|qn2f	'0W78N[ʥC@jũ}zү#ClIN .OIղRWg^;_]{!.<Y<KnV;nF_5)m<-]X{JmR%UӭyLcE?RlG3(냼ۍ/Bق*SOm~STN9Kjw{^E[(TS~; 8]wՈ<m{eh
/ի/Wۥq5۸8I??)zLTlQ܋|߮PMO_^^lKrN. ;<<WhǌAI知v߿d3@#jz
g/9ϜieI\K|P(Sg~	k(HAĎւf H!+S
L%!j݈%܅*YVKsO7WJש{^XSv!(x:S8FFePXZu/Ȋ=o#R~&#Ҟ6O9rGh	
THt ]|Pt퓿رm,:%R}lYP,饢\_gU/7_>y1==]_m 8}6Xx{9ˀju/OWR+zOOӀ}djj+\B                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       [{s6WTMvu;co<ZIe]$)!H.,dw #mgv;*,H&RLU
Y-E?_T<]~<Q{A8bPt,%D +1@W*t.#%v3LwJQi%~QP"|O)=aȰޏK5SȟR=A8)ه L'OzExÒy"qC\lfQ
Q2	e`j&q
^번ө>"N5&*cg]ؿfR؛7&E&%g\e|Ӟ\Yٚi:f!H:8y\B" w*EI
cQfbR9Sdd7G'4ClG E6tR3FK ˺˙8ȥ,pهD8>ǝlwu>k-THAM,@; qyjϻ#aU;)8< 2mwepm|pX5t꧛?ΨOd?w|Ύzs\	
:e$$-")I}GwPʦ,7bݔuD0ѝz	i&ÅFpЅ!SՓP) fY
ƪ(Hze뽮)8G]+ CkNOހAMxeR}
,(

^f90SJ^dҚHbPYUUI0;vSs%SsR%b3ba͑,ƮÅLyc;;e^ޱOLQ\V!ߐǬӓxEjcr..e䳇piXvpa$</:99jΟϕqԌw;qK:$:C-:GG/za\x|~ }zٴ9iݍצ2b4NTU
?+]WRMPy,R7g~F>(0a$]9ԀްGV,=΢j]֡r,URky{zu	fGOZ{Pa1ܚdRPkWlȬup90{mx?'/	pr#>7\u>F0$>h3Q!xTHOmp7ï׏/$ǣlzA/Q'pRrhcm@b]{FIcTu9Y(euː GT
"'Z_#	Z i$+x01US9WD䶥8M%V؃I-'OXILXS~	-}6-2yL/56\ )UؚuB:ѥKgYi/q@YΪ\PoC\@TD3=ErKYR@X[	`[q`g+fb$΅4N6a	3?u*.!)1>Qiʁ^.'JJ:Z""Y5yT-E.!JP|e$V{4sjJb51LSbje`jKUo'xylaY]@z|b'
Lp2љoRrߒeUB9	ؐ^(1w)KaXv`_tx)Vvu9<.= o:Nﴋ܍&s:5A@"(F[9
EGL|PyhǯP5-
9mҧmJ9!4!H9nJ'xI>
.V*zer R.CS9UiBzk?[
N:UzZ2v6DXYņ@c&kc^_no&lIbEHom(χI"	qB71$G6(i@@)l3U.o:G08(`}($mLM?{"2+lk؛K`Fr[aSCQ/Ⱥ!L{ɺuKw?wfqs0OlA z.M
ܭ{үK!!Kij䫠UNû

t"
ɾ.V|}2_wsޛI 1GHSbIo$IaR3Fn+gɣDlIO%P!WitSA.405#Oc*, ΄o$Tp
ePK*:Bǈټ| ]viCʎ1h}PßǦ@>w
>qA)11_%?h@]BL71 tXiAQ/2WuN\Σ&Y"kIZ~2:&7sapB1@rR"p%Ѓ	"S-o8j&A~*@nzkb0kܒ:EpE9#=,d~1u32)
L#sߋ!
tNn'Pp洓UŎtdeK=oÛLd|ƘsY632BqlD,* ݪ}QaUl]j2:
FԔL[>&56l-6n+B!"i.ɩ+u/vjdT7t\n0Fa[1WmHo>1c5S _cLt;-we(CpZif:2[>nk>ljړ>u^Еt|v{]c<eo(HDjH6/o!K2Lr`.ˈ#alxSKT|S&]n!h%J4oQ.f
VMD90w-n
 3eWuԾ$0:XyfN L=3}8C7KB*A6KyP{ vK.0T[S+gEfI9kˁMkJuA+:DcIVqjXsl.v8mI6:S%#
KˉkNާS[1hm|UQ8#*jc*4Xwkџ5Sb+t@ǏD}kR$9&qά=J#Rm
YuX)(Mڷ4_J,QGA@Jͺ !TתI,I*>B	s֡&ǜ؜:bx]uaMT<&f@̴{
'{O:+DD$:ul}8Huk
N.y_:;ZJB>cmX6w$bjgmN'
[A2
lQxUUQ$0~eN풁isu詎~ꩱi頦 .]I7^
RU5)MmtP[\EIEV<.gdނP3'
B_9&hҽЈϫ3雍nvsl#4? YY]]dV;amg0#s
HcӠ&F4`*|}2]^H+v3Oa՜Ne&6M9_*/{h^+M!{׿9j	{ܒxYb^95)b
E*bb=YU-4 `]9Zg65-7ZpROg;
7-Z
H読}
Ҝ1Qo bh]M`-ܐ/&og	RpF( 2+ݵQke\aai*γOOD;7~Kj
.܉ӆ%!̜݅=)Fq]CZdcjqře6}rwvJ+" ;\TrԖ ;6v/m"UzZav;j!(]nhr`wuhXFϠ UdM+|9	Nvڗ6mH:HV-Z$uZysLyNqqoΙ*yVj6$<~	^eT|{s0EQl;iҶ-B}`7?I<0likHb+-d醯^9RfX>ǀ'+N:lOe1t/Qvӹ.P6*6^5
=wv)tf.q.L[]Axp´dyI&mNz&h.őϡ'C@6QYaN2s:{n%عKMXdrbsucNwF+$D?]_;ߣZw =ڤ<'m{u]&]i$JԜNgǦrVG(\|J)S躗k|:Ie&iAbߖk6wWMSO=E'Z4jV3iFw-Mln?ɠG	a+\>d`E!\+.;Ļ7WM_It=ӫ:8ү+k#,Ί׏b@3
S<ҏ~^Ԑ|t
fڑ5ہ ̬c3
*9Wӱ߷@qu¿~K/h"­Nhڅ6h;SB;6@f$A2jZv_!~cꝸZRJSB}L̊S߆
s>9j;ttd~3`xe(s/Jj$%m%5+,VBzov˒!V{	tvDshp?U%ݏz]&Z[`LU=vU:q}U?MQ7Ƒ6B+)E5TzCP=tT u[YS\sY lxLaޘՐcw&jMwǄ.?a	/Rz#|{yw|C'KJF&b$P05ItIzL`h}Գ^TsGܜѝtj}GHP>
I2j5U.-kt+FmĮ^ے\{s;|ooqe}!8Wv-3NTٳ=im>>-=mG0d~FYQNl8kaD(&k_m\O0rkUgj#PԗęU@Xz>07]n3MbG%:T:-"k}fH1``魶Ȝ-]r?עv2뙌ehN
F/quϙ ֭eGgEĩL+ɈW͝hnhN7[o&{)qEpEle޸/>sϽ~ۤ`d4p|ZpdGAm"%Q' Jm +| EҪ7(_TRĎl'Λ*		PWʛ6`<&D{ܤN}JF~5$'Ć4 tne_?#K3	
"FϻNƞp֦5':u6
۳4lL;\	6r9RXNfC)$%ĭ p]T?^2u0=^eFKx\ȉeZVq
!5Hc]ϒ[ln(dQ D;\d>B	'dtFJ7/ۤX#]ũPV$iK.`xMga!_$Ǔ@.E:qM<+UBjw,-ǻT.X.~nr!4;3Xn¸8#gZrZF8bN/p tE@P1n_b
,
4]<6p'ƀ"Ϙ]o;lYڢf8WdVoZ#mQ2lnm)A'sYɬJ7%cB.]p2uZƔye4--HR `xYOv|oToZrk٧rtCVFXMRf=mmR2~`̀KJa2\d3 `#Y&Udz3[w.aqR0zoD||X	(Vy#csPWt6m@y#!/ܴ`G
5I-28D
}}qq?y8c`@wWq2N9YѡZNՌ<Cli'l>3MGYu4cx͋ǥLX4788my)HwW~,#uokW(%$kݛZ
ǲ,˿#2+`DT*%D.J                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 VmoFί^M^U=N4HwK%b{]^{Yܵ}vv晙&
+[¦Ȳ
ZXrC"E~ZN\yIz_<iABEBGTj)e&N=AIZȏR;Wɔ"zHIPHs8d7%NR,5|a}\2[J^9Yh~li_IAswI򦱊Sgѐ$S+ZVjZ(a[!\HƩBթZ(8mfZk	c-E$l8:ڨL]@'(u@QQ/Ua;7:]%Ȳvht!Ri+`1ej\w%(5lo&R˸В
kfl=n#X ;68>wH	ZXǅ&4zy6Ri8k/HvmUPHBAinHG
T˿\T'?ms;<Al'\~pC8lMͽts$!쇒ǒ?
_f#5h<zPtwwxtpmGP#g)j˿uӊ ZTWj@qV.Z/N|PjӘI~9GTD򑤂P(Z3jz6B˿:9D
`TK#ú@
Y'u}\{T#o8%B8),*mPٛb72E1|%UT,[:µ\
xUF1ESfX%bynϮ'*MzBׇ/+]דcj0蜜<՛8ymjhsrܳE`zMP?k0`?&{1Iw
?xq䧟9DrqE]o@A^ݹ@K3Z_w YbE3nd09H	[lqnMcLZ&);<'׭84؁y4jC9+70QnvGEX`wYDРpHy6
	7uY@<XUϛ^+#-⸰;ZYo/F7tv}p0FISfߟ};p8+[k.M>Cꇂ\bZVHB9b:7Ng.2٠(s!mc5~ܨЬAĭ'7~1mc[̞zN4/q
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            XmsHίS{
:^Sb{UlSyيR #F)Jag$leNU߻s8:0\L*
-4^0vBё>=QJ:tkFZHRDPv
OzjT(!|)S#*eHڻKEw&B5$w8`O,!¬jkx3,PG彮||$y7dS5Ar 5$$I(#5hNB*#m5~`Le.^IwAV`!LòLKS8Dܩ׆4ΙCk0z9
fsilD*@0"	4<ug0%grK2~Jwc] dw:`NpJcoN*s@	lM,zN/:%oWM2^ԽyN^^ve!$BGوn* #	
=(׎;x!wMfvz~
LxZbשqV^]yUC͕>y{2>U AU+UN)(*i6~-1crfiь^2FTCDnf VS@뫃>G&Qq"(2uN>B' $$4г{~R`#^f8[
 "^} ê<${d	?<csN`+&qfes4E$i<Y*Vq\3CY2I`O?GB0we"pHbpcCUleYݖkSUJL.7OϺ&gǭu³ڄ_.uD6Yk=O}ic(/u|d܂Qg
 -
rc^
9]]VKr:fNd{raRE{GU?TZ瞡RRJ:O_3еމeޟ/t]q|/3
x;.\='yܲ-)(99SKiv$"N\K>j8Mm@5{dk.o+!~umHD>fXMcyp]۷8RZNNGfpu)F)$V+tF,3PvV8TIlU%
ͦBwk7s|x%$@5'!$p!Ц/P' 2$!
T(7Z/ù"WF-g9j$9V!5XB/Z<RB?jts2ta,Cwfw2FVġ## Ć-\p@d!7R;C;^wռō:[RS1Ia?4PL6@n JD١zHR2K/&h3+""(ڨ2ָe*mc;\څ/2\b[pn(Zr7 ;x!{,WLq1Sa}6/
*2/-AR,B7X]L~͓y*jXiU*dMfqb ÍkJZ4FOD㾸
3Ynv
1|eAQP}`W׽ӭQV2-kJ\zL>}t8vo_4x;GۓO>y[i\hLI`S`8ո(r]>e{;0?
L.Wos{ġk^ך:gW6/_wCâ_=vf-@Nr<yuy(^-ɉ8V)d䡱ٓjRjk\AG[}QWz]sRDQ;o0N8=Wß?PM_@i[l @1bq*%u~*Ѫb_({48z _q0CajfL`E%PquksІ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      W[sH~We.1hqT9Ĭq&yPӠR[&NKay 9 UL8i'#ZniG	MPYJz8apBGDT)e*/</tHҢ ]*B$7Դ稴?i>u}ɼ^˵(gW	bG@J
ǻK/]+wU!IA6ϠW"X9imkw"+
_[g^ۀ(?FgVT%<Y	p>Q<myFQ^/e!QPV
MN*DZ`Q(ܵ e9
t%8769n	BL[(:Zl?a&s}uJ`sa\B_^!.PP&co{a^hgihG@H!
vx L5p:!7ɏqvy
<߳~ri</Jn~؝ҤݝNp{Soiu>a_fm'@-ӧ^%%Qwk$6h9B-qWC3Zs{#-sT/5@[W_PY̙IS2j4@qD+I
=YQ$ԫ[~ps2D
`-VV  ؕaVTxVLϨ,y
ƴKcQۼd52E&_Ik$*/]Q:u3ߦ2)4)(S(<r+H)Z';xvM{U˜}=Q2S>\O ՘pd_otiSo.{vP.g]DCV˳Cv:?O`S:8I6/wGw~C- uFg/s?&Ǘ#||mDq]Wcr)U$ O-vJ48)S1&-')J7bkd[`z?znC-eH,W;WeA3ED/
jqCwW]w;ZjV![j]bZTn6ݾ<v	>in1)4-o<savA
&w_?hpd-މe.[Y|W6*v5ס0ʩ-СH} zU,m x	~Ϡ|Gy({=>[lC!-7uqs-[bT+v7	h .Y=DXZT2}"ICB5H"9#jpy=#ǔ8qlZcy*G⿣v]%>M	+҆5A,b9 Q+0O>m.w_?moSVyY@u%P4fXu]˪yᓊJOݖ5Rv;&(SGZ`FU
' g]|_)~`X<sr-
}TUʀTU,5*׫oEV
J(]29rt&oNpɟۯ?o2Zn;
J׍QA>G<塚AHsֲ.碌xuL]ݽzs{81"4۔v`+
?-~9(d8}f*UUZz(͂]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 [rFvFD/q#Y"&ʒI-*MI" ̳̓n 8ԸJh>k;yS+]g󭚛X]TML>VImr|qœmTTU47OeOFV
 3VPU҉QjcTZ5Ψe3UU*r-O8XM	륙gZ;+Uuju}35ǣ#Ï^=ߙl$70+WkNjcUmur|VN]UjfY^fJM4>=U,<[lVM1gUvn~S7ޚV(-~)ks"cf`G}T% ϱBWY
ܹVRUtR0JkԦ즀Yν[D/X`<R[aD e Z˪XхMV/ųKmdO!Jd}t?ZMG;}y{׽P!$nJ m<)'ǏV>倫SK!`=4xh}pj2uOO`{OGS;(6>~js	zNiKte\[etphb̖+5ԏz,abjЁU,r#­N !	G3jTp/T.L<YY XK9^㻫0oxGLI+-@׊ձO9@@]²DqXv-0SJe8GTUSsv372 ?gMf0S w9_NՖ;zWz
p0֋u;<.z(~8a)y$oh;{/wϢ6~X5Y>{RO&&GD>[TwkT_XowuHn^#]Q?|'0}Xpel__9~>rnjE{gfM/KxJJUBQ?5fTPzo/
z\'аZWbتo/dQHNˤYA]܆e*ĖJޜzi3WS(7d
gqњܕ[ue ;!^쯩?09]Ydv^5p	f_GizZ[f־
X,vݎmwXC6vI{$;V B=b-/#O*˥Pt;X:Q׫׷o߾ѢF-L^bHOd7<{
bΗo.ӆeȒ|HX(.HqU+ج`E Z5Bj,3<*d0]mtY4M`WX4ɑf%@PcY\ j\<P^}8U˥4v{1OzRMv;xutē旞ajG-*G^^ SN f%\S	_qL*?Wr^ή-Xk/m#peϟ9p<O{gW{!f
r7٢+90j1d>^N8ZK+0",+,OK:1y4qtUbEK'Qsآ=XPV/(P; SjZְz=t+Dj	De3_0HFnd~r|ǣFl2F>-igJbȆ&ʻ>_Xw\(IY̲yc^esUݪPV$y2{nߓe~C]xK(YdCOQ_ߨ[$Q ;un[z# 
FSfz	fCeƴOC_}SK(6l6qk(^U*x9Ok\8's:vA+uG<L N*5UAe@wBu)<׊Dmho"\&5IVDlҟgKF!*1'Be 0,JajJ#"s0cM_k\ÎyE!؀/h'#8hVSxƈ$w7sf4^tdBEzy=pkoIeraf"Oj"Q+v.
x#W!3=D GQLNC'ާx49[C">p:[jVYJ`Af>9Ԁ́Ll,I+U~Q~+N|ȢhI40c(JG6UǶQ;/FIf>⫌eUz	^Պ3;
R"G#e>D:E>x4sADQu{@봩b<}oX=`G$K4D ܞ:3B^X&Pfv
B	Il&5oo*"b#6K'pԼ$o;KLa܏QjgGɰEWy*wGS&${~6GL3j%)ݔEI(&v<};~k}4ihFJ/Y5 pQuu
64Am+حx'2!̝9WzCfh,]c,`#HR ϦVZ;mYBVFН&J'ώ4_$"ohLX}#>h2+VD0c!w2"W
J{w\H:w+ûNH ^ӧ`OWχ6r`_4U1aۨ9;~f"{#{G@$p@#mVṠ&[b>4=-\we:(	ө2a4%!LX.o޽~J5XhL
7KV;,h	wq9C T9ȺCD|h! ,DIBw-,gM!mU^
Vx]#k5j/0tH#HG;o&	nѵGzRI.wc̉bi{}$EbTI7ڹ_%ׂvd.ץS\g1lci2Xь(cKNC	$!Ew07"$If;>c_[i<4X(A=ȷ)ː.%x1
ÈqN*PW@}7'>Bo4;8Bd1M]?<f}eXs@H꺒_NNI?g# ":{b<cջ_N6IvٹkLJR {w3*o頉^%d-䠝g|fH|sudֳIr@J/(Zf@-EhP7蕡&G1XdE{ "γzۊ|;,<!Xf?x:)șζ
5+m6Ϙ5|3 }F`OeqCYTf"oUozJgqP~ԏf~{B_5#fpyڅO轑pD]AE,JK6֏wr$JN "dCP%q4
 :äFz(ײʽ8Ҷ?qC럖`& hv\@SO}%(D	Q|aV@<cƠɏAJ:r+j?+2Hep9䛑th]S&K7RRWE{477Ȳ>3yO$r!YR-$w-/xe#r&	CLs+~l58$FjhFs!L'm˅+nńxn^%3mܖV MWeA)[3|ɿ)2ueI{09ҽ19>fNR5Uޱ	e݈'Y(ihw6:ʂOap2mū!Z&p&>F	2p.Cv6/&/+n{I*x=DlK6%ÉQƆ YdʢRSJEÐKXx0*8հ"
β48<ik(cХYG$/rd}7α"{z۟E N^vZ+S.R2ݻ,[&#;>գ<ꐨKI'.wzzz}lP{5(QVt#wm~'o!xq(z%PN7}mh;R>zrY9q_r͠y(8YxZV9hh`5[N~Gmõg2*na?n4I/(\JJ0$`BJ%(>B3^yJ3}v}6.3i؉iӍ}~7FVx^C'\r縠8mLZzƋ	i^vE>mr}0rdNEֺ&<޹01k:,?gZ,_8]vlk{7H]j'꾛wo|;~~Y
&U5[_2yc)VW%+(4S3T^aCW)!!$
R N`'c
Cn'C]-\SHKb놅#K@ԡgB?tT'r=\qaY"gc'f5=@i[C'2{Xh([4Pjtn"ruU>j-	/+'Lݯg}zVܯhPӊUժCЕoQn,\9	=
L-C2,/?rnܹo9
PCZjH+I [{PPvV%lڕ4$BB\'p8</8uRD=\v !?U%dA
meyѨѨ{0m	1ν忪C)ZV
YQ5;<, ׽΃X=pCpQt#7rvĲ8w^-)
S]H[-ҋԝXh/hd,7x31׍m^m-a_D\ +/ձ.z
o#h0w( lftЖxwAϒ=i=[zH~g^:%A*)'US~!i*6몙:`58x9W,۪i\*3(3"?Zdg2gG"VUM:7d ϷVr
AL(c6/NwY"27x3;bUq8.2|>B ܏EОK;:X4p)Vl
u:ޅnkCM&?.v#["U`TE3}ُ0{W,6>`K _z2lSX[-ep|8                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         XSH]E72V!WWd@pM[d,YRfF&udl\Uj%y{7Z('(Z(SѸJ_p/BV=SeLJj1+L} J5MkڈdkhuIU)X=YʨQE"e`(s4|De_MqhouH2̑	e#{CCl^seT!gTiJKp*Y^֙Qs0ۼ(DuLM9go\K8Fe6ЙAiM\͓&^C4ƎskE(*HDo-$7Fgt[qfTy{{wCk@TY#>u2K+Xݜ<C\Bi8
e8a<{uv],BЍ2V`;pԹoGgGO>>(?&rp{qaE{~]߼uq8zdcB3't}Xwt/z~0\hQNljMqh9E\CtQ-,+d0$nkh>!pu(cd)dBNK?.4Jhjcz޹+ЏζvhVy8mfV'
05Z`ToDTwBd/peFI̾VsȕTMQU..2!4Ъ?i
ŢGU[k'58xb+[Ґ9]6T'+qsz(H>:ں79xz?x-h.;dΎ]?Ʈ~OA_ hS@Ys? ϿM=?zKW!O&c2=@#km
Z>5pñZ,{qKTMjS0Rr)ƺ<CeV]+O[F[}@] /d^JNY 6ʲJ	9MϨwq-@bǨWOV걅Nohx&i>glB0r{^p2_./6eo,\:6/}E6Y$!!5k-_Hւ뜤CaRxVY 6#ǭO*3Mɹ&l<"4;{1ˑB8ėXв0!P
2kI&_qbՖ{y+ZCJ!,g"%d%4]R+Tݨ[ᄛ\:Ж亢n,
7l5Yوm%ߥD.&[t]=z"{G f
~28ˊ
L֪kj㟋u~j:$PML^GJ؏h1káǭ_[ۋ}ڡ\pXս;- 9Cj(@u1ϼ8>~R*[Rq6jJtLHus.\->^`}џ5=:nQ[+7Ip_Z+t8iDc]J9W0Q${D^+^4eqH^O(Ltjn$CL!|{xʸ1#0ѻ')p|I-b%VwFjꏨ+ng$4.4v)+mPd	H3:lZvGh[Rw[7{jAٮ^ۦ-7^
6'lLcAU7>C,W)c}

,G.Κ2iEV5(/wV;w|W,}['\q1H΁ka'Iyrj==7

)Z7pPr.tKa.pp u6Ix3RsH3;o&Y1̗""L*5
j"jwxs2"z:2ˣzu9i6Mck]T> 
2h1 o
T^Gl
;?.l6wA
ݔ"͝?]$-;^tH
wheyLy7N	Fv2T< {?!7O>W./hx<E@[+|WO#:/~XdᒾQ߼ r>/W9`.Wgx8:o:k{
g''_f]tMob:lvX3PSFN<                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          XsŖML*&QQ<yF3G x 8w=/M9Cwo?Imu4
PUh՜f4ԓ4L3=:
yXͩT2u$?sEӒDT2e)%;EQXt-F?@4&K)?\ʨyQfP?'ǖF<UWo:+_rT5$)r%aFVUd0Ŷ8-`kcX(7]ej.S]`yh>/e[TB{٠
yZ[՗z{q.	4z+iFOb(,S@EHa/jpz$ՅMTb]).4͹ZAG]R%SජqN	T+T[]j}~>Ji,Iw0,<mf_0lpGq{x M)e߲}v/Mvt:fuyԝUo]|	z*l2}yPq)MF93QX*2kFR+ӂ5ԈT	5` olX3?">
:x32*dÁD#t9TYT9 . \UC;&z^bSzfTRHSW΃qSV!yX"\W1E"A,f"L+e#e$tm*bf!i*Wa{uF1+,uSÊWl!,XRĢ%7HPf }q|7xlvhsɎ8g6o#B/u||͎?[svNko*-?H7!Lƣ4uRU-g/}'<TzQyȻV1m:+sIHUA_jc5	MO瓇5Wf_@2
9
J@93UR:smQR 5M/syY+ŒA0 y
J%*
b}ݞ鏗Wxlv!EEOgCρꟘf!"&/,
<&6"0ܻga3K"y>)(Qi,%NQ|M!A=0KC=Wgxr36D$߸A|I!Xgi|;ɴrϢSwH{\p˰Ju-i]IpέRd4{B;GzD*Z*	>%1n7v`!ӕPQEt(4
LZ5HRX}pzs:D@,|g<SA<j!@o:9p.ӥl3%;ѕeн#y=d=T&t<(玷" Ns:X<pKuive!F-K+VmɳRSƆ1tDd%uU53,&sضx#+em#
YVgZz7m_/73tKzad)ާ M@Z1;örOd`fxlmQ쑾U	3VΠpףٙ9,aB/D9I!B
'-Ģ
Z\L$:"dA\!/&jP|
\+W$"=Q݇|uN[=5l47a)ΑZθT}=}O ӫ`߃7FVн
7\TSIQ9<8<"p,^!3DNMTCJZ)%#n]Ck;p*X7+F"Jntˬ.1np$%AH:COǆiC}\ࢾr
CP:e	HF<`@XN\
юTĽs1fuå̈́w##6e7J4y9_ J
RSQ3GJF&?iVr[)?,䓿^^^

#./=lDܑ-[M}R.p*jV/vb{bWq>>i{3M%atWGL]UWJ<=)WA`"+6l5T^$B
n8'#2beyTNtҼX-IKqZnS^C}|4MwnXgS5lu>c{
{wւFuvkz{0՜sRyv8"k˛By3g4*=yݥ9Y8ET;iWt"eG]åo׎6fͥt&3w7ȇ/\57͍=.ܱ&K;o8N{}0v9F$³3:y;ڹri.1G{9RN6zK                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      V[sF~W2Mcbw:nCL͌3\:/hTK
4
^s*tQ9]-Doh)4ɘF(:,+\A+*&HQsyg
cI Q*R,$u֩T*pTYIdǲd)T+=9cLJ9/ɯ&ZJE?I>t92o9duRaICesŹe):
WnY{ePJ͑R,lzĊW;<ALugT#o}e-SY;4<|l2s]
,W!&#Th#ivsD}0 dl$9HJc\uR9G]Sp*UA_χA#EIPgԂoD@[Qf5~D^W/;l
yA>wN-?5#`&#5ݣ]*`*V(ud}M|(w

C;VۍridQצ-80K<PbtAKz`RcR׍Sٺϖ<'ܙ4"`yp#,GeK,Tibi^ޙ!wWGJ)3&m5rQf`!qyPϧ7#0,ԟߜs:&ۄ2
)f4z!<\Y9ւv0_S
L)3r
;	'1FbFA2ǟNT̈z~o'pѩYiۦoHWИSv;;rQ^D
bN4zXgg}83ވO<n柿Cg~=Lnm	jznc-iu)쁜091ziDQpMempcVe;((QY%a9E$O7%n\/=|֣AQ*,;Y.RX/lJ1^QXL+jl|Puieʘ9rsJ),ѫ:Ba8d6Sˍ^F[o0J%cp:܍o#	A.ģ"}
QZ"qHdCԵn
#V͍0g!5胭O!Ow:ʈߵ6W
TɦVx+WEE}2d{<qƯ]/J%HoJ@H{Բ"%a1VǶ$gYUc}͈d&?6KyDsleU?KwW}
Z	MϿj<o
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ymo8_1gܮm"$i6eӤ16%ETJg,NpwH*əN6鼲Z$TiH+RYnUpd8MEe Ve*#*J֋T
HӴ ULBM{ASh
no,Yx/G ^./zdt&At Ȗ4٤ye2D64d5pŪT%Re&Ŷ<3u"L22V& wxHI
Url)"e^x;nQESFQ^/UnIwqbY ],	q/BEpܕİ"98mrtdc]e^jzvWIk5Ћ`̗6jJ`+ؘ.^]lI~;)
~tߏbn0ݚizQ$nۛg{٫j	>(l'ը}vJpˆ쎞gְ;i6p،&x4Z
5|O E[mAQKPKJ-gKB]kg4l4A,qeiVju vcխD[_N}აQ#xdϤ+*.<̈CG`Wp YQ˒]ϹwbSL,<4Х \k}"@XB֪CdS
-Tx0J~++)b(PGVye*NBZ\V)- 49HU%h)uk469]rbVRyEG19vT<}uvv7x8Юi*;=y18
zXNpc=lh[qc͏
aهt6cxx
.t˿GWZ&znH;^!WdJ*3b26Yβz4@ݕٟ;mrPGZxF2L*w>m0P]25
?<::!;CE=	|;i?>NSk	e{^0i>@uMC*ܞ4yn~xE1Ek~iu"0=˴2|:,]lT	zlMl'm*KO]\Z[( 4˺fS8HnW\b2o>v3qxT'.R,>A>{ zcD~MĝO}pqs? \rycUr6z|KC!^c	O>^O\&H%f2j9\}XR	rw̠%>=I9
OYԦJ->h| 肗p|6cnP lF%:#ة$p0yZYix qUZ1:M\
9͝g&Il"4+s)?c-3O=¦@e+e
'm[C;!NmЅj1S}mm7=[i߷w!/y,ک3.ެr,&ʺA$T?;-o[<sܥ=o_0Y>|nwZ섈%VtvUɵ/8DG"]58Ob[_j&wrWX=ʛO&y8}⬉=ue{x&󢹌8dQ*lDs-mRrYܝ\B^c~YY6
!FbW!Z]̕qb!Ԝl?V]ݻj53hf
K]) Y\;^,xuR!6_a:W.t5ǦθE=VDs])ЪHEm~xHEju=MAv9~K|țlqKpۯ+Ah[mSUr>Ed-/`
<~~bF5-=y-ڴ[ƓӍoYk(׳nrt9L}u-ϻ_~{$_Q>J{1׹͹hsz/Lڪ_oTp+|>ȞU5qK](^yu]5''(yWNq|V	;l[(KLu4=/fBDi{oPPIa#ob[Oή{n3p~H=+wC$RrߕH=Bl#wun,XA4?V|'?k+2.5?k3ӻkbr҇\;cRNJ$Dl;ħͤi3E\&&*3:;6#Oz/2պuR!Nڻ,@[]X^zK:?5Tr]1u7ȳX 2YT܍{O$PA07V]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 [s6^n%#Iqi4irfJE*iwgw䤽p,r4QM]:K<S]*ufwL<yIZZ==|;qU֕W\??hj5Y+YWTeqRV$.vkFXX6W=ᧂшi<#Z"+ԍfJs:{9j:ӑIKE+x qCc%keֵ8u*.L(xyVצbaFJMmLjhVM1g?`Jc1A^mfBiлl;#eAg,ξ#uVDE2Cuk:S궤M4[ٮҟ *[Q)eV,YTgO\JMy?Q,\MovrwxޝSs"!BM#M)1YǱ	7-FN6;Z1f7=sʰRV,%wer'wktyç]zڝUG#9tOLDNL⦰$Z+suhD/UR:]A,Kh*d`5s#-[mD?uO<du0g]RkTV:R]U$z"Ycotj:F/=N431h	Zx/0)7*>BX?<}F츼x^UR6fߕ
-sCM+L1%&U6iFs"fj7CMMaָU<9bc/wd?M,*UTlalW//NN[}_,6B=+5&=!=z;7NN,ϴ^KuܶmvwuM2vpoNߪ#^RQ?>C׺ͣуFx˪\TjEw簸OMj9ܗbJUTsGcl/Kiwkx]r
S8H]N vY'˂vZ&
mF-ǩo)`&7;ѺLADM,ok6\HXn5oXR-Or2_ޅNϧ0Zt5_Lc*xǔ^h|YؿG$n<S;b^u}{͒ސI֡~XfϠ6!7,3ҹ#1k0Hiu;?DrnݙAr筦?4+'=fa?hNy58]/oZ24\LL 75	w?ܳI~9 7UBҦk |,̬s.XAVYUR6X׽#x,nل5ԄgH,hYR,g(\ؕڣqA3?AG46#>Wޝ`&؂-<kM8g9~1~ː
d #Ge,GO.]H	"O/,i;4
Qy:XD00jYڌcE! 7X}g:U6B$)WkrfDRKF:o.	+Y`)͐K"3&a|nl3bMָx n8*¬T,##|Ql\l/>3[hh`yAX0a'%X=,4$yOyYY2$颰"P@ti/>+>$ݞsoN"[QVM;g`<fVZaw8;bKH9Gb:lJȌ~
hp9!uffX`<}2h/X7odoI03Q?Add,I9fv0b]6&^
#@W[S,N=d6~ p ZcdfE,|	LX4q	'~0޿JGl$AfH~${FʒNTp(ouil?9e_W!ΠR,S!4]21BC3Ll;@-/HN4ѵ	x@F8}N-!&sOI!/A'Bс/Q^l=shx<e֤%s9ވ߆E),iOPku7((O
*R;Et6A&bIYL
>#`G։t	7PI21?JsJ`yIQwϲ	: U	we|fp	/+8M5s0jqG2Ղ46JXI$67
"a[љa|V$yoTWWWf8$B4$@t *'xMe s2-c@)RPVlQc/	<:wx>LqTX3%	yt$[!̈́XpmP6m \Ǩ8YCȃ7c{av	XtC݆5\vmeoKl]K^
A '18TP("̥77bY}juvYYdgǲ*wu4;SQn_ȃ5h@ %
E%rgE :OPРP.C'o(=.ɡSNtI┳!tbhϛ4smtj-JٲN>sdp8;bI(.></;t52d'qV):MŸ&N>ޒO"βs(Kq9Gּ(oMEX_ TH'ҢSnk  
36r
5S'w2a`_mp>
e)9p8Ff%ݓ vQ&Pg5($vS{"r&haO}qϧK[MZIe֘!qhXT	#m.䈫$I$sp  0JX4۬BNzr4w`~;)}F!o7	\'Mj|ƒ.ss8$t o^9)/xD6aI-qD-Ie$hd΂8AV f9p9O&X/쫗0r*DCk.bWB1IDׁ_BH

9exLKEpQ)C"'Y r+9(P>?P3Ў4'~n9C	!(1]re|'AMH(ｶNG>xQ##hT6-^RX/}7Q5W~UXZqx/*5۫;rri1Pa#zMF,9"|D+\_'J|6"rj\XCz[Vy3yVzt^.z@)4Ka"y B/`Y"TAY͈L`F9]RGy-:3Y"%f]J1&B\K݁l>jNlEa}\tf 	n݈m:=ތ^hkkg^El3s)3fpO;z9P_AmKbwKЙ:փ3K<۱u;m`K{a@GX-rUg)sK@:Xq>yؼtQ0F^k-wQLhow8?8F!I:W_GQx؂B/HY^.NPoo 꿄UJa%b?UwNlSk%|;l'̲7]L	بP_5E?p9T|!>
WkD6>)u`CO>|x.tд`-0f1|!xKgH􂬓Qx:wuD^E<wyf!X.[+HRؐ w@9SnvݛiFE5^t+k1}}cJARm1UY8 Gg^b\%n|3[Rk,!9hxm(*3t$c<7QEfu es=Q@Ꮱ{Yg~_+K>7i0z6&b\lcH3ѥ=dKy](8,$+z %Os|R"6$o|9=t},kS*8^V)L0&8DIvGEd%\SF.{1Go.g3_`}A(yE.$d_V_N0,oBczoPחo1Mo n0+}`oɊjJ!LQd&G9Zڒ{K7v#"
O'gqh8H5mX|$ҒĉLm;Nsr7+>Ė>;4j-ʚ}hCpK>w!{\~9>;ö(LƑHܠwgnuD$1USKbbjg\蕘kNP:Xbf@X~EED6$&9*{2T"YL20=5[(7Ҏr)S{%(R(YMOL	>6䀍\8v[&$TeHNBk0l~3x,^qB.y3byȎ$y0
=sV͟KчI.lM эfM_\8݄-&7
:N^2nW2<[xta|&קzGSC|QAIh %d	aޒ.u
\Uaַ-s֯uR
*)Dfqw@Pb}HmjݠpfZ+mwK̲-RohG. Hd` >;/G</"?û:c+6Ht
$ޑGV^Oz{1!h6*pX.CBH=%ѭPȻzy?}s|C}3B]ZQܯQo݅SuИL>  ;4%zy9Rk, $B|[V4\l+bϘ/Wu2Eŭ5w R2RA=(pRݖoK̳`PRG89;'FYe5}Po~U׹pii]>G*z_qSV<_+Xڏ~ES5 3u{1F^*3S%+
?/$" <4hQhQ[9NO=em0t˨YN"b~uq%ڮ<DݩMxQR[w*pIlAlTￎ+P|Oxte-XPvK;Wz|vvr]=Cd.~Ç;cs
wuwlH.-K)6	H]|Zi*'O4e5}i09?W'o|k[';_l?^J8xV	xD:x$Cd}6Œ\mmRek8O'V 3e@"j3OnooGRIE3
4Toj7@-  SD
K{M #kA                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Zr8OSDdvQ쉪e)lj x nnen$(9ڪMUd uC| .JeF2˶brUJb:>?'s<<}.qL|@Ŵy,XEy/c% _Uɬ
SHJbD$JFDh
x䧜0dZ.kLsRaR Wb>iWB'0z
VQJQ27^ӹ*VIC֦*|iB!9&2&L:_@$D+biVCZx?vQ"SIńb]ӻk]!oe\U]DF83"w)EjH4(LZR%TbIw}iFkݾ7R~ I2dJVV<*@maV+1~
zJ1?ˇTiF|u0:-ft}67'faB
&4y ބ 
tPG'<?^<|x8v1ݳ>"=8'UE;6-ܙOLOt(*ەC<Fotpml"ʕd^c4,/[IbIZ?0=RS`F[.?;"?7zn<I2ŵ(9.,A\G/BŪ,yUph(VJbhQ
bZä80f,?ب?|E⸿{%"ui[]+	71t$&모+ZYB$8L!ϤD7ca+GbWY
OB.@.DVb6dN>rLKQ^N!7s3d9[7~{fj-&$sj>ϿW<
fHh]\?3v-κ12//tG|3!1fWgó{p~pL<!<==ޗzYA%9/u+kJLEU Wm4A%i/ܚn~-wygX.,2L
`w#Va4ÑYE3wz
6ae,]r[1|w5
Qz)#T,[VT.ĥbzۻdje=m)<y=(Ӧond>(g`bLLc&2;O֣
"Цy'˴7=XϦ0- dHe+7W~6713^kHaBIW# EI!ጶU
mQ&Qf&8(wOYȹDahA)ER c
J	Ir!\#&iG:Èry]՚}b d;	|U`{=6!c@^8V#:O"{"S:@|KdU<9`H42$;<$h9ެh_Jd;h9j=z!P.wgSȉM@F@.Sx+#v-06(C#)u\g*44B6ugNQʏik!ΔB/Ε,2k!C#ݱDo^la8y_Fr8A0wU+Nҭ
 aqm-ZO|	G* Ax!a<-]h&oA)ֆʝ QVǴ(=Q |q%PYˁ@KrTmD<@"yO ;@K"K
F9]$qh9vcɠL"\Pb6-9|ȌĂ$e9c:a `뾆].xzPKQ<ZCP|CK!V_"'!`]"\(!MKKUh ˬݮC`|+{\WwS
V7V
P0ڰdj2oK'A
-H&{qI(?57ژ
dğ"a%(?JkvOI*{&JܟqR5Tԙ,u"!{4G*ِ/;>ovO@~FŰORY=
Jpc䒜ZnF
bFSϴ6O[Fy/q2"dBU@-񒑕' h
)Ӭt\=YvPV݁qR*g
P@gRU
e\(˭m@m'>nL!=uv`N<"ޚ'gw<jIE;?O+9N6wǨO<js@΍l"80C0B
w@r*ul+HKJtJSe7؉AWPm!E7)J;eM
|]F-uQmtsq,DD?VUU/!)^wxW>Ao`&\4o$k|kfGKm?pXuYsV0Apf6q\Gd0 Һs,"6ԡeamZdJ5edB݉7u>=5J [b㒍}5$Јu8RtD vx.%eF3GaVi"dRzGؖ"ZiH6M$[çv%\#tU>7\eml;rOH띒s5@pAӻ75Pآ1w>\-z׳V 0GA _<͍&n}YfYA5\cMXM۫ƞy`NSX6{wN[^8(8Hv)ڣjGڅa-QKNr{@[BOB7*}Api I%nF-:<p(RXUR*'>*?	9Ai]N	y]Ӡk9䲔ʐR//M7vb6Pr4SQ&yǪ !zsQ
odVnV	+w[4կZ824E[@|@@5!,Qꬭbx)뀔Ee6`! -@9>ޫ\wm_\Y k>$rM0E>&*=r 6]k%<v
f6X)*(].$-xc,*v:7,FvLSnK_{y2mVrj-ǘ\XqҧxtZ4A9T[W{4PLuGHlj[&㡩omJ]gН\iƿ~f
Êuc3w7D$tAwqGLm7R}	ͮ	rx
]od\ӎ^3`-ڼn/;G>$`L݅NGVǑmX=\\@$ɍ-g:,]"Ӧn<l |꜋.-Zݺ	_DY]ZrΆ65X8,vfmRvO0Ȗ/h-5FvKmoȶMUU6PxFZpdD7$X픇a8}+p-ζ>Nfb:iw&.AZ[o$\Ж^{ߚ@{l=	i*oJq$]-=\99i 6bj8]ՆkE6	;g9wǥ+{QxoS+`"NiKC=IOuu!tWkP Ns37_n靈xǤz\aW+۱E?VdvÅ͊+Mm.Xs@ |=<^e	wkJF8l
F݂8kG ݿ"%(b8.O|9U50*{z	2%Nn
H6tINuSj*=?4juk89d,)`idwl''Hwtc?EN~ʙa>P:pWi)<Q/}'wu)eJq
L9h)w{iCC
#qT'{	_iDr*ݸ\=sgonjd,[(9/\ro0L\޾7O+KƺO?4>#}9IL}EW@VԛTL&8S $(Wo3Nd7IP_z,qB^]˛p6POo
ox^>;q008PZpI7ueCEw/jUzf	HPrF`!+o8mpK;g&I?"e-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Xmo8_1g6Vc]&X7/mcNei+Q*I9	_/gn{@p8>|f8hR<6Y4}TR+CZ>,ON
Es8qdE*~|Ahn
RdT8_PҼ |/L!VTt/i%TRi$K"䛂')<w/kNm^bY`=?tUIAQ;IK~g-~'ΐѐ g+ZdP&Ŵ\\U(Dkcu'
~tsN6T%, -ćl8:ʨH^G'(u¼_C<owueH%+lSX"8lw-(1|
![;O6ZFt-w#mu?5I>,>ؔΣyRk:.'6Wg8)a4΃M6 GE?0a3

IP(w!6"1kH*	|j_>/F_Ns~e}`9ˮ;^VZw;LMzVݑ {W_?/}_  ЧO݅BU%riVdp

p 8H@R
|wnڡ5UZoFL"`8q賣C>J]K(H*ārB5SwbS!R`9\JTsiqP[jɄr\ Vy
21/9X M+Wޒs(-[:؅+S
xFeJ-"M`U٢8%!ś*"ֿW%sDI_ёaTȍ0Չc`onVv7hʐplۃ0 ;|wqh1IyuO?҂9D=n>ysI#QPo|4~1<zGRyA8Z,cUW|S&
ղ*dK$M$~'x4Fw8orh#e ,Wrww6~s5p(5M^"ǥk$DN,f`4/C٭%)xw3O.w3v BY	TOXXUjGєoD2ġvƹ
kB8pZj	$-<,wcN`^Bf޼Mnܽ|؃&-2=zi{̝%]s1V~U'(G
^UJpXhT գ=o{ia[tUUK΃TiPշu
Z7)* VU
i'}|qqspZOŪZ2MӪ[<Jwpptå6"7\J?T8T$m:cPNjƵ>֣oG+ժf٭IuG
xtdh_cHmɕ	xX~{4vT[9!zgqaD6)*vm0b(}HQIS!&OK7O^ߏN*9|C@y.6erod!ףI;#e4ꄷ:W.na
ʢ}̀vO2e^2Hyzʄd3,bk&(S6r7.O^lw[uk*/k$)9m,*m20Rr۵.]{WIEb[wm&n_yu
tҵWE<_TZ^-mKs[s'1<V OȐe ˕)yJ	U1EWm!
KɅN7LKr~~;ubjun#mt2Ϯ19U4EBN綠oA;}6gY▢RbTQN*K}R.57%M~5sv;ᰭt6E=nwnq}sՁkYڂkWɳgB(?
'>AȼZBENV|/g[64̻``tฤ9U@|ko^^oYΪ%                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Wr۸ONb$ܸ',5Ml$)o&JIAhw-Hʔ_vb-Vk$JaeHPtㆋ8Io7]Z*&Hy'CI Ig*XKm;Ikږ\?8"K~֍<wXV^nbEҬpY*WRy$yD/lo7$,()
#VF<6rWb_jDO^$qPVb1jBoxl>2A
u{MڽAWO
"qWX1Ylw#(9
!Y
gvKwtdHIwc^[R:nx /mBؔQt[I	wqO8mm;ض{ c1
IP(w6"` L`%@8o@uâcgmwX{4ˮ߅>%n؄6Фڍ{#9j2<_&O=-4tlȚ|i*jZjUEkIך98KePdtJz;kR#S]Ʈ8o:B姒w3ɠ:䜸`i EͩRG{
v2`Q(amV
püXr]\)YOAJRanYԟO3*.L~HSJfZ9AfUXDT*?"i
GF:VaxE$VCUly,Ϯ&*CW/a#I}7qhSCҔ]v5;A~laQԟur2܇|";ᣌIZ#{~!j!o9
0Zm<ΤI/~gFoHSf\F
w/E2稗eA%[E#ܵLSx܉q~u{;44$RPg\urwE
^~}9p(.G'-/z+7T#%g8/;HgEq0WtQebSDUќI$j4FUNxZ1}~5[N.4<돓SdF!-훢TPI[uF^D (!\l">~<$k v/b}qlr'5VczDX1ĳ^ყNLgh*rY0%V&>ԵfS"Cƅ-Z
Zd4ZɂDl6Y>
v]Ó}7s3aJV8~1KvI^j(ˎx/	v6YSG}ZM@r:7vD.o\Gqxӫw6eVcwyqN/f=eGǻ˳|3¨T!_{k{ pc-HW8:\[i\OplWv7)3"($˖D*bTg<OVߔttlmwN2PNVꅅ9Yܦ\ʒl%oluarEWOK4p=2=E}Ku6x5	2>KGjղQ;p-,Hg6lEN{-X!⑋!N}NJP p oWmX4.#h!
|gϭ'3PqWwt)t{F\BdCfYK@ȒɄFWOm2D]//Eo'Hk$SVņ_E[kׯxlNKW7<-x!\S}8\(	<4vP%'@\ʕKBw%GGؐ<3:Zf-ӎJdx,]}n9f0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      [{wƕbVۖCBٲQ[Ec-U=1I Cv?3dluHܹsߏA8?RMm6QQݩu:Q;umUo'ߨc~"Op~DԴ$*U:,2=O&ZM?QUUZo:W[(Ԫ
XT
BSNOA2{JsuQTVo0_Vo4-̓Kn'540)Te6kQ\ReWR *4LU*5t<mejjLVM e?D Jj=(^ycf@ihzcMruo t.B*Oc⫯0"*qWJ+BjH{xk>:C׺KSj5ĻFiFs? 
lK\Rn5G5*eYئZ]|G.XYqu1'z0zRWcB4Dhy ܔ`Gx/ξiN~wds[p6)zx}/oւ{2Qt{=
_A]
s~7D ѻwFZ*
*	cERhZfVA@,
4U
2	oDS#>AAdI֡"ŅDFf@b#pI'sL]$z"iq8{q2Tk-=Nj`h!kCD7`PnMT~fPW@«MSV;j
])J몢#1(ES,ΖFG9l2IkT*Z TYb1&*l-3'D|>fI_=>9>Yl{7jB$͞yy}GPXggO{vc$7+fwGf$CKc>~;z
[2S߆_Wx]Um6$w7z	kcФ>3}S<϶]ս_Y]14̃wjA7lug'&n6*t.9JJ4}^<
 H4I|KӬp<kwCCYfzåkY77$N	Ŀ5o˔tOzhHZ@^]&W}dPe!Թf1o	^\d
a
eIfd=u;S#UT:&wba.,&8m[Wk2^ܐ`ӡ"Tj,YG+@
֐VŔ E>kc=SxA(jZ.J/~f(RP2﯂!l۟N*dro,8L˒]w=\6PVA&Kkt]"jJ(LuiZ>lXs{`*#)Mx@3BXͨVqvJ{g|͍D.-î+-8(99N,2DWfK!kg*5\=$v/Td)-Ey]k}F˛̃u[ D0
va;7FYJ,ٶ,2HÚ)!$*}gWda3Vݚ>,Pn:
N!VEK(t;˨UaFuG6	(
8\SԻDY#bcE22"T\9x'-![EˈRۇV][1YGR"#׾FL/e@3!VpkeɂDyK 
."wy29=V!/.cW~R r%!˾tQyy5d> *Ǖ&:/P/~9?
OЫEjc&s[jKLI2!U!Yc&Y"3L}A7'֪Si6Y
_[xװ_}p6X˙XPGA^/(=5?7lT7W7g˛iH'ֻϓSXLWǔ΁@>@՛Kn(\$٠,PX~QӚ|+T/Y$(Mzozz_ U5$;%WW.4Cj2Hf^
j䄹x~C Je?ցpLw%qe}~D݆nȌ&B =YqG 2gA@K^_.w74#gedƴM7r9S72_ސXC᝾݂.2G:0H 4tFB,)T XE{{;GXW:FrN 6:3_[ggte˨UZt[%%TkdJ
Xعpg8x˕D.%2my}<&ǃJ?\If(&'9x"Jw^j:3Gl	geDERFwB1+
Um
Ea+mK8ޅ|xyi9GG'aߟ9
(edxDmpim<K+[Ai6ڔpb	e-*+I^4̰H
棁竻>Rߩτf3o]\9oL~7^]OEvFK{>Z.Ece(oFF[OҹQH32Cg23;J0 /fج0 ԧ53 {3~WCp=scIOhHa@ I+! bh~OCW+NLeJc.|tTMMĈ֦aQ^=D&@]lI@[SU0_?cɴ]5:d(:aiOJ hF"\p%pO+$ދ|GtnzbiA9la`9?2"w]pl<،Nk-TЕmmETUb`<\!}ؤܪts'D͚2S.Ƨvm)P
ޭ*ZLooj3*.DAS:=ptG7H75`S=VX
:-hrK81Zm 21:W&<ta[9wFh{gqW
no
R@иz̐[&fq`ׁ؆ɋ8:>mtel[O?lK3*qYbw5fSG]qZayW,s@'Lo}IrSi,LL"E)ɩ\VS]Z[2\ɉ!94a@Ret&UIe5.JqѾ#0g9V
L
imK<@JotTHO2V(drW1ގd`xZ7).EXbJʻHYw#!k	燀dQIڧR3*Dt#KSTD+]sRMB;N	Eب%YV3.X$)h@$)Qkpa?T_<,ElO
yɎ2')R4aZꙣ4D%jh"Ŷ	;AxLtO{g$a=eýAFohIRߦ4rA&t}\=E,@ BN(%&q1q]Ny\E]p@xڐ(JI%RKO,3[ˮ'D.~o4X8dr쩬瓀K#dJZ*I=S=qm$gIm/UpZw{`{]=;7SZx?!7
1hEyDߧ	ufv͌'$qmfp>K]:݃[*HvӮYJTA䨶O\N$,\c=xh
ODQ_q;FyFFt)U%1t#0sD3hSIc9Kh1.~W!JS=u/W.wnlH9buxmfL8-|	 ACԠUeRo1$,XJè2hۅ\!
y";'v>ZT{'$,mg{_F,*ovTYwH2wB?y?G6MQ~2QL+P3$#Hk:6-kn/1J469$94':<Y/xv+8Ci|2Oz4,ݖڕˍXE9\
֥߷b"^PwƇ#$ fY ю/ }Gy8BYP]Ew٩顭0M	F6&K]ؐ$iﶱv0Cax3Y	[>HlzOmn	<>IMAqJ7 xQJOCP!49F~	R-PLvl5zrܶ@0PNu|yo&_XHg Rد=d2}s7C.ɾG_'f}l[t50r]*Hd{u.=oN{]j_AwuHүa[uj~1VAH
QߤR ͏Y)3]#?jGH#
t9*3]R+&Qes{WsTJV*S޽%kv}<=swsL[(Si$Q^ӭ1YAK@G\\/S/2%nfp'aG
G9Gt)yЮ%]{)ZnoBÎ#g̛5>-+##)pzUW("Cz՚6Rt8&6z]7u7
EC7t'=S(kI]KTj=7TtB;[E|!'UYU$UhȞ&iT}6q܆y	+˶ޏaldo 剫Ԉ7%k0v'Z('E',?nӊ|[ђުޕlk w2o/:/ i.`oQ)xC0?df?xumcK~HX&frk.9\ݿZ-ZzAHӂvwG[qBQn>tC-`p;"贻/p-*҉k/1ET/rqh1UUw-keUo^aŭP٠S5d	R4mz $8E~0-2t[Vb4'QU8b7HU-CxRV'f۸%߸W=f	ҤؾC[{x7!}/Q5g?d	ےr[I]o)`*f?*F&N~J졨uUNva`˞;b_u){{9M+i!P@$:	nh'ھy-u~&gIJxH	tVY6i;Oʻ\e/hzuZG0̒3^/2
Wҍ_E	A* 
Ŗl? %lv\Ʌt&A@פYdudR.M:ʥis	](֌oJ/sRIݽ79]p. *Kker\]wgk'#t_ݵӻ;t\kow/H+kmku
j1.襔_JI#'L;׮v)cf4;~#6ztrD&|K_uu6Kl[M[Ł9$4;'^Ο(`lBy0 c<fq3AY
*fNE>Y|>\~'wDvyN|̀CիDVјO /OYқPN
Re"]/MS%6vNl<U[łLtvSDo*W+Ђý7L=dٛXIرd=P(3[nL
ڕ1tH0}?~i5±I\ŋDB/eHZӑmK
{@9\pXidx`EA8`MƑZg
auIn=Y@^M8vaCȽE>ZAC
+2wKdcͭJ9T;ie)ß]u?jt]h&jzb(\=&>喌yxG!y88QN"pWl*đFy>x& $2eAÿ.͐(g%V&7^YiMm?/qŦ^8Nk
0HDkF  j<x3(kx"[<W²$'B~إ)gGd	>I"7 Mrx0H0hKfFYI                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Vo6ߟfĪ&Ö-\^aiXiWHI%'vڮ tݑפ~iTIrKKI%hqK<8<|-2wԲY5ÿ,*BI.yhGfB**BZבZ/2P%	C2܃e<kźX0+3ZIS24mBI}H0>c2ol9~EB	HEFL'03M*a!ڨ8[j{j:NWTfDR dl+"LP"Ccd۫27rn鶲Ҭ>vǑ"6kB@&'~K{td"d+I9nܕ֭vt)x!mp"e>+%Z.\&//k={F*5rnwx۽{,oBHS
X"f[Z~Mz Jgyq`?"\~zp0Mtko9pe8w^KfCч9F;P55'8QK\UP򔖜uG2GRRC_;qꯖ:Cf&H;h.\0egMR#|	
~<GTW;6	Zdg")OuүZD3p'bOZo
uʲ~K!<KQٷynFeZ)TKH*/MQւv2mS	(S8Gc*klp(u3r9~g{bHcp|ATt
S\-ӗGGzMCٞg։QolDt#|#?~Gs5'Of;hwQBVNTT"MuSf/-@ViGVML2Yj_8e?a=-p՟X0Rj=-$4ۑerLe/dnmivBͳaQNėYgk|x8LǓډG,Hx1:%y~[[Hg-yP&W~pK~
gȢR棲'l
)$
)O{{h7tp21~L/0U_FyuY&QO1⿅no*흪iBmv1W}x|fmkqjZyfȨ[g=6n-dsXL3ϝ<$.WKjSD[ԂI;)ޒ_][-<HT%|ZE 5̲ x8PsL>T
'dRFZ,e21q1I.@uz
u>
K+ʬ:{pH⺗zO1zw.Rv )Ɛ
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        VmsFί2icv:7P3N:U>	N	4}$^$~3޳M6τM"M״JjaeH5MPtwOYcM

R<uoiYAڙJIX*ʳTIdÒ, Q;9cDJ9{#Kw
_EJ
'%ɗ*)&N!aIA&`W,XXjLk2pqB%
6V'ji|Yݦ$M2YIS@h)&>b	VBEx{<A
~(s+zO
dAJpipx(ݥpB9>[:Q%圻9pW"IY{1t/ GHy9$cu\4xyֳwmp+wW^{n;SD	
FHGTqvR<mu~p{yJN"*\~жp}8\C4[jB))oLGSВYi?Wtsi٨',D! b44A/qWC3Zr=C,stk5@滼q.ZN|`G\oxqe҈4EEax*|-'`,,
\zUy'6A˿88X
29cҔs#( kʘU:j$9Bx"/Ag͌R|!aT^ڢ,4b72))EhSo#_	
{'1Z|3ŶF^52LT:n/ꓮ;ףSW˳юveSoHјCv3;AlD;`|v>⍨qnWxqk|<BM^9ASZ=; 'LNt"˸2U؛I(0+aJԊ8&,(wbmvu?rQ84ȡrpԚ2,r;e6f1]삚ooFaH+hsb&olVkHB/b"QVsw+Y!gxr5|[µz)'yk nVw,K_?=J
tE<7VOTZÝLDCC-ݐ]C_mpP

eJX!
Dz&y~FQs]4SŘëqF&׷rhuZ8
(IFlc])F]]r2{\YЎwA|B`uگ(Z_~JD~o6*~}Θ/Knp}G[+]$E˵˴"0F,^C꿞]><
W)Vahc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Wao_1z|XIqg(v, IwIPJ\ې\f"\͒(Og@	w9;3;3:tSZ
V"Iv4ʐ;Adtϩs扤:Y(LH"]&m_IJJ\"+Im,3JZk,$)SYWxukF%߬G<?I>t*'ѐ$B+F4dȊtVű
e2ĺFe'
~UITFBl~-Xp:qP޻NkOP"#_Km3ٱQIVO:DZJSHE,2o4Xi#i9wKlmsK[%-3:ΜL]v	j]-li|yXCA}46ݾ?tݠNӠu-JHAT+7\U+[/zyy7LFx pspMtU_?*m{u:Ct:hW]^u&e4߃L m綡nee1Q3mym'
XbW֜nA,5꠆H}7E+_"TջݽIĕIwd}=8t*5?P~#x3xJcV6?9X
圗E,䪢lͱ{'>1
rE1}|>Fҥ).X JnJ_ɩҥKRN"Vh*"C<20c>"7`Uh u+ʜ|t2w4p<\'Oت.qsw*}}u5899;]TMi!`ld?Ũh/uu5:Vp{\3|?q'i5Dfvv;!tXSg4~`8&+S^N^\}3s3ͷ
e;peEdKg?eaU>%$[+]Ee~9ԝNo3UUi"$t4ێ[aF&1¢2q)+YV(RIeNΓ0J|2b{y`/sem.Y1۹&upG+f
RR*㱪u
/T)Iu+hEPye]:Kv8wK{bQbixba'5ࣝ7
[zNlQ|v6;etEo$P|<L;zy
}aG``vcVMnNptOМ)˶P gUWmV1՚̑y<)r`q;T.+9:eX+Jp[pA90[L`"G2chQv:u=	4_=o'2?ZiFq6xw+R x]w&zL JK6AD>6O:tNPߋ52,}φ#  2@fP5X㵂+7dUHh(4Y:XMhJPk%Z~euJb͍3W144tvq)6Y=s%$,֦c:2<3ʂNno2!0>ˤ#?w=@(LgUUH 	(fD_aP>w|ɚLnyvZj?HxŹ*tq.;~d8nFyݜj :~~M/|W}TyM\*
u6뚹`,Fgd$
XGcv|9+X<[f˿S2
+Pj@a)˳9                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Xms۸_Nr"1l7gM[cI:vQȚo&@jg^Ҵǖ]>삞ߦ橲qdMKRYQW8-MAG3*TZDofA]d
h>F:GM:*ɛNaX%dy"Üe8.8~JV?ٖZlyY?MfM[nB%<]*U`uITI-]쫅6g~$Qxl+D=^8Be]{gNQC+y{ꞨeJgQ8s"TlIa$Ry1!wz?7;
@!lYaO$e>2K+XxmD?!.$c40uâyoxҀOۈ aGwyzT#|!oM䎪>)s 7^9iq]qۛnuxԙZNSˮ`C]EΎ-QM
Mqmh8I\wCaw92UR
H=n):{uBlOBF&]P	v0@OHéR#lY'ey,zޱM^(
Oy8㡩F
05Ε`R"Q%'v-\xRWAf͌Ry#EeyV'!JϰJ(D0o㑳UC*yŎI!)ްc'Ĭu0
S<a'`ob;8Ц4a0g|`#u;:=s?|߸ܱ'1D=
1y{I͈ڣ?8B#]&:_z<TiȻ!6Cڅ<鈔lUfQ{el2<qҳQy.PsZ^u\lM)OueRyP񚢬ʒfԾ:{nH*%ę%X9tpgwظ\]Ogإ,jaZer=\_<b`1h4ʂ~YN3!%3d̀M_P/Y%dRI"G#|+|;CFIǙ*.Ra:pݹvVt.pףŘK>X$H )7~u7.kt[%}Keuv]M>գ3ԕ~L@?f.*![Km,G0mh^@Ӌ*hp+fr;U}gd@>숶keh1@_O9w[fYz-jX"a$P<xyQwhJqe3\p}y&7N} pu,
LpޔKˉb+#-[8Q:0<0<T;+$c,"
"9a[,jZ7օL&e1S/ss_ة@\L̙<ՋCˍL'9yN͑cS$LKp޳ͦDȦ;T9}g>\5~$l؎_n+bd{@(kE2aMkH{-n*)ypFDB Oq<`m2ktFӻ74|=Bu<F	Kb{&UX;.W!B@Z8Xޯ1}vd]׺g5w$ i;Sw۩
߶LzrDq$8)NdKi3WAs&R:E\gV _e
gN
^<Cu$*p-81Rh3ǈ-.M+)+_d@&)y0#?zyD];|6Hoߑ=2ip$
;-{.Pj I9i =ᖦ*q%
Ak\o*b˅2#Zx߭h*'r`u0n:m$Ǘ=ImCẐP5ܓƁ&[>e`Ȼ55Ɖ(VoS	%]=<tM_xauc@Zc%`'hZ rwGulUZf	]qט7oKq<4׸pIm<fa7Bк?tIPimFM`b*q!V
T+hiI,&%.@>J~7?6 [d^UҟmM.q`,~U"$Ic
\tN-5ַHvh}MkO:+n[4pxmYfq^ݛF!,_{U>$Gf@~&ױs:{7:m<y˷]Vury'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ZmsH_1c"p%KB AuHq-ыAզ*OqT&I"02P cIǏv<ڡ_11AE(B,<|'x~($,XU`.EoXI1¿bq$u.'ѓ,:8ײ0x~d["J1֋$-:;7d
	MrU
A̍,)L'X2-`.U(8)l}!?E-kɢfU ӊ0>MD;)yU5DFJed"^,LɃmDq0$cซ@Ě
 ޒΒR2R+EAu'4R+MN+ඬPQgI2KF
XXf)N/ޏopdztTz[oB!4}A7! nr ܑ	֛f=r~oe,w?O1ίp|Eq_Vk2IS?7`Sbd=N? F?7v[vprA._`$F.QیQR wxTTN5@t'h|Fƣ"S<AS"w .G!3TBYz6cEϿ|K-=NQ3-
04Ε(߱j4(Y9.Ο瑘*Ie4E䅚KH,J&/
$"S23*!M_[Z5(hF"ARBb]wY!bq90
x|#}qp/|<sXգIňLO=5ita%y:8G?Pskk(H鷠#,?z'.)Dgrht&|)'{2}GH]<^EEyco3eJIE&ȫj,'Nzn/9j.QabNa$[@o|qռLگr
T4y):gGO;Pk)1ȕ<	 c:`Kʯ"tw!ٚnLޟ_LFkŗ{7+ӨwKMKi4Ɔ"
e..<aϛ'Siia4	n,Gaml]*[j&am0} VҎ>rٽu/+OY@!0pǂE@0$ZEFa[uKtrTb?إ~X-N''lٛ/xgEtZt:HrsB=袙&5mST.)^SYH|(B%Cb-8=afU	,Bx4 DckeIT0JxzE@ *,O$uZ1g
恉%LMCt(AZq]TU5U|%H؟/PA@1"_RE\E
,AoFfav85ʆ \ԩЯdٵVWiA_#4)ma i-dB%5CX^s4%0ߎIjM$P'
nCO;lcu*5]"zprt<&"aIȆV~.{4>]ap<d㮉JJ!fOF={
DK͔IEULSL[{V1Wbs؂q!,R:TY/"rXۡIP*Re0F+	=t.HsQX^hcT%?<Uѹ)ʯMa^k|b|zyFs n.zt\~*Eh`(xpX jkHMJ%IO֠K)-#;" .
U%ٔn($JNrCF"4QiyE%"~D(qk}=J[$Z iV3(T-N. \3K'Yb+X)dϏ[7x+B}lբ)+ YE#'u9ԫ?v(tk["Tb`,+R*9Ns. u׀<O
"1yţmLMEMںn3WJx,aPp-@M.#eU~[Ԙll.O%"=ήيIYÕyPۧrt8m^BZV1hF6虀x,F0.,v
jRfVQ =N9\E^daK
Y1VQ`Y:M,\qsۧj)o.m;Z[|ūӭv%#F7T@PБx )"8)z_
]W6qvTt\Neٜa	T+R	Pз-
D.{6^O.G'try: ;M<ʰ%Eקkq\L T)ak{7^9bԤ+∮{( ˜*D@y@
VOM'?tTo*6,6L8$E:LK%kQX4/6`_xk[
>Cc;%#3UNyk.1mBr.Vq!p~
{Č+{3L;bVǵ~Nel8WՑ;U /w9P?	Ӂ\Uٱoqd@TW\.l+uͺmÚupE}G!1-DöOPȻ71T=OGT4tt~){wnf2jEY9zًI;/L'@RnOt[ޢ[!P*Q+F{틞O|${sZI\su{4}99!op|ieߣg-
Fg([gG~kY}c0q䮾q̎	'u(?#b:c#e:a(cHaaBGVxʎ2+ЍzDCYX8*14W4&og,L;@G-	xB8+g'[Aô l@%^ޢ/*7,sU@S 
Ow*/uݨ
im~uq}ߐ&loIBM%0\ù h-᭵v:>}1:;O?Vp-j6}hadZsI.fҋ3T!X^rfĬoLV1W"; bm{ΕsXH}U
I''$*EjCɴHO&,sBug[vE{a=2<xy-([2Pn5DXCwKHSm7-𣦘ñ
Ԕ8R&fr1f8,f,T]tx3K`ɲ Zf#HՍOæ/@??2WTc#                                                                                                                                                                                                                                                                                                                                              Yms6_i#;(Kqƭs*q8XNӦL(p[вr~$EIn.27sXbz:-uZ~h.RQZ4[$/T&y,{xqTi!Y,78n(hX*
#*-"OJ%ȝL HrrܚQ#u
_g1)݊bN;niq<AIixϖ+|KC$'%k~EASc[*Vd
[+]t\"^GKǆ\
S`W&
%ʥ{iHFaVޏeŁ9Wą/hh[ Je FbR#PwT셐tN;rQVZf2f.`Kp[ZdQt`8^|<,~y{Jiv{-AToSXn"B@6"*ܑK;By{~rT?$'C wIBृ_;2-ݰ&N3QGYqEmޞHm#@}Ї탺AS#R~.Hu0*vp,K6c(*jR
1olGHdE~ns8Ȥ3*P'."LS%w$Rɲ(8lxKcaϽ>?)U9S" SSLA|9Ie9&/`ˈ,2{,G"W"Ra:/5S:)SS3*cm,rzIL283CUXkK7Sӂ3:4ur~aZDpofzl:1k=/#DMV&;@Yέ38H`qcˏk!L^^OhsjMPgx8|;<B#sQt}=pI?I8Ds*e(P-m9%])oY*-#tZR{/Z/V9:Y	ؼp"/L+6`fA [f?$jzN7/;R`DQߚ;#	@Dnr2OMm̢i>?\?1 -!_^f!NV/z|fS*Lnd1	.o;zM "pL<_A9` XXыVڨqsM&yVar4soLؔҾ%ֈ
.VR]t_t)][kWj(!6<.?h.+.նsH)n8[:R$d
+
CY+1F*4K{;jm*C!lmN24A4`6m:u5^CQ1\Ij^#+3]zX[JdemE*gn\^9˚;/l qax/X&vEwʛqL-5!kζ"	[Fe_l>G;jOD2cN.4Mnkl72|
%s;vzF+դ3 hhB*8"EQ2JLm8u6
Pf>Gi:#=[zPWTb7YxigTXvuŦ~c`kJYj),|\LFiHQcNN{/A0џ͞l8䟼3u)&{^Oa*74U&m1wdbh&
06616Awϸغs{+2mͤrJ6pQzc:'~Va3孼7>ƻx8S-R -.5|k!L
mflރ5/֘ok\[r>-dR&;}ZP[֩gR1Pf5Aie޼qL5xd;n\v̢
.oP  NA oFadP	8@Lk`ܟFh! +\/צ
`opM\mR^ק"X[qLHc^t%=%1AaMgJ[ !?Clrg`|5F!,V[d[pЛM	'6⚋9\As	4/&,\~ڼƥxQ3\2f-C|aqo6Qvgd3ai+
o :Q\-]MkTŗ3r;YAX~2W$m{T	qfZtCl<nUc^|T5ewؑA]m	靘$7߼fWb7f1$`c\mוT+UbŜD~ԒQr { kw\aM/A%6]_*N&W[+VhPƲY9G)
C+Jw~^h~-˙SyQǗ^<}==#Q 
SV7
r?ubޟ3>W]$;IJӷWs9ևԘG}Xct9j|@Q|g[HA8ō!SCl<W֓Wd;fF`;#yVfg,2omȊ"Q\0ͻ:֋e                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Xms~e$mG2#Rũ-qD9VDto9HM{]wOXm}@\ԶȤՑLgTUX<i}x#ntVJ߼>~<U,Jl3>~0VbV
AU0mV*%"t
t"M)·kn
e YRb	l&V?aWO'"E.%w_D&0EVUMeEnEUsJK
1ftt$6:MYR&:_4C8D7a"UeAqQ_ªC+\LծB"4~
3ƲqRhC^- iOoGgIv*|ܵ)~iz*_n˫"IYR^G{26ڮ[Gpb<_pù9:}_1;MȀ@wڵ<oꃯG')>D]rOaqBCV)֊;2d0h[wm
5\TJw-|]#@ї/ݍF]-<\HJ!D"F$U%y}h'@rY~#-Z@;D;l7$Lq%*?>)T<?BX=	ChV(VUEs6(>8+%1J5M0*rTp'oM2Y="}O޾	oueEMj$RVE#emif	`ʔaϤNE0bakuhFB. !ްXkQ91Du%3.?r#ꌑ<??>8/ڶ6N~ӴΈv>ϿVQӾ8:_;}WtG moEGY~ 	Cb0n:'輿MKNOA#~KUb6|)5UdT͑3^X9^'
[W \X'NznَK\*aiɟE(V9gx6ae,YrPZn.>^'GtXgN){Αx=12o'at69^su{_ϓwnyr'hov:(NTә.JED:$5;#>x$	Ðq9Mۛz+Zk[|c3_ VuNq yc*	/'SCᣢ* 0kT~gj}x箌Ă 07&[op5'3=On
ƌcb$R@F#k\ɊHܓ-:%g2]MT)+d	@}
Fܳޤ(>LA|A(bC[ 1*qʬeE]Mz[͌U⺧
[<Aىug@N4-6dM/	_`L:]\3fA[HrPFoA8N5	hZͧ	%5\]\}41$ء5,-|+a)$F؆g3"jۦ(qL롶gt0aֻd*+
"@eu'ĠwJAθ`^Aa9\mOKLit"aRݍ[rkWrʨxd:]#g @HoudL57&Ɓ;D\"|2tcn~^
'~$G'#LREH̞;S
~(Αc7M`Yn*jݔ}-׃`J2PCZ.v^ro;6=Ep)ŧ
pɄ*vL$  `'\:90>]^v5;{m<u"P`f	Ce*v3.
΃#q5xP D8)	dM^9~w0BU	Gi8 XC\K+}yBg8۰4\ @wٛBYl@&	Bk9LSVKEgȇ/GFF!ښЕWF/siabQo܉,O2QojzX6o[iP'o;Cŗpg
h`4X9~dMw@Y7!VQ9"AME/nfTceJ\"K\[z)oA0np )CR1u잖(ŤiV(-
%5GE<WG
␖
iʑDZ#}(yOlh
PAc\dܾcWÒj=9ER	aa߹sTKܭh|0. R t
C6.(#2ׂ^A!9SsjӻQlXWP
t3䔛&9%W\
ͦ-zǷ/[ܲ%7Hhz t<lmO(IQRo]Ai{1B.ڗDv*׾v߹'$F(.@')[+q E0VQіIsC^x.jKJN	M	҅_DCKKz	& 7hz vۛ77pS uUй[Tyio[\ttA
 +\?{J+zi?nSY6r ߴ̌d|Aq
23f%s.cKW/xvy).>nwF^N7IX2utr@O.5<r]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           \ywFW;3"ě&[^,80oM+qH}U"YDuW;Ht1MY%]ݗ1{#{qqADC6	cJQ7%mzDbBwq߽SR.*<GKq򴖖xb[Ǿ<)Ks|7Jư>#X=2,(◴/Jį韪$Ibǔ{k@&
Z>+|W<l j!Z{kX+ObדrY<ɠVƣ`X3PAiB֧4pt ඛT.Lh)/Z
<B2R[#JG\X-%o!kʥJdf&
-B,^ cY\2$ * eע{w䯟`Ex\֪qOrmԫ;鿦%&`M!py;Z'ջF/'ͻ>-pkqsd`V ˟
2s-WK4Qvyov<s)iS;MBǩRDKeuG
|#t_iXFǞj|#ҭZNL	[ㅯ$R).$}FT%e!i`f[h!]DO8&WoNZ1z̓se
4FkO^AEltBHxs;p=hkj
]q\{.=ĠwFa$l6R@e`%i1EUuF.A#+SX&Zp/Ep|BSSq%}]͛DxebGF\.fO?K툑ֻw,8zΟ	\ۥ%m$_ui?	ɐ8z4N7cQEJ[QRk+
 #]S<6zKuD#^fCx/|珁ŗʠ
?p-A%|-)v5g/_?;7H/Az
 {6ZgHP[g9_[<@=-rBX0Q+qt0<*p҇OĴ[9&^A,e9pI`X&A@?ލcE+VL+zifjLˏi6RJi%
!L]^XY*qz4b阬aD1C%cϱ]Ћ)1m4k9ԷlZ'=$VXAY:G	Q`Q3ȿ+hYjG{рt9g$hvn݂s bvl`s8axX<hq
a,r[d/	{\(798_X`TdM~ ?}߹8;{zzҜ{Ygsݓ,Rs3JT
{?%.z`Ɂ老aɝCz՚S**)b%~Y 
ڵ[@WC")C4
."t)!3\eBWHH!
Y+]9y|r`.|gX)iPktahg[jѱx%},A?PAdư'xPDZ81` pdp%ȳ	oD1ibE	D2MZI@/*K_Iuc &)K ;yB,?(pil1]]qA8b
:yj=؍=eF.6VXg7B+@I3lƙV)Djt? /N<)UBG:8O8gQegCII,crs=%w1S=Y"L'OuN>4e%.؋
ie	ZPNn'_:!?N!֤cB#
.S@;=<@m^Ӵ@3rgj
?K)
vʓ$gRhe	 Tb'2L
e1c
V#jif	-L~=tkiySjXB\(ʔvVub	B*WA
td tn#!"gH3BH'ۦ
zZ%ۡ̌AlIuxCR٤߱qTdT`RFD(Bfr԰]519s-8g<C]y&nq7~lC!+aKP%Fâx57:j-ͼ9YA7apaM\aϱP%,\*K"m4Dc<4bͥo
,CR<~V%f"N)&,4e%8Ma` GRQ)me¾dJWf9c0}axT]bƚd.4o8jcnSs֣Xa
(_?%E-"^,jN
VWºfpw}~CZܪҨX^SyGd:ά[(.P۹@-@`,7w
b,N()itx H2JsV6FtU|S
=JiI9;!;KS\YN$8eJrx,ZjQ2~CTB';*rx<A\<L&NP\Z$
|YFZ+_-i8,߮6/!i	QԪr>-z~Ѭ$z/8#dzj.Dw<!ժkQ }r$pJ>o"Іy՘y)bO]#nq5⿫!VF5+Ȇ~NÑ]2Ux8c,#?87%~䲱)Fi4B6uϰE%8#+nth4\,4kv>PS'P+H:E\	IP;8Z<V~<]HEE=dd^ncȮ#^2x"rԬXYY
#t'KZG?u99|lZj99}M}8D"rVo$g+FZ:^hTYYT"r%9KY,@rV͌5E*Ռ\^r֪3rrVW3~Mh2BFull6F]hv!~\ʎˌ:t
Mt}dQt"ʯy=Dd	H ϫFvsqyYuʝcFN{K/kW/;3W/;CsYD/Ճ[E춋:n^v/e^D/{"zk^^zAQW_e2_g*bx;&u*͌^6U@α 6h~XD"eo:aѶQ]1T46ŢԨ+GTj'#F6ƷEh`[2jz,rUN?R8S12\]Ԙa`!Â,dbMzJx\_|z0jWRUefA`Vb~a/^N1k2g͊@߂sg2]gdZl/&pBt{kځ7Ss.mM:jCc=2tŦVGOٷY{	Y%[(d*g R
:H
XZURoVts%oK5zU<HzGVuÖ@(X ܣq>6cs>ACnրcȁ<WXzM@!oY>6}k{bX`g6=5kZ[+[n}nۇp'<i)-n={զ ~zŪTSzG?7
׋bk ;7wUd ٭Om7u{W?@^ d {?@~9szT@fˈD@.F
dDxurʕۢT~R[5XҮ%-^T&S@ײTQJ\tC}LiOTKN)\8qsVE*!0}L'(y;)XigUnnW
&w,iTːOz;Nk"w 5<<33jЎ
|./PYȇDK,dtx>wQ,jRL?	} p6V/sC]I|D@fLQg;KjgPto9
&궐w(&%>lx|GձMzć|˄8Z7K?,
3-Μ`vF-x'g SA?-ҩ󝉤gvtv[iJyP	jDA|<t/m}$ꬴM+44
O9G:Q|fbzuSǹc%{ݏEm#0$ÎIg0wʩRo;4p2HZu+,i!'#W(e.CҕLO܈pl3H^g4Z'Ƭh@"!C                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  /.
/etc
/etc/perl
/etc/perl/Net
/etc/perl/Net/libnet.cfg
/usr
/usr/bin
/usr/bin/corelist
/usr/bin/cpan
/usr/bin/enc2xs
/usr/bin/encguess
/usr/bin/h2ph
/usr/bin/h2xs
/usr/bin/instmodsh
/usr/bin/json_pp
/usr/bin/libnetcfg
/usr/bin/perlbug
/usr/bin/perldoc
/usr/bin/perlivp
/usr/bin/perlthanks
/usr/bin/piconv
/usr/bin/pl2pm
/usr/bin/pod2html
/usr/bin/pod2man
/usr/bin/pod2text
/usr/bin/pod2usage
/usr/bin/podchecker
/usr/bin/prove
/usr/bin/ptar
/usr/bin/ptardiff
/usr/bin/ptargrep
/usr/bin/shasum
/usr/bin/splain
/usr/bin/streamzip
/usr/bin/xsubpp
/usr/bin/zipdetails
/usr/share
/usr/share/doc
/usr/share/doc/perl
/usr/share/doc/perl/README.Debian
/usr/share/doc/perl/changelog.Debian.gz
/usr/share/doc/perl/changelog.gz
/usr/share/doc/perl/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/perl
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/corelist.1.gz
/usr/share/man/man1/cpan.1.gz
/usr/share/man/man1/enc2xs.1.gz
/usr/share/man/man1/encguess.1.gz
/usr/share/man/man1/h2ph.1.gz
/usr/share/man/man1/h2xs.1.gz
/usr/share/man/man1/instmodsh.1.gz
/usr/share/man/man1/json_pp.1.gz
/usr/share/man/man1/libnetcfg.1.gz
/usr/share/man/man1/perlbug.1.gz
/usr/share/man/man1/perlivp.1.gz
/usr/share/man/man1/piconv.1.gz
/usr/share/man/man1/pl2pm.1.gz
/usr/share/man/man1/pod2html.1.gz
/usr/share/man/man1/pod2man.1.gz
/usr/share/man/man1/pod2text.1.gz
/usr/share/man/man1/pod2usage.1.gz
/usr/share/man/man1/podchecker.1.gz
/usr/share/man/man1/prove.1.gz
/usr/share/man/man1/ptar.1.gz
/usr/share/man/man1/ptardiff.1.gz
/usr/share/man/man1/ptargrep.1.gz
/usr/share/man/man1/shasum.1.gz
/usr/share/man/man1/splain.1.gz
/usr/share/man/man1/streamzip.1.gz
/usr/share/man/man1/xsubpp.1.gz
/usr/share/man/man1/zipdetails.1.gz
/usr/share/doc/perl/Changes.gz
/usr/share/man/man1/perlthanks.1.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Package: perl
Status: install reinstreq unpacked
Priority: standard
Section: perl
Installed-Size: 670
Maintainer: Niko Tyni <ntyni@debian.org>
Architecture: amd64
Multi-Arch: allowed
Version: 5.36.0-7+deb12u2
Replaces: perl-base (<< 5.36.0-2), perl-modules (<< 5.22.0~)
Provides: libansicolor-perl (= 5.01), libarchive-tar-perl (= 2.40), libattribute-handlers-perl (= 1.02), libautodie-perl (= 2.34), libcompress-raw-bzip2-perl (= 2.103), libcompress-raw-zlib-perl (= 2.105), libcompress-zlib-perl (= 2.106), libcpan-meta-perl (= 2.150010), libcpan-meta-requirements-perl (= 2.140), libcpan-meta-yaml-perl (= 0.018), libdigest-md5-perl (= 2.58), libdigest-perl (= 1.20), libdigest-sha-perl (= 6.02), libencode-perl (= 3.17), libexperimental-perl (= 0.028), libextutils-cbuilder-perl (= 0.280236), libextutils-command-perl (= 7.64), libextutils-install-perl (= 2.20), libextutils-parsexs-perl (= 3.450000), libfile-spec-perl (= 3.8400), libhttp-tiny-perl (= 0.080), libi18n-langtags-perl (= 0.45), libio-compress-base-perl (= 2.106), libio-compress-bzip2-perl (= 2.106), libio-compress-perl (= 2.106), libio-compress-zlib-perl (= 2.106), libio-zlib-perl (= 1.11), libjson-pp-perl (= 4.07000), liblocale-maketext-perl (= 1.31), liblocale-maketext-simple-perl (= 0.21.01), libmath-bigint-perl (= 1.999830), libmath-complex-perl (= 1.5902), libmime-base64-perl (= 3.16), libmodule-corelist-perl (= 5.20220520), libmodule-load-conditional-perl (= 0.74), libmodule-load-perl (= 0.36), libmodule-metadata-perl (= 1.000037), libnet-perl (= 1:3.14), libnet-ping-perl (= 2.74), libparams-check-perl (= 0.38), libparent-perl (= 0.238), libparse-cpan-meta-perl (= 2.150010), libperl-ostype-perl (= 1.010), libpod-escapes-perl (= 1.07), libpod-simple-perl (= 3.43), libstorable-perl (= 3.26), libsys-syslog-perl (= 0.36), libtest-harness-perl (= 3.44), libtest-simple-perl (= 1.302190), libtest-tester-perl (= 1.302190), libtest-use-ok-perl (= 1.302190), libtext-balanced-perl (= 2.04), libthread-queue-perl (= 3.14), libthreads-perl (= 2.27), libthreads-shared-perl (= 1.64), libtime-hires-perl (= 1.9770), libtime-local-perl (= 1.3000), libtime-piece-perl (= 1.3401), libunicode-collate-perl (= 1.31), libversion-perl (= 1:0.9929), libversion-requirements-perl, podlators-perl (= 4.14)
Depends: perl-base (= 5.36.0-7+deb12u2), perl-modules-5.36 (>= 5.36.0-7+deb12u2), libperl5.36 (= 5.36.0-7+deb12u2)
Pre-Depends: dpkg (>= 1.17.17)
Recommends: netbase
Suggests: perl-doc, libterm-readline-gnu-perl | libterm-readline-perl-perl, make, libtap-harness-archive-perl
Breaks: apt-show-versions (<< 0.22.10), libdist-inkt-perl (<< 0.024-5), libmarc-charset-perl (<< 1.35-3), libperl-dev (<< 5.24.0~), perl-doc (<< 5.36.0-1), perl-modules-5.22, perl-modules-5.24, perl-modules-5.26 (<< 5.26.2-5)
Conflicts: libjson-pp-perl (<< 2.27200-2)
Conffiles:
 /etc/perl/Net/libnet.cfg newconffile
Description: Larry Wall's Practical Extraction and Report Language
 Perl is a highly capable, feature-rich programming language with over
 20 years of development. Perl 5 runs on over 100 platforms from
 portables to mainframes. Perl is suitable for both rapid prototyping
 and large scale development projects.
 .
 Perl 5 supports many programming styles, including procedural,
 functional, and object-oriented. In addition to this, it is supported
 by an ever-growing collection of reusable modules which accelerate
 development. Some of these modules include Web frameworks, database
 integration, networking protocols, and encryption. Perl provides
 interfaces to C and C++ for custom extension development.
Homepage: http://dev.perl.org/perl5/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Package: perl
Status: install ok unpacked
Priority: standard
Section: perl
Installed-Size: 670
Maintainer: Niko Tyni <ntyni@debian.org>
Architecture: amd64
Multi-Arch: allowed
Version: 5.36.0-7+deb12u2
Replaces: perl-base (<< 5.36.0-2), perl-modules (<< 5.22.0~)
Provides: libansicolor-perl (= 5.01), libarchive-tar-perl (= 2.40), libattribute-handlers-perl (= 1.02), libautodie-perl (= 2.34), libcompress-raw-bzip2-perl (= 2.103), libcompress-raw-zlib-perl (= 2.105), libcompress-zlib-perl (= 2.106), libcpan-meta-perl (= 2.150010), libcpan-meta-requirements-perl (= 2.140), libcpan-meta-yaml-perl (= 0.018), libdigest-md5-perl (= 2.58), libdigest-perl (= 1.20), libdigest-sha-perl (= 6.02), libencode-perl (= 3.17), libexperimental-perl (= 0.028), libextutils-cbuilder-perl (= 0.280236), libextutils-command-perl (= 7.64), libextutils-install-perl (= 2.20), libextutils-parsexs-perl (= 3.450000), libfile-spec-perl (= 3.8400), libhttp-tiny-perl (= 0.080), libi18n-langtags-perl (= 0.45), libio-compress-base-perl (= 2.106), libio-compress-bzip2-perl (= 2.106), libio-compress-perl (= 2.106), libio-compress-zlib-perl (= 2.106), libio-zlib-perl (= 1.11), libjson-pp-perl (= 4.07000), liblocale-maketext-perl (= 1.31), liblocale-maketext-simple-perl (= 0.21.01), libmath-bigint-perl (= 1.999830), libmath-complex-perl (= 1.5902), libmime-base64-perl (= 3.16), libmodule-corelist-perl (= 5.20220520), libmodule-load-conditional-perl (= 0.74), libmodule-load-perl (= 0.36), libmodule-metadata-perl (= 1.000037), libnet-perl (= 1:3.14), libnet-ping-perl (= 2.74), libparams-check-perl (= 0.38), libparent-perl (= 0.238), libparse-cpan-meta-perl (= 2.150010), libperl-ostype-perl (= 1.010), libpod-escapes-perl (= 1.07), libpod-simple-perl (= 3.43), libstorable-perl (= 3.26), libsys-syslog-perl (= 0.36), libtest-harness-perl (= 3.44), libtest-simple-perl (= 1.302190), libtest-tester-perl (= 1.302190), libtest-use-ok-perl (= 1.302190), libtext-balanced-perl (= 2.04), libthread-queue-perl (= 3.14), libthreads-perl (= 2.27), libthreads-shared-perl (= 1.64), libtime-hires-perl (= 1.9770), libtime-local-perl (= 1.3000), libtime-piece-perl (= 1.3401), libunicode-collate-perl (= 1.31), libversion-perl (= 1:0.9929), libversion-requirements-perl, podlators-perl (= 4.14)
Depends: perl-base (= 5.36.0-7+deb12u2), perl-modules-5.36 (>= 5.36.0-7+deb12u2), libperl5.36 (= 5.36.0-7+deb12u2)
Pre-Depends: dpkg (>= 1.17.17)
Recommends: netbase
Suggests: perl-doc, libterm-readline-gnu-perl | libterm-readline-perl-perl, make, libtap-harness-archive-perl
Breaks: apt-show-versions (<< 0.22.10), libdist-inkt-perl (<< 0.024-5), libmarc-charset-perl (<< 1.35-3), libperl-dev (<< 5.24.0~), perl-doc (<< 5.36.0-1), perl-modules-5.22, perl-modules-5.24, perl-modules-5.26 (<< 5.26.2-5)
Conflicts: libjson-pp-perl (<< 2.27200-2)
Conffiles:
 /etc/perl/Net/libnet.cfg newconffile
Description: Larry Wall's Practical Extraction and Report Language
 Perl is a highly capable, feature-rich programming language with over
 20 years of development. Perl 5 runs on over 100 platforms from
 portables to mainframes. Perl is suitable for both rapid prototyping
 and large scale development projects.
 .
 Perl 5 supports many programming styles, including procedural,
 functional, and object-oriented. In addition to this, it is supported
 by an ever-growing collection of reusable modules which accelerate
 development. Some of these modules include Web frameworks, database
 integration, networking protocols, and encryption. Perl provides
 interfaces to C and C++ for custom extension development.
Homepage: http://dev.perl.org/perl5/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      # Triggers added by dh_makeshlibs/13.9.1
activate-noawait ldconfig
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             71878bd8feed2cf4ab9a458e6f377b92  usr/lib/x86_64-linux-gnu/libcbor.so.0.8.0
753d289f8ce63451c33579b17e3d7049  usr/share/doc/libcbor0.8/README.md
5df6757bf7c221944d85b738643ce691  usr/share/doc/libcbor0.8/changelog.Debian.amd64.gz
2764bbbf7f1f96f60ebf1d036a1494ef  usr/share/doc/libcbor0.8/changelog.Debian.gz
1425f859381e8010218fc10a3b613a3e  usr/share/doc/libcbor0.8/changelog.gz
210fb2a2ead0099216fcd217095e3cd1  usr/share/doc/libcbor0.8/copyright
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Package: libcbor0.8
Source: libcbor (0.8.0-2)
Version: 0.8.0-2+b1
Architecture: amd64
Maintainer: Vincent Bernat <bernat@debian.org>
Installed-Size: 98
Depends: libc6 (>= 2.14)
Section: libs
Priority: optional
Multi-Arch: same
Homepage: https://github.com/PJK/libcbor
Description: library for parsing and generating CBOR (RFC 7049)
 CBOR is a general-purpose schema-less binary data format, defined in
 RFC 7049. This package provides a C library for parsing and generating
 CBOR. The main features are:
 .
  - Complete RFC conformance
  - Robust C99 implementation
  - Layered architecture offers both control and convenience
  - Flexible memory management
  - No shared global state - threading friendly
  - Proper handling of UTF-8
  - Full support for streams & incremental processing
  - Extensive documentation and test suite
  - No runtime dependencies, small footprint
 .
 This package contains the runtime library.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    libcbor.so.0.8 libcbor0.8 #MINVER#
 _cbor_alloc_multiple@Base 0.8.0
 _cbor_builder_append@Base 0.8.0
 _cbor_decode_half@Base 0.8.0
 _cbor_encode_byte@Base 0.8.0
 _cbor_encode_uint16@Base 0.8.0
 _cbor_encode_uint32@Base 0.8.0
 _cbor_encode_uint64@Base 0.8.0
 _cbor_encode_uint8@Base 0.8.0
 _cbor_encode_uint@Base 0.8.0
 _cbor_highest_bit@Base 0.8.0
 _cbor_is_indefinite@Base 0.8.0
 _cbor_load_double@Base 0.8.0
 _cbor_load_float@Base 0.8.0
 _cbor_load_half@Base 0.8.0
 _cbor_load_uint16@Base 0.8.0
 _cbor_load_uint32@Base 0.8.0
 _cbor_load_uint64@Base 0.8.0
 _cbor_load_uint8@Base 0.8.0
 _cbor_map_add_key@Base 0.8.0
 _cbor_map_add_value@Base 0.8.0
 _cbor_realloc_multiple@Base 0.8.0
 _cbor_safe_to_multiply@Base 0.8.0
 _cbor_stack_init@Base 0.8.0
 _cbor_stack_pop@Base 0.8.0
 _cbor_stack_push@Base 0.8.0
 _cbor_unicode_codepoint_count@Base 0.8.0
 _cbor_unicode_decode@Base 0.8.0
 cbor_array_allocated@Base 0.8.0
 cbor_array_get@Base 0.8.0
 cbor_array_handle@Base 0.8.0
 cbor_array_is_definite@Base 0.8.0
 cbor_array_is_indefinite@Base 0.8.0
 cbor_array_push@Base 0.8.0
 cbor_array_replace@Base 0.8.0
 cbor_array_set@Base 0.8.0
 cbor_array_size@Base 0.8.0
 cbor_build_bool@Base 0.8.0
 cbor_build_bytestring@Base 0.8.0
 cbor_build_ctrl@Base 0.8.0
 cbor_build_float2@Base 0.8.0
 cbor_build_float4@Base 0.8.0
 cbor_build_float8@Base 0.8.0
 cbor_build_negint16@Base 0.8.0
 cbor_build_negint32@Base 0.8.0
 cbor_build_negint64@Base 0.8.0
 cbor_build_negint8@Base 0.8.0
 cbor_build_string@Base 0.8.0
 cbor_build_stringn@Base 0.8.0
 cbor_build_tag@Base 0.8.0
 cbor_build_uint16@Base 0.8.0
 cbor_build_uint32@Base 0.8.0
 cbor_build_uint64@Base 0.8.0
 cbor_build_uint8@Base 0.8.0
 cbor_builder_array_start_callback@Base 0.8.0
 cbor_builder_boolean_callback@Base 0.8.0
 cbor_builder_byte_string_callback@Base 0.8.0
 cbor_builder_byte_string_start_callback@Base 0.8.0
 cbor_builder_float2_callback@Base 0.8.0
 cbor_builder_float4_callback@Base 0.8.0
 cbor_builder_float8_callback@Base 0.8.0
 cbor_builder_indef_array_start_callback@Base 0.8.0
 cbor_builder_indef_break_callback@Base 0.8.0
 cbor_builder_indef_map_start_callback@Base 0.8.0
 cbor_builder_map_start_callback@Base 0.8.0
 cbor_builder_negint16_callback@Base 0.8.0
 cbor_builder_negint32_callback@Base 0.8.0
 cbor_builder_negint64_callback@Base 0.8.0
 cbor_builder_negint8_callback@Base 0.8.0
 cbor_builder_null_callback@Base 0.8.0
 cbor_builder_string_callback@Base 0.8.0
 cbor_builder_string_start_callback@Base 0.8.0
 cbor_builder_tag_callback@Base 0.8.0
 cbor_builder_uint16_callback@Base 0.8.0
 cbor_builder_uint32_callback@Base 0.8.0
 cbor_builder_uint64_callback@Base 0.8.0
 cbor_builder_uint8_callback@Base 0.8.0
 cbor_builder_undefined_callback@Base 0.8.0
 cbor_bytestring_add_chunk@Base 0.8.0
 cbor_bytestring_chunk_count@Base 0.8.0
 cbor_bytestring_chunks_handle@Base 0.8.0
 cbor_bytestring_handle@Base 0.8.0
 cbor_bytestring_is_definite@Base 0.8.0
 cbor_bytestring_is_indefinite@Base 0.8.0
 cbor_bytestring_length@Base 0.8.0
 cbor_bytestring_set_handle@Base 0.8.0
 cbor_copy@Base 0.8.0
 cbor_ctrl_value@Base 0.8.0
 cbor_decref@Base 0.8.0
 cbor_describe@Base 0.8.0
 cbor_empty_callbacks@Base 0.8.0
 cbor_encode_array_start@Base 0.8.0
 cbor_encode_bool@Base 0.8.0
 cbor_encode_break@Base 0.8.0
 cbor_encode_bytestring_start@Base 0.8.0
 cbor_encode_ctrl@Base 0.8.0
 cbor_encode_double@Base 0.8.0
 cbor_encode_half@Base 0.8.0
 cbor_encode_indef_array_start@Base 0.8.0
 cbor_encode_indef_bytestring_start@Base 0.8.0
 cbor_encode_indef_map_start@Base 0.8.0
 cbor_encode_indef_string_start@Base 0.8.0
 cbor_encode_map_start@Base 0.8.0
 cbor_encode_negint16@Base 0.8.0
 cbor_encode_negint32@Base 0.8.0
 cbor_encode_negint64@Base 0.8.0
 cbor_encode_negint8@Base 0.8.0
 cbor_encode_negint@Base 0.8.0
 cbor_encode_null@Base 0.8.0
 cbor_encode_single@Base 0.8.0
 cbor_encode_string_start@Base 0.8.0
 cbor_encode_tag@Base 0.8.0
 cbor_encode_uint16@Base 0.8.0
 cbor_encode_uint32@Base 0.8.0
 cbor_encode_uint64@Base 0.8.0
 cbor_encode_uint8@Base 0.8.0
 cbor_encode_uint@Base 0.8.0
 cbor_encode_undef@Base 0.8.0
 cbor_float_ctrl_is_ctrl@Base 0.8.0
 cbor_float_get_float2@Base 0.8.0
 cbor_float_get_float4@Base 0.8.0
 cbor_float_get_float8@Base 0.8.0
 cbor_float_get_float@Base 0.8.0
 cbor_float_get_width@Base 0.8.0
 cbor_get_bool@Base 0.8.0
 cbor_get_int@Base 0.8.0
 cbor_get_uint16@Base 0.8.0
 cbor_get_uint32@Base 0.8.0
 cbor_get_uint64@Base 0.8.0
 cbor_get_uint8@Base 0.8.0
 cbor_incref@Base 0.8.0
 cbor_int_get_width@Base 0.8.0
 cbor_intermediate_decref@Base 0.8.0
 cbor_is_bool@Base 0.8.0
 cbor_is_float@Base 0.8.0
 cbor_is_int@Base 0.8.0
 cbor_is_null@Base 0.8.0
 cbor_is_undef@Base 0.8.0
 cbor_isa_array@Base 0.8.0
 cbor_isa_bytestring@Base 0.8.0
 cbor_isa_float_ctrl@Base 0.8.0
 cbor_isa_map@Base 0.8.0
 cbor_isa_negint@Base 0.8.0
 cbor_isa_string@Base 0.8.0
 cbor_isa_tag@Base 0.8.0
 cbor_isa_uint@Base 0.8.0
 cbor_load@Base 0.8.0
 cbor_map_add@Base 0.8.0
 cbor_map_allocated@Base 0.8.0
 cbor_map_handle@Base 0.8.0
 cbor_map_is_definite@Base 0.8.0
 cbor_map_is_indefinite@Base 0.8.0
 cbor_map_size@Base 0.8.0
 cbor_mark_negint@Base 0.8.0
 cbor_mark_uint@Base 0.8.0
 cbor_move@Base 0.8.0
 cbor_new_ctrl@Base 0.8.0
 cbor_new_definite_array@Base 0.8.0
 cbor_new_definite_bytestring@Base 0.8.0
 cbor_new_definite_map@Base 0.8.0
 cbor_new_definite_string@Base 0.8.0
 cbor_new_float2@Base 0.8.0
 cbor_new_float4@Base 0.8.0
 cbor_new_float8@Base 0.8.0
 cbor_new_indefinite_array@Base 0.8.0
 cbor_new_indefinite_bytestring@Base 0.8.0
 cbor_new_indefinite_map@Base 0.8.0
 cbor_new_indefinite_string@Base 0.8.0
 cbor_new_int16@Base 0.8.0
 cbor_new_int32@Base 0.8.0
 cbor_new_int64@Base 0.8.0
 cbor_new_int8@Base 0.8.0
 cbor_new_null@Base 0.8.0
 cbor_new_tag@Base 0.8.0
 cbor_new_undef@Base 0.8.0
 cbor_null_array_start_callback@Base 0.8.0
 cbor_null_boolean_callback@Base 0.8.0
 cbor_null_byte_string_callback@Base 0.8.0
 cbor_null_byte_string_start_callback@Base 0.8.0
 cbor_null_float2_callback@Base 0.8.0
 cbor_null_float4_callback@Base 0.8.0
 cbor_null_float8_callback@Base 0.8.0
 cbor_null_indef_array_start_callback@Base 0.8.0
 cbor_null_indef_break_callback@Base 0.8.0
 cbor_null_indef_map_start_callback@Base 0.8.0
 cbor_null_map_start_callback@Base 0.8.0
 cbor_null_negint16_callback@Base 0.8.0
 cbor_null_negint32_callback@Base 0.8.0
 cbor_null_negint64_callback@Base 0.8.0
 cbor_null_negint8_callback@Base 0.8.0
 cbor_null_null_callback@Base 0.8.0
 cbor_null_string_callback@Base 0.8.0
 cbor_null_string_start_callback@Base 0.8.0
 cbor_null_tag_callback@Base 0.8.0
 cbor_null_uint16_callback@Base 0.8.0
 cbor_null_uint32_callback@Base 0.8.0
 cbor_null_uint64_callback@Base 0.8.0
 cbor_null_uint8_callback@Base 0.8.0
 cbor_null_undefined_callback@Base 0.8.0
 cbor_refcount@Base 0.8.0
 cbor_serialize@Base 0.8.0
 cbor_serialize_alloc@Base 0.8.0
 cbor_serialize_array@Base 0.8.0
 cbor_serialize_bytestring@Base 0.8.0
 cbor_serialize_float_ctrl@Base 0.8.0
 cbor_serialize_map@Base 0.8.0
 cbor_serialize_negint@Base 0.8.0
 cbor_serialize_string@Base 0.8.0
 cbor_serialize_tag@Base 0.8.0
 cbor_serialize_uint@Base 0.8.0
 cbor_set_bool@Base 0.8.0
 cbor_set_ctrl@Base 0.8.0
 cbor_set_float2@Base 0.8.0
 cbor_set_float4@Base 0.8.0
 cbor_set_float8@Base 0.8.0
 cbor_set_uint16@Base 0.8.0
 cbor_set_uint32@Base 0.8.0
 cbor_set_uint64@Base 0.8.0
 cbor_set_uint8@Base 0.8.0
 cbor_stream_decode@Base 0.8.0
 cbor_string_add_chunk@Base 0.8.0
 cbor_string_chunk_count@Base 0.8.0
 cbor_string_chunks_handle@Base 0.8.0
 cbor_string_codepoint_count@Base 0.8.0
 cbor_string_handle@Base 0.8.0
 cbor_string_is_definite@Base 0.8.0
 cbor_string_is_indefinite@Base 0.8.0
 cbor_string_length@Base 0.8.0
 cbor_string_set_handle@Base 0.8.0
 cbor_tag_item@Base 0.8.0
 cbor_tag_set_item@Base 0.8.0
 cbor_tag_value@Base 0.8.0
 cbor_typeof@Base 0.8.0
                                                                                                                                                                                                                                                                                                                                                                                                                                  libcbor 0.8 libcbor0.8 (>= 0.8.0)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Package: libcbor0.8
Status: install reinstreq half-installed
Priority: optional
Section: libs
Architecture: amd64
Multi-Arch: same
Version: 0.8.0-2+b1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         # [libcbor](https://github.com/PJK/libcbor)

[![Build Status](https://travis-ci.org/PJK/libcbor.svg?branch=master)](https://travis-ci.org/PJK/libcbor)
[![Build status](https://ci.appveyor.com/api/projects/status/8kkmvmefelsxp5u2?svg=true)](https://ci.appveyor.com/project/PJK/libcbor)
[![Documentation Status](https://readthedocs.org/projects/libcbor/badge/?version=latest)](https://readthedocs.org/projects/libcbor/?badge=latest)
[![latest packaged version(s)](https://repology.org/badge/latest-versions/libcbor.svg)](https://repology.org/project/libcbor/versions)
[![codecov](https://codecov.io/gh/PJK/libcbor/branch/master/graph/badge.svg)](https://codecov.io/gh/PJK/libcbor)

**libcbor** is a C library for parsing and generating [CBOR](http://tools.ietf.org/html/rfc7049), the general-purpose schema-less binary data format.

## Main features
 - Complete RFC conformance
 - Robust C99 implementation
 - Layered architecture offers both control and convenience
 - Flexible memory management
 - No shared global state - threading friendly
 - Proper handling of UTF-8
 - Full support for streams & incremental processing
 - Extensive documentation and test suite
 - No runtime dependencies, small footprint
 
## Getting started

### Compile from source

```bash
git clone https://github.com/PJK/libcbor
cmake -DCMAKE_BUILD_TYPE=Release -DCBOR_CUSTOM_ALLOC=ON libcbor
make
make install
```

### Homebrew

```bash
brew install libcbor
```

### Ubuntu 18.04 and above

```bash
sudo add-apt-repository universe
sudo apt-get install libcbor-dev
```

### Fedora & RPM friends

```bash
yum install libcbor-devel
```

### Others 

<details>
  <summary>Packaged libcbor is available from 15+ major repositories. Click here for more detail</summary>
  
  [![Packaging status](https://repology.org/badge/vertical-allrepos/libcbor.svg)](https://repology.org/project/libcbor/versions)
</details>

## Usage example

```c
#include <cbor.h>
#include <stdio.h>

int main(int argc, char * argv[])
{
	/* Preallocate the map structure */
	cbor_item_t * root = cbor_new_definite_map(2);
	/* Add the content */
	cbor_map_add(root, (struct cbor_pair) {
		.key = cbor_move(cbor_build_string("Is CBOR awesome?")),
		.value = cbor_move(cbor_build_bool(true))
	});
	cbor_map_add(root, (struct cbor_pair) {
		.key = cbor_move(cbor_build_uint8(42)),
		.value = cbor_move(cbor_build_string("Is the answer"))
	});
	/* Output: `length` bytes of data in the `buffer` */
	unsigned char * buffer;
	size_t buffer_size,
		length = cbor_serialize_alloc(root, &buffer, &buffer_size);

	fwrite(buffer, 1, length, stdout);
	free(buffer);

	fflush(stdout);
	cbor_decref(&root);
}
```

## Documentation
Get the latest documentation at [libcbor.readthedocs.org](http://libcbor.readthedocs.org/)

## Contributions

All bug reports and contributions are welcome. Please see https://github.com/PJK/libcbor for more info.

Kudos to all the [contributors](https://github.com/PJK/libcbor/graphs/contributors)!

## License
The MIT License (MIT)

Copyright (c) Pavel Kalvoda, 2014-2020

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.
                                         UN0DZ[EiKr@vM-;r{8Vy묮uXP^$Rc
z:p]A[$wa>ˀ'VY?∱sAY0ƚQog':$c?t?0|g<DN&
*q౸U%(=2!ow)7y+
_A te/3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 TMS0Wl(ؕ2ЙRӃ"ml5d ??NW׉ShJa8E=qʒ|"h|/шj^Z7%^k04c
nJ$e
7Y8Qܤ֗ QnC>r<lX`[zo^#}om?낫|.{UVP8oV28Nj獉03ׁ7]פ.۞4.Dy[fY_<"̑%\(QP;􉰵YF
&B=J KMYFr/Cr>(k:^-L5Dk#N;hx
\Wt#I!wrWrIDL]ÔbH+q1%KߣＭvD\:4l>&an,;ԡiKKuD^I}iU\d2aramic(
CۂqJ!"VBEKڤSug3@|OJxvh:,ٸ{c#_ {O:qZhlKNC7V6jUڨ.*f%튙rGT5ېIN6s''{HαQQq}ǧa4l'1
YGFES3b{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Yks6_MgR˵ޖlgS8#c9m$ h{.@J-w/Huιȍx;mG:ziXYg'.hipw~6<2X(бL%=d2
Y$'k)۝'edg~j};65͙lTK4&V$g2"L׭{7jʇdsdl$,Q$Ђ̘Th*K,S{=3A6H6ӉC :^Ic2aXZvCi!XY͓2Ux)UQTG28Z$a`B$l"L*<acʢ[82!_arΓ0a;ȣL{nt~nM"P#c̸bI;y,ƅ1[(bFX7gI7VpsIY%D<ꇤps<UE3AJ2bdGQhEm%"pr	m		lw#mܲMu,Ӕ#C{-fђO&nuqsFJ')*w;ZD*!;x wPF8J6V!>B}oPѴ>-~ҽeLV+׵~:>EG3X4Rkܡa6qiz,[uaP?Ω݁x`|7t>(b*++Qj%b-:gL<(?X}Nb<VSg!KS<yw\݉%VG#iFd5<xdD"AXS./4u>BUd49cx)
x@z4=zz;%<wgO[w/]fu'srܱ7B)9\LMr!Ѣq	.ڡ rȌXʓ+j +	7??
n>ngUK{Ķ7ĥ	):+Az	VP0c9[+V!\DؔQXgQ8(y}׃?F1C>_6/ޢ	s,h[c3A_s.I*f,WsG?^-T`
B	\~qTE]H/I^÷i`6}B9Т-eY:<>(S.[槇̜yENBmo%sԧ3(:l"jD@q/-c)wn}JPPP*NZ$ӌJl؞4)=]AMٜ^%Vl|lN.KiDhLPS
e0M.Ғ
o˃gM0h	j8U
"F"
٭ש5ض
Pl_diL9ةhh,w&炧tM@<N#
+JMyxP'\5YR{,A2xU*$K j=]\<+cPM9DtS.uRTzt|/Rb);wNG9ywڀq(
@YX'WA9:?6Rm9︟cx<4na|"ZOB>?ZBx^tf_(i2A>FjT$hZJ+LcHlx\]uY!E4#3b-Rq|]*҂Lxy,e<Ճy:8"WTtQn(JXT."	%Os>j}4,t8iע9Ȭu\BɭV+V;JZ^R'#.(?pJ]}g*0$

g'i}AIC7.<ڷN7t|-X`iB`L0"䞮Sd$
lC%~&Q^dS浍V+E~~ۛN,N@F\s߽h"-zHVzΏE?jø 
Ӥj؅g բ gxAI6v8 b裧R^53(+w3*oKx;1t6;ckfL;-9
=n1q([IhP=g1=KKS@jgՉ[u=t b60ٮn6I)q7VkTY2yjW@ P۝"r3)}WϣJd}QtBh
"ʸI0[bE2~h/Z !LrpǣݿA\Ӟ
żBdHH88F&F]rly4L)]? ̭^~Z!*,7z8^-d<t&UEM`"i@"}@X
4-
S^;*ǫ_^9%b8h}?%^[Yp5/6yee#9Xo4ٌ4ۛ#q~_ʾtovߵV8˵K+~OZѽ#霈7RݵSD06p_8}/T
xBYQ<ڛx[ܻ0nY^2K~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: libcbor
Source: https://github.com/PJK/libcbor

Files: *
Copyright: Copyright (c) Pavel Kalvoda, 2014-2020
License: Expat

Files: src/cbor/internal/unicode.c
Copyright: (c) Pavel Kalvoda, 2014-2020
           (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
License: Expat

Files: debian/*
Copyright: 2015 Vincent Bernat <bernat@debian.org>
License: Expat

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/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libcbor.so.0.8.0
/usr/share
/usr/share/doc
/usr/share/doc/libcbor0.8
/usr/share/doc/libcbor0.8/README.md
/usr/share/doc/libcbor0.8/changelog.Debian.amd64.gz
/usr/share/doc/libcbor0.8/changelog.Debian.gz
/usr/share/doc/libcbor0.8/changelog.gz
/usr/share/doc/libcbor0.8/copyright
/usr/lib/x86_64-linux-gnu/libcbor.so.0.8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Package: libcbor0.8
Status: install reinstreq unpacked
Priority: optional
Section: libs
Installed-Size: 98
Maintainer: Vincent Bernat <bernat@debian.org>
Architecture: amd64
Multi-Arch: same
Source: libcbor (0.8.0-2)
Version: 0.8.0-2+b1
Depends: libc6 (>= 2.14)
Description: library for parsing and generating CBOR (RFC 7049)
 CBOR is a general-purpose schema-less binary data format, defined in
 RFC 7049. This package provides a C library for parsing and generating
 CBOR. The main features are:
 .
  - Complete RFC conformance
  - Robust C99 implementation
  - Layered architecture offers both control and convenience
  - Flexible memory management
  - No shared global state - threading friendly
  - Proper handling of UTF-8
  - Full support for streams & incremental processing
  - Extensive documentation and test suite
  - No runtime dependencies, small footprint
 .
 This package contains the runtime library.
Homepage: https://github.com/PJK/libcbor
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Package: libcbor0.8
Status: install ok unpacked
Priority: optional
Section: libs
Installed-Size: 98
Maintainer: Vincent Bernat <bernat@debian.org>
Architecture: amd64
Multi-Arch: same
Source: libcbor (0.8.0-2)
Version: 0.8.0-2+b1
Depends: libc6 (>= 2.14)
Description: library for parsing and generating CBOR (RFC 7049)
 CBOR is a general-purpose schema-less binary data format, defined in
 RFC 7049. This package provides a C library for parsing and generating
 CBOR. The main features are:
 .
  - Complete RFC conformance
  - Robust C99 implementation
  - Layered architecture offers both control and convenience
  - Flexible memory management
  - No shared global state - threading friendly
  - Proper handling of UTF-8
  - Full support for streams & incremental processing
  - Extensive documentation and test suite
  - No runtime dependencies, small footprint
 .
 This package contains the runtime library.
Homepage: https://github.com/PJK/libcbor
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
# This is the ssh client system-wide configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.

# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.

# Site-wide defaults for some commonly used options.  For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.

Include /etc/ssh/ssh_config.d/*.conf

Host *
#   ForwardAgent no
#   ForwardX11 no
#   ForwardX11Trusted yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   GSSAPIKeyExchange no
#   GSSAPITrustDNS no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519
#   Port 22
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
#   ProxyCommand ssh -q -W %h:%p gateway.example.com
#   RekeyLimit 1G 1h
#   UserKnownHostsFile ~/.ssh/known_hosts.d/%k
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              #! /bin/sh
set -e

# Copyright (c) 2001 Natalie Amery.
#
# 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.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.

if [ "${0##*/}" = "ssh-argv0" ]
then
  echo 'ssh-argv0: This script should not be run like this, see ssh-argv0(1) for details' 1>&2
  exit 1
fi
exec ssh "${0##*/}" "$@"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #!/bin/sh

# Copyright (c) 1999-2020 Philip Hands <phil@hands.com>
#               2020 Matthias Blümel <blaimi@blaimi.de>
#               2017 Sebastien Boyron <seb@boyron.eu>
#               2013 Martin Kletzander <mkletzan@redhat.com>
#               2010 Adeodato =?iso-8859-1?Q?Sim=F3?= <asp16@alu.ua.es>
#               2010 Eric Moret <eric.moret@gmail.com>
#               2009 Xr <xr@i-jeuxvideo.com>
#               2007 Justin Pryzby <justinpryzby@users.sourceforge.net>
#               2004 Reini Urban <rurban@x-ray.at>
#               2003 Colin Watson <cjwatson@debian.org>
# 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.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.

# Shell script to install your public key(s) on a remote machine
# See the ssh-copy-id(1) man page for details

# shellcheck shell=dash

# check that we have something mildly sane as our shell, or try to find something better
if false ^ printf "%s: WARNING: ancient shell, hunting for a more modern one... " "$0"
then
  SANE_SH=${SANE_SH:-/usr/bin/ksh}
  if printf 'true ^ false\n' | "$SANE_SH"
  then
    printf "'%s' seems viable.\\n" "$SANE_SH"
    exec "$SANE_SH" "$0" "$@"
  else
    cat <<-EOF
	oh dear.

	  If you have a more recent shell available, that supports \$(...) etc.
	  please try setting the environment variable SANE_SH to the path of that
	  shell, and then retry running this script. If that works, please report
	  a bug describing your setup, and the shell you used to make it work.

	EOF
    printf '%s: ERROR: Less dimwitted shell required.\n' "$0"
    exit 1
  fi
fi

# shellcheck disable=SC2010
DEFAULT_PUB_ID_FILE=$(ls -t "${HOME}"/.ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)
SSH="ssh -a -x"
umask 0177

usage () {
  printf 'Usage: %s [-h|-?|-f|-n|-s] [-i [identity_file]] [-p port] [-F alternative ssh_config file] [[-o <ssh -o options>] ...] [user@]hostname\n' "$0" >&2
  printf '\t-f: force mode -- copy keys without trying to check if they are already installed\n' >&2
  printf '\t-n: dry run    -- no keys are actually copied\n' >&2
  printf '\t-s: use sftp   -- use sftp instead of executing remote-commands. Can be useful if the remote only allows sftp\n' >&2
  printf '\t-h|-?: print this help\n' >&2
  exit 1
}

# escape any single quotes in an argument
quote() {
  printf '%s\n' "$1" | sed -e "s/'/'\\\\''/g"
}

use_id_file() {
  L_ID_FILE="$1"

  if [ -z "$L_ID_FILE" ] ; then
    printf '%s: ERROR: no ID file found\n' "$0"
    exit 1
  fi

  if expr "$L_ID_FILE" : '.*\.pub$' >/dev/null ; then
    PUB_ID_FILE="$L_ID_FILE"
  else
    PUB_ID_FILE="$L_ID_FILE.pub"
  fi

  [ "$FORCED" ] || PRIV_ID_FILE=$(dirname "$PUB_ID_FILE")/$(basename "$PUB_ID_FILE" .pub)

  # check that the files are readable
  for f in "$PUB_ID_FILE" ${PRIV_ID_FILE:+"$PRIV_ID_FILE"} ; do
    ErrMSG=$( { : < "$f" ; } 2>&1 ) || {
      L_PRIVMSG=""
      [ "$f" = "$PRIV_ID_FILE" ] && L_PRIVMSG="	(to install the contents of '$PUB_ID_FILE' anyway, look at the -f option)"
      printf "\\n%s: ERROR: failed to open ID file '%s': %s\\n" "$0" "$f" "$(printf '%s\n%s\n' "$ErrMSG" "$L_PRIVMSG" | sed -e 's/.*: *//')"
      exit 1
    }
  done
  printf '%s: INFO: Source of key(s) to be installed: "%s"\n' "$0" "$PUB_ID_FILE" >&2
  GET_ID="cat \"$PUB_ID_FILE\""
}

if [ -n "$SSH_AUTH_SOCK" ] && ssh-add -L >/dev/null 2>&1 ; then
  GET_ID="ssh-add -L"
fi

while getopts "i:o:p:F:fnsh?" OPT
do
  case "$OPT" in
    i)
      [ "${SEEN_OPT_I}" ] && {
        printf '\n%s: ERROR: -i option must not be specified more than once\n\n' "$0"
        usage
      }
      SEEN_OPT_I="yes"
      use_id_file "${OPTARG:-$DEFAULT_PUB_ID_FILE}"
      ;;
    o|p|F)
      SSH_OPTS="${SSH_OPTS:+$SSH_OPTS }-$OPT '$(quote "${OPTARG}")'"
      ;;
    f)
      FORCED=1
      ;;
    n)
      DRY_RUN=1
      ;;
    s)
      SFTP=sftp
      ;;
    h|\?)
      usage
      ;;
  esac
done 
#shift all args to keep only USER_HOST
shift $((OPTIND-1))

if [ $# = 0 ] ; then
  usage
fi
if [ $# != 1 ] ; then
  printf '%s: ERROR: Too many arguments.  Expecting a target hostname, got: %s\n\n' "$0" "$SAVEARGS" >&2
  usage
fi

# drop trailing colon
USER_HOST="$*"
# tack the hostname onto SSH_OPTS
SSH_OPTS="${SSH_OPTS:+$SSH_OPTS }'$(quote "$USER_HOST")'"
# and populate "$@" for later use (only way to get proper quoting of options)
eval set -- "$SSH_OPTS"

# shellcheck disable=SC2086
if [ -z "$(eval $GET_ID)" ] && [ -r "${PUB_ID_FILE:=$DEFAULT_PUB_ID_FILE}" ] ; then
  use_id_file "$PUB_ID_FILE"
fi

# shellcheck disable=SC2086
if [ -z "$(eval $GET_ID)" ] ; then
  printf '%s: ERROR: No identities found\n' "$0" >&2
  exit 1
fi

# filter_ids()
# tries to log in using the keys piped to it, and filters out any that work
filter_ids() {
  L_SUCCESS="$1"
  L_TMP_ID_FILE="$SCRATCH_DIR"/popids_tmp_id
  L_OUTPUT_FILE="$SCRATCH_DIR"/popids_output

  # repopulate "$@" inside this function
  eval set -- "$SSH_OPTS"

  while read -r ID || [ "$ID" ] ; do
    printf '%s\n' "$ID" > "$L_TMP_ID_FILE"

    # the next line assumes $PRIV_ID_FILE only set if using a single id file - this
    # assumption will break if we implement the possibility of multiple -i options.
    # The point being that if file based, ssh needs the private key, which it cannot
    # find if only given the contents of the .pub file in an unrelated tmpfile
    $SSH -i "${PRIV_ID_FILE:-$L_TMP_ID_FILE}" \
      -o ControlPath=none \
      -o LogLevel=INFO \
      -o PreferredAuthentications=publickey \
      -o IdentitiesOnly=yes "$@" exit >"$L_OUTPUT_FILE" 2>&1 </dev/null
    if [ "$?" = "$L_SUCCESS" ] || {
         [ "$SFTP" ] && grep 'allows sftp connections only' "$L_OUTPUT_FILE" >/dev/null
         # this error counts as a success if we're setting up an sftp connection
       }
    then
      : > "$L_TMP_ID_FILE"
    else
      grep 'Permission denied' "$L_OUTPUT_FILE" >/dev/null || {
        sed -e 's/^/ERROR: /' <"$L_OUTPUT_FILE" >"$L_TMP_ID_FILE"
        cat >/dev/null #consume the other keys, causing loop to end
      }
    fi

    cat "$L_TMP_ID_FILE"
  done
}

# populate_new_ids() uses several global variables ($USER_HOST, $SSH_OPTS ...)
# and has the side effect of setting $NEW_IDS
populate_new_ids() {
  if [ "$FORCED" ] ; then
    # shellcheck disable=SC2086
    NEW_IDS=$(eval $GET_ID)
    return
  fi

  printf '%s: INFO: attempting to log in with the new key(s), to filter out any that are already installed\n' "$0" >&2
  # shellcheck disable=SC2086
  NEW_IDS=$(eval $GET_ID | filter_ids $1)

  if expr "$NEW_IDS" : "^ERROR: " >/dev/null ; then
    printf '\n%s: %s\n\n' "$0" "$NEW_IDS" >&2
    exit 1
  fi
  if [ -z "$NEW_IDS" ] ; then
    printf '\n%s: WARNING: All keys were skipped because they already exist on the remote system.\n' "$0" >&2
    printf '\t\t(if you think this is a mistake, you may want to use -f option)\n\n' >&2
    exit 0
  fi
  printf '%s: INFO: %d key(s) remain to be installed -- if you are prompted now it is to install the new keys\n' "$0" "$(printf '%s\n' "$NEW_IDS" | wc -l)" >&2
}

# installkey_sh [target_path]
#    produce a one-liner to add the keys to remote authorized_keys file
#    optionally takes an alternative path for authorized_keys
installkeys_sh() {
  AUTH_KEY_FILE=${1:-.ssh/authorized_keys}
  AUTH_KEY_DIR=$(dirname "${AUTH_KEY_FILE}")

  # In setting INSTALLKEYS_SH:
  #    the tr puts it all on one line (to placate tcsh)
  #      (hence the excessive use of semi-colons (;) )
  # then in the command:
  #    cd to be at $HOME, just in case;
  #    the -z `tail ...` checks for a trailing newline. The echo adds one if was missing
  #    the cat adds the keys we're getting via STDIN
  #    and if available restorecon is used to restore the SELinux context
  INSTALLKEYS_SH=$(tr '\t\n' ' ' <<-EOF
	cd;
	umask 077;
	mkdir -p "${AUTH_KEY_DIR}" &&
		{ [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] ||
			echo >> "${AUTH_KEY_FILE}" || exit 1; } &&
		cat >> "${AUTH_KEY_FILE}" || exit 1;
	if type restorecon >/dev/null 2>&1; then
		restorecon -F "${AUTH_KEY_DIR}" "${AUTH_KEY_FILE}";
	fi
	EOF
  )

  # to defend against quirky remote shells: use 'exec sh -c' to get POSIX;
  printf "exec sh -c '%s'" "${INSTALLKEYS_SH}"
}

#shellcheck disable=SC2120 # the 'eval set' confuses this
installkeys_via_sftp() {

  # repopulate "$@" inside this function
  eval set -- "$SSH_OPTS"

  L_KEYS=$SCRATCH_DIR/authorized_keys
  L_SHARED_CON=$SCRATCH_DIR/master-conn
  $SSH -f -N -M -S "$L_SHARED_CON" "$@"
  L_CLEANUP="$SSH -S $L_SHARED_CON -O exit 'ignored' >/dev/null 2>&1 ; $SCRATCH_CLEANUP"
  #shellcheck disable=SC2064
  trap "$L_CLEANUP" EXIT TERM INT QUIT
  sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1
	-get .ssh/authorized_keys $L_KEYS
	EOF
  # add a newline or create file if it's missing, same like above
  [ -z "$(tail -1c "$L_KEYS" 2>/dev/null)" ] || echo >> "$L_KEYS"
  # append the keys being piped in here
  cat >> "$L_KEYS"
  sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1
	-mkdir .ssh
	chmod 700 .ssh
	put $L_KEYS .ssh/authorized_keys
	chmod 600 .ssh/authorized_keys
	EOF
  #shellcheck disable=SC2064
  eval "$L_CLEANUP" && trap "$SCRATCH_CLEANUP" EXIT TERM INT QUIT
}


# create a scratch dir for any temporary files needed
if SCRATCH_DIR=$(mktemp -d ~/.ssh/ssh-copy-id.XXXXXXXXXX) &&
    [ "$SCRATCH_DIR" ] && [ -d "$SCRATCH_DIR" ]
then
  chmod 0700 "$SCRATCH_DIR"
  SCRATCH_CLEANUP="rm -rf \"$SCRATCH_DIR\""
  #shellcheck disable=SC2064
  trap "$SCRATCH_CLEANUP" EXIT TERM INT QUIT
else
  printf '%s: ERROR: failed to create required temporary directory under ~/.ssh\n' "$0" >&2
  exit 1
fi

REMOTE_VERSION=$($SSH -v -o PreferredAuthentications=',' -o ControlPath=none "$@" 2>&1 |
                 sed -ne 's/.*remote software version //p')

# shellcheck disable=SC2029
case "$REMOTE_VERSION" in
  NetScreen*)
    populate_new_ids 1
    for KEY in $(printf "%s" "$NEW_IDS" | cut -d' ' -f2) ; do
      KEY_NO=$((KEY_NO + 1))
      printf '%s\n' "$KEY" | grep ssh-dss >/dev/null || {
         printf '%s: WARNING: Non-dsa key (#%d) skipped (NetScreen only supports DSA keys)\n' "$0" "$KEY_NO" >&2
         continue
      }
      [ "$DRY_RUN" ] || printf 'set ssh pka-dsa key %s\nsave\nexit\n' "$KEY" | $SSH -T "$@" >/dev/null 2>&1
      if [ $? = 255 ] ; then
        printf '%s: ERROR: installation of key #%d failed (please report a bug describing what caused this, so that we can make this message useful)\n' "$0" "$KEY_NO" >&2
      else
        ADDED=$((ADDED + 1))
      fi
    done
    if [ -z "$ADDED" ] ; then
      exit 1
    fi
    ;;
  dropbear*)
    populate_new_ids 0
    [ "$DRY_RUN" ] || printf '%s\n' "$NEW_IDS" | \
      $SSH "$@" "$(installkeys_sh /etc/dropbear/authorized_keys)" \
      || exit 1
    ADDED=$(printf '%s\n' "$NEW_IDS" | wc -l)
    ;;
  *)
    # Assuming that the remote host treats ~/.ssh/authorized_keys as one might expect
    populate_new_ids 0
    if ! [ "$DRY_RUN" ] ; then
      printf '%s\n' "$NEW_IDS" | \
        if [ "$SFTP" ] ; then
          #shellcheck disable=SC2119
          installkeys_via_sftp
        else
          $SSH "$@" "$(installkeys_sh)"
        fi || exit 1
    fi
    ADDED=$(printf '%s\n' "$NEW_IDS" | wc -l)
    ;;
esac

if [ "$DRY_RUN" ] ; then
  cat <<-EOF
	=-=-=-=-=-=-=-=
	Would have added the following key(s):

	$NEW_IDS
	=-=-=-=-=-=-=-=
	EOF
else
  cat <<-EOF

	Number of key(s) added: $ADDED

	Now try logging into the machine, with:   "${SFTP:-ssh} $SSH_OPTS"
	and check to make sure that only the key(s) you wanted were added.

	EOF
fi

# =-=-=-=
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/bin/sh
# helper script for launching ssh-agent, used by systemd unit
set -e

if [ ! -d "$XDG_RUNTIME_DIR" ]; then
    # shellcheck disable=SC2016
    echo 'This needs $XDG_RUNTIME_DIR to be set' >&2
    exit 1
fi

if [ "$1" = start ]; then
    if [ -z "$SSH_AUTH_SOCK" ] && grep -s -q '^use-ssh-agent$' /etc/X11/Xsession.options; then
        S="$XDG_RUNTIME_DIR/openssh_agent"
        dbus-update-activation-environment --verbose --systemd SSH_AUTH_SOCK="$S" SSH_AGENT_LAUNCHER=openssh
        exec ssh-agent -D -a "$S"
    fi
elif [ "$1" = stop ]; then
    if [ "$SSH_AGENT_LAUNCHER" = openssh ]; then
        dbus-update-activation-environment --systemd  SSH_AUTH_SOCK=
    fi
else
    echo "Unknown command $1" >&2
    exit 1
fi
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                [Unit]
Description=OpenSSH Agent
Documentation=man:ssh-agent(1)
Before=graphical-session-pre.target
ConditionPathExists=/etc/X11/Xsession.options
Wants=dbus.socket
After=dbus.socket

[Service]
ExecStart=/usr/lib/openssh/agent-launch start
ExecStopPost=/usr/lib/openssh/agent-launch stop
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 '''apport hook for openssh-client

(c) 2010 Canonical Ltd.
Author: Chuck Short <chuck.short@canonical.com>

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.  See http://www.gnu.org/copyleft/gpl.html for
the full text of the license.
'''

from apport.hookutils import (
    attach_conffiles,
    attach_related_packages,
    command_output,
)


def add_info(report, ui):
    response = ui.yesno("The contents of your /etc/ssh/ssh_config file "
                        "may help developers diagnose your bug more "
                        "quickly.  However, it may contain sensitive "
                        "information.  Do you want to include it in your "
                        "bug report?")

    if response == None:  # user cancelled
        raise StopIteration

    elif response:
        attach_conffiles(report, 'openssh-client')

    attach_related_packages(report,
        ['ssh-askpass', 'libpam-ssh', 'keychain', 'ssh-askpass-gnome'])
    report['SSHClientVersion'] = command_output(['/usr/bin/ssh', '-V'])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ms۶_ݙڭE[kN];mxcw3;;$4C>ztHզ~٤|g5SWϔz),Vˮ0^iUui|kU+Vz>7y{[[-@#w.FU~Jd
L.
"hˊN6nUQ_فr5oWz4T^ZS#oV*o~pA#h>9M-~Զ#ej媅r<yNtP3:o
:bQX:.Uv4w͓n
ҪZ2gkfDfr{gv@.Ph]˵2\kifk*"saZJI{tJ ftx	 B
Wy4wUZQЍ ޷[p6,J-ƇJ[|035TgSKxrӓ|K??Ki_Vo#h⺃+n{Rsvm=يՅ?fnP
;YbG۸jEr{ԍ%"$bk,ܒJCҥeBi
Tp;G5RӀAu,"ծkԓ-xeU q+Z$
C+o'\˧JlM(hne?C^POՏToӓًw;UKcJ$d& Lw޸Ki:_ӏGM^l]JW_\yn=q3E4Q "'Ĺk]yrz\cVRkl	=`~=8eŒOKSt)
8ᑛ6tuu
iin4(6J:S	 N.r1PI6'?C a+ЄnMU
P7wyc]kD@AܪgzHYԇ,LXz液5Ӭm;0\5Zx+
k6x_6*]wRpS$5
S	aE3](m	F[6G
-{Շ,QbWx*(N+EԈmQۥupPhci9|x}XAbyW5X3b
zvԮ=2m ;ZTMh-S߹'hDy[=>ˢk.XtצG:by._ؓF7f`$>Nj~[Aw[U
(% I]*6%Aܣ7j^3ŽnU^	tJ#^ev,B'ȼEvu;$hLڲD4_@
@8`O^|$,+
N26tެ-]/m 5A&}x!EqySq}D+ jVZR1fO7~v}TWnE`ԛpv
dE֥րsʣk-Y/=bEd<Ʉx}D'B(a>x^DQ[%(JwH$:?p9צ]WJ΀;D(TET$kI (FS]
shm_R$9A*>(|h{Y`.${rsRGQA:X~]~j>w$H*׳}禆d^.s[]eQHH!b-HduohҮ.AI@H#a:y/RngvHnābm]iOi ee㻵0Vx)D}!¾/)/3CɎbb:9N;	:9@@-r&06"4Ey0q "
_:/QAؤWuzH+WqGg?O;Et(]0<|I)Ab\`ɐ _b`v?|gԇLS~!Ԥy@_~*N[`?"&y	`5n0T" IH+zK2A60)U1C4ٞF SWj3]I<O-2'e2&%B0:US8؀ne`g:z,EDteTvb8/|M`õ(L&Sde.AJ}%[(;jɐN' |b7ZD F׵
V\(dXEit3)>]<<s3R~ܺ1#}Z@?Y!XF}im+dUN;Ww{T(E葝8
\\#%FdhvT>)E|@8K0Eb}d}?jJ.Dh@U\g1<)Zb \i H03R25ok=CO-bͿTfmTB%,Hp x~	|9uZz0+[y5}%UbIklT3[.C`Q("!@fm&Kj_eYUm&)~T|^1B3veC<>RSQkgQ96El}Gq܊BtJ΢uS!.
m_0>!ǉÛ뻤RLid$#KًS r	;IR/C#>1>z.dy*0aZΙ\19UbYWƦ33|iq(o	A&×DF)m!7SYMuMV.PG
Mq9E0$;|}NN'HapW$RlϐGxGSf5s9x੾E'$2(Kh,g5orVj~!$2C!C i/1zEP?>	8	eH$6ӣm嫶ӳ{^7K}6|]ĭ8EvB_lXj41bgHRibCpR\i~^^-+NeȟxRPDdbWֶ];QmGX&GF6d#櫠١Mq+ D߸!g4)SnCU߰BQ;d/֔NkjI1<6j<NN;s伧}PI1`xSa+ӽZ1dDD0'6Щ,Y4AB'$՜JH~+l(f/uuwO""[&'=C _7?o`ԻRE=N"i[\
6EYpM]
z&'8͂^p	5į$*M{@WǤ˝eh__pۅU4$LCFFdFB<7t%l	0
f's^m
NOwrtN>-<vinPRR>jJ[Xf6#q}u'TqCbhp`'#$K8=a~.k
yN;0hHBPGʥܾ5"w)vR+a"-~)wUx2"
Ki	_qV5TVv-\7'J[ҎN;y1pOpOjPs Rp;Ջm
>tcBnu@58E੨#MdK]@}_%͍[Xc_C}3g~ypsÇ4x,g{50
Ԥc0gR(ˑ^qgS.vG2.hl䴢KX4̢_C.G	ABHCL1:7瞝b^uʅdRyTAsvMRĴ}>cHvw ?]#URiX{+*vUJoT<AцwdѷUp5RO.O&h$ϲ>yѕ*vG26#*t5Z4HƧtq &zIt|$EW`a{3zeܤXsf7phGUpMG"/67{B57Y9hkJ06^PU4ҸݶjO'}G8SLgF; F
Ӱa>f'%m[^%}ǘEws2W=THBWk5GBsZo==bq8ϠNNwy؃I<"JI"BVOKCX q.VqHg/h`NVҟ_4`wTXT{=8 RS :ZtC5*i8aL=;ͥ-ÅI
ڇ!6/
X|mN7Lzq8datwF7oo(Q6sx9 ۀCa$$QvWEѐ
uZ"Eub:ء~ً+ao&pM~dϲPӕO::\C7rlK&o$hG4PK~tTW^/̇,`E<w63K3apYyn.+v{z\sa+K~trSA. 6l
10$nTzS{uu m&a22h~vOialDݽ}4 \<N\7Z)`8t063O)ԢU%EW}r.0wc%@3!`ȷr`<-F0Btȉҕ2z+
TGS8#5hZ!Okit5~.<\n*rϓ'l[ɫ129E_zG> P
j]DС205
%9#Y&Za䏯fbpMwuD=.\SЋO^ۑU)~}ES>pҗ:Ho9}?:e{NSvlqK<#\8;yNyRONRC*l>[Q$bvz}0ؾyk7ʤ[<oTtcB*kƂ#I#*vûd}-D!bO¾8Zkz+t҄`7fv%iD1gG vcSxC<H؇#qZ6} "9
0nD+etrN7Zg:Ò1?zmN]0t:v6Zbwx} [-ExƲf1[4j.`l(OfPϑo7]2 
	ɱ@kAPi\:
1k
z
	iGBI[t>jlmVX~@Nr{[!8)fTtW<M5PyF6yJ+c8ԏmYxN]{ϵsjM_P|w";{^Q/|)_ɛ;PXKa1uzJ}u4އOo~$	Wkjl]ХЅOjt`wR^At'"{7o.umq\/;!QBWƛ,K$47C-W+N$a⨕*$QBg-lqyffw|8R)vgwfy7J:	dRG/+߯>퉍pӅaVi3OB1.N"dB-?e[a!ۨHk(xVɶڤ\ N7uN^w)8vSD[Ϲ0(T.O%+sb'(ciQv<B+
%^)g^+P<9C<52?&\s"+Z?Eb![m&6bIt$x>R;sPMⴣҸzVsr
yI䴓^P8مul{ԕvPU
q=,ѹUT99.|8`Dzz&5GlG헫A%/ZNK?_pq^H'j&?0sXh1eOy* tA׆fc26qRP&<Tul^nHi5%Uԗ?QLey!A6aΙB!▜ťժgϲbECCs>Y%@z8zx)bA,wfEc]߾&:^,bk	۬V,OI,Hw
IVpWNߙ69ŪN{`i鷋e{,k+V]-,	!VfT zE	"DNzQʽZhW^
UA~G(e'uYf q @?AXz֩rpBJE_)1!Y4<q*,'D8U)ZB<+t]Ngx5F݁
bxiȱr
"_1t/r`L
f!zN+P<.sJ O0酄~>Ռ7 ϝf-`rN|a춼1~!C
x]	>p97.C[*&BWR>XpyK`\%|j@E
㚃feBѳR=3rsW>KJ*ܜ_S6.+1buMx׽O-ȣJPڍ	'Uʒ)&[o-דJ~0%{@	*>+Q;%ow!(ҟJkh*m$#u|}ۺ$ _.fI{9z}HO}0W0OVwl
]
EGCLDm\Do K.. wUn<cnf4q7WaY%`|Ѧ	Dk !f	P]1d5mܘ9E}wm檡WmmS8FaЙsWB&5jc䊂mVus-G&ow9Y'g93uz0L"k߸eU0e^q!V7#-WɇԼkj >mp
vR5?銩 f{!ØX\oB3h	_:'G?5T^K]!&-L3=8r_zU)`S:u(cP#Mu~|˗6
33(z>u=CTX!NSzEZ 
OW!z_cv).^ |D-AURlAZpi^c@syxٖ
:BދͤL]6PCERM&!\=x}~.@;sRQJ'lp5F~tױγ
Vb)7\
B_%<4C6fpch$s9(]iq2yzK[׼-s<AiLٍ,sw]/Lϰew6vLNYX6
я#JS][[:B?{d{|=O3\%~[C${@ٹfzTd-Yw̪I(jnFh,,2r vaARu1viZXգH߯a~ϏJ
T=0VqQ%_mq/yeA5#APKpFCYz>F7+VK/Z@uƻ8͵XG'-2_kIgӫhHTu.25]
od!Nm)KI8EY'YkNɄwMR+h`ף>i4e	WxΑ؛IIi0 a+H:NmJx[%9~ŴG??$h\JP66uHʍ+p3uoȜ'&2e^|j8AH*aZa                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 }XaoDwIrVؖq(x;F-ɽ͐j C]Ù73ofWW^;QZt5^ljEߕҫRTƊNe6m)u&]*n>ެxתB3W[=dcSF	S	AFz#Oy]t6V}=FjAf34Eߨא2FJTqxvTPEA=hNlP:|۾UޘdnżXW.G{ڴ@ᯧp}ו~)~gxz|J^ʽB{^ l~Љ'g\e` Ba^-TclI^gQZړY8:zPjYJ●?2mZCf&a>Kbơ{~!6->Fq0~NΫƝ-&.Dmlup]
B
lu!*AѺ+2!; 
(`j\	U-X"IENBRuk$l|F[vG(cAק(qC"Hpu!̎oc4UA[24Aq`FÇO⇟7wu<Pbuwԑ"goUK!8C[YMzg,ib05(p*,!cu8{
[BEp g
gV:rD1:J06
 ;}_{ΪB3.\'~J`z\SG(Y	acMNK[|/kVJ6,3h1\;WO$Sė'
U=!p C
cݛ$>Wg"ؒzȒh(tWwҹnoK0G!qx)gfh.hlB_떙TxS:c˰#uz(*$VlKuWU "^O6qU:zTWpdLp(-Ʌ*
!
W$9p!m+	LAgTϢx:G[<<H=B.Ps}+}1<
|'ϋls
IQz\vlxCS	<HM*Qe۪:;C>. RIqXYR\ {KBÒ&
% ",["!Pg9HuP S>1yE(}|WniKỉrtD=( p!#>Y!9PI.F)-u|v;r0H_@gf=Zs2{kxEly'<	>n0 vfL 	+Ro(TS^oKt<&IxHNY~D)I<
	
^KWC6majOݑP`P38UE`܍*wϲnOF)T^6>Jгq.e*/	'`su҆.cP@T]1􊩕
hyދ/sh/I$Jż3`m}-LSdk̍]|gsҠ6;ķQ05YJ?-'<б
[
i?g	j	y,*Qѷ&	X46'?S,<V
"0&h\8K.aR(GB 1݇
憔
e3\OnuO3j-l/	d3`2
(n$~!Su_GҨ҉A!5(uY>D%CFC޽i&Km.ˌ1#-i1frrtz,yT۞(k/QЮ1qmФL.)Ri_ƞaJaGWh&mxkLzaL&]<]ݘdKȬaJs3>rR0'}){\+-J?Р$t`Wʝ*00Ƶ$cpAKYadhE*|*,'\[BPp?81	/)
*zRGv[th)UP -T*n:ǝ
+nxM<$mZmBDJ_4e~y?C=Q%L
ǆFD1T)A k>N-,qh-O_R<bZFvŭW$%oCQV|el}pB?,c>8hk&N$HH8EP8/#'+o4|?g&F!"ݑ:v <bk,B$%EKw=u4xlK_9YDx}.H_߿?R<o埮/y׳ ʺ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              See https://www.openssh.com/releasenotes.html#9.2p1 for the release notes.

Please read https://www.openssh.com/report.html for bug reporting
instructions and note that we do not use Github for bug reporting or
patch/pull-request management.

This is the port of OpenBSD's excellent OpenSSH[0] to Linux and other
Unices.

OpenSSH is based on the last free version of Tatu Ylonen's sample
implementation with all patent-encumbered algorithms removed (to
external libraries), all known security bugs fixed, new features
reintroduced and many other clean-ups.  OpenSSH has been created by
Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt,
and Dug Song. It has a homepage at https://www.openssh.com/

This port consists of the re-introduction of autoconf support, PAM
support, EGD/PRNGD support and replacements for OpenBSD library
functions that are (regrettably) absent from other unices. This port
has been best tested on AIX, Cygwin, HP-UX, Linux, MacOS/X,
FreeBSD, NetBSD, OpenBSD, OpenServer, Solaris and UnixWare.

This version actively tracks changes in the OpenBSD CVS repository.

The PAM support is now more functional than the popular packages of
commercial ssh-1.2.x. It checks "account" and "session" modules for
all logins, not just when using password authentication.

There is now several mailing lists for this port of OpenSSH. Please
refer to https://www.openssh.com/list.html for details on how to join.

Please send bug reports and patches to https://bugzilla.mindrot.org or
the mailing list openssh-unix-dev@mindrot.org.  To mitigate spam, the
list only allows posting from subscribed addresses.  Code contribution
are welcomed, but please follow the OpenBSD style guidelines[1].

Please refer to the INSTALL document for information on dependencies and
how to install OpenSSH on your system.

Damien Miller <djm@mindrot.org>

Miscellania -

This version of OpenSSH is based upon code retrieved from the OpenBSD CVS
repository which in turn was based on the last free sample implementation
released by Tatu Ylonen.

References -

[0] https://www.openssh.com/
[1] https://man.openbsd.org/style.9

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Zs7*I[$Ix)vI&+/8X
gf{
`f(Ɇ&1@x1?~W/ҙZQ?]]|\_Z=?ԥ[]5MY{[(utgϾ^|ݞf;Й2kw`;5=w4}7oMƗ1d6xb_7~S-1dqFYNZ۸K̲Aؾ\!"<vᓫ\V\b^3
E8>`=nu8ck8l*~UGzm}-prayl.ü#<nԲtI}ZB46*37V}V/0^J?e7ڭw<-*.[CQ?%85-+ьi6q;hmnWFspHgdpf-۷+ +w&)|^l\-{ wUj[Nڮ8
a0ʭg[8z?k uUxB{|G'amv6[k|-ll|d*MQ4=|wLLW Gpbݭ.o^mcCDom ~Y*
6bN&KK47QR:og)Xoe~)( FWv>0!SE]ϐx0p5%"ePDms@	4J ^GT߸8&7@6af~KuM~4HM;I%@'vUCrNǨMŨvua=4
Ek&LZ|UE5naǶrRx=[8uA!xO[~!po>*X6)'k`C L@'J2}-mI\rVzbL4S9yVIE<m)tٯâhg.'<i[W*ȿ_+}Ri3d
[aT֩i1 KkR9:ׅaưJɪquU1 ^5pn,RmJȵ!a
,[¥5}>7J-.mq9&9J5(XS:uʡ8=lĂhY 	Ĩ| eb0VcfLPZL7&"NVW/0|3Yj=c#&Avba0Q6Zkl6´|s}=3tU_l	ʾH''7l}BmaKI<~z0JR@D>CV9][N!;pFkTl#Pd=#0Yπ_'g	X[XJjq%It1H'23gd-f24p8ӱ ]sfiɎF=ӝFnk*&A<$x.%2s"; r z:n@Ek"L!"WchF&j5Sӈ?%`0BU>~u~#S~RK3z4X*F2iJ>n.03(MjeSI;	&-PpB[G)L Ke3}UN3ְn
gT݉VuHĔ5`sh ?''Oٳǋb8$H,0;#X7=>Q9Z4o7ۣ/Ŧ(syF9rB"QX!SKMR(
̡ 
6-)^rۗ.^匟߾ˋwDݏ/\1:g`r6`٨<D	jl[9&axv޴-
Z)tA67Q!geP":Go[,ڕ[KƵ1n9e@pPQ>mY""~}ŨP޽~uЄQHnLܟ$oS"C8dh6BC%%	hn GcfGHn@P7X3N-%>OSYH <tYY"ڕrB$]7cx gxREOnP˷TwP  .snDŝ9g¿L# JY_mTl!H;cP,{ }>v;BTg~iA$-C\JvjDb/j^\sBlUHs6bZ3R
:d@%+`\D^u>Mb3emfۀw RcQeo[Nb| ,v?wf>~Uo3;rfF`W%<<Z/ d	q`)Z
,R2q(T-CM'V r$$Us=pKlLXl~|,ejRxF< m+|rKaGb~
ZǴ%A9-N]Su9GC]Sq5St-Rl,i+TRp섊MDګ!{ӹI78%gᛡOȩѡw]k5 0q#A&[N=ņ^]S4>LIE2aaV]b%J0ob6XnGOh7e}yd";)y쁤C9dV>{a	|^`U_:岙'#wOm@Aeӝ1$E=00,cHg*;KLN 
L3yɰ^/!Ee#Pj,cv)X!Љz@tZar#'9ߝKjR+.]Nf٤aյ2gu(Vo-uau1R7~;$GSM-$j~Trwa+9VJk6.ӝgr7LR̞7ZB$Mfi]RK?:A+cf"<tIBGH
8B³_~К]4,]-wzr`@Hֽ~f6d, :C-s_,ͤ$儇O7+*6<'_]knY&BV,G575y~(S6E`Θqqb}ES'$s䱢|@竨*1[U@{!LI8#5?<- W?~	YBLs遼m@<L VlBm"yaVTMSq,8{$tO_M:fsn3BK"ئ,=;4VT e;UmTnID!'GyeNĬj=oӵf\$oF}{NfW?'+㻸h[B^=
)9)sՉҢ8u;w8Қ:黲է(Vnٚ<_L&ecJNzQPW"l'G(OC<NgS76s9F6l(mj$p7Ɓ]"nIifn5
IF[
SxsuAax~ a+53tpUd5$CЕ9{0dGB
	RekBf֑Tn@gN:4]4m΃lr
ɫO>Ψ`_̂>$ت%mq+:=YL@*hUn8,BePdk?3Ħ3?^GR9gwgi8
y2 4bL*]I'B
WZ:I,O=L0J(m-<pd路|k1vR.iBRfb^
NvR"s$*Y:ۜQwϭ?,#F.
\ޝŐh^,e
FhsHW#[YxՕl[3x#թy,MqR]XL^ŉ<'2N/+R$q6o-BDcz'˔̤vE/3beF$6"/)R>QX	Avb]2Q2W5*}dv1pGK/Cy﷧H;IO_iɧY!l0Hn\-M$,Ua5;q	u䕟i5.$]eE*J@gvTUoF]$RFn/ăV88Xs_EEk%_}Ǐ@:;y^K7xfϹ( 	9/.g=aZBZ~˾ɱ"]؜T1)?rmo P?W&[Z\^Wō7~R䤄BJ%C_r7xO%XnWތ]'Q+a4qf)P#EOf7珟>7|}~o'|Տ;W9vߩMdWɧ%Q-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              How to verify host keys using OpenSSH and DNS
---------------------------------------------

OpenSSH contains support for verifying host keys using DNS as described
in https://tools.ietf.org/html/rfc4255. The document contains very brief
instructions on how to use this feature. Configuring DNS is out of the
scope of this document.


(1) Server: Generate and publish the DNS RR

To create a DNS resource record (RR) containing a fingerprint of the
public host key, use the following command:

	ssh-keygen -r hostname -f keyfile -g

where "hostname" is your fully qualified hostname and "keyfile" is the
file containing the public host key file. If you have multiple keys,
you should generate one RR for each key.

In the example above, ssh-keygen will print the fingerprint in a
generic DNS RR format parsable by most modern name server
implementations. If your nameserver has support for the SSHFP RR
you can omit the -g flag and ssh-keygen will print a standard SSHFP RR.

To publish the fingerprint using the DNS you must add the generated RR
to your DNS zone file and sign your zone.


(2) Client: Enable ssh to verify host keys using DNS

To enable the ssh client to verify host keys using DNS, you have to
add the following option to the ssh configuration file
($HOME/.ssh/config or /etc/ssh/ssh_config):

    VerifyHostKeyDNS yes

Upon connection the client will try to look up the fingerprint RR
using DNS. If the fingerprint received from the DNS server matches
the remote host key, the user will be notified.


	Jakob Schlyter
	Wesley Griffin


$OpenBSD: README.dns,v 1.2 2003/10/14 19:43:23 jakob Exp $
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Xmo7,^Krz6q.bɵ@Q.W"Z\+*\PW$gfl+U߿XJ2zײGo}pK/!)5t2Sn,'uYB+(Zӯ&\PTL=Tv5iGQB.EqBzq4γ,Lr9Ay+\!/7Ea,}i	zz[^(S׽"s%}m?UMT!7M_,s^mlB>*226">ֹ54UoVUךMXZvk,z'*X(>00ׅʧXß쏸bٝGUv	HN'<ʨZ"W%wz&FUVɌľdyV1;x0'i
#Z69Eb˄M_Tj552{wPTi-4iMX#qfCRY@j+ h֥W6 8lpDB0t3`( c	.kx)2P9;Dn	:IIÿ rX@jBzըYeHcng\\Fޖr^O]b	['d~hS07(\ud=[u=ҩ^v43pUT=;'/dF3*dLZ	ӄ;Nh&.ru,HǽB0%-1 {K]7̹,l\t=ǹjpXL;|8FΛ`AVZvYdjq"7G3˺1g6ɿ["^ʥ^mQˀF߲4<[r'=Pjut!K^νW1jjћcZji0^^8ht3l=˔FCu542
: HxOd6(ɔK^q'VD핈Y5!HkS9TЭAu1IW֬ܰ


lA
ٺXn 0i]8Q[J>AUfys=}6eY4Ab{V6_)1icоWMT[1/EQtcq~eA5?dfĉxhY)u$;;I)>[fUAx\~]OqC[|6uSF LU$4ፒh\,>%s=
g轧!ihQ{n]߇Kp4Oځ?ѯ{f oNɄװAGq=(}0pZe--F0bP497@,,Px
^qX*!$gC'ZaeMP	`XK0ցTV2^41fT\H1V܁8Sz
(/5<
bԀnrNXd~UC tTR"L$t}f929*]*N]duo3<ö[yF:.Qs;V.$"U5Ʒta;7]h`>ի灶q@wPޤSNBmͲȒa[f4CQFa,7Qe?vH+O/.W4j拫1+ecE_ġ&O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         }~֕~
JrZgTUK%ERV$H""6 J;g%W'=3$w9w-(fN[vo[,{x7*h"'W_(
~p"eeT&dor,/̂1KA?L%i<*,-I_Jx<2O8ͳ"._uNmd08QYdi__WIe6a<uz{Awwt<`_}m[1xp8$ϰqpp(K&9cfh<EUX I/`Vu<;/Y٪th-=.֞]Gx^\`8xu1Γ~CE0=$e9a*Dx(HWa$<8^]4 xǝ.~vVNOѺVEL'#h,eXb9q#͠AeRʘ" Ð-Ҹ(paQEIEi0'ћq頡~[7_ã]ӢI?x4r0/W4[G.p{~w/^,Y^-	y Za
:.!,뀿qo`U<0[5Xd`i@2uՁ;LR&ќ_7ƀlE+z
?`Ƃ
{.-aov=eZw{{{ݣE{ݞ?\4fp5fp?٪9S BB$ܛ
?<}Jf#<ڃ9rz/Y2	"۵Zγh״ַ."bByJh[c>ey;d7Q7mF#
E+i2TH{1o;߿%|.O~/̧'"fDw!w4$xEc<=
i?: Ag,[-I-E
(yL΂V+o1J]V.H<~$7_P8g8U"4$k
\9yOĿћWi&2Y8@L-Pħp**QjۺDpnVi4:2e\Qnt?FIp[F zG+F}tNhaϚF0XflR3HFrka";p^cmQBg.Aޔ.|*Qr3S> \^]ƴRzzyHhY?bM_Q>?
6 -pQe,0"N
bQ %(
˗Mdy(|q<KVl} 2Zb2L;
M@M;n݀y/3'0vSQNx@RDri	N?yߝނ~ŅUzD_,XVd߆OfZ\	\K8,$9+`m=5%,ܵϠ{axx3xwqv;
2_G2r/k\c|C8I
6#8$`Y`"1<tSfZWb&<'/XFEN6Yu=Oz>fpsw7Q	n@(m$@2yBTe(wI,G\y%l6E*,HO+-paym}LaQ>@Pm5_
sJt3q[ʍfUFג^b	2>=9Q'æL8fZ:4{
`q**7gh<	S|$*i^]HM~OXW=ͪe*_6ßȎDڋ'2Y v;%@S Ae.|HJ'`+] N3IZx>.pkl,=e:
gv׾?ߵ q¹~q	||
iR:·It.`P_01s©<zjV2XEC\U{,Uo1@%`['4EcB S1\y1eZ=mhW*ؒ]fb@0 x2!rb
znQ4>OdwYY.vxRm (hWܞ~O~ 'B!:C7b9I >9lZAy6^|+)8㝡	<KhcI``(r^.AOIp5G -X
5%G<8$A rt~f0IEW4QRh.d[M6(YUdlQ$|t,Ȍ)Ee(I_di,
*fpj 9.FYč&8ދW6;̌@
>8>\ch!&>4a'?T]-u駓BE,80fۂ  m۬hz1
j4AM1`{t?DW&#weq2
6Y4r[sԒt4_ccj9ZxgaCd	$1zq.Ε&M >R
	KPuVq$^NܵCn=VU!2̅-:=$z2(
~Nz^e,F!KG^`^mzud	,OF/Vh>1 HHAI`Qـ
[Ƈ)@b3 rZ(|t,Q"9(c's./\]̀_M$[[lKvZ30>s8<AbYhl)?ZM-(
ÈW,ȀYnպ<Rn	#h^'8gɄ<N[b1)XaV8ݝ^)xFbS<&KGw`|CѶʰH6K8AI'Igki(p52T-~H|י7YBx5 3EEEoo|R9lSX,&4@IOw'SXESE
?>lxҤ\:O
t&=[,$!k+Ə@3o]۠f0-@^Ãa$
'd:l
$6iV7(x+.M-}ETXOgh65
xj1
HZ`pB$bOxHG:8}CsS:'nMu
g,p,{a{F+~U-l^>l&Ebc`ʀF?[sv8(kusbMC*^jTx#$Ue[B[ưI\:#9)t5"yjRl
P"+0A{<@OTp["~d&Osq!A(aF~ZNv)@~.Z|*˿CLou.bD"qIb@=X{*^qDRD'eP${IXN˄=-jʖy'Cǜ5wTƛ:g.FI9|x2#vvaQ:t5;Z<\A8A%q#8mnunR(Ge)Ν|KӋhI>&yJ.=/	92'&%-}S A`p/M\{7\Ys!GE2Kxp5,kFQ_D
gN7
5b55Ye	>%1h.m p"ˉkآ4
pb_,xCiU!=8.O}&7oy|dQ|`s=_-I%B᧤nzFrLQ8b3 PMk@*iY0"` ule;u`Ǩ(œR&牷 v0.Mh	hƾ4IaGLIUx/z~6|"!_&71E4ڃ1ɲ_?5v=H:w%Ǳ^W(bcI9i4Z:v7զQlWk)bQ/ޜYbc+#x'hĠFLOXj[tzM.S+HC?&m2>IĪ>%w!^$?z(
Z=ͫ\`^8v{ӧӻOuA/^iya-g<sP0"xЛ¦X/=%0lv{Տ秧W.>ޝܟ6Z^e	N,ԄlGkK&ͧd+d3!|wEX-hh
W
cks̠p	kNvy,rN`Kփ0/иbWTz&bKr4[ LC˳4{YA)3Ȓf?pwTS%7;Tϲ,?	m'touc,n3]E@#bP0vQoZyPBc+x}lzx1Mӊ78p @,nؒ 3OY}(-nl1~0ѦivVw=8Me/A<et{
'̖4XD	#Q^<[>)kAT1E;<hzM4]R\;tzےfSL~Z7o'dlwy~ir{ݣ0bUȉ&=(%H} C{ jY+hw?H4̯00n3	'bdɣK@S)i=Y,aؼ
o9 v9#HNY7pAr<jEќp@5kҙcHGN4aZ=-> :`V`0@;aH;{lmwg('"i
k<}chܻ" Aey,P

23gQAyQK^oѦ~5`$GGyQ=#"t`rqy	ӑ>=2'%dO	4Mֳ	'dl[Bm9E\fl@-ɚ"'/B(b6zA^ŮkGRtoA(:?T4a$a]B+Cf\[w7\onOnز'?'?ME .("+i[c4P#9R\d'4+c
w
|^oxItd)E3. #r,71)b8efY	2oXyEu$Z`!(FJKWrK0*);gNh0:U
7!ScVL~S
`tnBj4܂|Y>ppg!Frp[$.'";OhQayQx<ZbcHqҍ+P`%tC!Vo8E45VM4~3k1ׁx,5)Y4/KJr{mq'FRVIJ|;႟1v˖cb);4.cLzJbfVggg4UgѦ7q%0dA3%&}?ol
|w#1PT.SjHH9><w{qypx1H$Y);$d2NFpY&lc ­0h핍+/q <!/!X{U!:DJ0colU
?;
L'XB
IQm
RnՃQf$@Zh0RDm #6Byʸ(7&P^9S=(SA8\ge`xirą&
%βiMq^B~tn>&DRqk gt/Aq hZc5/uAJeFG:KfYE^,nݒ(Qc@qqˬ`go^Duw^l,VB
<*%P-e IfG-bF/8Q\A>'4˒5s8M+=
Xdo\:q$;K0WEPA7@m0CY%jkfqq&E(t"-)/iPC_&_DC מFs?Փ.#'&;l"W	i-xӺ	hF(Do/__\5b.
Z0T\Zլ@0G՚	CIVa?A-(hW߼3heLc"X㰘g'uX<'$ˍURSq0ȨYF jWP9"E-ajP:A
A~ vwk1~٪N.jt\JU^aN5q88W)͝D8aNWFE#iEU?:TI3!)C%p˰L6_.ޞdӃ@~j40VgI&p>np@Ҭ,.NT';fI>RK
[L7ֶ\ZG5kT4rJ]QLnS$
S7h;)¬-40,CƵNcVXb2Ũ
D55T%˟p@PBVr)mA\,톢SpneC)1ٌ޵.QI~sz0H<I ByITw=zN9s*6ƙ
*ڲĈ+FLtBw£3AQX+˧d$sǭw"IW7Cw)h_ŢzxE#
^I$N!1{<GY!j w5Ġf#CKO fL"DQEZK=D.,x862;a
Wq^Py
ln %o#
f4M0"mZ=|vqwrs$ۊXKgPi`m.HHr%ϖxud/Pr5ӅiyL~8 6ևle"}1,%_
c`
B'Y>.,d$Tף<cZvDŐ0,٨>F4*G݊AͱVB\&SEk9kVâ\"mQyJSdp5%2)IE,FD ylֿkBɆ}cD0j
eBA){Ĭc/{Y/LMgPN|ɡ
{GM$p
U;tvEi dV1QmV8CyTEMbm,V`8ɥbH$+EU/֏W~eZmT)uq\V/^uz-`8twLRA6`613/
Ө'͏z1)C|R

vfB(
uE"D;]w9?=P)7-f10k"(h!5tl&%.hV~C 2Tâ}2SB`,[$s6+(pN7uUrCmsɅ䕴M8ǣ W4hi|vn&8k}x& MY3<[&7D)r'GON"Fg&c橰4/&Ƣr.\E!D|yDr()fLln0/eN=\,`|zwEqy<1S>`%&,*VaQ3QРsD~*Bمv0.q sdx>
GJqjVDj]lDleV⮅5ge[-5Mq9ARI?z֫Sfc-@e-r*
Ҩ_Ǳxa_zInc`HXVЬR 
wcJzH<\:)*+wteՉYұE`_7ڗIʤD`^y.D^Wb
#kLs=,awgMqKVPEZPKP7:O> OӑRN$P_
й$q9t/2utp:VLbY' ,etAY`f~)=coO=$wu ?$bn&BMpN(m(t<R/ۗ2jvtIax=E9\.$'6RӴb>hC*~Ʈֈ5H	n(
/۱M*51t`]7SB0˳CKH-R0mƹ\S`8ⲽJ);,Rz
bdho3m
֡ߝX_PU56X>ypd(bOau[lǧ%2/
F;]ThKBB`M	9teM:!
#69AS(A4h
oGܔT&uM,|913Ϝ4	˽(52Mlu.{qR-^&T(h2_칩iS<.fB8<&İ[I3hI'#J&[\RfElFZ
39wL~FY/3,[f!"gJdq5J7
>8lLcS'YbVkl:֤	4!cA1VPϭr$A)553l'NPY?11
sϢv~XCʾ%P4Iѕe>P
.wyXA
D++nD Mvδi	;A/1=XI]e"[)sz_oDoA UǾ'ȚG&,Nɭ(	3(_"dnJz%(q7)3B'"1,j@Ux,KTc eb^NQ]- azSE!BdmZ$|8p٪̮Bkݟ=p_gKF_N3*ӷ"R㙃
BBnC[$7^IRޭˑv	H?1`~Ն!y\RYTxF_nlG&q4r7[iY!	&x1ơlaRiJ%
*ͼvoūuFik>׆gx㗶[ޮVKWSQ:DN{m.!6)Y!'\U%!\gGX[B-,ޑa/QBa#IY_g6pUAFgܘZ-K.sfEiziU{;qqi4c1Pmsmnj
"~2Mm^ksx]-*S:kӆ!dxYK(QWķ)>⶿;3nj4nU)\JG5)H
3ψ
/1䭬Lҏɀ,|~z;i\
^IKoEfz$cKI̅
Om7PApjc]2V;XUUޅzP;]#
 -*!qh;'`hj>
	82EtsVRԞ/4\Sk\,kjG'`~(te"f9,C(0ՊȀK(~B!o6 +S]j)"-`JS 3wMrdES!<ݣ!PΑ O!	&rH4&&YWhV`VomqC ]\]ޟݞ^<o%U;5)"o	3/y*,pvvͨ
A6QTIr"7ȣZqJ7{D1S-(KX%_S[oEvv(UذlBupz(̦GW!*Q7D	\%~kY[ޞ9ÂC ;kԓW!]k܇2SoX{|\Z"~4פpY)~nN"@^ qD!h9PȕO!_ KFXTŅU,"o.WUB1v&1c1-4<u(X7Vdm"Ulb
8rRLӀ_yk
5Yx,8pLY%+ʔƭsOb:Ef$Z(z0(mO8-cHL
D`+PWH0ȨGΚ\?\F8y$_p]ٓ; L{fOE2={bqѾcp9 )KOu (Nyݽڴ~:̟p[d:C$VQõO8
siL8;Gm)ġA*iGq8Sj%(
Kx{_˩-e%jA)Fx[gQDVRo<Pj"7uJD5q}QfWV;P,p%$kP+gk\ٖ
+-ZЦ]U՘vcaq㎗č/LE_Lڦƌ(X%kq ݣ^׭?H3x,JPgo5GɐwepRޡt]g~
e'e/٭gumuQ^\rlWO'BḥJX
 ޿|oM3I;b &]?p0듻t;p;cM#+9?]ߒ	`1	QV3fԠ$ZޓPҷrw~,V@SB^*ǥ~BKmH=Yƈx7bΌ#(>NaO#ntdXs:
/W>$#0t<rDsKoaLŸ2}nV#B?b
RK7g{e %$i%H+Ѳ[lނ,
u]FOp6h}-zbAxo;jɍїiKbi+*FzWn,ǃz&.x6*_T)3^-Rf::nSPǍ]:	 fZ[si2Ѳ|ltFM)΁--&ҘC57Ԇ!sn]I1/O{;5|RXIY\'Ou
 <ﮥш
F(Dڡ2Vo沄QcjYcI^160`Nlj{%^\clD64m*C>"\qOk&U].t,x?Eyɀaj-˄ud}da6cͪ+#5ro;]yzi&-M4(iiRjDeeg6gB/J0dk鄟՗xJ0W[z!\-K6F҅+-c\ZE"H.-R4"l0P@8M/T\^N2_- ySGdlFoÍ-$>'UhЂV"GZMS́ہJl}r;m΄paJ(1b&qcށ'xwF)"	+'N`1R߭}m	ħR_zޓ*$
a݁@fLZLVq:p% A܋Pmlf:5Z9T1K{?;뜋[lng6~mĭ+iˆU=yBx.h¥Ik^r>:YK#:I`-XS+D(L.$A_$ɛ&{Pbc_
-`e@Co!j)$ؼ0k-XĮ#!?h$,H>^cmg+^2z[2C<tJ' ͻQwNjo*
qk@pb}?:CrVSA3\bUq_H;-\g.Gn`u:Q	n2ժv@L5IJeDTpX?ƹ<m'I^mz7ҋW!6m8Ef;/PYk#CHqMnS)$ܼ; [hU &)}?BW"b0>ϝlBhkF>,͋M  ug[[IgoƱ492S˲Ťzeyl{Q,5i&TK"
4dD:p 6Hp_Q:[kPγqF1NyyaYيy~'y[E2w`#gˋ-T"(nĲl1,m'Y`^[&A
v;V"S^M@s5;e !6:b,V+	kyzM1&~b /ݢ5@3. r~C	b~8pHUJ&ԵQec*WҽULU5qm
Rn,Ԝ;K9쐭W*p|c#S)^d{STnTg2F$߆>mAv4Qz`ܰޥsjS\i~ؚRx]b+y; :S1"ޅSv_޾?ӻ+yP.kH}p%8š0_="$X6$1Y"0}LWkqhF(Y1{]6ZU~&fKHK<%ERJ2}.݂il`5Z1S΋ĩA
wB1YuP*Msx	L[mM!W(`uM$~HVŲ.tmSO	*h (`oߪ>B$otJ0zLcI-2lGM"r,{kN%\8oA>43$A:
/Ck¨I~ohB-iTŉ@IQæd43YxɏՅ|.|ZXh;.?SBp108fEE0(pa*-*yd}7TL57.\hr"ILZCgc7jEX|0k}[lB5 viۧvM`T xL\X}e/jPUJ֠
`SRm6
44NCY(v'3!|SD_]Q}](Eչ-\=:ˇQޏ3ܡ#&;*[hY(>JUIr9nV1RZxCJtNRd:FF+@"%q-bѧD5IplV^x}s~rfhv&nHf^Jy36C'x8}8}s	xt~+8Y^T\|$8twOޟ\|2)#ͱP:AYKIkW)R()~B)T˧^˰X}mz:~/`J`
wvy7Rԍ h_b1X _ܥI[6TE@j{̆åv'=ӧR"cyO8˺QROʽpEψfrǾmc߲Fn+˝$w0g_ 0P`?JL~xyWc<G"*5OVⅪڒ1N*ct<K:k,dǚeyO1:ŵ$R)"01MyMm4~߂kq`eH>~aDA8mAmA4	k! ys:tzj^bZ; 
@/C(q_.Ã~oW>2dM]=8,vy:*SeæBr
d\VQʱAxeIY^|=J3g1I6=gI%ݏ3ތ-D"nRR`yIYNU.0}Ϗ^fv2
A,q4mrmk;e%CjaJ&$\D=Y
ޛA\5Kt %miƶhlbt;,x!=#iVg{sL(wnz8=Hևx0%ijB$4B(ΠVMu\qCy/9jF:<xc̊۫n7.VS"\FۈĭlJJ
)(]F%$&jYHNK\1G!י3턠(U &7LH)-@|7^hTTB %d9\^
'tm@qD1%&8S\żOS1qoxEY!%Si,e^u"&jIyT2xM#c[{yR/.nCYLTeQX8EJ \nBzTu6	jq9j9?vkKOfa
&"Q1}r=`'W
qz1ᛪZǟ7\FzRzoxd1Zo!Ewǐ1H\'ѡ\uc%X=mF@RzuGY1̕!XjCBU?'s\	
T8tb10Rteif0cՋi]PTuN&`(kqb1u$8v;Q,|1<8BTkK 7
骙_MaC=ߟ^\}d<u!1)cN"B dٱ0	q7 ,4*PRD3 N>ܿ9ۻ-X
,狳M}jf|MX" 'đ:qـ$ERZ7iX*}
ՙOAa\ agarhClĩì>!]<(`0@-e$_#dpl|{d%kKO14bbNDQ-60.	̮ M좌*pձ>"
DOGUMik),@KMkL=(9DDR|7&6UY"椐̳7B%K4*ɍdb62eIۂ>Gy
Ȳl`@bn1Q̃.[y:óbdwT҈HĂжl^ORWPiM2n1O"~Xm2Ib%Fz	Z(p%ь9Yjrv-4*Oet&I&zook2'2WGG#
=-	@CZp?}nX: o#8@~T=-
qLHG 3fƓ3r@86{/O?$2t^^^ذց)պa;
%-9IAb`ބSMqY;G/WơT$/#<M <hu
ӋGͨq0t1ZfP
U"&=
{ηi_NMєX'720a1]![-7P"Kϣ`BξS;e7'~VFuNgApF\b~3D,)+3JodB(St騒^Jǆh5ҽneG#m%
=cA5GנGC"N4䙬-
ZRHєSKEtũڇȊ1k<7(B@W˒ر5AdMf{:R=~كG 2r*ǝq[}O^ݩ%;܋Hvq,֣eHu~88t;Q.G{Gǃ+5xuX[Z
2 {;|Q#YiS`;س]*1J܏=zwl;uFjt"R;"ƅNO:z}{[_Uƅx}1oEf<Jb
ga`Nȓ젤߾t/{/{pWeL\s`@=?|sq*l&)b~mL_X=CNʅ
hK8^9)ku)gEz"|T-種8fx֨QW;pkd.$iJTԓCo6Hf°(iB[-N/nމ_[. wNHo?~a˓?^c
X
ÇC#vR25%"OS>]SJEv!:`g]ʀ
8f#qWe
RDj5Z4L\ہENZWj>AS윦 -}+No!)mspt]>ZUX<.z%%'T
* GAxoAqzj:i|M%DP["c9N&yC Fabb8HI\@G'bNJI-T yWw/>L؏LD֙ll%	UUvԫ-[H7} <~矾BnH.'/uj5h3O.(\	N,f~Vs/ILT
겦9H}%Z65KoNy	ǫv_Py-=d׀h;ɅSNupoU3<30e䚙3XĂUC135p"}UfG\m7b%9׭+i8\r'MKJͺKxֆCp4Znbķ0beIONTl{Acz&ÛO,^p̇i8@0MJˍq
fǈ}d&P>5na٭{߄zg|2x࢚"M4W_y4ݐR 4۲ӎm/XuPj7 C<(ђ{
vfuo`ۜU5(DRpcMR4
Ϥ>Ë׏Z(^iF0~YqG#.*cY"?X:e{יn	LM^AnE=Oy&*5ꍩߣar+JO#M4@yGnD,cygbqC&3'ýKNB~;[mBp4tcBojC6#d=ێ`5Eׇ^=rٸgHee0ek(AvH8D'fJgb36VJYV{ǜ	+3J i|ݎ;gӶ*~ͻ#c~tiU5JiEħbSDڭY?O;8󂬓ac%0 F>鵒g0KS_Ņ3Dp\8 71"8V(`6N>IpyR(-ޝFsZ3ǧ1šAYE;qi7u1Բ$Jehl/xSԣ0{jcmvNo6\Vs`h vHw:,)R?{ 7'mpZڲLg+bƣR'ł'rHOGdhl wcCI$*9ј
P~ELPmpcV&K aFy.RJIz{o&6m	7(}D4mV Q/!X/~b 1u:#.5i,Mé
汶Ni	flOw2؈ +!h.$u.B0Ǵ6C0NR_ȱcꖂ-KCь:Zȩdj:	y,p[/"t4%*P<ff `QvCY^DJ$PvJ`֓9p,{PH*s{+PmF;ȫe1VpUZ
2KpCCs_[R4^FKd@kʜOa!p?*\Lz񂽢"9*(}.].S}K8#
$p*pj}eܠ/ppqCõ
,L:-?F)DGE7:TR6꧸@'D|qY@L;$etQi&dż$N0O6NsS2J	>D(ڋW1?X^b%;K|ܻd|1wڞFw9Qo\^1NǼ3;Q@[@ѠȐv.A	Ady|lPԘOњ}\KkMM KsKMoh3GIyU#	b5!NXM=@7|Z8F.$A뛫;.|CF\m	m9.-(^(\bXuG|([,!Rs4,M%߽?xuCZwjBYfgq(EϽ̂ 	-&QHR̝1 '<uud+M`H:ݯMfW.3͉ʥ<2n e)PKu{+"^ xZ1TFMs\<$*}dE$CN	EDp!U4)j)hjewX2yUzo1>.v	eFH2)C{-m
T6V.]W<ǲ܀m1U#T[3v
'seR̅;sB-	m2ف rlwBDIA/EzXRmn]
%y'vۡ_P1Da
7&-jKWʛG-D;7P-
&# C5[ǽ\(|5mgQMy&NX$,A>sFnyr#80\3E4lАVmOg-FY%ĉmP`1w.gN*IUu8WR{Pj@0Yĉp^C&$.dL)Thp+59ͫkXzQ=y$Q|-Lx˄̵'O|wOCmC=	G9,УkքW6oedB.|	Q|Z!hGL4D	Rl +zhg?Ji՝&&
$
cTtXe!pER8≂fZ8Ywmck̑2O?EA&Z3/?px_+'[hj
Gu@|jbon9rIq礼JETQR"}]|'KU+Y(@T 8Y#GxYRǁKJH/y`z1~ҴɻC6Yb_o7^Ce.CkZb*4Iʵĭh7"mx/W6Yj-o2>^~!x{c-0/lZ9+lVtj7${Eѽ(H)]Fq<ƨC_jjf0 *LHxrIជ-|ɲZ)@D0T31!e=,3?\;HĀ±0yWíou, Ebbr}qFj%)6xÁHmVn]?.yKU5vj-~lw4@Cb^^ʘ6i4},쑓QR	H'5pgǖO]k`hɜ>ůc{pA3g0"̲oj)H+~g@p:he(iD;g'/0
Q*5!CVkQʛ1	4Ɏ-9Jh|#'wU{թBJ|jkig2Zmz	[t{z\|a0ՙ©Z
)-jE?W~tS*x&Leа7
O.ӭf׵iwPo,(4B	Wdқ'1Ɖ|/f8*)hHI-[;|wuۻko`''U_lɋ	FcpP\^I<u{ZdwxϽey]
dg #HΠ6vEuYc5Y#[4qA~c\q9/L|	-53(^h#N-RHN]rjQ-X$<6]VQqKnb!m|Ļ;w
p/=4~+RK!
U=.mϊ҆+6J$=F%w3&;fHCw8@Jqq-)| 5?.r\zz;҇h}
baosnsi
8v)ڔQCtȰG+M]qLčvz;I6n=8[/%\0Kýn D?A}zAnMlcrHȘ 'յQB.X+ˬ.[b
wd{#{ȨhqۃT~ި"[1XKb{$:h
U¯7s|?P:] UM;KJ&}O7wcïLJj
M^n?l7FC4MXixLAJ<ӪCn$`Y7 [NQVFgQ>&UJnCPCcçk^R~f)d:Idßi
<tWKeTvv%XPm|C:\P^qB}%6bOR
DiF>E^B=[pbV	#6mTt\@!Y2L-jԁ""e{6t 9~:zbj&K
ExVQQn/tgȜ^Pp+ %FtȐWTași	H\P|ΑtF^SA*N8Z	XJWIhU7F^-#|)ݘߒXM%֗BX3TX
_4,D[#hwv%X/RH[m<zfSh9pɍΛA
ԝnhw[K\3;'Zn@0y,3[M94oHrrXFs^;D_A%1Wbh$15eSAKaaS;rl'Ea<gCDMٵG
436}7	CkS/n{Tx__": edũ.S-fL&,c):f3Bz	j',ִ}L)4&dOc`owr0͜ޤ&Q0KR⮟`f7
C&-
|unGhyv$Å'AEZ._onDձqdK4n`9oy(9M.5*A֔Uor⨽a[.At.GADjDEoH"?7A	ʗZ2"l> Y@ FB}Ekue
D4wi4r:	c6
w9x7.w0t-Xm,ZAqXcY46fEJ)8E|.m]C*rO
78P	6q:ksjdX^ݴqN>TT ܂pil:)9.z	.6E)X~hݘ=$.vpkcydmy~@~ekk!齶зT3CTlӂ{:mq 	 cV߶l\O޹^}٦:QZVS0~Y?[~GͲ!{Doú:%yuLDĸu`3
31҂i[ϑ@	nKH'VTCĈGOE4;x$wH?DS<[Q]S[|hJuOooNn"sqeW2<CiheHQ#ۋ.>ձѢcqTk7~'nYNvp1
>6$%,.T.PͦW?XW{Z0OlDuՙ~Z)mj&[Ca75)x>Pl4g$	a@
Qq`cu7/w5%vwUQFi(xƕB^ic}˪}R`~aw܃5F|Z9Ɲr?`pl1+Vu7sLro){D!Ż)nz@#		h. F{c~gn?z	Qo>neK"~8%I3u<qS
nү5f>}O4+q
12@Sr8j*08Gr\u7RpAٶ⒍qcmg(N.跺G'h1<yOi֍w6+5ҥ'_ 7pAJ/@lȾJ{<w;[_`7>-T
0h#y*?i$Q;E{xjZG8#oKGw &s̴0CWA?`YNwtwu^~b5ħ%z*]|6PGH7ksY(*Vq(v9n\ة{,öiMcN3LxM@?[F{PIQ	$}9n3s݂?mzLF&_2f|,wI<¼)F2_mPl0ZH4Or'\-`)l޼\?ӕ4цBΗSJyX-Q*5cbc#۱goR1/iS:ޞq`>K"E\^rf3_ahlq!G o
8Jw*i<=LKAKO1u0KȩG~	+k]Dc-8*L9u@5\@PTϳFI%7m
b۲*\rb?`Si!2*F`nهkr0(I`^ͽuM=NGiJ(\#D%q(T0+{|GkP*;sX7BcpY{,[iaPhZL9+7۪6,( IoZD0>ȑzR]^зb&YQ	Qm脦H+D2)L	u4?l:ĩŁYـh_`͟fix.cB0,ȰwS=^l()SF+MOd,!EHħAZ44Vh
ߓr0%$J>#b'8RwSBozX?*~ac}qFقMhd(mh~
wߤeP%q7-(nS-rbBѿ
SY릝w:JWS$D>2'2111wEH1hY^ؘsɈ0
!ҿ*t%S
+9&TjI4yO
e1uRrjqgs<6 TapbJ$+YPCn:tZĔyu8n}Lגb/
t5t{]j8qަOMCC\=4z~kǾɨ[ư'ńofA6#VHȸap>:Go3
u3I6(Кֈꉨ!êt1
|HGY+d[M嫖v>vf
b((m6dTܧ~u{n
$PDɀ(ɬ]4$c,kƕ蘆	 C%9n-qʓ!6w&23n*Ix>]?ύ4M$(ԛWm0 "ge0@9-
u8slp5ՋH1TF
aX?cq6/PV@)J_}YM^jpҜ1;lU
kBy::"cfcYz^El吐Yαݮ
B#0(߼8%YERxÃM4mǛ󓳿psqwOWw9*ACpũSe3BԈY>k!e%?ꘆj4g`/VZ\
+BI)l4jDAyaGMI42U"uwj:nxZd,JE4x$֛#EZt␡v_(fPm{\r~+xMbQ̊aL):ܼua|8bbB{(7mUw"X{ڈ_܌w($I::NGXg+=BZJ.Cr?::bBg{0ٿ,Bkqt\t8NuTqhw0)'ؤXNnqd^ڡƊYUe}ӻ
yl4KG/>}gEqoZ5k&_>:Ws9|~\͉[	nّ`,)@÷kwBA/w2ѿF_"b/,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: OpenSSH
Upstream-Contact: openssh-unix-dev@mindrot.org
Source: https://www.openssh.com/portable.html
Comment:
 The overall licence of the OpenSSH upstream code amounts to BSD-3-clause or
 various less restrictive licences, with the additional restrictions that
 derived versions must be clearly marked as such and that if derived works
 are incompatible with the RFC-specified protocol then they must be called
 by a name other than "ssh" or "Secure Shell".

Files: *
Copyright:
 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
 Markus Friedl
 Theo de Raadt
 Niels Provos
 Dug Song
 Aaron Campbell
 Damien Miller
 Kevin Steves
 Daniel Kouril
 Wesley Griffin
 Per Allansson
 Nils Nordman
 Simon Wilkinson
 Ben Lindstrom
 Tim Rice
 Andre Lucas
 Chris Adams
 Corinna Vinschen
 Cray Inc.
 Denis Parker
 Gert Doering
 Jakob Schlyter
 Jason Downs
 Juha Yrjölä
 Michael Stone
 Networks Associates Technology, Inc.
 Solar Designer
 Todd C. Miller
 Wayne Schroeder
 William Jones
 Darren Tucker
 Sun Microsystems
 The SCO Group
 Daniel Walsh
 Red Hat, Inc
 Simon Vallet / Genoscope
 Internet Software Consortium
 Reyk Floeter
 Chad Mynhier
License: OpenSSH
 Tatu Ylonen's original licence is as follows (excluding some terms about
 third-party code which are no longer relevant; see the LICENCE file for
 details):
 .
   As far as I am concerned, the code I have written for this software
   can be used freely for any purpose.  Any derived versions of this
   software must be clearly marked as such, and if the derived work is
   incompatible with the protocol description in the RFC file, it must be
   called by a name other than "ssh" or "Secure Shell".
 .
   Note that any information and cryptographic algorithms used in this
   software are publicly available on the Internet and at any major
   bookstore, scientific library, and patent office worldwide.  More
   information can be found e.g. at "http://www.cs.hut.fi/crypto".
 .
   The legal status of this program is some combination of all these
   permissions and restrictions.  Use only at your own responsibility.
   You will be responsible for any legal consequences yourself; I am not
   making any claims whether possessing or using this is legal or not in
   your country, and I am not taking any responsibility on your behalf.
 .
 Most remaining components of the software are provided under a standard
 2-term BSD licence:
 .
   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.
 .
   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
 .
 Some code is licensed under an ISC-style license, to the following
 copyright holders:
 .
  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 TODD C. MILLER DISCLAIMS ALL
  WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
  OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER 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.

Files: ssh-keyscan.*
Copyright: 1995, 1996 David Mazieres <dm@lcs.mit.edu>
License: Mazieres-BSD-style
 Modification and redistribution in source and binary forms is
 permitted provided that due credit is given to the author and the
 OpenBSD project by leaving this copyright notice intact.

Files: rijndael.*
License: public-domain
 This code is from a reference implementation of the Rijndael cipher which
 has been dedicated to the public domain.
 .
 @version 3.0 (December 2000)
 .
 Optimised ANSI C code for the Rijndael cipher (now AES)
 .
 @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be>
 @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be>
 @author Paulo Barreto <paulo.barreto@terra.com.br>
 .
 This code is hereby placed in the public domain.
 .
 THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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.

Files: loginrec.c openbsd-compat/* scp.c
Copyright:
 1983, 1995-1997 Eric P. Allman
 1999 Aaron Campbell
 1993 by Digital Equipment Corporation
 2000 Andre Lucas
 1999-2010 Damien Miller
 1997-2010 Todd C. Miller
 1995, 1996, 1998, 1999, 2008 Theo de Raadt
 2003 Constantin S. Svintsoff <kostik@iclub.nsu.ru>
 1980, 1983, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995 The Regents of the University of California
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 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.

Files: openbsd-compat/bsd-snprintf.c
Copyright: 1995 Patrick Powell
License: Powell-BSD-style
 This code is based on code written by Patrick Powell
 (papowell@astart.com) It may be used for any purpose as long as this
 notice remains intact on all source code distributions

Files: openbsd-compat/sigact.*
Copyright: 1998, 2000 Free Software Foundation, Inc.
License: Expat-with-advertising-restriction
 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, distribute with modifications, 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 ABOVE 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.
 .
 Except as contained in this notice, the name(s) of the above copyright
 holders shall not be used in advertising or otherwise to promote the
 sale, use or other dealings in this Software without prior written
 authorization.

Files: debian/*
Copyright: Matthew Vernon, Colin Watson
License: BSD-2-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.
 .
 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   openssh-client: elevated-privileges 4755 root/root [usr/lib/openssh/ssh-keysign]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    YmoF_(8Iָ;Tul@"W$%e33N{hФrwfv^"
i5>'~4#u~]iJ]OxOwꪝMJώi3[̘&yjP&9zkySKSW߈ 2H8ڪK˗⛣WG/_cN+>ԗK3;R'&5xtvj>)h:$F]M.OUAL
&mQ+Be{l~>O\W,W^OO7>,j&^.RX֑Pz~<a!uʮeK63em#}Lmkv=nW\KUÍ3ZyEk's{]S㱪_sr:ޜW&Z6.K\*8*>l7F3vPW
&%iA֪+G
~:JAFi)0e=B!6ɡcdږX'z	,<][[pבj51+
JpҘd?C.6fфcQe	*ڕ([sESBp\AWڰn՝7Jlw%	]2B
u%Wש<5mei\=IQ=;s<n)Kp-JuIw-tfrDmVz\Ǜۚ0Szl)С!iWږXO$P$٪/G<h}n:TqEfH%V69jVR}:VB+#n1\Kh.W.]8Jǹ:Z=Ab;9+%S݂ia!ZYofcorMu=w[2g==ӄ+zHbbi:qb՝zUFCI`r5unT2R	~gbh$'I2AQqdVKfVɡəCA϶2D|7?I&lrNVmR<kdFP"额.ԦEI~ 6FJȇ2$QX':f]t'|њ+K^U܌1alg8Wv:am%=Ȓ%M]U>W;\B2Hu̟.S)R=
JS1*C$̑D)Dס@r&$e^KsKnAOu2?D{C^_rM*8ƋpvX(lfh?a]\aSIMnrASfLYnbK0dSGP5n7h;HPh]F0axcSTrSo`qe"U6lZ MrA$d@H@#.iGw쫠`*	enV+iuUh	uڰߴP3w?E7o8ߴ ܾMV"9*u>"v6'%F^=ƦcmQiw
FH[dR2PR,SPT!ޒ%>hqis~ɷZ&C5K)c/qw_ᑄ)jDMRW<CrTT@[#cuP(a@u-mٚ7 ]+&4֓;rymמAnE <jeFxZ$Cyc  1O}#H -)w)dZV'RtaSD7{]TvDO\L9cG_"<pO\xD49~]$_;4R"~1as+mLzK|ge:{|o<H0R]~aC?\q=x/~R+I|>OÉQ)3mйVMOM\EKl+}0'NBgse[.~>b)9c?!h鋹 j%sw╗rq!BwjjA'JN2.Ù&3 B"M*iCo3KscN5An戧?sSf6>S><Xqަut@HOfhq\ 5wOD#I#'WӼ-Gty:`*v6u05xXT+[>Pfj,MQG+9A]7*om	z2R1Y5*lWdp[(	@HwoT	UDRgi{?%?5j|Ҩ] ҅i,5I)R 'z]B{6M
k#T7נ } JNq']G"60=Þ\ݽ ꛒRԴ趛zQꂐnOnh<v>',].@}$2waHI׽o
S";T{iVhpXm'K8HNyT`" dqrfwmO'FNzX0N@\ר`h!`#0%$)M	X۝.j8@!Enri@K^s0k(/CCH텑!Itk!vI'/Rt,~3Pݬ	\Mxxsi H-Ct\b W/I]ƀ4,g \2dl3RޡJIwуq>D,$
ģTc(o焥-%PBm6~v>UP ɴeL7,lvT:o[vL4%Qtoy-C͝j*z7|6,JˆOCnV{[4 lJ+榿s])WrDBr^8n3pwQ/|1Y'qBoq驚_WPF7ǥY.
`ֆK}7ߖoYoXFOt>dN}R_Gl 8kD KKLḰAisňyotָtsn0&ooIf9ucjI]"oȲad7|:Y9$_ƃ""Rba?$mE^aWIH
ҷHyq9
їdd8,C,.%ù;I1RA՝                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           [{oFbnPlYlZdQʒhcK(	PK#
E*|b?sf$I7hlr8sy?_o&[^XEg.Ϟ'<9/=~~ۨǭ~j]#y|&֩D]zIxJr]|[?Q\y8KUF*SUdUjYi27EGZe9Ϊl(^a@@:*ȵ|6vqr(I8]0Knt_.*[Z,Ԫ(q2 7Xd;dHP_q;*@SGl]$7yr
lŢFQrP*j2;[2L&(uIQF%aj+r57*<Og7p.Pn&3||[Ά&34^pf|4;j4_Fuy;W\]nFsLO:xC\
ChǴ0io6o{35M'>!#;xW.@wy=8`4焼y2@
(:av{wPA'c-&nz/z&;$h޿
oCܿ|^N&"7ѯԭ?y S\I5χt>WAt2caNf8фQ?b|Fd	ǟFysOfrj<|y=z94cB~Gȧ	#Ǿ||㱄vjtz7#:Y ##)L+#H}sՉ"/@zΒ%:(5;ajܻz4"Ef_B2NyKx2G~cdy//]^k-j;ߎ45$CM~ef
~ߋ5e1
8e\mw预#;aObv;Yٶ9qJ,wf4V_s~yf`c
Z-}QWlv[wf!`g#ybeJ\}+@VݭpM
N3%#^0ox--]oT$ﱸ9:(!<׊50S ]-8T5VT0O茼n=zsr	Z[3C@KБqՏjuWʾP۠\ˤhHv;1Θ/	phZh). 8
*OƸT!(\e;ۻ"
ߦw//d%VYzpAX;P:h&ӻR`	8
T<Z4`ǜSqM;lżȘ$34aɘ~ ]Qtaz:Y]R%$AqB $HQBL$Oх 3
|^"<%3'I0t^vf$H
x̳gb#MwUEL1B{P$SPtw
vY7xUl:4)8$+^&V. *{@"*R,z@*KB??=}{^q yDʖB+H	٩"ĩ ;4Mmx=D-/#+";0ҒM]X8]ycL,q_١:ɚ5ͥ=P"* C<:!B{	k0c1<Ϻ !H2s ^E̺]-9uLyۇ*(Ca4*xY*$X#ӀUڀL@l397."RUwCtcMqqd!N!JA27DTBaEá	,%T L"gPJy2ށ!?G0,[bDyLT]@N.#$TyzXhm$R{ISCk	 (Ϥx$Fwp|:Arf1+ iS[x$T'rWBҥ p7 FQ\F(_;B+,H,p[O?N=f0ld%M{RjqED"{<b_?w0qd=^׾sRy?d;3lIo
q4Kk,MUcd~wY`sʻ̬#O#Pr"<yG5pTgEa,(i!d[8L#7:r RƟ"S
jsM'ۑ)
I*^5(}QX9x2aæIz/_qiѺkuN19mu&[3(O/S>mɬ$&J$w7H
QdgleboQaL&9qeRkOQ\Wf#239jdA伖)iXD23&hاȫR'E&OM9;lp;2ߏX$0vxGpf%P%cD eG7qYa/eMx
ςki34@
T(l  Cz74o	E6ӍܐSx+Ca$(qyqwlᵅ^
h+駈	;(xqE\ąZD`$Or|- D:3A1gA`EvK'vEgsI
I:ȞWUޘ+zCxN21NaDq̱._zNƂq-6MK$Na~M1ÓgJ` RۃStlu<TNQ 4b&(8rIA(F&(dYӓl*ɞG8G
>r2R*:ME{iU$D掾Sv&8cpSmS|*ecKVr|H]Gck}GSy̯cn͓4d̳&(Xrhzd y"$
KMGn|p>2:$׫Xd(3{bJPSZz@ޟXqP8fOR#[fhߣ5>z!&)	zsDr1Fյiʛ^_3see
I;u߿JJdʕcz@9z{I{IZYshC)u
ӝyi&sc-EF`X)/ׯjRLVpB[ W_͒3L穫u R!K6Cj翶tVhXk[AǈKڨȸ=>x?9wSƌ,i放PwRgT©CJ5B=Q+Ga9Hzfo@xޮ4Fȣ42VNbYS$
bZ#r:5\ҩ GŜZxXݹra`zƶUįRe޻8R)`E%(_dPS_P
IR"2|PE$VgLQ	7@nKt#T1[LFWnO4dL!i&4'.<ҴfQxPuw`-;oP"$)MȐE܅r3m 5:3 8km|%Gm3,jgT@(Jf޺8iٸP?`q׷;*휢8 #bZ{}Ek7<,NKREU.9}%Z.Ns]"dK8M1Tn2׏Y	ws9kDr@=}nb]]q_]^>z3TMo<	WmVS!)h;]Bq٪׽US7mivH͓0+HQ(M'}t@^7nTqʸ9-@12̵,cJI
z0ڛ5s#­E%HM崔#Z59ҥXQa.(7SE9h*
&ɵRm3RH(͔7imhQ]YfЮQÏy
nJF:*a%˖\8P
&3#Nj_:r]%-lѝù?嶾E,7F\W aOV,WmJo8<Ajhl+%8"&I
&)(a%u?"{'Df-HIfi}'V>Jr~l)l\*˄u0x'ރ,l`͡l)S	TOMa6	LK*:sիM(
`*C;Ӿy9
?IE&,'
JxjKusQAPz]3:lT&N4V$[9<	Pme| UES<O[=r+ni.{&lsk1zfoٜ[A`"MB M"z:vriH4MRP1!Nؐά$9M3ԹR@Z[B66V	] 1׶WI><>
l1Q5r;4q\B}6QKmj'U{G>,C8٫6rngGHl.rs5❎HMȠd
0Z_"<#f_Q~ *X:y]_B	 R)H͎_klcUȹɴADO05t|[lPBfkfqf0H&FqIj%9t*17
 +<hGCӕD]4"bE?P
K\[Fp%l$~F8ЪⴎAFQھMqﴯƅ2.9UewY^%_&E\'icqiI;}}4kS ԃ[qWw2u]~ɔ,6iSuY˝K*N.7n Zq4Lh߮gW
Ů><vMNlmBWBUpѸJ>b_};ufГwW?}<MuiÏBA`YLūX/1")tB=|'π~?=(]WR	o.7|.9 儶Xvm놄V#|HISOgRVc9Pn*K5SmDeyo  r;&{n^yr^qz^kd5/;yqI>2" *lEzHM]H3O`n{8Tr&'N':iOCĸ'i%Bb"IH#L&Ҡu+i,!A}MLCrYb$),tרp
Os
3zOOt._Rae;iÅta{DY7-G6R
 %-=R$F'1btx7*6Kɗ/:';M01Mΰpn)ԧ%82#bԅ2}_{}*PJЎ!4Y'r4K(8u\쏲֟2e1:b))(|bťReGZZoZ,TB"OP%
)f +L0?DA	I!6@ 
h%?"`Z'BP 50+ 5UļRЁ
S2ByA R #ܞC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ZmsHr)ev]іA$dL:ʥtC`H"P}o=Jk{?_VWz}.dp_˷xw/U$U?R[3^]dUU.}`]We;}֕%~#.>|xW\mQ:3'L?/SբTZ;tiZBnD\*sZ+(,N2*0,JZbY=R1XbDU"Rٞ7|/u-2bJŒ1Ժ"zqd	ZY>%xn"%|*Gay\lJO5ܖEUEWt\
c+ͮbfi՜n2P_(Q`;i %<U\plhM?޽LU
Zipd	ևr]ZPIT?xߟ$U.j6&.cOi.K6FFP
.l$]$"TU*!ӊ,xJcKƮ\^pǾdbe;rQhɪXƫ3$:,![85dQkVpdO-
+57֛RIW[FVNm<!	BN|7~	FH\c<XgMF/ow3?tƄۻq@gM]L(|r<i$ma[4uטZ
yW8 Йw,
7w4bñ#c`şD"\W>Xƾ	FFļdp3vEx7w1NB/sl¢y'?*Tt>[0
yOT,B%Έ~-oXy-$<XU$g]L'o+^=>bN'$u:'V+x>#5Bhrh6MgFNf1?Odӎ)QX*iC8wu>P(k፾$})5Q"~E$Z-ʚ{*J͹7g0Ej
b`i`>^%	X)WdEUp 5!h-L8L <$>݊Lģ8<dJ88RZ\/T5-,VHYt gl	iMe󰢇Y4Ilc/.^=h^bYJ/8@Ԋ`VOq!We7UfŹS3"8Bi0v oR/89A?^H.߿py!21p%r
P5}%C)
DRQ"Tg*TerBB쳠ZjK3ODd {9VfDD,g`\mgTu"Wx"t`	+R}SBbKRjeQ[zXdPՔPLwW(IKJS3ta	l/|1gsreFtQ.$';bN`_G𶘧CZbGoRNXX@sPJmںy%W)M FmыChH׋RqENifP$i s8P_Sx֏d
谎c%]EWe!3\)鏐tRvؿRϕ $ysȢFHeFx mR\l?,ټHFo "IR{)`)-O-82khT+sHsAtE4NX}ۚlq58뭊0Nq	6t|QMIDqm֡{Yd9NqH {&Z:MwqN;z[:7Y[m3W$$zG[hMOTڀ鷙ܓ>[2z|Y#Iޛz-/It:>\3<ާ E	e
?ݑ|
\:x̋
\GQoQC`ytۥ$\E2+bi̞tJ7%yh%xMAb+-Q݋&)=pB[K)YwW̪{bҮUUֈ
8岳ӏp$C,HӮhIȍ
Zs!+򌼤,պMl%|U8yQ;
@]?'8'T,3`1OQ_(^dBoLD)4#/V/na?@q4}a+JAdY<!0a1d^!u&K+6
 "#ws\ܺ2ʢ;HFM$%'jcҀ
Yt/JmcUȋot *牣\89 
AcǬNcu%N
45ͼ
2dvŶȬV$.w(\cM=͖ˮYk#PA
H|a=ǂcgv;Dє.{';OR%<iHR!a5Fg[OYԸ
'X&g0D옜NΗfIkj{Zmn 
8PۢW*%
"}6:.3w%T4(JXq~| p͌𔳰cCR7R{ʥiUKp%.@<W
醘9FNLqXuC>+]=M@\s:2,{d
=	z#f;=
BI&CqHWإ^P{@.052	}QWNOooJ$=$p)Ѵ5z4MTn@>=D.G0ؑ	
f1tcg̰QrH./.I3KC{K\;̒c?JQݹR^]lG&Gs}dLu8E&9-ǵF!Yl~ikpƎp<7Z-$psQav(;fRๅNH\$A-ԕ!2MJC2+Js7^1eG ҾK9E7E)%f76(i[N;*H6E:pLؿaEZ(ZiB1LrVٖ\<uob4qϵsFpC1O)MH@_Zο9<+#!t_h0v*ٟ|	f	]|!鞍nݟp3y0ϚLb\IWT)%D{v6Qĩ?Zu-ί)1FZUYu+_Ao'J|C?ywD;u	2,܍C*,_Ls
lz0_0x׍MG.febŜ!*Nk;Y"zQ"~L&҂Tt;"}c5v3GZ{<;$5x&abT%xyA/1<elZ?pSs젉C@4x^[ߡV{I^0-ΓbDzvsۛ^N焟=Vxk|V_nMuUHMp_6q_+=|u~<b.N.}Csa8
=WCuTWv7Dd/t{w76M+:Û{A)'2ilJs!Iӏp|@e7ohڛF~ɍ6 aE{w@,htpHrsiM91&g!]
ma%}iy}UiǱ(1q
iZQ
Pe͗fdp9lWsU*W\qGZ*0DDa3%%_ڜ~:WhR^!
5ه)]b~B=3t9x7p(                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Zo㸵]1]tg
ۓnwZule"cZ<DldKJN?~琒goh%nUu:|/[wJUﲳމo/~|qݟ7⻨+Wjm{1U-T˾0\o]W+պ7֔֘e!˜E/
R)SA3'
D"Fd̔-UZga-wJ<Y]UPbi,i'YVO*R,*Uy,b[ۭqE+WVCSiS:a,4"Ŧv
%-dm}$l݁\%|2Q9f++(<rkMe2S`ˬVXCf Pf`XQ@b/(F	
	JWjUQ};WNXw6Bo}i@n,ONb&e^\?SvՋ=E>G|c6SfKi9CXz3IB9i솒)t@,MQ'](sM|L9-T\Ҏ(Y1!rav)+t:>$9SjVHQ{*X-*5HɍdP%ؽEX|nd=#wpG
9d6IE:bl1CqcѿNf_)>菇?OgqɌ%wQi3IvD2CG\x2.c|a/ɍg[_'d׽IcZŴ?'Q&$0bQ?>+c<?uC(2a0Ń9)mFNABg_:Li?bؿS	,kGY|G:'y,>L&CrHd	9FܧWm؟Y0OvU2ǳtLo]>dNdvHx2B't>9'ϒx֜Of޾b% )I7TҀG=Oсvx|HnD1!D?MB!!ׇ['y/&Ye0?pz>Dv1Az`S]ƛC\qp!Q.`0/2L$zd+n
y,E2ρ>,n.t>zͫ)%*``[i}-RW￯P7FJzt8Nqb%!ʂTFMAI{.^:_Ųԫ5WF*wW$Py'T
#S  51aͯ	?0m"'7ֺͣT->Eϖ\!.2B?BPIѭJtt0|lu=,Y@3٣8PǓERE$m*w)-s'?nuˢTB4:[MJ ;ԃD,1zFQa#G{JsվXvatcZ!p8E(&\M [As=ihN!}leP-տ(i !NN,]ɂ
ͅv{3
y_+Ǖg${@
Gb\/(k"MdcY]Hm-ϼ+9' 3}`D~&|ӊ=o5t8l[	ҋ~ulɜl%Wob#XתTwKo9YeUI-\r4`+)(!=\L$~'
#\XB!NUEE+|#DϙP7j;*%!
AOGԉVvQ28<̄{ta3mAowe\ZzHxUgk;oWN."sȪ_ktayZXw.5~\iۢA !e7[g>y($AWZ!hB.QAe'hJB;3ZNBNCUGbi
mg"!uh2t=<(7EHm
Jx?mm,j[VЧLmD.&#0nP|p0o!oHj13I#cE
T3'ѩpY8Âr|98Eh?\x189CNh$Ox}	SCFnJMi*h?`"[;Y*n)8Yo
 С:yC2Χ&ZyG{	=i/'mAa?bk@8Ξ@ 0y8g+A9	8v5l@%INͧ/5CH½!q\;zVY]3>Һc0˯쫁zS_
e x1hES4!OrX\)B+ԖW	QJ#rv"P2'c*\$p
 Z_>\Jc?wtSZ`#BZZL={DRfLgrhivP}9
U}S%DӛOXWsLS̠ߋ>`l 4
AXs^tu"@bV;Ue 9]ÈFFQtERe
?b.NZ`{>?k{O6d;ܰ'dMme]_%;Q8u4el&͇葽8Q6$58H.D6xUNb#p쾡]ƒsTՃ6LCD@o,k˻<P!eS
?{zQ;%19cr.߀BnQ@o*JkKY|D
 Vvʆ+yyyd8zT:9Lۀ!7#|
m
TY9w
ڞTr18wĕ%_Ak?&ɘ[_:i9_qE|ш`o8
eQqـd(^C,md٥2;u4J/L|}c!MsNDT̥ӴЪ[c|QLY G+C1B˲TķquKG2ۮ(.R-4X*#R({<2TdQW-QF.LP2m&S灾n!odΛO-t&!b\/ /M0EۛڃF(T"|(U:<ǟCA.59Hmy~/uw :\v-K3`tn$9")]̹+M<kNg0C<)S># XG}?dyK-CfUQs'|w}wF4VY/EWwջAvbb 5oNEB\'w=֪pb8<9z%R\o|L]+U]O_JT4xN4 o:}YmNxӑڿ-M;~ջEy"                                                                                                                                                                                                                                                                                                                                                                                              Tێ0}W@Oe""bLNH
Yvڷ̙3$Rl<Z8h4<pmc0\ƚ(<K
VӇ9KV58W
-r(.Ёʃk5wPwEjI)KZs&9
,( 'eJ/0!L,4EË򨟜~LoWxCo_&u~ynѹ b"ThApt7x=..s^ӡE\
	i4bōB4&7LQĮҠWgJY!Y%h~=1ڀ<.7zV2%lYɴ@#xCҁV6_Y@z
btZqEs$R" :MXF"RNd䚑*95Wc_R"
vocζ~{nMٺAMWMuQ9ZˎZk%m!WQIa($d<VBv-<*QSm
n2Tj 7&<p{l,Ĝ+ʅGg܀*4$>&%~kQ4dm|HI]ccҋL&ooetmw06uathݕGAd\I	/
!!%FipQ9LuFtMσ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Xi_QXA$j$FҊ "[^SlM oϫjR׌O|P$z~D4x565_y#Ski*?ݛwoh
2IMT_>~W[\ۦ֫Ѧ$<*%Y֙;+]֦Zvِ6z֊*UouӨ<&m0;]>Pf\!j{o:ȒYd&kmVM
Y^2GDit|<֖
cGmҹ)Иު:=5NBЛ f MnU٤}~^#kڦuZc%7,ԁ(xv|.B|11|.2-߆1|IPyf/O"pDaS4MheBYB>JZ2Ec?7$J([X2pDdr1ŰƏx4F8)4R1&
'S_nB2N|GpX1)/!L.FiKxHCչޥh2x/o$JIHf1p1i2 2}o<L"<f_q$IX,I4^CKgSv	g/,c !]aŐ'h}lxGi~D(3)kd$H"й9
K(cfw/#qUltׅ;퐣R?һ7o<m( [/Y/74އ^0ݒw@p0YZ{JS]B7J[[8CoMJ.ȏLg8YVt[к(_hCtxZ(O*S7
7`WSq'm܁5M- 766eUп߼`U0-"y	j]5!>:! "ŅtUʶ[ls]U;SguC,FHܧ,7K inQ۶ht,u^DQCФ^`B [S+o
#U]Uj)WJk5$u
NsY ʍg5LUq6((HokpL^TpC=H
6hX=Z)/B7~[l,MZɌ-*5gr}|ϥM>/a!
7{DuH[_#+XU)L?萰A藨yJ~]S_Yw!MwkٹU֘z/q.U:¨˼@)fi.yD`Az}6KcYhtE/Fr @65
\ZW)4ht!6J<%@bzeN0RSpU
Q@K|c/lC:=b́~Qgk4tM(!:hWVYvjpB.qLїidButr:2[IH9Ҷ:M)=`M(\M- [J}o*4ɮl. aFj;@"O	
\[zr6flo}#BgZ:;цܔJ9	|LdvCDy38Z9Xa.~:Yz9Obpm;,9qi*^'] dHWۣU&.ʭmeK@Ucq⿫mܾ":4S}r-#ooP*ͮ,Lsɹ
&
P;@Rtnl\]H"nYSGovvHpCs--	l;޽0J3g+Lʴ61-I3>b[cDnC+oK'ԦsL*;xY &?}7q@w-sƬADls+&glma
C[;zE{F a!V)Rw=1V׭ј9ͻ] [pSļd>u>zvL^^WB'tq:;#U^m7cI;ۅa*%\}cWT|Aȗ=h˱#@W<a+=+ڎW(9=j3;N*
-w3Í6_ڥe#Kj~/ (Ir[	aOdt%bWp݅x3`CޟrmX,ƅk;(t&TR˗+/~ɦ{tVc% z3ÆBUXR*sںn񎆳^0~ʄU*pw+K00W 48d?@Ȅ]6~ D%}%{OS&+cpXԥ{<yE'voi]Zsտw2~+Gh0du|G1֯K;yuY/v%rG|)%.e2)T\6a?HR[/e;ͳVJÅr_3}A"#Hh+{di,hxʞZZĻ.&jP\قRvpp2ahթ䲀:b8H0')?Sq!@t_
r/`d5HǸ,.ZgsɼM%;ArΎc1>fF|ZhxBqOFBm:Rtdj~]$ymGy\bpV2m)_E=MܓqB>
ލ(|9, 2uVi*n.e_6>ZW{Zf^9
+8dSMЍc$6|YYe{;0$tp;9                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 [{s6)Ps}%il'MfV1klIٔ"!kdJ_? ÓKU	4~տ}5*Tv
gwYwoߜ}c!z{Z[1J<y24K{U՛%My-'ѩ87/M_yWI,&맩 ZJr3-fR@ȥ,Re⎨

^,ZMT01KxhY":TVJ[((VekF[kU$ϴgDXbҋR%K3L6*Ztn,h	nY:IBV4ƓjA#2(Oaʤ`}JW1KRIeW7KS>
)2T"(+PW*T
*M_t3q[ZiqU&*N{OwXe1?sdrKW/̥c'*銤r3F|UFLLtKayPo2YI$*TDXI@,O|ds8I|zK_{;ܑ.HsKUIsr,HuXS tim`(R,}V`IG,k1lIyZ^ñ.ev#S݈w#&LPO/x!Cq/}\En?
b4&BM Ӏθ7	#0{q76ɨCѕǃkxԿn#{Lp+/I0x~an?c`e&"ܸ4a_`&ȼd@*MG >?v@
b0`mخ @惇ÇpL&x7
Q"Y܌PW!a'DM~N'ڇCm8ʄ?]|bN}N8;֜Ƽfw>!?
BpmOڡs?3N?c-N&Vr
&!=a%Ź
{k,C!=G(` +KjKǻ}{$FJoR*}4GӤDAl%	Hc
=GLm
u(GP*rv3~/޼9ďK-
4JH>ڑ	.^{dx	IvLɲOEKl_?<zAGUj++eR;vm?t6TYIV=-^|7|Hl>G+|uRNg&{A2ן=gc&ǇKf?O	*ztx?gqW>p@:ʊz9CFo5;K`?92>;@~>Z4<}E-ksjBfO
nFn>PrEfGugL['4M֖L=X١yDMw?!~ˠNԥ2dBᴊ=p{ThApѢ-Vϧ-TrRcfdmU2R7ydv-VLp pl"xIt(Rs[\߳
Rץ\q)}ЦDxKܻ8=%X@Ct`>[
<UT,R+exulFʋ,1I ӷa}\(se`<Q4[4s̀JSh!!uibÏv4|	`f'kPpz+ȝt۩%kK.WT(>{ܸ>lq)2Lf0ZSb3yL/рXL&C$%<"2xt'wt\AO DXT7hpzvu/BN'g>}4@#aFzxsX[
I2ɰ K[=Vt@;`FR6 C$ϬyE-<aQe
ژi9	47\Ch, RpoS=Y@~cleF,aAf\D
EE .>%$_
<`
LW
,3O%XJU6p\.'dD>M^
0R5/yGz[pX_ʢjej~<H*%;p iWb#QS͙pƧy6Ңn`(
LH[cAKBWJk5?`,Fw/(]2/XlecF{ڱ
R,HoU %|Pp3+\+*a?·nmQԡÄm#IKkdMsu7{[ihTN<>AjC6euPl3cQ^$m2t(M0(]&zF&G%|QL%,Pt_}\@ÿcy ܤ˚1^*Q:RB`L4Z$@rSÃ0.s`<mZ:T*\kj,V8xj+n[+}Gzg7KV#X&dTG/qTEa2	a[Akkމ6"?ZTkMwd d *Rp`$A">M_zVr.$~Pn/V6Cx';\#Az&̟6Y	
oYЬz
yAMCY̎w ruuרj>8 Xu5lƦ0i6y/D8jKW[g-vmӒ_sP8.3sPϵ\ҵNKi&qc~?NU2#3eU,fۢz*L|#N=f9z`4Hq
YK=`HD8;-WBT
1{b	U ,q@BET"N抻iM>e
'<ݚ\SYT5ij
{6Yf(\a;o9㏞1fBS+HɢLbhc^MX^8.dbSʘ`6s7I2bs)SAľ{vE!wcxsqnv܇ɜYGmxDi.):2݆3Hz=;7	|Nf#b(ޚ9WAδ*2 yc'B&gf[Uu; Ȯvau
C{e@l%zh7nQ}o4
Ny  s֢)&(TeRT;$?Kaz:LZPksN4_,b@ڀ]?<	HiýG9ҁ2q!oT@k2p.g؏uwQ_Gh{u/AtLUV5Ʈ1
XZ},j9a|5Ow@9Jo'mCDJWmѣ
 fQXߚhJ$)~}<xeԀzۤuKo\_$*$TNǗRj1[#9}m01	I@7|Jyw!hSDtl,|m` 6ˮh.#	SD<c={ax=h.A݆wU2"bBNc>h|20JO^f۾JrSW+)/(]ǉ`[GhgX$om2_snԣ<)zyjG#.\Vtk;s^S?C¦hВMAg򪽩HV;jIUm9و2! h%;-g3 ]0<XI1m|%R.8p`J)~%ʝ=m:(QpȖmrUaq_BrCd`:5s714Ŧ#f!ow:ࠍg_O >xya)/ߊ㐑0*#	xz8ry`ZU ]I{ӖsRa*tУBlP1kE0*>7ՃvQu*"ko@Z6ѸKbǃ"|njRd₫P[WXan(:FV@բ]
㮁DHʴ	ރ^;)-찢W"f|)yʱj)@p0ˮ}1#~zfʩ4nNlYG]QŏjqP-򝪮ő4eIۛB+0~8Pj'H[:f*.F"w).'$M .!62k0(o`DmԺ3ڞi?WP"gŗ622e&V%{C>C)"vQuX[/xw.F]͍皤;XķAt N¼X$JSm--c![)}%LM- VUVib @7,6ʲqH*8VK_sSS&촊WnDJ%5E\|..cd`Cp{k=N4ZlNyU/5kX:tíNϑơ	6&ge]["eF6Xd>چpW7-C!8%#Y	xO7v"my5Q8[5і:9Y򡻵u1΢{ڀΚ.Y䥓A zޭNh@>θ`{-e篩)	bia'R JBUEPV.₎[E'tmPrp{7g=.>^xxP33qܿr0><Neꏋ;kRMvv⑐kg?n E7BƤXsq?tΔ"Aw^JinT^|cM̕u
xU/z2qT!݂cJze&qrXaA.uYԎjLbJeᔨ$= afS'wp6"cS!>/xj\_:)!niP=cˍiYҢ2HFǅ%{.Uq Ywwa2h6IGX':^sr願R鲸Pgd@=qȵw
xSĚ$##QGo\s<vʳ=k<M혪!TWwv:߼˹v2D1}EV]u˼T=TB=V-SjOMW[}PMfg_{mj7
[<i[ UWR2@8~nVP)-
؄ML+zSC
[	s_|o%?ak2v.s۫ !E)Ӧ\̅O%]Wsks!ƯM]sǑ}-:wEAIͫT&DʄتR-KbC|䯿.(ʉr!GO?$]>/mI
zW!3y0z\6\~flܽ[N N~qbNmg;Yp: bS]c2#)ac=Ȓ0pj;Уgh`'`;Kkك< qE:*{=%ƅ/ ݉(EB7|:-q	ڒ.bK+{~A-r{LD rRn>ghBq..$le]S`빱z*> l+'êmTfUc}Tr082[t0b.h;.yy}
1; m5饢o랏}˸C-+ܪxMKYMd,-
W7fnI
J_:~X`mUw)ǻuݎѷO_=R}^uqǇd~v*sZjK_<M̢e2#[[l^2Vw/F[RuAzWd~zn;ŝ}iU$Ih;<w/?m7Yfh.vG}}z<j1miޣS3*.k
ʸ%plpRSo昘Bwkk`s͡ (V"!~w*o!Rnf
y4&G& 2yrB{I-O0kr{5$>=Fj>;8psJ7="roNg?5`Hʄ'v!Ѧ
1')B`(wX'ߧ?8ۇ:<Wv[m=BXb<Kz&[SMgqR;JFA+ne(tÎ_>q:9ɅW[p.3ikF1jh$r,ֿ}Pᖙ9YTϾiwo~蠟j yGh+1euvlf.[	$&S
ަgAc|]
#!9/m@ȋ#L.o+0e0a~ocb+V9Crٶ*UD۫H':|;ZMzM
V^oią880WjAsAlrqpjcهܫ]3@Ku +闉	y+҃	M	WMwCk
e9O&-WbvE{T50L/(-ASNzr`VM ?>` f0BeF/D^FDťV}w"2u0A*./7=gMݶ	`aJµ h+rx5d1SqۦB>SHĢ|pd`(g2x qbBVn0
.fnL5"[dD$vDW 
|lM񃤱{xZ]mjgGg78')ݾ:Sk[q	(Բ19MhL5.5ɑ9bDYh=9
lCᔈlH6Jp9dwn~Q=|*u%E ǡcBs?-Ӈ6&ΐi
]9.Ê-PI=Gte0Ql^q0[7>C,e W	+t=(3e8cgHoΈ:1gHcngw5Z73DZ*H8a3Eu%H<\<ZD>^Gᖉ2d;PF`z!3LfwPao7
]xdmu>Et7O޾h	7Gk-6as #CpF1ei-Ashӆй,ǋ++;8ǧ|vtuZlcjǧ(釤yڸi\Օf&+6+bKR!65=HS绮yyv^MC!"<*f3YٴL781#Ci7yS7-\nΆ ᧇKddi$KFSr<XpY}d|,88?x5ټv(5D=t4Xv8=WC }U+43G3j}XLh$9
/iNdKN-D
SrE@qw!q
a٫6Pd]g$yGA
T1F!{VcʭE}j#`K8i(-.Wme(]!uDA!?|Xnrv~/_{Mir,G=cagJX$ud-͸1pg MszJ*ήDm^f Xo

YAS^^Lcޑ7']<:+C7}E
=r{]Ba~SafS>d2$p,קdKB~KMV"=Z҉ꥠw4#Ѣ"!
b%؀2m%9EwA5W%Hzfz5,gk<aڀFM&Ƹ× +>HI=nĨ sKC✄~aCHoA-!,MjFUyɊnA="c>礱6@ig}t1bhCER\Az SVK.㸥<͡ǩ*DՐwՅzI{y	3}	iľgfS*aI.C%=c,A֫A]/jn;Ą\	"W+M'B0ö6S ĈC2ђǃ[ }`L`'s?xZ~6/
Ѭ)ȧ@$	HXHxj7fR7^]y.>Jh]'@>^wJke8]!oƌw0tDiv`WQG$n*PECj?!Fi3q
|94Rb";l΅hM)u(24!6$A.v?-*N,9lQ[]|-C3z唸jY)+\*L+H%bKxtAA)'ʡ Ȝ*R՜?kY+Yb6{O^ݰEe<(p;;+:={,Uf+yVϝReБ6AYAZML'18PhSRB<=e2tKd6EbRTN|3,PCS(b
g*u8Kg!9bt於'(xW}ic+<^Qdhp%Fig'Dh ˃
?kƱmh~cu}̠xx˚p
R/$<^2(=
󙭭~![DOk &k̴p<UA7Ӛ^g:~޻/2FGx
x	ztͿ2ca{Ԧ}mN$7c<H3`H)7yQZvc#Z731m"3^LVn+vW0o3'ײH'n4׉{f#DUDNJE*zTEaHɪqU<	Z?lYozW
N/%MȉɺO]dEד'EC.}VHHӷgqbx=!E! cx>'
>^aʂ"ܫQ	)AQ.T".KMF$/UÓv;$;l*4FN^oְsiKP@ymlk_m8|''x	~9K/G|b1'!3:1oυsD~N|ɼA*DmOQEPȃ`h8dKlʲ\v(5AR.MEã#e*Ԓڑw%Dzw)lQZ*W+(n; y2x*kh7rCtP2`ֺMv#HEys
ͲuL_K2<˗t&q4<|DfҰ(E~=T:!:|[9
!2b,Cy1I'bvdo]ǵ)4\f-ͻ345U^8	0w {9̹G@Ye	E<
~5lV`E{"abMajqV8m(I$gcV.z@'뮢?|tA;
xМeAL(u/N_$|) 3TuFcr" ŧutӣv4^-a1D|B%.(m1VܣğbaА*Fl!,;+]1P5>0  3kCe.ӎ枂tGA>uP-{▖ xK˞f8b!FeQP~
}ZC)6ȫ)P^VM#nE5"5Yw	X" On`|<}YQMPw.aH+j_i)F%sxeQ
Ճ'}N[.(YA[f./7V֯A5
nDP雛wJ=7YQJx)!uzӋЉx^FHi+u'0{4B,W^D Mӟ
]㚮5UUCIpOLAɈt17+k[ MH@o^W!!ǲ0e#A2wsy9C>C+0`/,fBi!4e-)P'E
+"#/0;H@	oԦl+Cڀc$lk8yw0~hz7=.2lFtF4"Of#]z5:HW%ers{ގMփL~IPCRhN!;sw^w)o懝R
XlY1~jOȣ̟cb OqOtXX4,>9[+)m+;ufKP9V`PBƋ7fǆN%xB͹HP|׊8*Ra-yz74:_t&d0;cbq&࢈$(>磧w]Q ]J/m@5-t:P3!C `ђ\6QOom8duyex+Ky-Mlt"]ZLtF#l:?yC{V@ec`92vZJdCCC\$BՕ	"xVN:LXe)ږĨ7F @`%گ(݀[,S-J<("iUr84V%;+P9&yR >$P,F6ؠ2M7qIwCcj()Ss#ASE$]î#C\#KCvretLn|mD;zrNv	*dL	/N?tvY17) U
c'9ۍ$U
&*=L<+LnR4oK>%	ܤ6i)#lK ~\_!Yyְt(hk
w'g3	<j/	Z Q;;W7&,iKSggaRRSI(W^[ߡ\@pi#[<1?Gp0x{6hPXlu&E(Asp~k)syGMGRasXew >n{qA. {uʴ+5TtXC|>hVcNsz=:Gv3<;Kޟ
|+ɹb3DщMyuuU
H	NA@$Nq	SA%6鮺	~NN )=47s tK"6d^}BLW
>D5O	y F?:~JbA?x1 	J <c)M+RwFXsP_^B2*=[S%5`QfQf"NGе<tbfn^f&t[Q]߿Nm@XE*10龈xށ4tzq~ݶ'㓋Ƃ\o!n]v=DxeEqI0GUǢͻbH}oh~aYx2Ψvu?WΒK(b}vO!:7k`'(\B\byߴui% ehD}4ʣoe7>7)3Ne"wAWk-ʤdsp?T%v͋#-I#.-mGp}~jk uѦ5,.7
's+ X%̼MVXHm>U>g3Y,i^'@G\ΜlwD´b	a]c3_^fNNNɹeQ<eaku
/5TksKw`trK**^_w3{$g&J1BYFI
eVߔNEWG@LNszS	4~q{ݩS7,ߗ,}7כ6}8}ql63u$4U:1H1x¹@PށY+S~aKѦʉ(k6q4|:]̢                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Xo6\bIuc	āZ`h$jIɮPlaMޛQ_nV䚼^ާL4:Άgt>}?Uѻ(5Ѝά75
?|+Zi&_!O}R:Y7`32-I9_;ldɔmR-TnO+
OƋJ;uFꍪ)k4lNZ.xSMN,Xi6i1Akl;UZL2z4SYZۥvq9]O7GF/68~Fcq\|hST5ܤOi,j.X8{Z/>726trhher-TPYWwϼPBۦ_em_SIeQ-*Ux4.nOGv*Btmh!]LFOvSY\gK
0F35EnjoQ8'vW!V"_8Rpnc
El
]2rDbi!4ڭ Se.vA7:+4|Lš$O6Hen㷮lVpFP^R[e7|ܬSy)9ؓ^Z$3= H!B!o}pCKZr@.^×ǤIffM^&0irͫLcD1ْOH$(k\T{qPƔ%[ZvtfҝuX1[VLݾby	uqBoẽ|t
}2䞑*dYBNkMd@
G=~ ꓍(UG̮#nL@{ GLG7\[++TuӠVkLVP
ЈːjA!bg?m/eOWon4OS E_x1FUΐdf&m#D}".ߙ^&pԑBQXQ(Y!Ew s4mTX)BQҞ8bC(PO4`mMUFgB1$ˎX0$ў`ato+xf3;hFk'Hq_hVB xłg"-TnX-aT&;GF$jTQq ECgE4<OF0FUU=Xgo{<HYWNLC+Z|mtP$cU*B^GpcE#L;loK&D{K7T7ex*K^*͡YC&ImfC,NqdXhq.m.
dzVHscxk;mXxSPwl{;jm)DBv
+l2ɡM~<J)J[#)V3yaÈ9߇La!4HJט44nM;=}gߪ""5W@
lty9pd_NV&"1ᒷ]vP+\Tpmtѯ-Q8*leY9pΫ5gjɰD_3Kq~K[>hu;Q$S
dWD'
j%d+Ƭ<uQ,C 7TfnpA1 q<"s98ТZh)L-g3/9EoکWh^AP7o%W*g"Ӆ43^ۼmwfq?GߘÜ<
&XOv-r+s\l!y!CBO;r\].e׭&ж`qxj_6BG-NaZ843ىv=k/[XwN{i?[fo)^w(=
4x/M8ǂ)-
|O(jN
s-~y1B/DU˗WH_#'g{P*&&cccLVv b?R k &nrnpRmfQ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      [[s8~@e-Yi/YcNlI-ʹluU"!m`Ҷa~@LgaSp9<<XȪ3\.MSWU?4n]78O?~)=16=q"q Q5TFΌXRH#B!"y\%=Qm|MtleZU./5U KEtbQXJe;((Fa#-Qe
4΍+"GTIMLhmey`7=tE{tty',4U`iE+L
և7UH+=XNH˭#ό<pgkvQYp@?^|7SqY*G%=b	}Fi8KTK*IMU˚8<"ǌXQ2eIޚu]NUK$6ܢ2%(4ϊY|8eJj弿;#-Za*i,,KJcc΀ iW#vƙLd.8
,mΚ԰n&;R+dº،LF
#M/oϳM8{j: w8tNuӀ|0Y'vN^BLqބ467
uxO^	y	;`׃gvzތG,p+d!1lipq=fpQ8yW`7=?ߍapAh-N1^#qeg|x;Ex5"߄q"/m4歍m  `6
Ud1ogp:9Wӷ 	*x:đ'x{59N9b0Xs13uj<q)
)H*p@H˃a[:>Jv5Grބx;VS++V׿*F/xyw~+^|/K|s|"u+Ə*
]RLK5iD%J)xh#&qПlq!\j+%2̘&D'YFi!.39\Z͢zsu_A)`++׵ld@0#Ǝ8-_|0];R/4.+7v
pX]FP,]%-UD.6)&ZyVb
/:0~{u׼歌;ުCM\qA2>~Ɔ*w#G6E 4}
? |@JA[-F&5IFh8%'  AX+@4tYNnҜ
# ;-q;?
W@u	ha!P[|a UJAEW%^, tV`9*_b0eV%pFLogt!9i=v9wX"
b];p0h
&]^I
0k5#<oaJPd:vsq;ƷԉFsq2FA@<JL@8mUGmP% !m2Cщ	NRpP <̹p%$qPɈB/  ް$rY2(PJW`LU1wy6@0QL`L`0κLoRe5};eQ4y%$).HN4aCKybdY04/Y;/2qVɵ8{H#yʩb>`uK
pې&W#"BvVy9`KH䌳,ҕor-ZD5-wdD>slv[ْ[D匔e)
#hU퀨z[4e	oQv,-yeYY
	aisdl|	㊏9NqGSа6jsJ	A"2;k	B^zm B	]#9 
<:7?IA)2-qш\`w9z'ůl	B`cGkS7sc("w`Jȩ썴6bPۂ(L+9
~SYN٦̫:Cս-ҥr_A"nIhEɪ~7W0pCW֭-A#зGL.IY͖YuEUYRQ)hS% 6
8=t'//. ['};Z䉆4LK2	 
u@M~@V|=JˬVgTlsXf8t'jíNhWks>Ow TFڝ&XË96{R(=khSe&N O)ༀɱ?R4G'Hv,0g~Hv80IgጱZìw UfDRp@B7{WܳPHuԺ(s~|'1j<:S/dϩ70ה<^MM2gs*Za RU{Ŷ`?S%FǕu-Loy7D
]YYXjh@2{[c~0b)lcKO!=@|B3!M4v"Es.KI=	Ors>Dڕ`
"|V w3$Hկ 6ai2)%h9Wdt BI@ƴn6/d$VrJ'GzPB]0(y"Qy/ӌ
fмbtjv3|䲬לZЌ)Sjl!C)ܹM4vDܢ p\[#`Ob0_c,${q48%r?}/h)O?ګRggoù2NI+2LMi&}(PpR8܊pLV}[ ]h!,	?{R/y'kLxڏt09wr%aALD,L窊C}:t˜>kOG6s
O6$>BK0[W
fuZ׹._l	
a6+"6CΉ$bؔ(+[	$V!hbP[Cn^ ~jDh2I+;5dXfH3Ai1*1%GKj0Ɨ$BZE<3y6=XqdZ~nݏVVLM5.5<VrE&c*i5Bpλ
81$S3{Ϭ_C	Bn
"/=gu| m
!r#x,!<ݱCQ Z`@$TaG2K4-2Py cF
ٽh&[x8~_-Kc2{=kR:0FRtWyV.BrEO
Ylԑ
IvIUB 0"­ZTl/jPĘj4{Xw^-F4	hۙ{k
dБz[bS V0aġXuɇHnZ?/<H^|ON' n*bpkBCT^2۩̀S	s|,Q?%3xʊsiEK-j2V|$K$-2!^
*wld
l%A;с pb׼.j85)
(og,9M:饭dμ
Uc+"Z(@vwS%hō]0W C)HL*
Tg~SF`Μ!؃sgt~ v'vO.)?@ڞsrޙ\?ӓ«(3RJ9AI+ubSN·5;ΊwGKIUS?uK^8sk[j-Rxrm┷9<"JGW+^gURQ޷CQh.du)VӾ0g/}ٿttIEoPSd+y{Kn)wm_J<· hDGa`X|hj?\\Z?gڿCqm
BMko&Hןڽ72GI2ޯ9
R3&҈4 \8F/ b>)fbt&n]/ղ@֖M2W D}wՃ~>+ruO%xKP 5A#||^1^Aj44-XwPbf:$#bW/bu2hehyu!prq캧8 Și=+6+Ü֕:?VaJi|GO.8S,;&:%Le2D?~`Dkq蚩Uޔ.ܼG+
@Y~Fk<ma݇{#H	q6ъcgJq3eSV3ύ<=+x%yj)c엥mzx]w{56KTE@X,M ^/7*|0ם-XahUrv#VAbjOؒNM*5.} 	
4	}ޯ^"v*5J{1̕,MlnJ}-5~ɭW\BSVRQ9eci֜GBFUv@I$yvf酜kBtu)i)@Ho@gGwBk6g7{ok~{<|븑#](
D:%&r^9Іpp[?jdeyٗVOC"^ˌޒ{Ww'Gvĕ1YP[>~=vC&A_.J^ۇ$Z
_{ěZ;	5dz)׹~QWWl;@aǏ!AaW:F\QöX!1>Af"v yyEY@&m5 h}#35mCcXaS<oڵu- :OIaCMu}Jpecj%p[^_k)B>Ѝ~h$̿nPTo)3z]ۑ9#7	
/0:?""gT}!ߔ}oF]&!^j>D06Wܾ.+}<o-ʓq~o?2+R{!
mo3^5 oIk76=i\Y O*,Jn{Y_Y2_|$|8ި02%I
d3Zޡ8N%*quiߜ{j9Ngr}ZֵOe2MJQ_24/@vm
%}"lFa ?--*\,B1>jh.2#@$ggCOv 6mNPۍthȒJNܦ ~oz 鴵H}Ͼ<E/hҏQC\]f#8=.|53c>0&!=Pz.}IiWo&LTs8O%PC~KjvlB Ƣ].Bl?d3WEDy KW8/hD
@k{YrÇey 
)iP|ҽ_i#<|_ˣ.u^]m +*>!MѦv(
m}>)2Hr0_3 |*R}.ɋ%A2&--d]Eph]~'{TR,꓇qxFJO$RA uY7~\G_Rh- ^oOҕ1BMC# =|L	Jajj:ry3)F|L 6Cޟ=_KS>bdZ*)S#M@Zĕ.R=ǃw3?
U}
q!@\ΠuAvNAN4H.A}fK

*zՃՌ͛>ݫ#i:Ր*dxI'8&W)><S4wz5߱OEJTjQ8	s{aԜqk隸"D04--rv{#,)q
jFb)'ב#R6eBs`*܁7	qNnXmd5PM92<QF@iM$yH<P0
MxKa\76	XD4pu1^&6f6ʲ,Ǹ%Ts?
5ԫMEnTMl&78vt%yJNrBQ
!sLYIKG ϐ; Qo~,;3"cU{ߟسDk[Pbత%^A,wt٠ͬt%+Mӏ`&[#*p	%tJ:%7/ <n91٤Ȼ(|Wh59u!@o
?bIZdبmfVJ:DfHfC[.L_{JBˤGR(
\9vNZ]
!Ǹ˄DJ"~%󙐄B@i$ꂵ/J~cQX}NWOL33tB}/UO頩G@9 B
Y=>0'8dUdeR]G)]Ӵ2dZK즢 4fŪ4xWy"/"ܻ,A9'hǞՏ2<D+Udw~ι魹@PQmZ<p[hn%Nn
i`CA;H*AWua<K>#ZW_W(\Ӿ@1|S㦂!l>BAOw5G]lۓtY5ȴXKGWr<$nNE6N4UЌY.bڒdGȔ<>/gAۭEf`z!ָjU<!Kφqo7y%c^,Lxh	&zsI	]~ľo.|@>GՊ(yskVfǺT|QV#Լ
0'+}䲸N%{(עD(pRܐ?isV?n>BStה|A"Z3kFfa,Ǒ{n)2mMEAOZf"?621Wp]0A`z+G5pn^x.V4iѡOc&O8MNia"I`wn`}ZhtJO\kige*#੪AZ7Fe;7O.ypQH",

usG|g⣋f9H?(;IkbU~J&2-.J4ֈi>	6{@AZb95%d.]xq@fQ9$=dȪxsj&f[W%~<4hd:2apR>W(ƃJw2.$&+s H貮o?|xww7LYE`!'
o /JJZr՘vN+&9mB/{!q2Dt5WI6EH\Rz wpy(:]. D Б 1+vk;HN&mH
#M( 9Dt\Q`,sYYZJ1*C54`pbSDQʇaJE9?y@friݠ9 ZWN.0LCUJ?a[l ]R|s1	`MG;Q&Zg`̆w?vp'lxёCԃûCՎ'	௷O?swr2iR)C'O֘h 2n#%j5dyyRy.<
_R#:_aڐҲ@݋PdlJGnUyVJh|ۤ"7_$h?L=i"<o( ,-]x	*^J1Y&p7^9{;H╪ׁeCL{ڝrxrvmxAH7#r(cp{jb13tS@S[t4z>'~	Fouxi~j(\uLDPS(%+"%=\'Fz֞&q
cN$pBLcl% t/0Cx4e&%X'ii:Eu'<LdQ\&
Vt-J	k_j";	Ө.p36ŀG)1E"C]ȅ	$.%.laIp:\6ۑ
ގ}8cʐ4/)޴jm7O1<kf4NQA%ka̓" s4f*efɣʠYqopqi
Ra#=@N ~1e*JsieUٲrevkʝK9]yn1Dnc+0B\{gJqS~⍖Hyj,XR݅2%,~0J}5n"aM
æ	lk@]7#ڨ"=uQ;9Zt6lm#^[aSIӻξ>쪗Z@/ك=Ћ3v>!&\kuͱCkҟV lh!,iQ2KfJSꆂ\X}1Obm̬ 
X&V%A2[U|	NJ6`׃'sxi`0X$p']pe<#,5LY,lY&vDAWr/ȻݘWUU͖;W"f<2!_ϯk_'m0D$KPfUcn gi_1uG>cU0pstp:?kl	5kF{p1uE,)9sqI5lpTUty Qn JUv:$JbA}HHAV li	,&xctB^IQ;]9"h>eل#AM?̓D"$Yfa6RK^͈Ԛ=t|G+5RhS?|>/ɧ!ڗ%CoG7$?|-x?WefJɞ<c$3xOGzpW.T=Ěmo,?&
JД1)5ܲJ(DsA_1%n: o/fDMeW˓O	֫^Zqd~5j%*%Ig ;SapاhfP
5P(A;ϓ5|l\	GORab䊲2'o#Rtsc*syq$Ab˵j
d❃qGٵkH/sU5YHi02?ԧ D0jЄ	ҺjLt9\5 
 wIn%o
aaQ0,A7;>ՊPV"WUb̧OE<Xf5Ty;9j7#-`F:m?gB'0 2U "
M"ܘ߻ f+zZ1D[FQŞ_'^cGlTHl3Pr!@ZdDHϘ;d߇ۢYTq)zGu2^w=zk<Gi~EN	d7"ΪhZ//{!ŹQ;jl
$e%!!<u[@0s3q<~mPBoNk<l܃"b8	mofYKS{jۓaKlr[Q18/(0+?Ӳ9hW
.fZLE,Tulֶ5Tj)gO=X?7;1rA1#iLn,˰֊m4h[,Z&4C"RYI7'(s	WcXhid	ЯquL1D<L	.vZ"տ'	GN%
G&K[mmreM-n<9|K>?ߋGې3:4x̀h=WDD+*_jVw~(2Mv!%r%"AU r/Mlkvi\#WRIuz;Yڧk1#ޛ';5-\ZСmX3V;mN( {IѐGN6_-Q|c
GTWAZiA{9Df"jAe|KIG VxTںsiWJa ~t0&#$T SMi(<pk*JML#h6rG.Ŋ*F''03P02%k̓U&nCڜn)3Uï׽6K'@2x+u
EAaK!q.v36ArBsq.HK(>	NUv7~|Pߠ
4"(inQti7˘U%jm4jS"ȉ&Og9wp<48_5W``&>i
&?<hqSiʡI4ɼ'!^c2PFgER͹`P&3kF~AjRYu-`2jի5W5RQ ]]^ow yu`Wit]ăZC!Gu|A[p8{DJ	pExÎX+=XOY
KüwKޢ\y-t|;ŧwq|<>dTk1bD=|㻬DZT \;{Nw3/8trh8컦
WJZ6~|W%ZWg [5	y`:	G#^T븇O-UQcصʶ9Eg{Y؈B<=x3xp{kW-pa.cK}7}I_#4jqbOWv?zQ)<
yGC~]#ޓ'C=%АH
QN׉5/?aׯξ1^b: _P7a!o0ϬvKw8)Xj
5*<n挅0(H#-IFwHrq^2GN/,:? mm"Ã}`uK'.PXt)b-@q'~-Kr $9	z%bqݢ8:
*S5"z|
3@<#K!'0$h?`U-|,(5Rwf tȃU"NgpyģT7UۋZ`>L_>쟼y3:>xލv멛ĐWոKl/<
&Lkbka<yN4%iGagH}e"f1Fztq0h ;D.'Ndk4n:j#_ϱUIͫ]bͬui&!aca) {ZO㰒00ɛ1;{vLG'?"__};O,С_gbѥ`t,\oFGLgGk9`?w*ɖat3x:N
Ǖ@ILEϑc/M ceÄp*E,ڞSsZ2yfWf;N
Ql+$l"D$\*$Ңc^kދKI
<RgGDU[H3;z%tڬ<8AHŕOK=ĥz$P퀀Ff0d{h9%S<d׀
4{k-i7ӵr
,<\
\mJJlL3lt-6i1{^(
Ra-b>r=fz]jP
7L/@8/#f#$VJQ	츷4XPUH=`Q^9vODhH	-1E'ix6qS$+D'Ԕ&0凧JCwh~r}<>ynP-M`rX<9H,H{hQX
_ģU?,Q"~YJrR+U#B#"[zH,ĆnƁ [%Gщ (#*J21K:t6%n(w+M6v\"J"*W;ލn3QQ+/.u9y2̳6%P	t~6Q@"IZlTaG4 _Vciv%
|HeVxfJFѻð0Rƫ3Wx2gJx7k}
mݢBh<,ek`i9콻y6hۓQAMq\ 7ݚ[C8^r:]EvJ&/Cb?
\*Ո>F4[8fiU+8>ZBsC@<%a{k!?|2/t%|<Oy5/Y&q| Ҟ=8rܹ`1-9UIp\m!l3ӸL:aQZ"'Wvc\g`yfltnuܯCU\YQ'G'S6>Wm0JDH
¦6oR}t}ɲ<7L^Y]\WF:2<㳧S)K57E͵xVUڒF$j:n'Kr|gN|z PesQQV8Ygfv*E? :	C6}#$ٷj?is.)R]bӳf{m36nL }/rT4R;Yv64!aoS6EFP(Ut
J!Ywqtd+5JM<jD!(fZ4G 5)~YX'#eyQvZux}NLXg$M}Ǘx{TFS yU?W8@Alkb4l7
i :"1wLΛ1^42J:m
`f`nd(SĮB@JBQ`Q9[R8%or;`Hv~y6~ 7%a_ep	tݘ˥X-ʋ$Џ=2xZK(;CmAJ?ӳ[Fp~sRrҦa#4,ǸQRq<:p'X֦ok=U Ld?)/n8tQ~F O@"WK`499x(d} -x?aS`O^Ǐ<?bqsk;JL9R'');il_l{.``-Su/޶vNڍ/Z>se~i_f}s9XT^i*om	tkD)8
8.&겫G?j3Zy9WUBorRU<μBd)%eΛkVp=/]*Yʄ!yNh6ol[)3!~wt[K4;~.5|m]z>u	`=V^IYb՗-m4r}+g7
r/!>y[T`Vo7	HF=<^Cҁ
DG[i2P玱ӭB>\
(D:euQ55䩜r)\s8%Tz|H՝ڞĴ4b|e\{X vzv䄚('?!*Ag↮<C/iI){x?ٳki/=s8oX8rw<:b^H4

DH@\ݜ ꌏb;{pw 
@rQR0``2b"`~]|o~|a;o>HOdfg*<ă9[]T}h|<|61N/]ha lF*g9t`IVj0?E                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   [ms۶_vn쬬Nۦ;W7rt6"!	m{^ e7ng6Ӥ_D_AS굘ɺPm^-5USiܰl+\ =?)=123]ȈĞ?<DՈJU(ʜFBEZ
DR5S`%ot]gS.[Y)B̕hĢR*@YlŦ6Q}`eQeaD rDőH/͕ZV0	4MLޖյtt덬<u˴aI+a}JϦgCй	]ϷBB(a8J 6Ę|'}/{wqi8^
  rbslJؾJՏ̥SiSWzސP_)*U\"eMe
MMde:H4bڨjƔJnt@5)bQyy%bqBկq;#Y-R
Y8_)ZAӮL[kUOKbq^HeeڬUQKݵgdnZ{	7Z]dr68|N>ħS<d*A>)$F?_NGI"&S"_\0
LY<Jz"ϯN۞xs5L&="Qt~'Z,q3h .Y<:Lr 8)1ba4<כ4xs>bx:ΐyTH.G?~HA'dtp1x;JAWDlW ttΓ7,]Fdr"h!~&v:
 !$&Qh:œx7 ^0d:㶭1&OHeBbF;M(d6p9Lyx<~;G8b>4'8 Am#=LN?ĸ;RHwV3٨MrZ@tη
Ĝ^8y__|u*FwM?7{kwY4`0ΣHwAHg[*O %+1\x
_3ȄYbƌEOGpQ9gv&krt	%=1zEe9&ő*8*j!_GpSdq5D\/76HSw_ĥz֟5ZBzdsUqf(QN<AS2] CcpX7*Ր-GվEiXJ90k
QJoTS
"l@A44,@
l(D: i}Xo	c24Ha,՘̖ Q&R,:0Jq2eQ@=׿*XİKOO ~Es:`tKHp,}3<C1CZi(ZIT9RAi"c~eZ rZ`{)*"ky5~CTy4a9YeAvae [Jl$"y ~PKq
ȞEg}'Qq#ƥ8@x=~~f(owd0f6I149?zo`/B)hf;sJV3}+rG A說pPDVsۈk";Ւ`+r+I?:
󌦇(*zSoi+0)W2q@]ĀnEJӼĪ
=+,h4`B/yТ.	e~iD!LFÎ0q2
k4X$r?N_ďCrWA&GNM

(sڂ`׍g8{J7b.2&ZCqjP= D@g8(\fTuq 
KUf/R?%g.L"rBq٠Ywu@ic.I#L<]]K
\Ժ+3(n Gj,KO0l5F,q˹# Ya7F\jHj"ٟ~Lu>W8Bߡuur͆r_"Hғ`8@B/<d~^4S*L4xUؾ#+Џve^b
uyV($#Y
Gv
o3(MICt@9;a[܆|
6,ە;DH87vJ:FhwVdd?֮UAˁe;ʭF\bqD^ԙ5RЅTj?;ǲKX`@~#F<
 FD'se
)2`]1tszbфl%;')+Y|!b9ojǑe?-UK1>CFYЀ#3TozI;t #+u6"]K\wD2RkElDH7K|b_oR
co	
kb?alaiۯqwG]K4VvP"s^ D~u"{Ҕ#\(p.ů*($uc|h5_
n(ĐD/X ʦ`s7	e!ܭv2Ŭ@S03M?gK	`6y?l`+qrƕ4jbYyaX3Rq[3.YI.h';].HsߞE`M37cͷD~[O6$^	91vKn	GI8>qajZ#ƅ[b><JɰNUC-cv@ޒ
c{ڂ
c=d{5r~Aba<aC6u %4*eH"=q,ch*_#Y^ʌJHmh1lVT%\X.~u۪B՚1Y|JsYKJvV);|wj$ L.+1ʄu)0u9"iPz; pH]*t?QY$u]%0 Ʉ^1a<uhR/Oꌻ7}l]}?tq1hplE`xS	[ޚ{0Zjs׍?%Yz<9opXud#;A+gr
p넽XcTa6@9~N.qR|y- .6g
ŋ]7f(%kh0:P,[olz$U|=ӆXzA'.A%x\
r(cgu,S|[%ևnV?}
s_,!˩DPlswh*35u}tEUg5g^!P6zQ#}И1[uL]d+S_JuJxkex#-p'n"pe
tp2vz,wvR;j71{]B}t0+ {k=;4;,>#2M*Wp x;;	]V3Js^@d#TU;pQ3lom(nH?/k,/
!=6c522jrl5YOpL*HnSddUQx2ǜȨe
YhUcOvmFUgdOUr&שQF0!P1t*T<ѫ޿B&rUS *ju+b#mYI`24*ﶶs~{GsYPᡂ]M0⹺YFBTHF{ly5x Ų>4h0)D;l`58`n(.Q]peDeks:q}W{A6Z@]+ndtZuk6{[kaE4BǐFW8}tP@s`8){ rznb
uPtY'X3l&[L@:zAfnGC;Ma[{Y5
dor
٨/>{Y?
D{~qb=0LW'Ѽ".v0ZSEG3emQt*Z
nM|%R|YBrY2?1.l`o(T ߱[!	y0Îx 	0St9DX/իz*͌<2+yrTlN^}5Ώ/W'	Q@onY	>C;r_GYìFM7S,n| BwA<)"*ejsĺ}=G|c;pgz>meFHA =a7C##cwl:n^k-3A֚<wȸ[fQ}FmZmil
ԦMop@(wl]Qپ pw\әhЭ:heeF=]p^xar||LV}vXںGt^~WaAZ򎯧,NrMYm	n?_>)ntU?oddLh?tw8!r]Av5رi(ja1s?FumG(^K׽%Dp~'+;ZX`|7m#h)^ė@w"/}{1)B3]KK,8s5u_6[j{4dޠ8{AUל1RJ\$}}#Oz^.lNWJ|
ߐumk;؝Yr?I^?'s}-;"Wvut4MY!z	rH*s|É3 H0`CFN^m|{ūS~J|b/k=Yt!7X
_sW	ǐz4ACs;TGڳg|w!BQSvOӃ|;~֝65ݥq]bjF7 ىѡ]!zWmr}wn`!<ۢ15૊uv^u@
m1|>BwuKb4c}_l{n&z. 7<3{̨M`0PͿbtvg<lD;e6{D2q4mkGnΆnIděx]
ڬ`Ôg}k	/bkPF1	=iVۨhk0Nctk7@F-.oش]}^ˈ!.e{p[®]H/D{tힴVd&moR
5B(#>d5boҼgxzC5!JEJRS#!˰BIt%U%53߷hKFsej\0A장h{%xǣ*x?5jSalz-r>smUvv`%m)kRsŲ@(
PS`FX:Z+o{_
u	.j"&1P6Seq(I%$R:YT}~ϽZ튨 2/gwjqj4N
qEdęl+N-o݄=Q>x.J^̅.g<b6uFkSJx@l!묍ڬ
pSBZcԭS*|P&sKJRo
Ȫ:]vIO].gBfYTVSQ6vh.Y>bUҎ\ċgf$ ,@"droYXpp9Ux$*VVD)X#pp[`(WEmVd#\lK.#Ew%ZPί\,}\m,ٻ)*">@<gnbA͛8]̰h+;*t(}QY:g.`ϡ:)EV4ݭ)jS?\@<2%wU{m)uwܵ2 T%	 |kՁ-^:A9=U)vbR	VkDl&4oq/]XCն֒Na/rIgzRѯȐ!$ٳ33tƎEE7U4$]j549n:D!up3BĶyD-fmxQ'ڷGa<aϛE-r`/LM~#gj,48tQ.}˂HÊߥw6ؙEŉ:@@tRvL=ڹ
M:sZgkY+
uHmKf65WEI&|xcZS%KEבsƎAtHѻ:SP_.IaY_[E\._R1=\0hky1/&D(F6/|p
gV4I}tMYt?+D
!E+Y:waqDu?Öon
7*& dIA/ TW[Scf̒>g<4g}Dk&HjB	Vyf10|V.bock !F 6ڼ.zIEQb!jpEe, /rU>n7ZA]u.IEba.#3ǋkGfsh`5jV,4]<#d +SL跱pY/ }䂎UلKxyMzBőǛkc99ϡL8)e㌥bZqJi5Ԡ_O'O,P.DaB#xмIW 2IdwgYR
/W_4&L(!|IZn
q*SX+Fo0W4!aFUA9d(
%"cN3nb	idJ'3Ez)&ɴ!ThdVSФvyw4-Y&ޝ4B{7#,@2l=g@YC?,:8OgUV˶MWjݶ doʬYT;nPdaW&%(ҹ zeq:)N|DXuMN_0]MX4:_We܉
) !\u3
Ruia.ۖXY<^aD^ޘNdj?ۺzq#בֿ$ZyNSY^ºT_&;xjDףַ;rF2g^1C1
9׸z l#DGEbƳ_
}6 V!㛗{?eX|U$`0ρuń/Ö5Q"f.\+Kq
)+
$S~$M]QY#X4ч\`OkK0]J<˪xhl`"a&*zi97鱅amx24tΔ&	<rV+D@@NĻ;2JZWPM{5\hAGsM!Cd3%(B/0f݊a2p'{Z4 =6bH=0Ќ>|;u2WdY;UtzUK?O	\vO>𘢉9
+a(7;AxخK'dNB1d9ըޖJ6͜<άQ8R:Z"+ӠU6a>eI&noq 5lg3&V񴙟~G@7@}˭k^X2h[.>
:F^-f
%{j"E=W#EZih|8FI.HlaX,YxV<MV5ƒ8%:+i^7A9#ά}8Yi2\$_n!rANvzQObP8/N.^.D) o6ෞ5 S^TSFQKXP#	ǜ
{E")7a2[Q"ԑP MHd<'_>C]E3/iР^f"9a6!.r-rԁ(豑]ZyX%&sЗwwf%Q\Dhuef
4*?j^B.~~$k6wBH'x|C"
0:u|Z{mH%h SE:R>)lᠷwr6yg2mþQjV&+c4Ƌbq#Exzztf8:v.N-Ԕ"8kFn2.6}PGuvѶ{񟠚w<ç݇nƏ4+)S?2뫱=t3}qMT4ǔQȁ`	=H1XU@,9x &rpzOo`~*!E!֌U{KcZ(M{	Hݞ!AYwD3lz"M[[2ט{$CcmaW]#z>/Qiq%og%~;xnef"W;":L;:jv?SX.gRZ	-)^ tTh[8|[Qi'6?f˺l_!mmYږBnNFd8<s2UB1*v݃88'O>=|pwɘ`p)woFGgLAM7MM5֦\7.1p~mx	}p:frޚƳ%N'Y\$vy6SJd%vQ2Q$!3ZyL???o=<o;ōٲ8VܔAW(jI5p=Gp\v_v̻iUUa%3leJ|+}Ws;ixԎ[j1C۸:<:C4/(\PA1P!8
6V%q7N\@7+I" k`ѻyE$K' Z󯡸́ToS۸ܦTTOuܘ8WVif[2G@0wfѵ4BQta}
lSПV}0ףC|Ꙡ"@[pQi'LÇedjl{!yV-Wll=Fa$}$P-SNa4zo#`2-IU3@+=1=ZJ1A۳ū'匹CxWB䄸JK	|q7#mgH-0ov?tjB
`\l[_ˇ0}WhH6!ks?5+tp!7وʘ.tk iN4vaF'xlMb5DAqH!59¶KsQ`h:Ula~`#:t0\S'"lݕeߺ,:xHEJ\e:a I؁M"85>P3}hV~Vk]1ut_~a
?Wͩi5cy	.)2NM#דmJͥeA3{FUۃbDUs
⮏h`tf*AƠLokR\+#2^3j.|ɴ(7>@:8oV,:Li&MUQñ_͉q 1YZ[cT.@O`OL뱄\,t $r2aZ"tO.4JbLiҺ7q[,`OґڢlyzDeיX_79imCx@dLj!]GInQwBARF2ɞ:Ÿmf%Y3ֶkɶ,|M"Fے/FO<8\.B}}gvy+ԊTHId̡-/6М&ʖ\f把H!~3BTX =36 YtwW^ׇGc}}`oc~ZzN2(fRb )!f\JCFYtd/&"c S	sH*^<b#cm%s?.aY`"Tf?U
9}!1@HA+E.d-;/Ɯ+gtq'XT>;$XUr>L/a<!5MJ	&(ߟZLXHtC!u靎;i}Ev4t(0rڴ`%ti9vĊYeIQv3q;Zmgh?/@RVdƷ4q@?`A 02dCSǱu>Y5.ˮ72ubV(^50>ek+O<+|ﶺa53W9XqJWdP1ذ=nC+P=HU@7X
k"f#> >Jt=Q(tw΄;v(|+1J-ƋOt38
`U
P:v|_wP#dyD%nsq[bs؈
Pg#` gujϫJǐ2\[(r꺌+	L@cYTWCyB`
,\^mskg1xǮ<7V'8GsX
he(ظmG$;YQ>1ً樬A⭛U;c?1p썏,e8e?/nnIJŘa`/IcZ(.:,Ɯ[,^L@Gn'l^-AQ*YC.x:BtYKGܓ)OyJA΂6嵿ZcJ?jR4YmVhw|~'|o%|>'<3ek+{%L,|*1,y~c^5k.($g>=~x{tx6ʟ'''
Wo~'?vC;dexlLAi

 P
bj/P)D)#ls~#[؉[n@\:ʧ[$y&8}e(#\kVN[:&vΟ}l/j-1esٗ#pP".Qa9k
;mt%zIs]i}ϤXXݸ)%&1!-W{a>7eN-ldC83)(pU!}VPNn߭5S5F}uryxi<8)c/ּ!6ml6ȓXD<+m1x9wZAeOcC#+}/K[tJZۊ[Zha6}->PvnP
p4@Xy"͔6T-tOcoTRfI<AuG_0	j~%y"5Nu_75/Zfuu=An;:{.| x~B.),j_VOw09w!32E<Ӫ3M,X=s4*7'tܧJɃVE<-hOs-0`8:ozw}ЛN:Ǽ<~?BgTp@Ff;\:eRXB)\C 81C5H
j\qނ/(
i [\9PB0'Lqxt؉QU1d5gTG+w$On_ǯSra9x@LQ7$pk4.H#y^B!0{)d˭#9{h$[]>-a(Ey^r,©uz_k9k!
lV:p^v5C{^{N+]3qܨFFJt\-8vfՉq*<5ՄklQO?HN-zIj6gtF:^sU\.ǃ^&&O${̬PԎ\$ЃOCm5`S|ir:il:oWтn4-yoŁ0a{!HcFɢ;)CX]I_h2@1'VX	UG'.ggo4<yCRϿZU4nOV<̓oƼs6|WU)c` LMo&7H] 5]UoO,U*S!chB|W!=O${#c\(C&)dͯ3$0(/e+c,Q"C݉SiiZp3IgPwt@.#:^me0<.?&)k$!^k I|>Rۻx-@MCs]ȎIäWDpuJ+rqTۢo/Nl:/<-MgK3*v:t*P}B`h>jW/ҧk],~KmN߹8~K	CV\'7n|NMT"j>c=hA(F h'ozqB,TJv'i,GZdsJzuk}0^slcQb9&8,t;E	{7װ<ή&ugnFitqޯ^RuKF҅]M{|?]dzQ*g*/
Q++6%q)*[#XAjj~F:1W@G%kI6[UG*0;aq#*FCrX9`fX<JrVziE1͚v9ahwxK?L &#tS	p	F*A^`KFӫ>#jfd4b1qΦ_>	+98
L	kP;< /(5[G{[S.Նn=n9b/xߎ:zr'Ŏ,Õ/,fMW~F)yCzUhskZS:*̹T1#92nh%C׌*Ɩ$45"alwA;N~/ȨVC|J,HV8փS?
&UcO@q)~n
yk|vSJ"]BKx[&rN.&IG3(dAR̠m=cc6KbrS4*<
sI~%eMh%˭Y6-UӽSL(UMR!1K:X[)aFG*9b[!
5%
[HYD<ac}qI-\<.ޱpbבR|pPz+Ⴟ*C\Lv4R<4-ֆQ֒	=}%l2n5H 8y&뜖j36sc(x|qrf2K4{2QK_/O<;;:~<:ucr&3UU=`ӯ^gϏ8
S0jе6Wl
kGn>zXzzrXN"u_;DkVX_&jaQCi3b<}BL|\0ɫ~Eku@mu@wOƧ,ǻW(t]t6,pf|܈ݍ -1(u~+Pbİ;S
aѴŻ
[(/e9I|w rt@~Z࠻EmV?b&Mpq#[6C01vPtum-4M*ΈGvPܢܖ7[nnI	*rwzH
bHD
B\4nKL<!ͯ"Ic2d[V6<S+ ~o*i[U<+:ȟyQszL{0=jӬт/'jTZ!ճr2))ւ+h Wco
D鶑𨈤؄@hɤ(; 8[l=a䔓Ab9"xԌ`nGa.uND0B旯ewN@٭.8(VmȶbNkΛZviH\aJ>6DT3"8ؿ3]ϼ5l5&,-6уH-^_52o&	v&@7-6kac)5a"dQ٦X7t`bU*PAeVlji y^>l٘BSR#fK
A|-3"j*dc*l&.tc^-Id@OAQHKrD(@yQ<b6~ij6eUg!WW5>	Պs-1JHwC}ZXZ64䬤 (Ѧ|7]&uLDN)8|'Ϋ
2Os
B*hv跠rcdUA+vldi o47tĚtG_=Id
r=>kݤ]5[3U
KU]BLX n-ص!smhfm
zՐC<Ιlf:c-Ni7uyO(bg:ך|y]klb_k:?hX9_`9}t\)yJtEdUGb.h#)3'7rĖx4=9Ȩ&E%Xw2дLkDXd_`j2)|utjn%x(ſS61X1<SvINseE,M ӫdٲ,Ж҄HDۊs;kS5ǤLj~6Ĝ&JVqVTe"C;5,f\B'74
")	~%K
>ὕढ۱`!f֠
E{m?P%\St=ih7qmtL3?}/bI&ڡhUngsξv&uT$?;|uz==<Ud<{@~χ~>'c¢jsg1
r2L#f\b-?f)nWiuа&0?cgǱϣLz6,y#GtKK/H&5x-
"|ݬcygivh
!zvp@Ne%yY2	V=\p	A索kmҷ[C9CIriQ/U&e'Lm(	D)^|Tx>4҇&pjł7>G7!GR	Ob%fv|j8 X8p,\B0DNC:o^6K9+ְrM[B?5قV-Gn"Gjxɨ0r*!2F=x{^]@~BխĜ":e0ڊw
7/D]A;:Е.
.P#}T+W(/AfŠXSKx_ʬO@
q+U
#tKbG@KgrKb gf22`K	ks9<6 ^FFhZBUud(3
UE鷞=BQsիP>KDD.e\!9LȱQs2ЬbcTU+potᩣHwuW4{7r0mоxaJve}	io`BfKu/>SY͍}ZCj +?๖f>豯*WkY=\3Wt(y`D,;_-;VgKE3{75,8r|MZes`?.alJ/}l7%
x

Yo~Mf2fۄjYfӳ^eĦ0̦xd+85
WKZa)-T'^9n]JXJ5qA0NvKFў%z"(D4O-<?zappO˘/8Qi1ܖs=CSR^D^8fAJWgy]mE/@n!%]40%[:5Pe:hڙ ]wjSnMTؙ
{af2 6$
$jDkq0ޘ,'4\h*d
6	wt2d]^ㄓad
]@b)@V4#)OU1氦HEu6JӸ`'#'|t%K2aE$8S^Y0~xYN/i>VpQe0HrT5" "ڨޖE_]/swR83Vϊ. '\~|Pj:v0#K)IB_+Zb!}΃x/i8³ʪ?JMieUan]^CIF^6h9IaZ/,qڐI5Ŗ!⢨?`38ҝg󦙥bMs\͢s9Tb/rwpJ8B
+
vdu!sdFGܦ0ղ-gӔby<(M}wrzJ}ZTa!#PA.*H8NH@_/x]h
=F8@w`%$|d#0ŊR5&{jT!2eKH5huTKo	?X
8Ω
bc?^lˍƂژd/*+3S
;;v
촼='.K~Pd $QxSQ>RKnmlA	Xg%S$13cABi&Uay(o}3D
w&J.^rOS$`v&oBGbM|~t ߼oP	zr噫ȅ%9#[$UNAnkg<FyL!A-gDñT<sTP8ucKZsCPE{!;3ţR`x^<p޾>~},6Ҷ%ՎmεIrж!*Y.3C+HEٔ
b=߫O4#QRVBQTyYxQQ.}Y:a|c o\
_k?lQ'.F6m
%}.p
4W7xOFDJx0&ZSQІkp-9
Yvrf,="_KLG;|7Bص><2G$fdDU8xGabiPNpJ?:|xˮQs@FQ(-7pH#P
EjJ|~+/Z::$o%ZH;mTׅHBgXyC\1n)RI]Cfa^;ٷ%Gm<oLx˘rЅjoD1a$'}Fǯԛ9G0H$4n֒
b=%g>6	$ *tp&ppG9PXFrk2Na2X&Ϩln-#3pBGq_"%f}=l+4-N󽗧Τ#b^oM;=Sgd	^T
RTdU؂9]%Avw@~YA-)<+YS3|W`>coq
~}Z͟/`fx+L
MG(&a
.ӦǠꂘU7HYCL%Rz-ZXcb`
c&HYE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       VmoHί*ir_KXlk"UjKY@vrQHzgf],j$+<jSywp]חpjHPeEq mz?l-_WCeKS(Y_Lj0NDFtYU@SKPԺ1t++Ue kmvu݂6nBUH2#a/NY+}
|@eU\WM;iܗKjcX.д-d3pW%*mU.hj(pN]By4)
<
Z4

7;YX,FJ>F牜:!p"~ I|Ch/t'/G!~>&ĉ6I(LGtE
Qxfiw?nshf,	&Kwӈ|1"~`1/y,0ZL""|¶<BnXy^#!)k11',H)	f1ga~#đ`,_Bk&cD "a33HyH\qH`
1>`mh. AЄZQʒd1OyI|D`>nqDiwdIĉ	шO4Azn>8i;k,bB傽JqAܹ߅Kwu>?B/x)`ҕg3G2,).	khA=[
~8-Dhw. Rr[YVvjl'I,x. 42$Uƭ24wuy9˞Ր幬k7ĥγFV`VݔoE
3=#6 lҕ_D@P-U邁BYU +	jM:yڔzR!&iZmӪZ_./03|jmz袖bp=/sHm>_ kx#j*rǌTuQHjޝXE!˘[ŧb!<NiWx>OIF%l*PnDFzo%1ю.짠>u	2ob埿72Jŋ+mM~8FQ?3cMu=5}z-
b2(EEtj郻tñNv9hTހZMӊ4ȥ޾Y=ZO=	{\JPK
MY]Íر̸T9B{QɵK瞮78WccE%d:2<">t|xsZ%$</$Z2:f̌S*oB;- ֯ߠ
3*Z[֯fRy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             UMo6WZITFcpE9 {%V#K*I9#e]@,rޛ7C튮N6b@Z&kN֝TޗgtsW{=G޷+!펪\\檒e&II-A~)վҺj2-Z mYm̛JU{#*Mݘ\Iڴ
Gk6R0;H[7FcT{JY17ۃtTGQMkB:.sw{:+Q'ԗ'̳,Zs03bWbl4 JY\8A?0^c?\͂!hHsadH", '`d1		gg$_9{9͓qĒǐr??c>ЌEJI:Զ`H9EbfyD&H2f#D1pSŃ(?"<KU0x-8q,I'X5Yef%<1X؞@S4#bynl27X)k/룙!!ﾀ<%}yybG1ȋ?%YNÒei:%w]c/qLh^̸`is0aIkOeҔߓ|+V`Wy:MGp^Rkx?U6hβ;g` #ǖpls@Ԁef[Kj;chP,FcMoiV330CRRG1(ZaRW.Hp6}mu-T]zl
%s-]]2G
i{n(7n9
)M108%d>i]v aHhZb's.FUHC-+_M9MW
a(FbSdA[uj;
9                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       UMo6WZmNe,:W
ڢm6>vE4{f7]eѫAdfd_FD_{ݧ?zD.]0zqG`(egib5
-UglkujHKPiz_Tk^"іlr(Zuߙ^9Z)ElQlԛnkUQ:|)n򽨶sz{^{%
$R+Q^5$IAxJbx aWӢ8% T*"}M)<82fi4TLI!IL*BD  M4a)IQ.?q!|\
q~f\6P2襔zz=6e(DbVIYdH*#D!pKGQ*)r@d^IcE@TEsqYyunV#k8	:xfd,0O?-knYKF7Oy{yŎį)OAG_QaP2>E&]
>$qArbJ}g\ y1Ӥ}XqÚ'kGr!WG_qrTBfhҬ?`$ˎpn^F-]s<ެPx2]7y_p[衡k!Fkw,I5*%8m8&TYn=mQ*~J`hJ[c
a4jaĶEؖ3&?]%
u&Xnޅ)(9Ww[ߠQ!IԪA\cK}٣	K̹S#HE2!c"9Xiciʆlo98pYKjd`R_/ܲuԙ/*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /.
/etc
/etc/ssh
/etc/ssh/ssh_config
/etc/ssh/ssh_config.d
/usr
/usr/bin
/usr/bin/scp
/usr/bin/sftp
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-argv0
/usr/bin/ssh-copy-id
/usr/bin/ssh-keygen
/usr/bin/ssh-keyscan
/usr/lib
/usr/lib/openssh
/usr/lib/openssh/agent-launch
/usr/lib/openssh/ssh-keysign
/usr/lib/openssh/ssh-pkcs11-helper
/usr/lib/openssh/ssh-sk-helper
/usr/lib/systemd
/usr/lib/systemd/user
/usr/lib/systemd/user/graphical-session-pre.target.wants
/usr/lib/systemd/user/ssh-agent.service
/usr/share
/usr/share/apport
/usr/share/apport/package-hooks
/usr/share/apport/package-hooks/openssh-client.py
/usr/share/doc
/usr/share/doc/openssh-client
/usr/share/doc/openssh-client/NEWS.Debian.gz
/usr/share/doc/openssh-client/OVERVIEW.gz
/usr/share/doc/openssh-client/README
/usr/share/doc/openssh-client/README.Debian.gz
/usr/share/doc/openssh-client/README.dns
/usr/share/doc/openssh-client/README.tun.gz
/usr/share/doc/openssh-client/changelog.Debian.gz
/usr/share/doc/openssh-client/changelog.gz
/usr/share/doc/openssh-client/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/openssh-client
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-argv0.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keygen.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8
/usr/share/man/man8/ssh-keysign.8.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz
/usr/share/man/man8/ssh-sk-helper.8.gz
/usr/bin/slogin
/usr/lib/systemd/user/graphical-session-pre.target.wants/ssh-agent.service
/usr/share/man/man1/slogin.1.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Package: openssh-client
Status: install reinstreq unpacked
Priority: standard
Section: net
Installed-Size: 5792
Maintainer: Debian OpenSSH Maintainers <debian-ssh@lists.debian.org>
Architecture: amd64
Multi-Arch: foreign
Source: openssh
Version: 1:9.2p1-2+deb12u7
Replaces: openssh-sk-helper, ssh, ssh-krb5
Provides: ssh-client
Depends: adduser, passwd, libc6 (>= 2.36), libedit2 (>= 2.11-20080614-0), libfido2-1 (>= 1.8.0), libgssapi-krb5-2 (>= 1.17), libselinux1 (>= 3.1~), libssl3 (>= 3.0.17), zlib1g (>= 1:1.1.4)
Recommends: xauth
Suggests: keychain, libpam-ssh, monkeysphere, ssh-askpass
Breaks: openssh-sk-helper
Conflicts: sftp
Conffiles:
 /etc/ssh/ssh_config newconffile
Description: secure shell (SSH) client, for secure access to remote machines
 This is the portable version of OpenSSH, a free implementation of
 the Secure Shell protocol as specified by the IETF secsh working
 group.
 .
 Ssh (Secure Shell) is a program for logging into a remote machine
 and for executing commands on a remote machine.
 It provides secure encrypted communications between two untrusted
 hosts over an insecure network. X11 connections and arbitrary TCP/IP
 ports can also be forwarded over the secure channel.
 It can be used to provide applications with a secure communication
 channel.
 .
 This package provides the ssh, scp and sftp clients, the ssh-agent
 and ssh-add programs to make public key authentication more convenient,
 and the ssh-keygen, ssh-keyscan, ssh-copy-id and ssh-argv0 utilities.
 .
 In some countries it may be illegal to use any encryption at all
 without a special permit.
 .
 ssh replaces the insecure rsh, rcp and rlogin programs, which are
 obsolete for most purposes.
Homepage: https://www.openssh.com/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Package: openssh-client
Status: install ok unpacked
Priority: standard
Section: net
Installed-Size: 5792
Maintainer: Debian OpenSSH Maintainers <debian-ssh@lists.debian.org>
Architecture: amd64
Multi-Arch: foreign
Source: openssh
Version: 1:9.2p1-2+deb12u7
Replaces: openssh-sk-helper, ssh, ssh-krb5
Provides: ssh-client
Depends: adduser, passwd, libc6 (>= 2.36), libedit2 (>= 2.11-20080614-0), libfido2-1 (>= 1.8.0), libgssapi-krb5-2 (>= 1.17), libselinux1 (>= 3.1~), libssl3 (>= 3.0.17), zlib1g (>= 1:1.1.4)
Recommends: xauth
Suggests: keychain, libpam-ssh, monkeysphere, ssh-askpass
Breaks: openssh-sk-helper
Conflicts: sftp
Conffiles:
 /etc/ssh/ssh_config newconffile
Description: secure shell (SSH) client, for secure access to remote machines
 This is the portable version of OpenSSH, a free implementation of
 the Secure Shell protocol as specified by the IETF secsh working
 group.
 .
 Ssh (Secure Shell) is a program for logging into a remote machine
 and for executing commands on a remote machine.
 It provides secure encrypted communications between two untrusted
 hosts over an insecure network. X11 connections and arbitrary TCP/IP
 ports can also be forwarded over the secure channel.
 It can be used to provide applications with a secure communication
 channel.
 .
 This package provides the ssh, scp and sftp clients, the ssh-agent
 and ssh-add programs to make public key authentication more convenient,
 and the ssh-keygen, ssh-keyscan, ssh-copy-id and ssh-argv0 utilities.
 .
 In some countries it may be illegal to use any encryption at all
 without a special permit.
 .
 ssh replaces the insecure rsh, rcp and rlogin programs, which are
 obsolete for most purposes.
Homepage: https://www.openssh.com/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     1bf2cdd7e8376d19d2f9b46a2e3617c7  usr/lib/openssh/sftp-server
d6feaacaa360a52277f9ee9a4ddb7f7f  usr/share/man/man8/sftp-server.8.gz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Package: openssh-sftp-server
Source: openssh
Version: 1:9.2p1-2+deb12u7
Architecture: amd64
Maintainer: Debian OpenSSH Maintainers <debian-ssh@lists.debian.org>
Installed-Size: 217
Depends: openssh-client (= 1:9.2p1-2+deb12u7), libc6 (>= 2.34)
Recommends: openssh-server | ssh-server
Enhances: openssh-server, ssh-server
Breaks: openssh-server (<< 1:6.5p1-5)
Replaces: openssh-server (<< 1:6.5p1-5)
Section: net
Priority: optional
Multi-Arch: foreign
Homepage: https://www.openssh.com/
Description: secure shell (SSH) sftp server module, for SFTP access from remote machines
 This is the portable version of OpenSSH, a free implementation of
 the Secure Shell protocol as specified by the IETF secsh working
 group.
 .
 Ssh (Secure Shell) is a program for logging into a remote machine
 and for executing commands on a remote machine.
 It provides secure encrypted communications between two untrusted
 hosts over an insecure network. X11 connections and arbitrary TCP/IP
 ports can also be forwarded over the secure channel.
 It can be used to provide applications with a secure communication
 channel.
 .
 This package provides the SFTP server module for the SSH server. It
 is needed if you want to access your SSH server with SFTP. The SFTP
 server module also works with other SSH daemons like dropbear.
 .
 OpenSSH's sftp and sftp-server implement revision 3 of the SSH filexfer
 protocol described in:
 .
  http://www.openssh.com/txt/draft-ietf-secsh-filexfer-02.txt
 .
 Newer versions of the draft will not be supported, though some features
 are individually implemented as extensions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Package: openssh-sftp-server
Status: install reinstreq half-installed
Priority: optional
Section: net
Architecture: amd64
Multi-Arch: foreign
Version: 1:9.2p1-2+deb12u7
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       #
# This file is a bourne shell snippet, and is sourced by the
# ucf script for configuration.
#

# Debugging information: The default value is 0 (no debugging
# information is printed). To change the default behavior, uncomment
# the following line and set the value to 1.
#
# DEBUG=0

# Verbosity: The default value is 0 (quiet). To change the default
# behavior, uncomment the following line and set the value to 1.
#
# VERBOSE=0


# The src directory. This is the directory where the historical
# md5sums for a file are looked for.  Specifically, the historical
# md5sums are looked for in the subdirectory ${filename}.md5sum.d/
#
# conf_source_dir=/some/path/

# Force the installed file to be retained. The default is have this
# variable unset, which makes the script ask in case of doubt. To
# change the default behavior, uncomment the following line and set
# the value to YES
#
# conf_force_conffold=YES

# Force the installed file to be overridden. The default is have this
# variable unset, which makes the script ask in case of doubt. To
# change the default behavior, uncomment the following line and set
# the value to YES
#
# conf_force_conffnew=YES

# Please note that only one of conf_force_conffold and
# conf_force_conffnew should be set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    #!/bin/sh
#                               -*- Mode: Sh -*-
# lcf ---
# Author           : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
# Created On       : Mon Feb 25 12:04:52 2002
# Created On Node  : glaurung.green-gryphon.com
# Last Modified By : Manoj Srivastava
# Last Modified On : Mon Feb 25 12:06:54 2002
# Last Machine Used: glaurung.green-gryphon.com
# Update Count     : 2
# Status           : Unknown, Use with caution!
# HISTORY          :
# Description      :
#
#

# make sure we exit on error
set -e

# set the version and revision
progname="$(basename $0)"
pversion='Revision: 3.00'

######################################################################
########                                                     #########
########              Utility functions                      #########
########                                                     #########
######################################################################
setq() {
    # Variable Value Doc_string
    if [ "x$2" = "x" ]; then
	echo >&2 "$progname: Unable to determine $3"
	exit 1;
    else
	if [ "x$VERBOSE" != "x" ]; then
	    echo "$progname: $3 is $2";
	fi
	eval "$1=\"\$2\"";
    fi
}

withecho () {
        echo "$@" >&2
        "$@"
}

usageversion () {
        cat >&2 <<END
Debian GNU/Linux $progname $pversion.
           Copyright (C) 2002 Manoj Srivastava.
This is free software; see the GNU General Public Licence for copying
conditions.  There is NO warranty.

Usage: $progname  [options] dest_file  src_dir
Options:
     -h,     --help          print this message
     -s foo, --src-dir  foo  Set the src dir (historical md5sums live here)
     -d [n], --debug    [n]  Set the Debug level to N
     -n,     --no-action     Dry run. No action is actually taken.
     -v,     --verbose       Make the script verbose

By default, the directory the new_file lives in is assumed to be the src-dir,
which is where we look for any historical md5sums.

END
}

######################################################################
########                                                     #########
########              Command line args                      #########
########                                                     #########
######################################################################
#
# Long term variables#
#
docmd='YES'
action='withecho'
DEBUG=0
VERBOSE=''
statedir='/var/lib/ucf';


# Note that we use `"$@"' to let each command-line parameter expand to a
# separate word. The quotes around `$@' are essential!
# We need TEMP as the `eval set --' would nuke the return value of getopt.
TEMP=$(getopt -o hs:d:D::nv -n "$progname" \
             --long help,src-dir:,dest-dir:DEBUG::,no-action,verbose \
             -- "$@")

if [ $? != 0 ] ; then
    echo "Error handling options.Terminating..." >&2 ;
    exit 1 ;
fi

# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"

while true ; do
    case "$1" in
	-h|--help) usageversion;                                exit 0 ;;
	-n|--no-action) action='echo'; docmd='NO';              shift  ;;
	-v|--verbose) VERBOSE=1;                                shift  ;;
	-s|--src-dir)
	    opt_source_dir="$2";                                shift 2 ;;
	-d|--debug)
            # d has an optional argument. As we are in quoted mode,
            # an empty parameter will be generated if its optional
            # argument is not found.
	    case "$2" in
		"") setq DEBUG 1    "The Debug value"; shift 2 ;;
		*)  setq DEBUG "$2" "The Debug value"; shift 2 ;;
	    esac ;;
	--)  shift ;                                             break ;;
	*) echo "Internal error!" ; exit 1 ;;
    esac
done

if [ $# != 2 ]; then
    echo >&2 "*** ERROR: Need exactly two arguments, got $#";
    echo >&2 ""
    usageversion;
    exit 0 ;
fi

setq dest_file  "$1" "The Destination file";
setq source_dir "$2" "The source directory";


# Load site defaults and over rides.
if [ -f /etc/ucf.conf ]; then
    . /etc/ucf.conf
fi

# Command line, env variable, config file, or default
if [ "X$source_dir" = "X" ]; then
    if [ ! "x$opt_source_dir" = "x" ]; then
	setq source_dir "$opt_source_dir" "The Source directory"
    elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then
	setq source_dir "$UCF_SOURCE_DIR" "The Source directory"
    elif [ ! "x$conf_source_dir" = "x" ]; then
	setq source_dir "$conf_source_dir" "The Source directory"
    fi
fi

if [ ! -d "$source_dir" ]; then
    echo >&2 "The source dir does not exist. Stopping now."
    exit 2;
fi

if [ "X$dest_file" = "X" ]; then
    echo >&2 "Uknown file to search for. Stopping now."
    exit 2;
fi

old_mdsum_dir="$source_dir/$(basename ${new_file}).md5sum.d";
old_mdsum_file="$source_dir/$(basename ${new_file}).md5sum";


if [ -e "$statedir/hashfile" -a ! -r "$statedir/hashfile" ]; then
    echo >&2 "$progname: do not have read privilege to the state data"
    if [ "X$docmd" = "XYES" ]; then
	exit 1;
    fi
fi

# test and see if this file exists in the database
if [ -e "$statedir/hashfile" ]; then
    if [ "X$VERBOSE" != "X" ]; then
	echo >&2 "The hash file exists";
	echo grep "[[:space:]]${dest_file}$" "$statedir/hashfile";
	grep "[[:space:]]${dest_file}$" "$statedir/hashfile" ;
    fi
    lastsum=$(grep "[[:space:]]${dest_file}$" "$statedir/hashfile" | \
                   awk '{print $1;}' );
fi

if [ "X$lastsum" = "X" ]; then
    echo >&2 "$progname: No record of file in databse. Stopping now."
    exit 2;
fi

if [ $DEBUG -gt 0 ]; then
    cat <<EOF
The new start file is      \`$new_file\'
The destination is         \`$dest_file\'
The history is kept under  \'$source_dir\'
EOF
    if [ -s "$dest_file" ]; then
	echo "The destination file exists, and has md5sum:"
	$action md5sum "$dest_file"
    else
	echo "The destination file does not exist."
    fi
    if [ "X$lastsum" != "X" ]; then
	echo "The old md5sum exists, and is:"
	echo "$lastsum"
    else
	echo "The old md5sum does not exist."
    fi
    if [ -e "$new_file" ]; then
	echo "The new file exists, and has md5sum:"
	$action md5sum "$new_file"
    else
	echo "The new file does not exist."
    fi
    if [ -d "$old_mdsum_dir" ]; then
	echo "The historical md5sum dir $old_mdsum_dir exists"
    elif [ -f "$old_mdsum_file" ]; then
	echo "The historical md5sum file $old_mdsum_file exists"
    else
	echo "Historical md5sums are not available"
    fi
fi

if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then
    if [ -d "$old_mdsum_dir"  ]; then
	for file in ${old_mdsum_dir}/*; do
	    oldsum="$(awk '{print $1}' $file)";
	    if [ "$oldsum" = "$destsum"  ]; then
#               Bingo!
		echo "$(awk '{print $2}' $file)";
		exit 0;
	    fi
	done
    elif [ -f "$old_mdsum_file" ]; then
	oldsum=$(grep "^${destsum}" "$old_mdsum_file")
	if [ "X$oldsum" != "X" ]; then
#        Bingo
	    echo  $(grep "^${destsum}" "$old_mdsum_file" | awk '{print $2}')
	    exit 0;
	fi
    fi
#	   Well, nothing matched. We now check to see if the
#	   maintainer has an opinion on how to set the ``md5sum of the
#	   previously installed version'', since we have no way of
#	   determining that automatically. Please note that unless
#	   there are limited number of previously released packages
#	   (like just one), the maintainer is also making a guess at
#	   this point by supplying a historical md5sum default file.
    if [ "X$VERBOSE" != "X" ]; then
	echo >&2 "Historical md5sums did not match."
    fi
    if [ -d "$old_mdsum_dir"  ]; then
	if [ -e "${old_mdsum_dir}/default" ]; then
	    echo default;
	    exit 0;
	fi
    elif [ -f "$old_mdsum_file" ]; then
	oldsum=$(grep "[[:space:]]default$" "$old_mdsum_file" | \
	    awk '{print $1;}')
	if [ "X$oldsum" != "X" ]; then
#                    Bingo
	    echo default;
	    exit 0;
	fi
    fi
fi


exit 0;
                                                                                                                                                                                                                                                                                                                                                                                                                        #!/bin/sh
#                               -*- Mode: Sh -*-
# updateConfFile.sh ---
# Author           : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
# Created On       : Fri Feb  1 03:41:47 2002
# Created On Node  : glaurung.green-gryphon.com
# Last Modified By : Manoj Srivastava
# Last Modified On : Tue Jun  6 09:48:22 2006
# Last Machine Used: glaurung.internal.golden-gryphon.com
# Update Count     : 186
# Status           : Unknown, Use with caution!
# HISTORY          :
# Description      :
#
# This script attempts to provide conffile like handling for files not
# shipped in a Debian package, but handled by the postinst. Using this
# script, one may ship a bunch of default cofiguration files somewhere
# in /usr (/usr/share/<pkg> is a good location), and maintain files in
# /etc.
#
# The motivation for this script was to provide conffile like handling
# for start files for emacs lisp packages (for example,
# /etc/emacs21/site-stard.d/50psgml-init.el) These start files are not
# shipped with the package, instead, they are installed during the
# post installation configuration phase by the script
# /usr/lib/emacsen-common/emacs-package-install $package_name.
#
# This script is meant to be invoked by the packages install script at
# /usr/lib/emacsen-common/packages/install/$package_name for each
# flavour of installed emacsen by calling it with the proper values of
# new file (/usr/share/emacs/site-lisp/<pkg>/<pkg>-init.el), and dest file
# (/etc/emacs21/site-stard.d/50<pkg>-init.el)), and it should do the rest.
#

# make sure we exit on error
set -e

# set the version and revision
progname="$(basename $0)"
pversion='Revision: 3.00 '

unset GREP_OPTIONS

######################################################################
########                                                     #########
########              Utility functions                      #########
########                                                     #########
######################################################################
setq() {
    # Variable Value Doc_string
    if [ "x$2" = "x" ]; then
	echo >&2 "$progname: Unable to determine $3"
	exit 1;
    else
	if [ "x$VERBOSE" != "x" ]; then
	    echo >&2 "$progname: $3 is $2";
	fi
	eval "$1=\"\$2\"";
    fi
}

# Usage: get_file_metadate file_name
get_file_metadata()
{
    if [ -e "$1" ]; then
        # get file modification date without the nanoseconds and timezone info
        local moddate="$(date +"%F %T" --date $(stat --format '@%Y' "$1"))"
        # print file_name user.group permissions above_date
        stat --format "%n %U.%G 0%a $moddate" "$1"
    else
        echo "/dev/null"
    fi
}

# Runs the diff command with approrpiate arguments
# Usage run_diff diff|sdiff diff_opts old_file new_file
run_diff()
{
    local diff_cmd="$1"
    local diff_opt="$2"
    local old_file="$3"
    local new_file="$4"

    # Note: get_file_metadata not in quotes to ignore "\n" characters
    local old_file_label="$(get_file_metadata "$old_file")"
    local new_file_label="$(get_file_metadata "$new_file")"

    [ -e "$old_file" ] || old_file=/dev/null
    [ -e "$new_file" ] || new_file=/dev/null

    if [ "$diff_cmd" = "diff" ] ; then
      diff "$diff_opt" --label "$old_file_label" "$old_file" \
            --label "$new_file_label" "$new_file" || true
    elif [ "$diff_cmd" = "sdiff" ] ; then
      # unfortunatelly the sdiff command does not support --label option
      local out="$(sdiff "$diff_opt" "$old_file" "$new_file")" || true
      [ -z "$out" ] || printf "Old file: %s\nNew file: %s\n\n%s" \
                               "$old_file_label" "$new_file_label" "$out"
    else
      echo "Unknown diff command: $diff_cmd" >&2
      exit 1
    fi
}


# Use debconf to show the differences
# Usage: show_diff actual_file_differences file_stat_differences
show_diff() {
    if [ -z "$1" ]; then
	DIFF="There are no non-white space differences in the files."
    else
        if  [ 99999 -lt "$(echo $1 | wc -c | awk '{print $1; }')" ]; then
            DIFF="The differences between the files are too large to display."
        else
            DIFF="$1"
        fi
    fi
    if [ "$DEBCONF_OK" = "YES" ] && [ "$DEBIAN_HAS_FRONTEND" ]; then
	templ=ucf/show_diff
	db_capb escape
	db_subst $templ DIFF "$(printf %s "$DIFF" | debconf-escape -e)"
	db_fset $templ seen false
	db_input critical $templ || true
	db_go || true
	db_get $templ
	# may contain sensitive information, so clear
	# immediatly after use so it is never written
	# to disk
	db_subst $templ DIFF ""
	db_reset $templ
	db_capb
    else
        if [ -z "$my_pager" ]; then
	    echo "$DIFF" | sensible-pager
        else
	    echo "$DIFF" | $my_pager
        fi
    fi
}

withecho () {
        echo "$@" >&2
        "$@"
}

usageversion () {
        cat >&2 <<END
Debian GNU/Linux $progname $pversion.
           Copyright (C) 2002-2005 Manoj Srivastava.
This is free software; see the GNU General Public Licence for copying
conditions.  There is NO warranty.

Usage: $progname  [options] new_file  destination
Options:
     -h,     --help          print this message
     -s foo, --src-dir  foo  Set the src dir (historical md5sums live here)
             --sum-file bar  Force the historical md5sums to be read from
                             this file.  Overrides any setting of --src-dir.
     -d[n], --debug=[n]      Set the Debug level to N. Please note there must
                             be no spaces before the debug level
     -n,     --no-action     Dry run. No action is actually taken.
     -P foo, --package foo   Don't follow dpkg-divert diversions by package foo.
     -v,     --verbose       Make the script verbose
             --three-way     Register this file in the cache, and turn on the
                             diff3 option allowing the merging of maintainer
                             changes into a (potentially modified) local
                             configuration file. )
             --state-dir bar Set the state directory to bar instead of the
                             default '/var/lib/ucf'. Used mostly for testing.
             --debconf-ok    Indicate that it is ok for ucf to use an already
                             running debconf instance for prompting.
             --debconf-template bar
                             Specify an alternate, caller-provided debconf
                             template to use for prompting.
Usage: $progname  -p  destination
     -p,     --purge         Remove any reference to destination from records

By default, the directory the new_file lives in is assumed to be the src-dir,
which is where we look for any historical md5sums.

END

}

######################################################################
########                                                     #########
########        file and hash save/restore functions         #########
########                                                     #########
######################################################################
purge_md5sum () {
    for i in $(/usr/bin/seq 6 -1 0); do
	if [ -e "${statedir}/hashfile.${i}" ]; then
	    if [ "X$docmd" = "XYES" ]; then
		cp -pf "${statedir}/hashfile.${i}" \
		    "${statedir}/hashfile.$(($i+1))"
	    else
		echo cp -pf "${statedir}/hashfile.${i}" \
                          "${statedir}/hashfile.$(($i+1))"
	    fi
	fi
    done
    if [ -e "$statedir/hashfile" ]; then
	if [ "X$docmd" = "XYES" ]; then
	    cp -pf "$statedir/hashfile"  "$statedir/hashfile.0"
	else
	    echo cp -pf "$statedir/hashfile"  "$statedir/hashfile.0"
	fi
	if [ "X$docmd" = "XYES" ]; then
	    set +e
	    if [ "X$VERBOSE" != "X" ]; then
		echo >&2 "grep -Ev [[:space:]]${safe_dest_file}$ $statedir/hashfile"
		grep -Ev "[[:space:]]${safe_dest_file}$"  "$statedir/hashfile" >&2 \
		    || true;
	    fi
	    #echo "grep -Ev [[:space:]]${safe_dest_file}$ $statedir/hashfile"
	    grep -Ev "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" > \
		"$statedir/hashfile.tmp" || true;
	    if [ "X$docmd" = "XYES" ]; then
		mv -f "$statedir/hashfile.tmp"  "$statedir/hashfile"
	    else
		echo mv -f "$statedir/hashfile.tmp"  "$statedir/hashfile"
	    fi
	    set -e
	fi
    fi
    test -n "$VERBOSE" && echo >&2 "The cache file is $cached_file"
    if [ ! -z "$cached_file" -a -f "$statedir/cache/$cached_file" ]; then
	$action rm -f "$statedir/cache/$cached_file"
    fi
}

replace_md5sum () {
    for i in $(/usr/bin/seq 6 -1 0); do
	if [ -e "${statedir}/hashfile.${i}" ]; then
	    if [ "X$docmd" = "XYES" ]; then
		cp -pf "${statedir}/hashfile.${i}" \
		    "${statedir}/hashfile.$(($i+1))"
	    else
		echo cp -pf "${statedir}/hashfile.${i}" \
		    "${statedir}/hashfile.$(($i+1))"
	    fi
	fi
    done
    if [ -e "$statedir/hashfile" ]; then
	if [ "X$docmd" = "XYES" ]; then
	    cp -pf "$statedir/hashfile"  "$statedir/hashfile.0"
	else
	    echo cp -pf "$statedir/hashfile"  "$statedir/hashfile.0"
	fi
	if [ "X$docmd" = "XYES" ]; then
	    set +e
	    if [ "X$VERBOSE" != "X" ]; then
		echo >&2 "(grep -Ev \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\";"
		grep -Ev "[[:space:]]${safe_dest_file}$"  "$statedir/hashfile" >&2 || true;
		md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" >&2;
	    fi
	    grep -Ev "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" > \
		"$statedir/hashfile.tmp" || true;
	    md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" >> \
		"$statedir/hashfile.tmp";
	    mv -f "$statedir/hashfile.tmp"  "$statedir/hashfile"
	    set -e
	else
	    echo "(grep -Ev \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\""
	    echo " md5sum \"$orig_new_file\" | sed \"s|$orig_new_file|$dest_file|\"; "
	    echo ") | sort > \"$statedir/hashfile\""
	fi
    else
	if [ "X$docmd" = "XYES" ]; then
	    md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|"  > \
		"$statedir/hashfile"
	else
	    echo " md5sum \"$orig_new_file\" | sed \"s|$orig_new_file|$dest_file|\" >" \
		"\"$statedir/hashfile\""
	fi
    fi
    file_size=$(stat -c '%s' "$orig_new_file")
    if [ "X$THREEWAY" != "X" ] || [ "$file_size" -lt 25600 ]; then
	$action cp -pf "$orig_new_file" "$statedir/cache/$cached_file"
    fi
    # cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
}

replace_conf_file () {
    # do not mangle $dest_file since it's the one registered in the hashfile
    # or we have been ask to register
    real_file="$dest_file"
    if [ -L "$dest_file" ]; then
	real_file="$(readlink -nf $dest_file || :)"
	if [ "x$real_file" = "x" ]; then
	    echo >&2 "$dest_file is a broken symlink!"
	    $action rm -f "$dest_file";
	    real_file="$dest_file"
	fi
    fi
    if [ -e "$real_file" ]; then
	if [ -z "$RETAIN_OLD" ]; then
	    #echo "Saving  ${real_file}.${OLD_SUFFIX},  in case."
	    if [ "x$VERBOSE" != "x" ]; then
		echo >&2 "Not saving ${real_file}, since it was unmodified"
	    fi
	else
	    $action cp -pf $selinux "${real_file}" "${real_file}.${OLD_SUFFIX}"
	fi
    fi
    if [ -e "${real_file}" ]; then
        # Do not change the permissions and attributes of the destination
        $action cp -f $selinux "$new_file" "${real_file}"
    else
        # No destination file exists
        $action cp -pf $selinux "$new_file" "${real_file}"
    fi
    replace_md5sum;
}

# Escape single quotes in the arguments passed in
quote_single() {
    printf "%s\n" "$1" | sed -e "s,','\\\\'',g"
}



######################################################################
########                                                     #########
########              Command line args                      #########
########                                                     #########
######################################################################
#
# Long term variables#
#
docmd='YES'
action='withecho'
action=
selinux=''
DEBUG=0
VERBOSE=''
statedir='/var/lib/ucf';
THREEWAY=

DIST_SUFFIX="ucf-dist"
NEW_SUFFIX="ucf-new"
OLD_SUFFIX="ucf-old"
ERR_SUFFIX="merge-error"
# save up the cmdline with proper quoting/escaping
saved=
for arg in "$@"; do
    saved="${saved:+$saved }'$(quote_single "$arg")'"
done

# Note that we use `"$@"' to let each command-line parameter expand to a
# separate word. The quotes around `$@' are essential!
# We need TEMP as the `eval set --' would nuke the return value of getopt.
TEMP=$(getopt -a -o hs:d::D::npP:Zv -n "$progname" \
      --long help,src-dir:,sum-file:,dest-dir:,debug::,DEBUG::,no-action,package:,purge,verbose,three-way,debconf-ok,debconf-template:,state-dir: \
             -- "$@")

# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"

while true ; do
    case "$1" in
	-h|--help) usageversion;                        exit 0 ;;
	-n|--no-action) action='echo'; docmd='NO';      shift  ;;
	-v|--verbose) VERBOSE=1;                        shift  ;;
	-P|--package)
	    opt_package="$2";			       shift 2 ;;
	-s|--src-dir)
	    opt_source_dir="$2";                       shift 2 ;;
	--sum-file)
	    opt_old_mdsum_file="$2";		  shift 2 ;;
	--state-dir)
	    opt_state_dir="$2";                        shift 2 ;;
	--debconf-template)
	    override_template="$2";                    shift 2 ;;
	-D|-d|--debug|--DEBUG)
            # d has an optional argument. As we are in quoted mode,
            # an empty parameter will be generated if its optional
            # argument is not found.
	    case "$2" in
		"") setq DEBUG 1    "The Debug value"; shift 2 ;;
		*)  setq DEBUG "$2" "The Debug value"; shift 2 ;;
	    esac ;;
        -p|--purge) PURGE=YES;                         shift   ;;
       --three-way) THREEWAY=YES;                       shift   ;;
       --debconf-ok) DEBCONF_OK=YES;                    shift   ;;
       -Z) selinux='-Z';                                shift   ;;
	--)  shift ;                                   break   ;;
	*) echo >&2 "Internal error!" ; exit 1 ;;
    esac
done


######################################################################
########                                                     #########
########              Sanity checking                        #########
########                                                     #########
######################################################################
# Need to run as root, or else the
if test "$(id -u)" != 0; then
    if [ "$docmd" = "YES" ]; then
        echo "$progname: Need to be run as root." >&2
        echo "$progname: Setting up no action mode." >&2
        action='echo'; docmd='NO';
    fi
fi

if [ "X$PURGE" = "XYES" ]; then
    if [ $# != 1 ]; then
	echo >&2 "*** ERROR: Need exactly one argument when purging, got $#";
	echo >&2 ""
	usageversion;
	exit 2 ;
    fi
    temp_dest_file="$1";
    if [ -e "$temp_dest_file" ]; then
        setq dest_file "$(readlink -q -m $temp_dest_file)" "The Destination file";
    else
        setq dest_file "$temp_dest_file" "The Destination file";
    fi
else
    if [ $# != 2 ]; then
	echo >&2 "*** ERROR: Need exactly two arguments, got $#";
	echo >&2 ""
	usageversion;
	exit 2 ;
    fi
    temp_new_file="$1";
    temp_dest_file="$2";

    if [ ! -e "${temp_new_file}" ]; then
	echo >&2 "Error: The new file ${temp_new_file} does not exist!";
	exit 1;
    fi
    setq new_file  "$(readlink -q -m $temp_new_file)"  "The new file";
    if [ -e "$temp_dest_file" ]; then
        setq dest_file "$(readlink -q -m $temp_dest_file)" "The Destination file";
    else
        setq dest_file "$temp_dest_file" "The Destination file";
    fi
fi

# Follow dpkg-divert as though we are installed as part of $opt_package
divert_line=$(dpkg-divert --listpackage "$dest_file")
if [ -n "$divert_line" ]; then
   # name of the package or 'LOCAL' for a local diversion
   divert_package="$divert_line"

   if [ "$divert_package" != "$opt_package" ]; then
       dest_file=$(dpkg-divert --truename "$dest_file")
   fi
fi
safe_dest_file=$(echo "$dest_file" | perl -nle 'print "\Q$_\E\n"')


######################################################################
########                                                     #########
########              Set Default Values                     #########
########                                                     #########
######################################################################
# Load site defaults and over rides.
if [ -f /etc/ucf.conf ]; then
    . /etc/ucf.conf
fi

# Command line, env variable, config file, or default
if [ ! "x$opt_source_dir" = "x" ]; then
    setq source_dir "$opt_source_dir" "The Source directory"
elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then
    setq source_dir "$UCF_SOURCE_DIR" "The Source directory"
elif [ ! "x$conf_source_dir" = "x" ]; then
    setq source_dir "$conf_source_dir" "The Source directory"
else
    if [ "X$new_file" != "X" ]; then
	setq source_dir "$(dirname $new_file)" "The Source directory"
    else
	setq source_dir "/tmp" "The Source directory"
    fi

fi

if [ "X$PAGER" != "X" ] && which "$PAGER" >/dev/null 2>&1 ; then
    my_pager="$(which $PAGER)";
elif [ -s /usr/bin/pager ] &&
     [ "X$(readlink -e /usr/bin/pager || :)" != "X" ]; then
    my_pager=/usr/bin/pager
elif [ -x /usr/bin/sensible-pager ]; then
    my_pager=/usr/bin/sensible-pager
elif [ -x /bin/more ]; then
    my_pager=/bin/more
else
    my_pager=
fi


# Command line, env variable, config file, or default
if [ ! "x$opt_state_dir" = "x" ]; then
    setq statedir "$opt_state_dir" "The State directory"
elif [ ! "x$UCF_STATE_DIR" = "x" ]; then
    setq statedir "$UCF_STATE_DIR" "The State directory"
elif [ ! "x$conf_state_dir" = "x" ]; then
    setq statedir "$conf_state_dir" "The State directory"
else
    setq statedir '/var/lib/ucf'  "The State directory"
fi

# Command line, env variable, config file, or default
if [ ! "x$opt_force_conffold" = "x" ]; then
    setq force_conffold "$opt_force_conffold" "Keep the old file"
elif [ ! "x$UCF_FORCE_CONFFOLD" = "x" ]; then
    setq force_conffold "$UCF_FORCE_CONFFOLD" "Keep the old file"
elif [ ! "x$conf_force_conffold" = "x" ]; then
    setq force_conffold "$conf_force_conffold" "Keep the old file"
else
    force_conffold=''
fi

# Command line, env variable, config file, or default
if [ ! "x$opt_force_conffnew" = "x" ]; then
    setq force_conffnew "$opt_force_conffnew" "Replace the old file"
elif [ ! "x$UCF_FORCE_CONFFNEW" = "x" ]; then
    setq force_conffnew "$UCF_FORCE_CONFFNEW" "Replace the old file"
elif [ ! "x$conf_force_conffnew" = "x" ]; then
    setq force_conffnew "$conf_force_conffnew" "Replace the old file"
else
    force_conffnew=''
fi

# Command line, env variable, config file, or default
if [ ! "x$opt_force_conffmiss" = "x" ]; then
    setq force_conffmiss "$opt_force_conffmiss" "Replace any missing files"
elif [ ! "x$UCF_FORCE_CONFFMISS" = "x" ]; then
    setq force_conffmiss "$UCF_FORCE_CONFFMISS" "Replace any missing files"
elif [ ! "x$conf_force_conffmiss" = "x" ]; then
    setq force_conffmiss "$conf_force_conffmiss" "Replace any missing files"
else
    force_conffmiss=''
fi

if [ -n "$opt_old_mdsum_file" ]; then
    setq old_mdsum_file "$opt_old_mdsum_file" "The md5sum is found here"
elif [ ! "x$UCF_OLD_MDSUM_FILE" = "x" ]; then
    setq old_mdsum_file "$UCF_OLD_MDSUM_FILE" "The md5sum is found here"
elif [ ! "x$conf_old_mdsum_file" = "x" ]; then
    setq old_mdsum_file "$conf_old_mdsum_file" "Replace the old file"
elif [ ! "x${new_file}" = "x" ]; then
    old_mdsum_file="$source_dir/$(basename ${new_file}).md5sum";
else
    old_mdsum_file="";
fi


######################################################################
########                                                     #########
########               More Sanity checking                  #########
########                                                     #########
######################################################################
if [ "X$force_conffold" != "X" -a "X$force_conffnew" != "X" ]; then
    echo >&2 "Error: Only one of force_conffold and force_conffnew should";
    echo >&2 "       be set";
    exit 1;
fi

# VERBOSE of 0 is supposed to be the same as not setting VERBOSE
if [ "X$VERBOSE" = "X0" ]; then
    VERBOSE=''
fi


#
if [ -e "$statedir/hashfile" -a ! -w "$statedir/hashfile" ]; then
    echo >&2 "ucf: do not have write privilege to the state data"
    if [ "X$docmd" = "XYES" ]; then
	exit 1;
    fi
fi

if [ ! -d $statedir/cache ]; then
    $action mkdir -p $statedir/cache ;
fi

# test and see if this file exists in the database
if [ -e "$statedir/hashfile" ]; then
    if [ "X$VERBOSE" != "X" ]; then
	echo >&2 "The hash file exists"
	echo >&2 "grep -E" "[[:space:]]${safe_dest_file}$" "$statedir/hashfile"
	grep -E "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 || true
    fi
    lastsum=$(grep -E "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" | \
                   awk '{print $1;}' )
fi

if [ ! "x${new_file}" = "x" ]; then
    old_mdsum_dir="$source_dir/"$(basename "${new_file}")".md5sum.d";
else
    old_mdsum_dir="";
fi

cached_file="$(echo $dest_file | tr / :)"
######################################################################
########                                                     #########
########                  Debugging dump                     #########
########                                                     #########
######################################################################

if [ $DEBUG -gt 0 ]; then
    cat >&2 <<EOF
The new start file is      \`$new_file\'
The destination is         \`$dest_file\' (\`$safe_dest_file\')
The history is kept under  \'$source_dir\'
The file may be cached at \'$statedir/cache/$cached_file\'
EOF
    if [ -s "$dest_file" ]; then
	echo "The destination file exists, and has md5sum:"
	md5sum "$dest_file"
    else
	echo "The destination file does not exist."
    fi
    if [ "X$lastsum" != "X" ]; then
	echo "The old md5sum exists, and is:"
	echo "$lastsum"
    else
	echo "The old md5sum does not exist."
        if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then
            echo "However, there are historical md5sums around."
        fi
    fi
    if [ -e "$new_file" ]; then
	echo "The new file exists, and has md5sum:"
	md5sum "$new_file"
    else
	echo "The new file does not exist."
    fi
    if [ -d "$old_mdsum_dir" ]; then
	echo "The historical md5sum dir $old_mdsum_dir exists"
    elif [ -f "$old_mdsum_file" ]; then
	echo "The historical md5sum file $old_mdsum_file exists"
    else
	echo "Historical md5sums are not available"
    fi
fi

######################################################################
########                                                     #########
########        Short circuit if we are purging              #########
########                                                     #########
######################################################################

if [ "X$PURGE" = "XYES" ]; then
    if [ "X$VERBOSE" != "X" ]; then
	echo >&2 "Preparing to purge ${dest_file}"
    fi
    purge_md5sum;
    exit 0;
fi


# now we can restore $@
eval set -- "$saved"

######################################################################
########                                                     #########
########                  DebConf stuff                      #########
########                                                     #########
######################################################################

# Is debconf already running? Kinda tricky, because it will be after the
# confmodule is sourced, so only test before that.
if [ -z "$DEBCONF_ALREADY_RUNNING" ]; then
    if [ "$DEBIAN_HAS_FRONTEND" ]; then
	DEBCONF_ALREADY_RUNNING='YES'
    else
	DEBCONF_ALREADY_RUNNING='NO'
    fi
fi

export DEBCONF_ALREADY_RUNNING

if [ -z "$DEBCONF_OK" ]; then
    if [ "$DEBCONF_ALREADY_RUNNING" = 'YES' ]; then
	DEBCONF_OK='NO'
    else
	DEBCONF_OK='YES'
    fi
fi

# Time to start nagging the users who call ucf without debconf-ok
if [ "$DEBCONF_ALREADY_RUNNING"  = 'YES' ] && [ "$DEBCONF_OK" = NO ]; then
	# Commented out for now, uncomment after a while to begin nagging
	# maintainers to fix their scripts.
	cat \
<<END
*** WARNING: ucf was run from a maintainer script that uses debconf, but
             the script did not pass --debconf-ok to ucf. The maintainer
             script should be fixed to not stop debconf before calling ucf,
             and pass it this parameter. For now, ucf will revert to using
             old-style, non-debconf prompting. Ugh!

             Please inform the package maintainer about this problem.
END
fi

# Start up debconf or at least get the db_* commands available
if [ -e /usr/share/debconf/confmodule ]; then
    if test "$(id -u)" = 0; then
	. /usr/share/debconf/confmodule

	# Load our templates, just in case our template has
	# not been loaded or the Debconf DB lost or corrupted
	# since then, but only if it is OK to use debconf.
        if [ "$DEBCONF_OK" = 'YES' ]; then
            db_x_loadtemplatefile "$(dpkg-query --control-path ucf templates)" ucf
        fi
    else
        echo >&2 "$progname: Not loading confmodule, since we are not running as root."
    fi
    # Only set the title if debconf was not already running.
    # If it was running, then we do not want to clobber the
    # title used for configuring the whole package with debconf.
    if [ "$DEBCONF_ALREADY_RUNNING" = 'NO' ]; then
	if ! db_settitle ucf/title 2>/dev/null; then
      	    # Older debconf that does not support that command.
            if test "$(id -u)" = 0; then
		db_title "Modified configuration file"
            else
                echo >&2 "$progname: Not changing title, since we are not running as root."
            fi
	fi
    fi
fi



######################################################################
########                                                     #########
########                Start Processing                     #########
########                                                     #########
######################################################################

orig_new_file="$new_file"	# Since sometimes we replace the newfile below
newsum=$(md5sum "$new_file" | awk '{print $1}')

# Determine the action for the current file. The default is to ask,
# with non-replacement being the norm.
# If the config dir exists
#   if file in always overwrite, state +=1;
#   fi
#   if file in never overwrite, state +=2;
#   fi
#   if file in ask; state +=4
#   fi
#   if state == 0; then state = default
#   if state >= 4; ask
#   if state == 3;  ask
#   if state == 2; exit
#   if state == 1; then replace_conffile; exit

######################################################################
########                                                     #########
########               Do the replacement                    #########
########                                                     #########
######################################################################
# Step 1: If we have no record of this file, and dest file
#         does, We need to determine how to initialize the
#         ${old_mdsum_prefix}.old file..
if [ -e "$dest_file" ]; then
    destsum=$(md5sum "$dest_file"  | awk '{print $1}');
    if [ "X$lastsum" = "X" ]; then
#      a: If we have a directory containing historical md5sums of this
#         file in question, we should look and see if the currently
#         installed file matches any of the old md5sums; in which case
#         it can be silently replaced.
	if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then
	    if [ -d "$old_mdsum_dir"  ]; then
		for file in ${old_mdsum_dir}/*; do
		    oldsum="$(awk '{print $1}' $file)";
		    if [ "$oldsum" = "$destsum"  ]; then
			if [ "X$force_conffold" = "X" ]; then
#                           Bingo! replace, set the md5sum, and we are done
			    if [ "X$VERBOSE" != "X" ]; then
				echo >&2 \
				    "Replacing config file $dest_file with new version"
			    fi
			    replace_conf_file;
			    exit 0;
			else
			    replace_md5sum;
			    cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
			    exit 0;
			fi
		    fi
		done
	    elif [ -f "$old_mdsum_file" ]; then
		oldsum=$(grep -E "^${destsum}" "$old_mdsum_file" || true)
		if [ "X$oldsum" != "X" ]; then
#                    Bingo
		    if [ "X$force_conffold" = "X" ]; then
			if [ "X$VERBOSE" != "X" ]; then
			    echo >&2 \
				"Replacing config file $dest_file with new version"
			fi
			replace_conf_file;
			exit 0;
		    else
			replace_md5sum;
			cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
			exit 0;
		    fi
		fi
	    fi
#	   Well, nothing matched. We now check to see if the
#	   maintainer has an opinion on how to set the ``md5sum of the
#	   previously installed version'', since we have no way of
#	   determining that automatically. Please note that unless
#	   there are limited number of previously released packages
#	   (like just one), the maintainer is also making a guess at
#	   this point by supplying a historical md5sum default file.
	    if [ "X$VERBOSE" != "X" ]; then
		echo >&2 "Historical md5sums did not match."
	    fi
	    if [ -d "$old_mdsum_dir"  ]; then
		if [ -e "${old_mdsum_dir}/default" ]; then
		    if [ "X$VERBOSE" != "X" ]; then
			echo >&2 "However, a default entry exists, using it."
		    fi
		    lastsum="$(awk '{print $1;}' ${old_mdsum_dir}/default)"
		    do_replace_md5sum=1;
		fi
	    elif [ -f "$old_mdsum_file" ]; then
		oldsum=$(grep -E "[[:space:]]default$" "$old_mdsum_file" | \
		    awk '{print $1;}')
		if [ "X$oldsum" != "X" ]; then
#                    Bingo
		    lastsum=$oldsum;
		    do_replace_md5sum=1;
		fi
	    fi
	fi

#       At this point, we are almost certain that either the
#       historical record of md5sums is not complete, or the user has
#       changed the configuration file. Rather than guessing and
#       chosing one of the historical md5sums, we fall through to the
#       solution used if there had been no historical md5sums
#       directory/file.
	if [ "X$lastsum" = "X" ]; then
#      b: We do not have a historical list of md5sums, or none
#         matched, and we still need to initialize the
#         ${old_mdsum_prefix}.old file. We can't determine whther or
#         not they made any changes, so we err on the side of caution
#         and ask'
	    if [ "X$VERBOSE" != "X" ]; then
		echo >&2 "No match found, we shall ask."
	    fi
	    lastsum='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
	fi # the old md5sum file does not exist, and the historical
	   # record failed
    fi # the old md5sum file does not exist (bug))
else  # "$dest_file" does not exist
# Step 2: If destfile does not exist, create it, set the file
#         "${old_mdsum_prefix}.old" to the md5sum of the new file, and we
#         are done
    if [ "X$lastsum" = "X" ]; then
        # Ok, so there is no indication that the package was ever
        # installed on this machine.
	echo >&2 ""
	echo >&2 "Creating config file $dest_file with new version"
	replace_conf_file;
	exit 0;
    elif [ "$lastsum" = "$newsum" ]; then
        # OK, new version of the file is the same as the last version
        # we saw. Since the user apparently has deleted the file,
        # nothing needs be done, unless we have been told differently
        if [ "X$force_conffmiss" != "X" ]; then
            echo >&2 ""
	    echo >&2 "Recreating deleted config file $dest_file with new version, as asked"
	    replace_conf_file;
	    exit 0;
        else
            echo >&2 "Not replacing deleted config file $dest_file";
        fi

    else
        # OK. New upstream version.
        if [ "X$force_conffmiss" != "X" ]; then
            # User has said to replace missing files, so we do so, no
            # questions asked.
            echo >&2 ""
	    echo >&2 "Recreating deleted config file $dest_file with new version, as asked"
	    replace_conf_file;
	    exit 0;
        else
            # Even though the user has deleted this file, they should
            # be asked now, unless specified otherwise.
            if [ "X$force_conffold" = "X" ]; then
                destsum='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
            else
                exit 0;
	    fi
        fi
    fi
fi

# Here, the destfile exists.

# step 3: If the old md5sum and the md5sum of the new file
#         do not match, we need to take action.
if [ "$lastsum" = "$newsum" ]; then
    if [ "X$VERBOSE" != "X" ]; then
	echo >&2 "md5sums match, nothing needs be done."
    fi
    if [ "X$do_replace_md5sum" != "X" ]; then
	replace_md5sum;
    fi
    exit 0;			# Hah. Match. We are done.
fi
#      a: If the md5sum of the dest file is the same as lastsum, replace the
#         destfile, saying we are replacing old config files
if [ "$destsum" = "$lastsum" ]; then
    if [ "X$force_conffold" = "X" ]; then
	echo >&2 "Replacing config file $dest_file with new version"
	replace_conf_file;
	exit 0;
    else
	replace_md5sum;
	cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
	exit 0;
    fi
else
#      b: If the md5sum of the dest file differs from lastsum, we need to ask
#         the user what action to take.
    if [ "X$force_conffnew" != "X" ]; then
	echo >&2 "Replacing config file $dest_file with new version"
	echo >&2 "since you asked for it."
        if [ "$destsum" = "$newsum" ]; then
            echo >&2 "The new and the old files are identical, AFAICS"
        else
            echo >&2 "The new and the old files are different"
        fi
	replace_conf_file;
	exit 0;
    fi
    if [ "X$force_conffold" != "X" ]; then
	replace_md5sum;
	cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
	exit 0;
    fi
#      c: If the destination file is the same as the new maintianer provided one,
#         we need do nothing.
    if [ "$newsum" = "$destsum" ]; then
	if [ "X$VERBOSE" != "X" ]; then
	    echo >&2 "md5sums of the file in place matches, nothing needs be done."
	fi
	replace_md5sum;
	exit 0;			# Hah. Match. We are done.
    fi


    done='NO';
    while [ "X$done" = "XNO" ]; do
	if [ "$DEBCONF_OK" = "YES" ] && [ "$DEBIAN_HAS_FRONTEND" ]; then
		# Use debconf to prompt.
		if [ -e "$statedir/cache/$cached_file" ] && [ "X$THREEWAY" != "X" ]; then
			templ=ucf/changeprompt_threeway
		else
			templ=ucf/changeprompt
		fi
		if [ "X$override_template" != "X" ]; then
			choices="$(db_metaget $templ Choices-C)"
			choices2="$(db_metaget $override_template Choices-C)"
			if [ "$choices" = "$choices2" ]; then
				templ=$override_template
			fi
		fi
		db_fset "$templ" seen false
		db_reset "$templ"
		db_subst "$templ" FILE "$dest_file"
		db_subst "$templ" NEW  "$new_file"
		db_subst "$templ" BASENAME "$(basename $dest_file)"
		db_input critical "$templ" || true
		if ! db_go; then
			# The current ucf interface does not provide a way for it
			# to tell its caller that the user chose to back up.
			# However, we could get here, if the caller turned on
			# debconf's backup capb. The best thing to do seems to be
			# to ignore requests to back up.
			continue
		fi
		db_get "$templ"
		ANSWER="$RET"
	else
            echo >&2 "Need debconf to interact"
            exit 2
########################################################################################
# 		# Prompt without using debconf.                                        #
# 		cat >&2 <<EOPRMT                                                       #
# Configuration file \`$dest_file'                                                     #
#  ==> File on system created by you or by a script.                                   #
#  ==> File also in package provided by package maintainer.                            #
#    What would you like to do about it ?  Your options are:                           #
#     Y or I  : install the package maintainer's version                               #
#     N or O  : keep your currently-installed version                                  #
#       D     : show the differences between the versions                              #
#       S     : show the side-by-side differences between the versions                 #
# EOPRMT                                                                               #
# 		if [ "X$THREEWAY" != "X" -a -e "$statedir/cache/$cached_file" ]; then  #
# 			cat >&2 <<EOTD                                                 #
#     3 or T  : show a three way difference between current, older,                    #
#               and new versions of the file                                           #
#       M     : Do a 3 way merge between current, older,                               #
#               and new versions of the file [Very Experimental]                       #
# EOTD                                                                                 #
# 		fi                                                                     #
# 		cat >&2 <<EOPEND                                                       #
#       Z     : start a new shell to examine the situation                             #
#  The default action is to keep your current version.                                 #
# EOPEND                                                                               #
# 		if [ "X$THREEWAY" != "X" -a -e "$statedir/cache/$cached_file" ]; then  #
# 			echo -n >&2 "*** " $(basename "$dest_file") \                  #
# 			    " (Y/I/N/O/D/3/T/M/Z) [default=N] ?"                       #
# 		else                                                                   #
# 			echo -n >&2 "*** " $(basename "$dest_file") \                  #
# 			    " (Y/I/N/O/D/Z) [default=N] ?"                             #
# 		fi                                                                     #
#   		read -e ANSWER </dev/tty                                               #
########################################################################################
	fi

	case "$ANSWER" in
	    install_new|y|Y|I|i)
		echo >&2 "Replacing config file $dest_file with new version"
		RETAIN_OLD=YES
		replace_conf_file;
		exit 0;
		;;
	    diff|D|d)
		DIFF="$(run_diff diff -uBbwt "$dest_file" "$new_file")"
		show_diff "$DIFF"
		;;
	    sdiff|S|s)
		DIFF="$(run_diff sdiff -BbW "$dest_file" "$new_file")"
		show_diff "$DIFF"
		;;
	    diff_threeway|3|t|T)
		if [ -e "$statedir/cache/$cached_file" \
		    -a "X$THREEWAY" != "X" ]; then
                    if [ -e "$dest_file" ]; then
		        DIFF="$(diff3 -L Current -L Older -L New -A \
			    "$dest_file" "$statedir/cache/$cached_file" \
			    "$new_file")"  || true
                    else
                        DIFF="$(diff3 -L Current -L Older -L New -A \
			    /dev/null "$statedir/cache/$cached_file" \
			    "$new_file")"  || true
                    fi
		    show_diff "$DIFF"
		else
		    DIFF="$(run_diff diff -uBbwt "$dest_file" "$new_file")"
		    show_diff "$DIFF"
		fi
		;;
	    merge_threeway|M|m)
		echo >&2 "Merging changes into the new version"
		if [ -e "$statedir/cache/$cached_file" \
		    -a "X$THREEWAY" != "X" ]; then
		    ret=0
		    diff3 -L Current -L Older -L New -m \
			"$dest_file" "$statedir/cache/$cached_file" \
			"$new_file" > "$dest_file.${NEW_SUFFIX}" || ret=$?
                    case "$ret" in
                        0)
		            new_file="$dest_file.${NEW_SUFFIX}"
		            RETAIN_OLD=YES
		            replace_conf_file
			    rm -f "$dest_file.${NEW_SUFFIX}" # don't need this around no mo'
			    exit 0
                            ;;
                        *)
			    mv "$dest_file.${NEW_SUFFIX}" "$dest_file.${ERR_SUFFIX}"
			    db_subst ucf/conflicts_found dest_file "$dest_file"
			    db_subst ucf/conflicts_found ERR_SUFFIX "${ERR_SUFFIX}"
			    db_input critical ucf/conflicts_found || true
			    db_go || true
			    ;;
                    esac
		else
		    replace_conf_file
		    rm -f "$dest_file.${NEW_SUFFIX}" # don't need this around no mo'
		    exit 0
		fi
		;;
	    shell|Z|z)
                # We explicitly connect STDIN and STDOUT to the
                # script's controlling terminal, so even if STDIN is
                # fed by a pipe, as is the case when run from
                # /usr/bin/debconf, the shell should be fully
                # functional. However, the test for a controlling
                # terminal uses /usr/bin/tty, which consults only
                # STDIN. As far as I can tell, when run from debconf,
                # ucf will _never_ use the current terminal. If the
                # goal is to check for access to a terminal, the test
                # should be for foreground process group membership,
                # not a terminal connected to STDIN (tty -s), and not
                # a terminal it doesn't necessarily own (tty -s
                # </dev/tty). The easiest way do this from a shell is
                # probably with /bin/ps.
                if ps -o stat= --ppid $$ | grep -q '+'; then
                    export UCF_CONFFILE_OLD="$dest_file"
                    export UCF_CONFFILE_NEW="$new_file"
		    bash >/dev/tty </dev/tty || true
                elif [ -n "$DISPLAY" ]; then
                    x-terminal-emulator || true
                else
                    # Don't know what to do
                    echo >&2 "No terminal, and no DISPLAY set, can't fork shell."
                    sleep 3;
                fi
		;;
	    keep_current|n|N|o|O|'')
		replace_md5sum;

		cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
		exit 0;
		;;
	    *)
		if [ "$DEBCONF_OK" = "YES" ]; then
			echo "Error: unknown response from debconf:'$RET'" >&2
			exit 1
		else
			echo
			echo "Please answer with one of the single letters listed." >&2
			echo
		fi
	esac
    done
fi

db_stop

exit 0;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #!/usr/bin/perl
#                              -*- Mode: Cperl -*-
# ucfq ---
# Author           : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com )
# Created On       : Wed Apr 12 14:51:16 2006
# Created On Node  : glaurung.internal.golden-gryphon.com
# Last Modified By : Manoj Srivastava
# Last Modified On : Fri Apr 14 19:30:45 2006
# Last Machine Used: glaurung.internal.golden-gryphon.com
# Update Count     : 81
# Status           : Unknown, Use with caution!
# HISTORY          :
# Description      :
#
# arch-tag: 1390e09f-ee31-4d7f-a968-bd539ea061a0
#
=head1 NAME

ucfq - query ucf registry and hashfile about configuration file details.

=cut

use strict;


package ucf;

use strict;
use Getopt::Long;

# set the version and revision
($main::MYNAME     = $main::0) =~ s|.*/||;
$main::Author      = "Manoj Srivastava";
$main::AuthorMail  = "srivasta\@debian.org";

=head1 SYNOPSIS

 usage: ucfq [options] (file|package)[file|package  ...]

=cut


{  # scope for ultra-private meta-object for class attributes

  my %Ucf =
    (
     Optdesc  =>
     {
      'help|h'         => sub {print ucf->Usage();     exit 0;},
      'with-colons|w!' => sub {$::ConfOpts{"Colons"}= "$_[1]";},
      'state-dir=s'    => sub {$::ConfOpts{"StateDir"}= "$_[1]";},
      'debug|d'        => sub {$::ConfOpts{"DEBUG"}+= "$_[1]";},
      'verbose|v'      => sub {$::ConfOpts{"VERBOSE"}+= "$_[1]";}
     },
     Usage => qq(Usage: $main::MYNAME [options]
Author: $main::Author <$main::AuthorMail>
  where options are:
 --help                This message.
 --debug               Turn on debugging mode.
 --verbose             Make the script more verbose.
 --with-colons         A compact, machine readable version of the output.
 --state-dir </path/>  Set the state directory to /path/ instead of the
                       default /var/lib/ucf.

),
     Defaults =>
     {
      "Colons"   => 0,
      "DEBUG"    => 0,
      "VERBOSE"  => 0,
      "StateDir" => '/var/lib/ucf'
     }
    );
  # tri-natured: function, class method, or object method
  sub _classobj {
    my $obclass = shift || __PACKAGE__;
    my $class   = ref($obclass) || $obclass;
    no strict "refs";   # to convert sym ref to real one
    return \%$class;
  }

  for my $datum (keys %Ucf ) {
    no strict "refs";
    *$datum = sub {
      use strict "refs";
      my ($self, $newvalue) = @_;
      $Ucf{$datum} = $newvalue if @_ > 1;
      return $Ucf{$datum};
    }
  }
}

=head1 OPTIONS

=over 3

=item B<--help> B<h> Print out a usage message.

=item B<--debug> B<-d> Turn on debugging mode.

=item B<--verbose> B<-v> Make the script more verbose..

=item B<--with-colons> B<-w>

=over 2

Normally, the script presents the information in a human readable
tabular format, but that may be harder for a machine to parse. With
this option, the output is a compact, colon separated line, with no
dividers, headers, or footer.

=back

=item B<--state-dr> dir

=over 2

Set the state directory to C</path/to/dir> instead of the default
C</var/lib/ucf>.  Used mostly for testing.

=back

=back

=cut


=head1 DESCRIPTION


This script takes a set of arguments, each of which is a package or a
path to a configuration file, and outputs the associated package, if
any, if the file exists on disk, and whether it has been modfied by te
user.  The output is either a human readable tabular form, or a
compact colon-separated machine friendly format.

This script can potentially be used in package C<postinst> scripts
during purge to query the system for configuration files that may
still exist on the system, and whether these files have been locally
modified by the user -- assuming that the package registered all the
configuration files with B<ucf> using C<ucfr>.

=cut




=head1 INTERNALS

=head2 Class Methods

All class methods mediate access to class variables.  All class
methods can be invoked with zero or one parameters. When invoked with
the optional parameter, the class method sets the value of the
underlying class data.  In either case, the value of the underlying
variable is returned.

=cut

=head1 Class ucf

This is a combination view and controller class that mediates between
the user and the internal model classes.


=head2 new

This is the constructor for the class. It takes a number of optional
parameters. If the parameter B<Colons> is present, then the output
will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on
additional diagnostics from the script.

=cut

sub new {
  my $this = shift;
  my %params = @_;
  my $class = ref($this) || $this;
  my $self = {};

  bless $self => $class;

  # validate and sanitize the settings
  $self->validate(%params);

  return $self;
}

=head2 validate

This routine is responsible for ensuring that the parameters passed in
(presumably from the command line) are given preference.

=cut

sub validate{
  my $this     = shift;
  my %params   = @_;
  my $defaults = $this->Defaults();


  # Make sure runtime options override what we get from the config file
  for my $option (keys %params) {
    $this->{Con_Ref}->{"$option"} = $params{"$option"};
  }

  # Ensure that if default parameters have not been set on the comman
  # line on in the configuration file, if any, we use the built in
  # defaults.
  for my $default (keys %$defaults) {
    if (! defined $this->{Con_Ref}->{"$default"}) {
      $this->{Con_Ref}->{"$default"} = $defaults->{"$default"};
    }
  }
}

=head2 get_config_ref

This routine returns a reference to the configuration hash

=cut

sub get_config_ref {

  my $this     = shift;
  return $this->{Con_Ref};
}

=head2 dump_config

This routine returns a C<Data::Dumper> for debugging purposes

=cut

sub dump_config {
  my $this     = shift;
  for (keys %{$this->{Con_Ref}}) {
    print  "$_ = [${$this->{Con_Ref}}{$_}]\n"
  }
}

=head2 process

This routine is the work horse routine -- it parses the command line
arguments, and queries the on disk databases, determines of the files
exist, and have been modified.

=cut


sub process {
  my $this      = shift;

# Step 1: Process all arguments in sequence.
# Step 2: determine if the arument given is a package name (no / in
#         arg)

  %{$this->{packages}}    = map { +"$_" => 1} grep {! m,/,} @ARGV;
  %{$this->{configs}}     = map { +"$_" => 1} grep {  m,/,} @ARGV;
  $this->{pkg_list}       = object_list->new;
  $this->{file_list}      = object_list->new;
  $this->{registry_proxy} =
    registry->new("StateDir" => $this->{Con_Ref}->{StateDir});
  $this->{hashfile_proxy} =
    hashfile->new("StateDir" => $this->{Con_Ref}->{StateDir});

  for (keys %{$this->{packages}} ) {
    my $package = pkg->new('Name' => "$_");
    $this->{pkg_list}->element($_, $package);
  }
  for (keys %{$this->{configs}}) {
    warn "Need a fully qualified path name for config file \"$_\"\n"
      unless m,^/,;
    # Don't die for etch
    exit 0 unless m,^/,;

    my $file = conffile->new('Name' => "$_");
    $this->{file_list}->element($_, $file);
  }
# Step 3: If so, gather all files associated with the package
  for my $package ($this->{pkg_list}->list) {
    my $pkg_files = $this->{registry_proxy}->list_files($package);
    for my $file (@$pkg_files) {
      if (! defined $this->{file_list}->element($file)) {
        my $ret = conffile->new('Name' => "$file");
        $this->{file_list}->element($file, $ret);
      }
      $this->{file_list}->element($file)->conffile_package($package);
    }
  }
# Step 4: for all configuration files, determine package (unless
#         already determined), if any
# Step 5: For each configuration file, check if it exists
# Step 6: For each existing file, see if it has been changed

  for my $file ($this->{file_list}->list) {
    $this->{file_list}->element($file)->conffile_hash($file, $this->{hashfile_proxy}->hash($file));
    if (! defined $this->{file_list}->element($file)->conffile_package) {
      $this->{file_list}->element($file)->conffile_package($this->{registry_proxy}->find_pkg($file));
    }
  }
}

=head2 report

This routine generates a nicely formatted report based on the
information gathered during the processing. There are two kinds of
reports, the first being a user friendly tabular form, the second
(turned on by the C<-w> option) a easily parseable colon separated
report.

=cut


our ($out_pkg, $out_file, $there, $mod);

format STDOUT_TOP =
Configuration file                            Package             Exists Changed
.

format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<< @|||   @|||
$out_file,                                    $out_pkg,           $there,$mod
.

sub report {
  my $this      = shift;
  for my $file (sort $this->{file_list}->list) {
    ($out_pkg, $out_file, $there, $mod) =
      $this->{file_list}->element($file)->conffile_report;
    if ($this->{Con_Ref}->{Colons}) {
      print "$out_file:$out_pkg:$there:$mod\n";
    }
    else {
      write;
    }
  }
}

=head1 Class registry

This moel class encapsulates the package-configuration file
associations registry.  It parses the data in the registry, and
provides methods to query the registry based either on package name,
or the full path of the configuration file.

=cut

package registry;
use strict;

=head2 new

This is the constructor for the class.  It takes a required parameter
B<StateDir>, and based on that, proceeds toparse the registry and
populate internal data structures.

=cut

sub new {
  my $this = shift;
  my %params = @_;
  my $class = ref($this) || $this;
  my $self = {};

  die "Missing required parameter StateDir"
    unless $params{StateDir};

  if (-e "$params{StateDir}/registry") {
    if (! -r "$params{StateDir}/registry") {
      die "Can't read registry file $params{StateDir}/registry:$!";
    }
    open (REG, "$params{StateDir}/registry") ||
      die "Can't read registry file $params{StateDir}/registry:$!";
    while (<REG>) {
      chomp;
      my ($pkg, $file) = m/^(\S+)\s+(\S+)$/;
      $self->{Packages}->{$file} = $pkg;
      if (exists $self->{List}->{$pkg}) {
        push @{$self->{List}->{$pkg}}, $file;
      }
      else {
        $self->{List}->{$pkg} = [ $file ];
      }
    }
  }

  bless $self => $class;

  return $self;
}

=head2 list_files

This routine queries the registry and lists all configuration files
associated with the given package.  Takes the package name as a
required parameter.

=cut

sub list_files {
  my $this      = shift;
  my $pkg       = shift;

  if (exists $this->{List}->{$pkg}) {
    return [ @{$this->{List}->{$pkg}} ];
  }
  else {
    return [];
  }
}


=head2 find_pkg

This routine queries the registry for the package associated with the
given file.  Takes the path of the configuration file as a required
parameter.

=cut

sub find_pkg {
  my $this      = shift;
  my $file      = shift;

  if (exists $this->{Packages}->{$file}) {
    return $this->{Packages}->{$file};
  }
  else {
    return undef;
  }
}

=head1 Class hashfile

This moel class encapsulates the configuration file hash database.  It
parses the data in the database, and provides methods to query the
hash of the configuration file.

=cut

package hashfile;
use strict;

sub new {
  my $this = shift;
  my %params = @_;
  my $class = ref($this) || $this;
  my $self = {};

  die "Missing required parameter StateDir"
    unless $params{StateDir};


  if (-e "$params{StateDir}/hashfile") {
    if (! -r "$params{StateDir}/hashfile") {
      die "Can't read registry file $params{StateDir}/hashfile:$!";
    }
    open (HASH, "$params{StateDir}/hashfile") ||
      die "Can't read registry file $params{StateDir}/hashfile:$!";
    while (<HASH>) {
      chomp;
      my ($hash, $file) = m/^(\S+)\s+(\S+)$/;
      $self->{$file} = $hash
    }
  }

  bless $self => $class;

  return $self;
}


=head2 hash

This routine queries the database for the hash associated with the
developers version of the given file.  Takes the path of the
configuration file as a required parameter.

=cut


sub hash {
  my $this      = shift;
  my $file      = shift;
  my $value     = shift;

  if ($value) {
    $this->{$file} = $value;
  }
  return $this->{$file};
}

=head1 class conffile

This is the encapsulation of a configuration file metadata.

=cut



package conffile;
use strict;
use Cwd qw{abs_path};


=head2 new

This is the constructor for the class. It takes a number of optional
parameters. If the parameter B<Colons> is present, then the output
will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on
additional diagnostics from the script.

=cut

sub new {
  my $this = shift;
  my %params = @_;
  my $class = ref($this) || $this;
  my $self = {};

  die "Missing required parameter Name"
    unless $params{Name};
  $self->{Name}    = $params{Name};
  $self->{Package} = $params{Package}
    if $params{Package};
  $self->{Exists}  = 'Yes' if -e $self->{Name};
  if ($self->{Exists}) {
    $self->{Name}  = abs_path( $self->{Name});
  }
  bless $self => $class;

  return $self;
}


=head2 conffile_package

This routine is the accessor method of the internal attribute that
holds package name associated with the file.  If an optional C<value>
is present, updates the value of the attribute.

=cut

sub conffile_package {
  my $this      = shift;
  my $value     = shift;

  if ($value ) {
    $this->{Package} = $value;
  }
  if (exists $this->{Package}) {
    return $this->{Package};
  }
  else {
    return undef;
  }
}

=head2 conffile_exists

This routine is the accessor method of the internal attribute that
holds the information whether the file exists on disk or not.

=cut

sub conffile_exists {
  my $this      = shift;
  my $name      = shift;
  my $value     = shift;

  die "Missing required parameter Name"
    unless $name;
  if (exists $this->{Exists}) {
    return $this->{Exists};
  }
  else {
    return undef;
  }
}

=head2 conffile_modified

This routine is the accessor method of the internal attribute that
holds the information whether the file exists on disk or not.  If an
optional C<value> is present, updates the value of the attribute.

=cut

sub conffile_modified {
  my $this      = shift;
  my $name      = shift;
  my $value     = shift;

  die "Missing required parameter Name"
    unless $name;
  if ($value ) {
    $this->{Modified} = $value;
  }
  if (exists $this->{Modified}) {
    return $this->{Modified};
  }
  else {
    return undef;
  }
}

=head2 conffile_hash

This routine is the accessor method of the internal attribute that
holds the hash for the developers version of the file.  If an optional
C<value> is present, updates the value of the attribute.  It also
notes whether or not the file is modified from the developers version.

=cut

sub conffile_hash {
  my $this      = shift;
  my $name      = shift;
  my $value     = shift;

  die "Missing required parameter Name"
    unless $name;
  if ($value ) {
    $this->{Hash} = $value;
    if (-e "$name") {
      if (-x "/usr/bin/md5sum") {
        open (NEWHASH, "/usr/bin/md5sum $name |") ||
          die "Could not run md5sum: $!";
        while (<NEWHASH>) {
          chomp;
          my ($hash, $dummy) = m/^(\S+)\s+(\S+)$/;
          if ("$hash" ne "$value") {
            $this->{Modified} = 'Yes';
          }
          else {
            $this->{Modified} = 'No';
          }
        }
        close NEWHASH;
      }
      else {
        die "Could not find /usr/bin/md5sum .\n";
      }
    }
  }
  if (exists $this->{Hash}) {
    return $this->{Hash};
  }
  else {
    return undef;
  }
}

sub conffile_report {
  my $this      = shift;
  return $this->{Package} ? $this->{Package} : "",
    $this->{Name}, $this->{Exists} ? $this->{Exists} : "",
      $this->{Modified}? $this->{Modified} : "";
}


=head1 CLASS PKG

This is an encapsulation of package metadata.  Packages may be
associated with configuration files.

=cut


package pkg;
use strict;


=head2 new

This is the constructor for the class. It takes a number of optional
parameters. If the parameter B<Colons> is present, then the output
will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on
additional diagnostics from the script.

=cut

sub new {
  my $this = shift;
  my %params = @_;
  my $class = ref($this) || $this;
  my $self = {};

  die "Missing required parameter Name"
    unless $params{Name};
  $self->{Name} = $params{Name};

  bless $self => $class;

  return $self;
}

sub list_files {
  my $this   = shift;
  return [];
}

=head1 CLASS object_list

This is a clas which holds lists of object names, either packages or
configuration file object names.  It provides methods to add, access,
and remove objects, as well as an option to list all elements in the
list.

=cut

package object_list;
use strict;



=head2 new

This is the constructor for the class. It takes no arguments.

=cut

sub new {
  my $this = shift;
  my %params = @_;
  my $class = ref($this) || $this;
  my $self = {};

  $self->{"List"} = ();

  bless $self => $class;

  return $self;
}

=head2 element

This is an accessor method for elements of the list. If an optional
value argument exists, it creates or updates the element associtated
with the vaslue. Takes in a required name, which is used as a kay, and
an optional value argument. The value is returned.

=cut

sub element {
  my $this      = shift;
  my $name      = shift;
  my $value     = shift;

  die "Missing required parameter Name"
    unless $name;
  if ($value) {
    $this->{"List"}->{$name} =  $value;
  }
  if (exists $this->{"List"}->{$name}) {
    return $this->{"List"}->{$name};
  }
  else {
    return undef;
  }
}


=head2 remove

Removes elements from the list.  Take in an required name, which is
used as the key for the element to delete.

=cut

sub remove {
  my $this      = shift;
  my $name      = shift;
  die "Missing required parameter Name"
    unless $name;
  delete $this->{"List"}->{$name}
    if (exists $this->{"List"}->{$name} );
}

=head2 list

This routine lists all the elements in the list.  It does not take any
options.

=cut

sub list {
  my $this      = shift;

  return keys %{$this->{"List"}};
}

package main;
use Getopt::Long;

sub main {
  my $optdesc = ucf->Optdesc();
  my $parser  = new Getopt::Long::Parser;
  $parser->configure("bundling");
  $parser->getoptions (%$optdesc);
  my $query = ucf->new(%::ConfOpts);
  $query->process;
  $query->report;
}

&main;

exit 0;

=head1 CAVEATS

This is very inchoate, at the moment, and needs testing.

=cut

=head1 BUGS

None Known so far.

=cut

=head1 AUTHOR

Manoj Srivastava <srivasta\@debian.org>

=head1 COPYRIGHT AND LICENSE

This script is a part of the Ucf package, and is

Copyright (c) 2006 Manoj Srivastava <srivasta\@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 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.

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

=cut

1;

__END__
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         #!/bin/sh
#                               -*- Mode: Sh -*-
# ucfr ---
# Author           : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com )
# Created On       : Tue Apr 11 11:09:15 2006
# Created On Node  : glaurung.internal.golden-gryphon.com
# Last Modified By : Manoj Srivastava
# Last Modified On : Tue Apr 11 13:50:58 2006
# Last Machine Used: glaurung.internal.golden-gryphon.com
# Update Count     : 43
# Status           : Unknown, Use with caution!
# HISTORY          :
# Description      :
#
# Register a configuration file as belonging to a package
#
# arch-tag: 6e1d33fe-a930-41ce-8d0f-c87f87b19918
#

# make sure we exit on error
set -e

# set the version and revision
progname=$(basename "$0")
pversion='Revision 3.00'
######################################################################
########                                                     #########
########              Utility functions                      #########
########                                                     #########
######################################################################
setq() {
    # Variable Value Doc_string
    if [ "x$2" = "x" ]; then
	echo >&2 "$progname: Unable to determine $3"
	exit 1;
    else
	if [ "x$VERBOSE" != "x" ]; then
	    echo >&2 "$progname: $3 is $2";
	fi
	eval "$1=\"\$2\"";
    fi
}

withecho () {
        echo "$@" >&2
        "$@"
}


purge_from_registry () {
    if [ ! -e "$statedir/registry" ]; then
        echo >&2 "$progname: Internal error: $statedir/registry does not exist";
        exit 6;
    fi

    if [ "$count" -eq 0 ]; then
        if [ "X$VERBOSE" != "X" ]; then
            echo >&2 "$progname: Association already purged. No changes.";
        fi
        exit 0;
    fi
    old_pkg=$(grep -E "[[:space:]]${real_conf_file_re}$" "$statedir/registry" | \
        awk '{print $1;}' );
    if [ "$pkg" != "$old_pkg"  ]; then
        echo >&2 "ucfr: Association belongs to $old_pkg, not $pkg";
        if [ "X$FORCE" = "X" ]; then
            echo >&2 "ucfr: Aborting";
            exit 5;
        fi
    fi

    # OK, so we have something to purge.
    for i in $(/usr/bin/seq 6 -1 0); do
	if [ -e "${statedir}/registry.${i}" ]; then
	    if [ "X$docmd" = "XYES" ]; then
		cp -f "${statedir}/registry.${i}"  "${statedir}/registry.$(($i + 1))"
	    else
		echo cp -f "${statedir}/registry.${i}" "${statedir}/registry.$(($i + 1))"
	    fi
	fi
    done
    if [ "X$docmd" = "XYES" ]; then
	cp -f "$statedir/registry"  "$statedir/registry.0"
    else
	echo cp -f "$statedir/registry"  "$statedir/registry.0"
    fi
    if [ "X$docmd" = "XYES" ]; then
	set +e
	if [ "X$VERBOSE" != "X" ]; then
	    echo "grep -Ev [[:space:]]${real_conf_file_re}$ $statedir/registry >\\"
            echo "	$statedir/registry.tmp || true";
	fi
	#echo "grep -Ev [[:space:]]${real_conf_file_re}$ $statedir/registry"
	grep -Ev "[[:space:]]${real_conf_file_re}$" "$statedir/registry" > \
	    "$statedir/registry.tmp" || true;
	if [ "X$docmd" = "XYES" ]; then
	    mv -f "$statedir/registry.tmp"  "$statedir/registry"
	else
	    echo mv -f "$statedir/registry.tmp"  "$statedir/registry"
	fi
	set -e
    fi
}

replace_in_registry () {
    if [ ! -e "$statedir/registry" ]; then
        echo >&2 "$progname: Internal error: $statedir/registry does not exist";
        exit 6;
    fi
    if [ "$count" -eq 1 ]; then
        old_pkg=$(grep -E "[[:space:]]${real_conf_file_re}$" "$statedir/registry" | \
            awk '{print $1;}' );

        if [ "$pkg" != "$old_pkg" ]; then
            divert_package=$(dpkg-divert --listpackage "$conf_file")
            if [ -n "$divert_package" ]; then
                if [ "X$VERBOSE" != "X" ]; then
                    echo >&2 "$progname: Package $pkg will not take away diverted ${conf_file} from package $divert_package";
                fi
                exit 0;
            else
                if [ "X$FORCE" = "X" ]; then
                    echo >&2 "$progname: Attempt from package $pkg  to take ${real_conf_file} away from package $old_pkg";
                    echo >&2 "ucfr: Aborting.";
                    exit 4;
                fi
            fi
        else
            if [ "X$VERBOSE" != "X" ]; then
                echo >&2 "$progname: Association already recorded. No changes.";
            fi
            exit 0;
        fi
    fi

    for i in $(/usr/bin/seq 6 -1 0); do
	if [ -e "${statedir}/registry.${i}" ]; then
	    if [ "X$docmd" = "XYES" ]; then
		cp -f "${statedir}/registry.${i}" \
		    "${statedir}/registry.$(($i + 1))"
	    else
		echo cp -f "${statedir}/registry.${i}" \
		    "${statedir}/registry.$(($i + 1))"
	    fi
	fi
    done
    if [ "X$docmd" = "XYES" ]; then
	cp -f "$statedir/registry"  "$statedir/registry.0"
    else
	echo cp -f "$statedir/registry"  "$statedir/registry.0"
    fi
    if [ "X$docmd" = "XYES" ]; then
	set +e
	if [ "X$VERBOSE" != "X" ]; then
	    echo "grep -Ev \"[[:space:]]${real_conf_file_re}$\" \"$statedir/registry\"  \\"
            echo "	$statedir/registry.tmp || true"
	    echo "echo \"$pkg 	 $real_conf_file\" >> \"$statedir/registry.tmp\""
	    echo "mv -f  $statedir/registry.tmp $statedir/registry"
	fi
	grep -Ev "[[:space:]]${real_conf_file_re}$" "$statedir/registry" > \
	    "$statedir/registry.tmp" || true;
	echo "$pkg 	 $real_conf_file" >>   "$statedir/registry.tmp";
	mv -f "$statedir/registry.tmp"  "$statedir/registry"
	set -e
    else
	echo "grep -Ev \"[[:space:]]${real_conf_file_re}$\" \"$statedir/registry\"  \\"
        echo "	$statedir/registry.tmp || true"
	echo "echo \"$pkg 	 $real_conf_file\" >> \"$statedir/registry.tmp\""
	echo "mv -f  $statedir/registry.tmp $statedir/registry"
    fi
}


usageversion () {
        cat >&2 <<END
Debian GNU/Linux $progname $pversion.
           Copyright (C) 2002-2006 Manoj Srivastava.
This is free software; see the GNU General Public Licence for copying
conditions.  There is NO warranty.

Usage: $progname  [options] package_name path_for_configuration_file
Options:
     -h,     --help          print this message
     -f      --force         Force the association, even if another package
                             used to own the configuration file.
     -d [n], --debug    [n]  Set the Debug level to N
     -n,     --no-action     Dry run. No action is actually taken.
     -v,     --verbose       Make the script verbose
     -p,     --purge         Remove any reference to the package/file association
                             from the records
             --state-dir bar Set the state directory to bar instead of the
                             default '/var/lib/ucf'. Used mostly for testing.
END

}

######################################################################
########                                                     #########
########              Command line args                      #########
########                                                     #########
######################################################################
#
# Long term variables#
#
docmd='YES'
action='withecho'
action=
DEBUG=0
VERBOSE=''
statedir='/var/lib/ucf';
THREEWAY=

# Note that we use `"$@"' to let each command-line parameter expand to a
# separate word. The quotes around `$@' are essential!
# We need TEMP as the `eval set --' would nuke the return value of getopt.
TEMP=$(getopt -a -o hd::D::fnvp -n "$progname" \
      --long help,debug::,DEBUG::,force,no-action,purge,verbose,state-dir: \
             -- "$@")

if [ $? != 0 ] ; then
    echo "Error handling options.Terminating..." >&2 ;
    exit 1 ;
fi

# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"

while true ; do
    case "$1" in
	-h|--help) usageversion;                        exit 0  ;;
	-n|--no-action) action='echo'; docmd='NO';      shift   ;;
	-v|--verbose) VERBOSE=1;                        shift   ;;
	-f|--force)   FORCE=1;                          shift   ;;
	--state-dir)  opt_state_dir="$2";               shift 2 ;;
	-D|-d|--debug|--DEBUG)
            # d has an optional argument. As we are in quoted mode,
            # an empty parameter will be generated if its optional
            # argument is not found.
	    case "$2" in
		"") setq DEBUG 1    "The Debug value"; shift 2 ;;
		*)  setq DEBUG "$2" "The Debug value"; shift 2 ;;
	    esac ;;
        -p|--purge) PURGE=YES;                         shift   ;;
	--)  shift ;                                   break   ;;
	*) echo >&2 "$progname: Internal error!" ; exit 1 ;;
    esac
done
# Need to run as root, or else the
if test "$(id -u)" != 0; then
    if [ "$docmd" = "YES" ]; then
        echo "$progname: Need to be run as root." >&2
        echo "$progname: Setting up no action mode." >&2
        action='echo';
        docmd='NO';
    fi
fi

if [ $# != 2 ]; then
    echo >&2 "$progname: *** ERROR: Need exactly two arguments, got $#";
    echo >&2 ""
    usageversion;
    exit 3 ;
fi

# We have here a configuration file, which can be a symlink, and may
# contain characters that are unsafe in regular expressions
setq pkg  "$1" "The Package name";
setq conf_file "$2" "The Configuration file";
setq real_conf_file "$(readlink -q -m $conf_file)" "The (real) Configuration file";

pkg_re="$(echo $pkg       | sed -e 's,+,\\+,')"
conf_file_re="$(echo $conf_file | sed -e 's,+,\\+,')"
real_conf_file_re="$(echo $real_conf_file | sed -e 's,+,\\+,')"

case $conf_file_re in
    /*)
        : echo fine
        ;;
    *)
        echo >&2 "$progname: Need a fully qualified path for the file \"$conf_file\""
        # Don't exit with an error for etch'
        exit 0;
esac

# Load site defaults and over rides.
if [ -f /etc/ucf.conf ]; then
    . /etc/ucf.conf
fi

# Command line, env variable, config file, or default
if [ ! "x$opt_state_dir" = "x" ]; then
    setq statedir "$opt_state_dir" "The State directory"
elif [ ! "x$UCF_STATE_DIR" = "x" ]; then
    setq statedir "$UCF_STATE_DIR" "The State directory"
elif [ ! "x$conf_state_dir" = "x" ]; then
    setq statedir "$conf_state_dir" "The State directory"
else
    setq statedir '/var/lib/ucf'  "The State directory"
fi

# VERBOSE of 0 is supposed to be the same as not setting VERBOSE
if [ "X$VERBOSE" = "X0" ]; then
    VERBOSE=''
fi

#
if [ -e "$statedir/registry" -a ! -w "$statedir/registry" ]; then
    echo >&2 "$progname: do not have write privilege to the registry data"
    if [ "X$docmd" = "XYES" ]; then
	exit 1;
    fi
fi

# test and see if this file exists in the database
if [ ! -d "$statedir" ]; then
    $action mkdir -p "$statedir"
fi

if [ ! -f "$statedir/registry" ]; then
    $action touch "$statedir/registry"
fi


if [ "X$VERBOSE" != "X" ]; then
    echo >&2 "$progname: The registry exists"
fi

# sanity check
count=$(grep -E --count "[[:space:]]${real_conf_file_re}$" "$statedir/registry") || true

if [ "$count" -ge 2 ]; then
    echo >&2 "$progname: Corrupt registry: Duplicate entries for ${conf_file}";
    grep -E "[[:space:]]${real_conf_file_re}$" "$statedir/registry";
    exit "$count";
fi

if [ "X$PURGE" != "X" ]; then
    $action purge_from_registry
else
    $action replace_in_registry
fi


exit 0;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              WRG}+ؒ]I֎Ɨ
<R0Icl"P*orzV]H9Cݞ}NtH:vyR>zAhZO)7#Y
)_lm=R9%re%MQbK~`^.Q%9Mr*=:ȵ6Q{ߎzب٤L*\y.e%˗pBёQ
t(SM:ۦ'mlmɗֱKABWUEw?\M#L
,oHMLelaP.wz>otv}g̹gPN. ȊH!)2CjϨ߉x_1i[gO3:OGY$]&8b.9cחrZp~IH
G3nW}!4[bfɑjfhV"zF1wc@,hTc's̶EŮe^a<(mκEše&LfiE
*5eJ)31T
5ହo?ϩ ~ww:)ϐ
ۡ0;[9uP)
tn@ܲ
0FexQnViz4ViRSom/|idG
5ߛMs"FFXExb^N +Jaw'I/w(~ǈX0#_@8Y55k4HR7sM1iSQ!>#G"+ N)#I1A(z,K?2"SFZpуZ'Z^VF4HЧF'ϟϖf'ދ5h*蹝^lPԣ>ݦ8N:ICu㯩9jCY ݱ*
B
~%;&2|XqPQc	]$XݵNwz ۱»c[i_,_/[5
z	f"yM 册
@c3	x&#'- z4&`PG% l3U(P
,X+D]@びg?DL?5ӂ7Fe宅[ H~}SP>(a|k>Dbȧnԙf!aWa\^P(n[f*1?,!1{O1(3y!6
ea2n^MQZd0HStΛ y7tΦ8wNăŪUp4h 
 ?F?x0pnI	X.|9e)Ze'濔ވY:ӎ0E!XXz:PӠ$(D@g4jhVhCaBD,J:|^BMͻZb[squ=kx@fAs,ƻFù*^
ڹ5Jvw IBޥcbyMPr>!A֢! 8b{:0pZ#ىU=J8/twANi[g
Q`2fCc@Zxi4Ve{77
#$hScNW#]N}`. jmz7MØKM3E%rZ2*SXfI(2bBCVaRN9;s^?7S-$|xs5pj.p++ BЀ<i*W_£O/>~8::9}}V^og_ I!uVƕ%n؜GHAmgu
9]]>_Ž,%1V&-My58z>	6Z6j(kiG-,;װ5\ԹganWrˏUkob                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://salsa.debian.org/srivasta/ucf
Upstream-Name: ucf
Upstream-Contact:  Manoj Srivastava <srivasta@debian.org>
Copyright: 2002, 2003, 2003, 2004, 2005, 2006, 2015 Manoj Srivastava <srivasta@debian.org>
License: GPL-2

Files: *
Copyright: 2002, 2003, 2003, 2004, 2005, 2006, 2015 Manoj Srivastava <srivasta@debian.org>
License: GPL-2

Files: debian/po/ca.po
Copyright: 2004 Aleix Badia i Bosch <abadia@ica.es>
           2008, 2009, 2010 Jordi Mallach <jordi@debian.org>
License: GPL-2

Files: debian/po/cs.po
Copyright: 2014 Miroslav Kure <kurem@debian.cz>
License: GPL-2

Files: debian/po/da.po
Copyright: 2005, 2007 Claus Hindsgaul <claus.hindsgaul@gmail.com>
           2010, 2014, 2018 Joe Hansen <joedalton2@yahoo.dk>
License: GPL-2

Files: debian/po/de.po
Copyright: 2004-2009 Erik Schanze <eriks@debian.org>
           2014, 2018 Holger Wansing <linux@wansing-online.de>
License: GPL-2

Files: debian/po/es.po
Copyright: 2004 Lucas Wall <kthulhu@usa.net>
           2007, 2010 Javier Fernandez-Sanguino <jfs@debian.org>
           2014,2018 Matías Bellone <matiasbellone+debian@gmail.com>
License: GPL-2

Files: debian/po/eu.po
Copyright: 2007, 2009 Piarres Beobide <pi@beobide.net>, 2007, 2009
           2009, 2014 Iñaki Larrañaga Murgoitio <dooteo@zundan.com>
License: GPL-2

Files: debian/po/fi.po
Copyright: 2009, 2014 Esko Arajärvi <edu@iki.fi>
License: GPL-2

Files: debian/po/fr.po
Copyright: 2007 Eric Madesclair <eric-m@wanadoo.fr>
           2009, 2014 Christian Perrier <bubulle@debian.org>
           2018 Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
License: GPL-2

Files: debian/po/gl.po
Copyright: 2006, 2007 Jacobo Tarrio <jtarrio@debian.org>
           2009 Marce Villarino <mvillarino@gmail.com>
License: GPL-2

Files: debian/po/it.po
Copyright: 2005-2010 Luca Bruno <lucab@debian.org>
License: GPL-2

Files: debian/po/ja.po
Copyright: 2018 Kenshi Muto <kmuto@debian.org>
License: GPL-2

Files: debian/po/nl.po
Copyright: 2006 Kurt De Bree <kdebree@telenet.be>
           2011 Jeroen Schot <schot@a-eskwadraat.nl>
           2016 Frans Spiesschaert <Frans.Spiesschaert@yucom.be>
License: GPL-2

Files: debian/po/pl.po
Copyright: 2007 Wojciech Zaręba <wojtekz@comp.waw.pl>
           2012, 2014 Michał Kułach <michal.kulach@gmail.com>
License: GPL-2

Files: debian/po/pt_BR.po
Copyright: 2010 Flamarion Jorge <jorge.flamarion@gmail.com>
           2014-2018 Adriano Rafael Gomes <adrianorg@debian.org>
License: GPL-2

Files: debian/po/pt.po
Copyright: 2007 Bruno Queiros <brunomiguelqueiros@sapo.pt>
           2010-2018 Américo Monteiro <a_monteiro@gmx.com>
License: GPL-2

Files: debian/po/ru.po
Copyright: 2006, 2007 Yuri Kozlov <kozlov.y@gmail.com>
           2009, 2014, 2018 Yuri Kozlov <yuray@komyakino.ru>
License: GPL-2

Files: debian/po/sk.po
Copyright: 2011, 2014 Slavko <linux@slavino.sk>
License: GPL-2

Files: debian/po/sv.po
Copyright: 2007 Daniel Nylander <po@danielnylander.se>
           2009, 2014 Martin Bagge <brother@bsnet.se>
License: GPL-2

Files: debian/po/vi.po
Copyright: 2005-2009 Clytie Siddall <clytie@riverland.net.au>
License: GPL-2

License: GPL-2
   ucf is Copyright (C) 2002, 2003, 2003, 2004, 2005, 2006 Manoj
   Srivastava <srivasta@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; version 2 dated June, 1991.
   .
   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 GNU/Linux systems, the complete text of the GNU General
   Public License can be found in `/usr/share/common-licenses/GPL-2'.
   .
   A copy of the GNU General Public License is also available at
   <URL:http://www.gnu.org/copyleft/gpl.html>.  You may also obtain
   it by writing to the Free Software Foundation, Inc., 51 Franklin
   St, Fifth Floor, Boston, MA 02110-1301 USA
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               #! /bin/sh
# postinst.skeleton
# Skeleton maintainer script showing all the possible cases.
# Written by Charles Briscoe-Smith, March-June 1998.  Public Domain.

# Abort if any command returns an error value
set -e

# This script is called as the last step of the installation of the
# package.  All the package's files are in place, dpkg has already done
# its automatic conffile handling, and all the packages we depend of
# are already fully installed and configured.

# The following idempotent stuff doesn't generally need protecting
# against being run in the abort-* cases.

# Install info files into the dir file
: install-info --quiet --section "section pattern" "Section Title" \
:              --description="Name of the document" /usr/info/foo.info

# Create stub directories under /usr/local
: if test ! -d /usr/local/lib/foo; then
:   if test ! -d /usr/local/lib; then
:     if mkdir /usr/local/lib; then
:       chown root.staff /usr/local/lib || true
:       chmod 2775 /usr/local/lib || true
:     fi
:   fi
:   if mkdir /usr/local/lib/foo; then
:     chown root.staff /usr/local/lib/foo || true
:     chmod 2775 /usr/local/lib/foo || true
:   fi
: fi

# Ensure the menu system is updated
: [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus

# Arrange for a daemon to be started at system boot time
: update-rc.d foo default >/dev/null

case "$1" in
  configure)
    # Configure this package.  If the package must prompt the user for
    # information, do it here.
    :

    # Activate menu-methods script
    : chmod a+x /etc/menu-methods/foo

    # Update ld.so cache
    : ldconfig

    # Make our version of a program available
    : update-alternatives \
    :       --install /usr/bin/program program /usr/bin/alternative 50 \
    :       --slave /usr/share/man/man1/program.1.gz program.1.gz \
    :               /usr/share/man/man1/alternative.1.gz

    # Tell ucf that the file in /usr/share/foo is the latest
    # maintainer version, and let it handle how to manage the real
    # confuguration file in /etc. This is how a static configuration
    # file can be handled:
    ucf /usr/share/foo/configuration /etc/foo.conf
    ucfr foo /etc/foo.conf

    ### We could also do this on the fly. The following is from Tore
    ### Anderson:

    #. /usr/share/debconf/confmodule

    ### find out what the user answered.
    #  db_get foo/run_on_boot
    #  run_on_boot=$RET
    #  db_stop

    ### safely create a temporary file to generate our suggested
    ### configuration file.
    #    tempfile=`tempfile`
    #    cat << _eof > $tempfile
    ### Configuration file for Foo.

    ### this was answered by you, the user in a debconf dialogue
    #  RUNONBOOT=$run_on_boot

    ### this was not, as it has a sane default value.
    #  COLOUROFSKY=blue

    #_eof

    ### Note that some versions of debconf do not release stdin, so
    ### the following invocation of ucf may not work, since the stdin
    ### is never connected to ucfr.

    ### now, invoke ucf, which will take care of the rest, and ask
    ### the user if he wants to update his file, if it is modified.
    #ucf $tempfile /etc/foo.conf

    ### done! now we'll just clear up our cruft.
    #rm -f $tempfile


    # There are three sub-cases:
    if test "${2+set}" != set; then
      # We're being installed by an ancient dpkg which doesn't remember
      # which version was most recently configured, or even whether
      # there is a most recently configured version.
      :

    elif test -z "$2" -o "$2" = "<unknown>"; then
      # The package has not ever been configured on this system, or was
      # purged since it was last configured.
      :

    else
      # Version $2 is the most recently configured version of this
      # package.
      :

    fi ;;
  abort-upgrade)
    # Back out of an attempt to upgrade this package FROM THIS VERSION
    # to version $2.  Undo the effects of "prerm upgrade $2".
    :

    ;;
  abort-remove)
    if test "$2" != in-favour; then
      echo "$0: undocumented call to \`postinst $*'" 1>&2
      exit 0
    fi
    # Back out of an attempt to remove this package, which was due to
    # a conflict with package $3 (version $4).  Undo the effects of
    # "prerm remove in-favour $3 $4".
    :

    ;;
  abort-deconfigure)
    if test "$2" != in-favour -o "$5" != removing; then
      echo "$0: undocumented call to \`postinst $*'" 1>&2
      exit 0
    fi
    # Back out of an attempt to deconfigure this package, which was
    # due to package $6 (version $7) which we depend on being removed
    # to make way for package $3 (version $4).  Undo the effects of
    # "prerm deconfigure in-favour $3 $4 removing $6 $7".
    :

    ;;
  *) echo "$0: didn't understand being called with \`$1'" 1>&2
     exit 0;;
esac

exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #! /bin/sh
# postrm.skeleton
# Skeleton maintainer script showing all the possible cases.
# Written by Charles Briscoe-Smith, March-June 1998.  Public Domain.

# Abort if any command returns an error value
set -e

# This script is called twice during the removal of the package; once
# after the removal of the package's files from the system, and as
# the final step in the removal of this package, after the package's
# conffiles have been removed.

# Ensure the menu system is updated
: [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus

case "$1" in
  remove)
    # This package is being removed, but its configuration has not yet
    # been purged.
    :

    # Remove diversion
    : dpkg-divert --package foo --remove --rename \
    :             --divert /usr/bin/other.real /usr/bin/other

    # ldconfig is NOT needed during removal of a library, only during
    # installation

    ;;
  purge)
    # This package has previously been removed and is now having
    # its configuration purged from the system.
    :

    # we mimic dpkg as closely as possible, so we remove configuration
    # files with dpkg backup extensions too:
    ### Some of the following is from Tore Anderson:
    for ext in '~' '%' .bak .ucf-new .ucf-old .ucf-dist;  do
	rm -f /etc/foo.conf$ext
    done
 
    # remove the configuration file itself
    rm -f /etc/foo.conf

    # and finally clear it out from the ucf database
    if which ucf >/dev/null; then
        ucf --purge /etc/foo.conf
    fi    
    if which ucfr >/dev/null; then
        ucfr --purge foo /etc/foo.conf
    fi    

    # Remove symlinks from /etc/rc?.d
    : update-rc.d foo remove >/dev/null

    ;;
  disappear)
    if test "$2" != overwriter; then
      echo "$0: undocumented call to \`postrm $*'" 1>&2
      exit 0
    fi
    # This package has been completely overwritten by package $3
    # (version $4).  All our files are already gone from the system.
    # This is a special case: neither "prerm remove" nor "postrm remove"
    # have been called, because dpkg didn't know that this package would
    # disappear until this stage.
    :

    ;;
  upgrade)
    # About to upgrade FROM THIS VERSION to version $2 of this package.
    # "prerm upgrade" has been called for this version, and "preinst
    # upgrade" has been called for the new version.  Last chance to
    # clean up.
    :

    ;;
  failed-upgrade)
    # About to upgrade from version $2 of this package TO THIS VERSION.
    # "prerm upgrade" has been called for the old version, and "preinst
    # upgrade" has been called for this version.  This is only used if
    # the previous version's "postrm upgrade" couldn't handle it and
    # returned non-zero. (Fix old postrm bugs here.)
    :

    ;;
  abort-install)
    # Back out of an attempt to install this package.  Undo the effects of
    # "preinst install...".  There are two sub-cases.
    :

    if test "${2+set}" = set; then
      # When the install was attempted, version $2's configuration
      # files were still on the system.  Undo the effects of "preinst
      # install $2".
      :

    else
      # We were being installed from scratch.  Undo the effects of
      # "preinst install".
      :

    fi ;;
  abort-upgrade)
    # Back out of an attempt to upgrade this package from version $2
    # TO THIS VERSION.  Undo the effects of "preinst upgrade $2".
    :

    ;;
  *) echo "$0: didn't understand being called with \`$1'" 1>&2
     exit 0;;
esac

exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ucf_helper_functions
====================

This directory contains a suggestion for code to help using
ucf covering most of the real-life use cases. This code is in use 
since many months in the aide package and seems to work "well enough".

See aide-common's maintainer scripts for usage examples. The package ships the
current version of all config files in /usr/share/aide-common/config, and
handles all of them in a single call of handle_all_ucf_files
/usr/share/aide-common/config /etc. The code expects that the first parameter
of handle_all_ucf_files is a pointer to the directory structure, and
handle_all_ucf_files rebuilds that structure in the target directory. See the
aide-common package for reference.

This directory also contains a test suite so that the correct behavior of the
function can be verified. Call ./testsuite as root. Sorry, the test suite
needs root privileges and uses the ucf database of the host system. The test
cases are kind of documented in the test-list file.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         - make testsuite run without root
- do not use ucf database of host system
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     number	op	packagefile	localfile	ucfr	UCF_FORCE_	expected result
1	update	unchanged	unchanged	1			local
2	update	unchanged	changed		1			local
3	update	unchanged	deleted		1			deleted
4	update	changed		unchanged	1			package
5	update	changed		changed		1	CONFFOLD	local
6	update	changed		changed		1	CONFFNEW	package
7	update	changed		deleted		1	CONFFOLD	deleted
8	update	changed		deleted		1	CONFFNEW	package
9	update	deleted		unchanged	0			deleted
10	update	deleted		changed		0	CONFFOLD	local
11	update	deleted		changed		0	CONFFNEW	deleted
12	update	deleted		deleted		0	(*)		deleted
13	rename	unchanged	unchanged	1			newname
14	rename	unchanged	changed		1			changed newname
15	rename	unchanged	deleted		1			oldname and newname deleted
16	rename	changed		unchanged	1			package newname
17	rename	changed		changed		1	CONFFOLD	local
18	rename	changed		changed		1	CONFFNEW	package
19	rename	changed		deleted		1			local
20	rename	changed		deleted		1			package

the column ucfr says how many files should be registered (check_ucfq_number)
after the second ucf run. Tests do also check this.

(*) the second ucf call causes a question to be asked while that it not
strictly necessary. Since both options yield the same result, and this is an
exotic corner case, we can live with that.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       this is the changed file from the package
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      this is the original file from the package
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
take_ref
handle_all_ucf_files $PKGDIR $LOCDIR
is_local $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
echo "this is a locally changed file" > $LOCF
take_ref
handle_all_ucf_files $PKGDIR $LOCDIR
is_local $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
rm -f $LOCF
take_ref
handle_all_ucf_files $PKGDIR $LOCDIR
is_deleted $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGF
take_ref
handle_all_ucf_files $PKGDIR $LOCDIR
is_package $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGF
echo "this is a locally changed file" > $LOCF
take_ref
export UCF_FORCE_CONFFOLD=1
handle_all_ucf_files $PKGDIR $LOCDIR
is_local $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGF
echo "this is a locally changed file" > $LOCF
take_ref
export UCF_FORCE_CONFFNEW=1
handle_all_ucf_files $PKGDIR $LOCDIR
is_package $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGF
rm -f $LOCF
take_ref
export UCF_FORCE_CONFFOLD=1
handle_all_ucf_files $PKGDIR $LOCDIR
is_deleted $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGF
rm -f $LOCF
take_ref
export UCF_FORCE_CONFFNEW=1
handle_all_ucf_files $PKGDIR $LOCDIR
is_package $LOCF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
rm -f $PKGF
take_ref
handle_all_ucf_files $PKGDIR $LOCDIR
is_deleted $LOCF && check_ucfq_number 0
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
rm -f $PKGF
echo "this is a locally changed file" > $LOCF
take_ref
export UCF_FORCE_CONFFOLD=1
handle_all_ucf_files $PKGDIR $LOCDIR
is_local $LOCF && check_ucfq_number 0
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
rm -f $PKGF
echo "this is a locally changed file" > $LOCF
take_ref
export UCF_FORCE_CONFFNEW=1
handle_all_ucf_files $PKGDIR $LOCDIR
is_deleted $LOCF && check_ucfq_number 0
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
rm -f $PKGF
rm -f $LOCF
take_ref
# the current code causes the deleted/deleted case to emit a ucf prompt
# we can live with that since both choices yield the same result
export UCF_FORCE_CONFFOLD=1
handle_all_ucf_files $PKGDIR $LOCDIR
is_deleted $LOCF && check_ucfq_number 0
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
mv $PKGF $PKGRF
take_ref
rename_ucf_file $LOCF $LOCRF
handle_all_ucf_files $PKGDIR $LOCDIR
is_local $LOCRF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
mv $PKGF $PKGRF
echo "this is a locally changed file" > $LOCF
take_ref
echo "rename_ucf_file"
rename_ucf_file $LOCF $LOCRF
echo "handle_all_ucf_files"
handle_all_ucf_files $PKGDIR $LOCDIR
is_local $LOCRF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
mv $PKGF $PKGRF
rm -f $LOCF
take_ref
echo "rename_ucf_file"
rename_ucf_file $LOCF $LOCRF
echo "handle_all_ucf_files"
handle_all_ucf_files $PKGDIR $LOCDIR
is_deleted $LOCF && is_deleted $LOCRF && check_ucfq_number 1
return $?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGRF
rm -f $PKGF
take_ref
echo "rename_ucf_file $LOCF $LOCRF"
rename_ucf_file $LOCF $LOCRF
echo "handle_all_ucf_files $PKGDIR $LOCDIR"
handle_all_ucf_files $PKGDIR $LOCDIR
echo "final check"
is_package $LOCRF $PKGRREF && check_ucfq_number 1
return $?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGRF
rm -f $PKGF
echo "this is a locally changed file" > $LOCF
take_ref
echo "rename_ucf_file $LOCF $LOCRF"
rename_ucf_file $LOCF $LOCRF
echo "handle_all_ucf_files $PKGDIR $LOCDIR"
export UCF_FORCE_CONFFOLD=1
handle_all_ucf_files $PKGDIR $LOCDIR
echo "final check"
is_local $LOCRF && check_ucfq_number 1
return $?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGRF
rm -f $PKGF
echo "this is a locally changed file" > $LOCF
take_ref
echo "rename_ucf_file $LOCF $LOCRF"
rename_ucf_file $LOCF $LOCRF
echo "handle_all_ucf_files $PKGDIR $LOCDIR"
export UCF_FORCE_CONFFNEW=1
handle_all_ucf_files $PKGDIR $LOCDIR
echo "final check"
is_package $LOCRF $PKGRREF && check_ucfq_number 1
return $?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGRF
rm -f $PKGF
rm -f $LOCF
take_ref
echo "rename_ucf_file $LOCF $LOCRF"
rename_ucf_file $LOCF $LOCRF
echo "handle_all_ucf_files $PKGDIR $LOCDIR"
export UCF_FORCE_CONFFOLD=1
handle_all_ucf_files $PKGDIR $LOCDIR
echo "final check"
is_deleted $LOCRF && is_deleted $LOCF && check_ucfq_number 1
return $?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #!/bin/bash

handle_all_ucf_files $PKGDIR $LOCDIR
cp package-changed $PKGRF
rm -f $PKGF
rm -f $LOCF
take_ref
echo "rename_ucf_file $LOCF $LOCRF"
rename_ucf_file $LOCF $LOCRF
echo "handle_all_ucf_files $PKGDIR $LOCDIR"
export UCF_FORCE_CONFFNEW=1
handle_all_ucf_files $PKGDIR $LOCDIR
echo "final check"
is_package $LOCRF $PKGRREF && check_ucfq_number 1
return $?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      #!/bin/bash

if [ "$(id -u)" -ne 0 ]; then
    echo >&2 "ERR: root needed"
    exit 1
fi

set -u
set -e

DIR="$(pwd)/workdir"
PKGDIR="$DIR/pkg"
LOCDIR="$DIR/loc"
PKGNAME="pkgname"
PKGF="$PKGDIR/conffile"
LOCF="$LOCDIR/conffile"
PKGRF="$PKGDIR/renamedconffile"
LOCRF="$LOCDIR/renamedconffile"
REFDIR="reference"
PKGREF="$REFDIR/pkg"
LOCREF="$REFDIR/loc"
PKGRREF="$REFDIR/renamedpkg"
LOCRREF="$REFDIR/renamedloc"
LOCNEWF="$DIR/localnewfile"

TESTEE="ucf-helper-functions.sh"
if [ -x "./$TESTEE" ]; then
    . ./$TESTEE
fi

cd tests

cleanup() {
    for fn in $LOCF $LOCNEWF $LOCRF; do
        ucf --purge $fn
        ucfr --purge $PKGNAME $fn
    done
    rm -rf $DIR $PKGDIR $LOCDIR $REFDIR
    rm -f result
}

prepare() {
    cleanup
    mkdir $DIR $PKGDIR $LOCDIR $REFDIR
    cp package-orig $PKGF
}

take_ref() {
    if [ -e "$PKGF" ]; then
        cp $PKGF $PKGREF
    else
        touch $PKGREF-deleted
    fi
    if [ -e "$LOCF" ]; then
        cp $LOCF $LOCREF
    else
        touch $LOCREF-deleted
    fi
    if [ -e "$PKGRF" ]; then
        cp $PKGRF $PKGRREF
    else
        touch $PKGRREF-deleted
    fi
    if [ -e "$LOCRF" ]; then
        cp $LOCRF $LOCRREF
    else
        touch $LOCRREF-deleted
    fi
}

check_ucfq_number() {
    EXPECTED="$1"
    if [ $(ucfq --with-colons $PKGNAME | wc -l) != "$EXPECTED" ]; then
        echo  >&2 "number of files registered to $PKGNAME not equal $EXPECTED, test failed"
        ucfq --with-colons $PKGNAME | wc -l
        ucfq $PKGNAME
        return 1
    else
        echo  >&2 "$EXPECTED file(s) registered to $PKGNAME, test passed"
        return 0
    fi
}


is_package() {
    local LOCF
    local REFF
    LOCF=$1
    REFF=${2:-$PKGREF}
    if ! cmp $LOCF $REFF; then
        echo  >&2 "$LOCF not equal $REFF, test failed"
        return 1
    else
        echo  >&2 "$LOCF equals $REFF, test passed"
        return 0
    fi
}

is_local() {
    local LOCF
    local REFF
    LOCF=$1
    REFF="${2:-$LOCREF}"
    if ! cmp $LOCF $REFF; then
        echo  >&2 "$LOCF not equal $REFF, test failed"
        return 1
    else
        echo  >&2 "$LOCF equals $REFF, test passed"
        return 0
    fi
}

is_deleted() {
    RET=0
    FN="$1"
    if [ -e "$FN" ]; then
        echo  >&2 "$FN does still exist, test failed"
        RET=1
    else
        echo  >&2 "$FN is deleted, test passed"
    fi
    return $RET
}

print_state() {
    printf -- "------- %s\n" "${1:-}"
    echo "ls -alR $DIR"
    ls -alR $DIR
    head -n-0 /dev/null $DIR/*/*
    printf "ucfq $PKGNAME knows about %d files\n" "$(ucfq --with-colons "$PKGNAME" | wc -l)"
    ucfq --with-colons "$PKGNAME"
}

DEBIAN_FRONTEND=readline
GLOB="${1:-*}"
for test in ./test_$GLOB; do
    prepare
    RET=0
    unset UCF_FORCE_CONFFOLD
    export -n UCF_FORCE_CONFFOLOLD
    unset UCF_FORCE_CONFFNEW
    export -n UCF_FORCE_CONFFNEW
    . $test || RET=$?
    if [ "$RET" -ne 0 ]; then
        echo "$test failed"
        print_state "$test failed"
        cleanup
        exit 1
    else
        echo "$test passed"
    fi
    cleanup
done

# vim:sw=4:sts=4:et:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ucf: no-debconf-config
ucf: debconf-is-not-a-registry [usr/bin/ucf:702]
ucf: unused-debconf-template ucf/changeprompt [templates:73]
ucf: unused-debconf-template ucf/changeprompt_threeway [templates:25]
ucf: unused-debconf-template ucf/conflicts_found [templates:162]
ucf: unused-debconf-template ucf/show_diff [templates:119]
ucf: unused-debconf-template ucf/title [templates:2]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Vmo6_q3
,d%vmMbN4۰lAD[leR );ư(;NڴX` "u=wKL.ihbQ2[$jw^c(ӝ3Vb-JK
̬踱si2~sm]9Q:篻==~-?D,,EmkLq4n 
z"}A!g4dD]:휟95DrD^dҒfNO"QKE,MӬʑ]Z]?_gm6:f'QL^SиF.bg
Z,<eoz+cY;X~NԈԈQrުyd'cesiʑYÇ>H-(i\KѭʤߺŚo5wI'kiх`vVc-1"RR=&O Q?;dVL:ZfYf21 4%dV{1/
`1*+8M3<*أNcW{VU{YY	
ar|#y^5ӡ9l
S!U}.`q0ͦdN*!ɵllUUr|VhW?Nbp;s׃鰟t=Pƽtp9Mh<Gi?!J%&	؁ >^",s*ZTk.XmOf<Z!?Ԃ1m{7c[4YJ %i\LRҚM~}ӅqEzi;OH{^
0H`p_7<w秿=No?T*J7t{y质urrt<_m&Mb$ƪ@-L[/Ԓ4)Kp4Ni\p2Q2OM线3mkȆb%߇W7gwWgx
ƫ㪟^N`4B;4S5b
c>4|ġ ~inU~f}'eFmGV>6BxlV<h$6IŪiz'dP9|%B;e<x ~!׌@
2 #PA &6!OT4n1$.+ohFx_MQ63Z"Q!˪ypeKI+A^6m1]ZCB6GӼrM!6yLT/laF@@lלy,`,$9}gzɇV]sUb!tԴ({DSt!uِs4זIܫט\QLYls
8'i![NĜ~h-
k3	@CD{''pEFo)AԻMGGh츱}124f F+\K=YXU)KeCm,fXZ(x^^G}O u                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   [moH_'dgfǙ[~eLn(%qL6iG{~OUu7IYn1]]/O=Uߏk;0>VY,hw*K}bY^:8/&m2uocuw56cuײֺ<X֛jeqjj95U9suJ߽Uo߼y%ĥEm?ۃ8t|xVIUCupIKze2)KSd;dcӖ;Y4|(S&)oV*M&7۫Ͻ7ڦu^sErըtUt?ez'˿nWUo̤Z{WBR:mS'١5iyCekլVEN
u΋<UyK( DE,5+g$,olP6yԵ%e&V\y/iHZ>$ިv
{
xM?Y~k]ڪƨFpYY P#Mmm	ƣs(5ybYN6Uېz /൮^'MK:DFcmOE^}
UMenlq>Y3,TyOyQՋy	<~~U{cluUP|uR6oӛOxgaz>Lg<^fFMvzrw>Qw7WӱR3Mi^gP|$/lwb	LG
{:$eGlZ؁c^U&VOuްս<XMtRHRԬ%޽{6ńyݛIw6]Gu4>zCOo޾;~ۣ [Ʒ@ytl;~#5~ e͝{>i=A~"_5PQz9VpFonTtK-<Ӗ}Mg)L?\[5S~-ƿ!>~zǻfz};8f Ejg?Qkn}${	V	+DIQ%v/8 ``	\'h_ױ8cRieagmew}tؐEXM$&pq2
Bq*y1lBrG5wR9\tiKͦ{S劀bG Dgd/]aRlpbסnEaǚ!H,x~ |ؘ+Vxړ'#R1`,+ئ<10fL>d79)_y`cSc2S@gА< ,FMᓚRne͑bZJ! Nm!`9M=AdI,30g8Eր*!-A~U=cm̎fg)$\P0V؃-FR"(+rCzKАo:k(SjPgA[D;P$(e.dGϡ']cHqdJ%DdzExYkCOv\=2jiL/G%BNNVu!<d IR^(ThedLЙ3H˃3Q^ޡ,~N2dbѾn7^c=gX%sT+hsoĎo;ϳ¨+NDPa<r Cv,X@Xw
\L%-,(T̨P%tҔHu3[.|̬3[O5k(2r^
&eN[A1}fE$X	a&s1/vJ5 6xaj,#by'Ss
yPr i@pFD7V[B1	Ҷ72VE+j_4sٵW+TF'KJA@
DP1D'{;Sc2OP-(c|WL@:o;V1ĕ.QtM%49j"Pikm+R\cQu
$|IHM  rJu恢=s+{;g()׵įheCH
O^C>.tbiӆ	e2rX$_dKٴuɼEE"^TKE7zm egXsvE}c#602HH@غ 62s3:pCzf_PjCD~Vޔ ivXGm_)ĹUovvޘ9 CXοGPM	(<&D!w\(^b!6S <7VH1I19(BӦܐ 'f0ARX&fVf+$E؈(M̍;^PZr6wEk_C9> pOb_Ơ;b
4>H}mSF^+ÆEAs8hVEgvX'>]cuu[;OʂGi!%'vX͜!ЬkyL!0uצV\-F:;9299qzG+[!>"}`};@_#ûq=Vr:#+"F>5Eq]LCҐ/gw_Φ-|Yg8+zfUk}lF00\rXѰMI9X
j'"ĢzŘ'Tu(-
.褥:>ېD]yd➦/0`"*!RKK :YG^V5S!ubA`!IQTQk܌
Ğ 7qv&NBC܋vuQw*vݖt s]xBd1R<<ŘM85(BF{p%hrA!Tw|0]. ^NUb05>tVl?8 iPL$Lt0*\il
6mx7D#( ~_5c!§uBq ٭DlPB	6>®+<IW&׍e
bKot04:5Nwsjzr:_R廍jIR8҆~78o;$[NA㫆QcB[yc#		:,acks89l!~1&,nLW"|~(
c9ds3wٗe٩L*Na膉kO_6(rSBn64"7
M )$>01)o]_,i/n#)98DK`Tx2cD
0 ȇ6SPgfe/i#aFj%kȘ}F+K&5AW<u}E5i:Q>iXG٩KCe?~8qc -5{[mH~m#^ճMjuK1ޔ_Ǒ+6[9Vҵ&}[?jl5C$a]/O;ؖ+9MSzdzYZ(zoGb#-Q|a^jS}\
l&Esv;X!2<0;(e뜱S:l[A4Ջ]b$J

3D^0fFْn&-633rßoc>8k3x14BqLQhrDFFd$Z<R&8ݜ򼁰l%힐`l$!qo40l9-fyQS5nXK`c(Q!e(KN>h2LE]gj9^~Q%}Z.	bLPq]		fJH
əfpd;ާQs+9UndK'Ln{虸#6]G-|FJN"*)9mKp^Cnb !yݡIylg ۺkp}uD%5wĆb\%º3]zwpxn{I0Zɤtd[5nxpUKRV=h`(t1y헫2DOĕ8gR:X=\q57pC	APPhg
\
Z*Ǫyv<ofX#n9im!t</U῰7.K
ol	,{$锆
Mp}H'MLƉٝ)4k̓iTqxt0e%mF\]^^ުOn3Fu:O..O, FZxx=L;
4tw~]{ŮԼG3w\fhx2%.Y0%^)m+%rWIEC1ǉI9|HgPuay9Sζ2e/Yp$@`UvƂ.k
2(tJSjaiLRbNY/pn}cȭQ.]~ħ$9Bv(<
s.-&oE2}lTS?~[C?_v~;+M.X£%_&aW"FY'nRnNO\\ZtN/m.Gvd%Gc8@?غU[Њ6z)6w#Gn1A_3(߽r]):j{֊,:qwD[-PPE8
S#1{$ͤ?כhf%uzܯ_dXlqfX}%#!8!73C4d[qb;W7M?&W!o%rf O-5+ձEF'ڜzTv.P6c]Dl%}ՍH]D!BejE6"3hFR=̳2~}wAs	gׄm_;t`Q Z#[EOGn1_{פ]G3>ԃ
F}ur6&g}f\@ƪx88;=U()c}zH~?$4Go]=ei߲1tu9
99܈<6Kqh2=
ҦGaI(7                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Y{SHߟb`@5&TWK#KV#.~n=,!IR$h1Oq_u,.uy2 )r<3/N⥌?<Rgr-EGr*yG+Ï2F20VqਨJ7G[JfWQzGb|)/A:#}=lܳ'ݥi<mi*K#%r?bQV?y&\ߒu>o!n3?j	J۩[Lmձpk/<4f_-yd+/ˢ$~-QK_FF4cXxuSy"*8oH,9dgBF^2xHd9*Dj<x~y-H2|x*f	j:^nHnv#S$HA8dRMbFAP%֞tdFħ"fywAFp
k4m
]VZd؉(;6̾@ iAy&ҤME[]*8ϒ<#(FPI]q,1mU1|v;a@B9dDFҔSaVr(kM8*/N@A7~VnvדB.߈ףltx j
\~P_*lSil|dx<,.sq~5#1LLgӫ!\a1<`LwT&@o+֠0p'
&@ˆZDXz`w϶I'nR?cW\ϭ'&mSP@J'Nb֗#F37@ԙ
x嗿e =A4K
',m	o0I@|=lirO,xhмRiN΍QP HBayѨjIN
v
]B!̇e1.Dt@RĪ%q<JBD+Kn"8'ZiإL¨V0)lF\"7HXmN
Ms/vsRhy!<͝Aݻ.veg]I
ЂC6ğѭ*"oĤ;D?*Bm>$4 wm
/U5Ex(,m^Ϡ,V>TA[v0mkͤmp޵ ˍU	YZeYJԑֱqA}1_vOz,peEtjt&:Lvvbo4j/S-Cw%hH{<ݮtRsD2
&)&J
y-aL&:C3dK1f4u)S!
&I>QU2}O鷟MNӕXT. 29F4Ffu)w.*t(JۊƦ3A1̲lGG1(!s9<pP 6
nFo=T**%$PWE}6!G+"UB]E0dMȶN!1~_;?tCmHq(=󗓟PZq=>ư[s%S?ˉ98Ɨ1kD/IL0Y!#^ǰGpQɚqno
51tumc8̻ǆvoy[=uأ⬒Ys Ym]s|/c\f&|g?\tG;yݤ.9CTt۽{6ls&?6cutЄk0q7}C*V,TSvA.}<E|
7RM}$(,bīg'Z7v)ސQ%E)fbwFg&y.
ö"Mi_V6͐X*̰CQ]dXջYPI;<Rqaƴm¡w<, v+!%:AbⵑjmTciZ%@uk.'>7OHt,n
F5cB8:-*
 A=[ 
"Hn(Q=jTXfp9>Z׃XVdVirdq{lx3/`YiHAQ{ߺ(..%LCo>A4C8ZSG}J˧͎
p/YzrҢ\Jxt>,e=Bޕ+u̝GhEg/{ϽǶ{0<j\]!ءc{*HpkDZ=T{4[Rl;jJׂ @,N	߀aU
XHEh$;PPyi8pj<7⍳yA1
[	MJ͹%Q!AA&t>-,dZvz܉NMw1[F(1W?(ԶeQBa !t̒

WTQrO%z]s͍qLQ?}5Dz3SPTJr!)]Y>6(dt;|Ǭ
|$d~t.Rl^/`Zд΂
/SzmB|z6&l;-,ji	mtU=
||+/dZA-
\83^WJqN mES6y^q*4Z:}ay^/m!@\q-_/0&+00]^ۡ\4
U6gگho`*uqB/yKMSW:EOU6+Y	x:Nb
I_趲Qܒ6Mׂ@5,D<[ےZ|dMm\hibS$>Jud<ׄl+L׎dF>:-楁wMB#ۋ%
:,`3Rl=9p\?whrutTaۏLlϧd|v9?퉥YjlLpr4^2Ot}nUӻI&T>'NZtr٤M&0	=xMY.`@ lZ)_ίf9ݡZ.0l@G<{! o|*WR	<CDH*^!,~<=s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Xko:_5dG46X7My6hȤ*Rv
glQ-DgΜ93L[KWqcu&nuӢNx~a}gF]L
˕Ug,J3jUad֝,Q3/6nl-Jz;XJBrvD}~sｆsN5,|ܼpҾOoޜxN%OyxĹ-//}07ƮMk"w\
'ӻ~I9y͟d/:^Dz}wNgo:oiywucy^NT<k|SqxN6$jb{caNwZ(%Ke/\ 6D\F*zV 4I}I$~p^:aS~|{/>+
Q9t,upM-ن\+,$C
H㐕*axC@zr>! r_ѧP&VNx+Zv]^|:Y%S"兢BKO)6P.R[,)ɕSmW6Y
odK$KnJ3I^JS">o6ث!ke}TZfm6pzuw?e0n8P
2Ϩ^Bts1>p@1^
`,F+Dc-LdRgnXa\)3VzE	AD
R5ߢATb]hY9bhn[Se2V#&%899jyZz3`3G~?9g2b^˱֥[@]K>q7zڔ?+wr%n7U?yYRû]6gv6f2~sTDо])v9>ap{7'Q#;?t'C(Xz Fg.&h:@
,D:XΜz.$T[٥\akMNy͵`K2z8:(6N`f^e 㳩fs!M,X	{բ*)	U5ק*i\x:{,8o<,g*,摥tdJ6bј'1+d-(}0=EUO3!M2	kyy
| *ˡv12֙ZT(I8/Z<z*	Pz#mg۴(rL'ԈLbj	 =
T\פ+^/v ͆QapFB6AT/h̐d0tpkލ7b ^bx`KG޳!?:7VQP.8c:"<[:6/:e/¥wo['(S])౗pVФ)ZG YY?̟t][Dë-3 /1сT"\Ê,థ
ȵt焪6axPbe3HWBFbj+=M*Bه)k+2E'V}~ 	Hsn[c
hPAVsû7&b#&P  
u;+zMm`XIB`VJZ57y?R	h.a&$V
(
vBRk:Ow#uBgHϡ%8vv2j~f]]״	m* (
!Mwv$Jb>0	RƇ^w* !g4#t}+Yhwm--ZUN+zREŁBDy_-:dhP;ŬN:ZxъL3%8'u /ضӫAS;}JMcm[&&no-Uu:$2=)v#cq [(@,\O`|
\,BW	70CLu
lPjHpl
DfWye͘Dn܀$j0ſib6𦺾ԕJpJm<u!*,p< ^/&O5U__ѺĿ
G\jEVܫ;xpjK$p$̂t$efþ^|܌a;hA{eIi4j*K奢
f8]qf$t 	YNMERq/A:0^sW%bUVm/Q)\`/*A;#{+zn`{e {gn5~0Ypԁb;2[$͓Cȭ冀9э.rvueJE҇׉8)]&7f>Їjs5]n}k.V3^ݍݟ;kr/ĳ{n?s+5G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              WObT!PzrUH8yOH'Iuwpi@c3_;?эMYsC.3QɁѫeܣM6>qA7BoX[A䚇hmw85=+a![gd䒨GE)||z0%S++H_g4KKߨwzy}np2{DJZ-xmLWZWקUߵy]6BP*J/yogw%tU%_;rgzSAz2s}L\&JXko#oLZR6}OrU~ΎxǇΤj#	*4Y'9MeRVp_8SA;/2b(YU	q@#q
#^K5ZJ>d|xG9(?@RQecdZQ

2+̥	`)*4uU62Uvt2<dх43xA@rFi(klI.~=e3jcJ` nHsF_;We<|SrG_Y2IneХ2Cծp6z<cGd$4Q|<X\g4]̦0&J$^/	C1"𙬄ݓwbyFg*Ֆ$50C[A|VOHjET]zYo+80*XqD$MsJ:fgg']47}Nރ8~Lνt6ҫ^pqH4Qһ`Q<:LԽ ݡΕgkH>Ӥ3Zz@|ֵ
cŗK'wi2NxLǲJ[Mmjf||;Dܩ^HH+wH+̨s	 'iUj:j˝*E]%j\D6qJD*Rh"Gw0)wd˵
M&OCtlUGjh>@eDWײL!520gUEt	}VeK3nM*kgG bGgþ](VsS_d.;τJo()E0
;?^-mٚqpc&rS+0r²УQB3#Ӡ`SZF	g<TMH&o.J_%rgZbLQJWͬO
o~Ov-1>S(
*5ٌvkv	/O=POp8`0xOm+/\#6 'L.Kcص2Qr	մkZ0ua{]erBฑIf 
tj>LcY7|ʐ~.1ߥ]m t#ze(c_ThqA*
Km405FD#ndcyj{qORz&n<gL5;T*oʗ 'hPX5~bg0;<FWos=Gf<DڅPC\kC]U}'D+ܘcy*eJyvR$fS̈́_KB;Ȅ+^>A}nӞ˨"Û{o)kX (& EF  Dᧈ4h@k*dqs?_=2({M]è4v:t;@	,%
|>Y,sC<D򴔹
b_`=(yzU(xr8a[-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   #!/bin/sh

UCF="ucf --three-way --debconf-ok"

# rename ucf-conffile. This was mostly stolen from cacti.postinst after
# a short discussion on debian-mentors, see
# http://lists.debian.org/debian-mentors/2013/07/msg00027.html
# and the following thread. Thanks to Paul Gevers
rename_ucf_file() {
    local oldname
    local newname

    # override UCF_FORCE_CONFFNEW with an empty local variable
    local UCF_FORCE_CONFFNEW

    oldname="$1"
    newname="$2"
    if [ ! -e "$newname" ] ; then
        if [ -e "$oldname" ]; then
            mv "$oldname" "$newname"
        fi
        # ucf doesn't offer a documented way to do this, so we need to
        # peddle around with undocumented ucf internals.
        sed -i "s|$oldname|$newname|" /var/lib/ucf/hashfile
        ucfr --purge "$PKGNAME" "$oldname"
        ucfr "$PKGNAME" "$newname"
        # else: Don't do anything, leave old file in place
    fi
    ucfr "$PKGNAME" "$newname"
}

generate_directory_structure() {
    local pkgdir
    local locdir
    pkgdir="$1"
    locdir="$2"

    # generate empty directory structure

    (cd "$pkgdir" && find . -type d -print0 ) | \
      (cd "$locdir" && xargs -0 mkdir -p --)
}

# handle a single ucf_conffile by first checking whether the file might be
# accociated with a different package. If so, we keep our hands off the file
# so that a different package can safely hijack our conffiles.
# to hijack a file, simply ucfr it to a package before the ucf processing
# code.
# If the file is either unassociated or already associated with us, call ucf
# proper and register the file as ours.
handle_single_ucf_file()
{
    local pkgfile
    local locfile
    if [ -n "${UCF_HELPER_FUNCTIONS_DEBUG:-}" ]; then
    	set -x
    fi

    pkgfile="$1"
    locfile="$2"
    export DEBIAN_FRONTEND

    PKG="$(ucfq --with-colons "$locdir/$file" | head -n 1 | cut --delimiter=: --fields=2 )"
    # skip conffile if it is associated with a different package.
    # This allows other packages to safely hijack our conffiles.
    if [ -z "$PKG" ] || [ "$PKG" = "$PKGNAME" ]; then
        $UCF "$pkgfile" "$locdir/$file"
        ucfr "$PKGNAME" "$locdir/$file"
    fi
    set +x
}

# checks whether a file was deleted in the package and handle it on the local
# system appropriately: If the local file differs from what we had previously,
# we just unregister it and leave it on the system (preserving local changes),
# otherwise we remove it.
# this also removes conffiles that are zero-size after the
# ucf run, which might happen if the local admin has
# deleted a conffile that has changed in the package.
handle_deleted_ucf_file()
{
    local locfile
    local locdir
    local pkgdir
    if [ -n "${UCF_HELPER_FUNCTIONS_DEBUG:-}" ]; then
    	set -x
    fi
    locfile="$1"
    pkgdir="$2"
    locdir="$3"

    # compute the name of the reference file in $pkgdir
    reffile="$(echo "$locfile" | sed "s|$locdir|$pkgdir|")"
    if ! [ -e "$reffile" ]; then
        # if the reference file does not exist, then it was removed in the package
        # do as if the file was replaced with an empty file
        $UCF /dev/null "$locfile"
        if [ -s "$locfile" ]; then
            # the file has non-zero size after the ucf run. local admin must
            # have decided to keep the file with contents. Done here.
            :
        else
            # the file has zero size and can be removed
            # remove the file itself ('') and all possible backup/reference extensions
            for ext in '' '~' '%' .bak .dpkg-tmp .dpkg-new .dpkg-old .dpkg-dist .ucf-new .ucf-old .ucf-dist;  do
              rm -f "${locfile}$ext"
            done
        fi
        # unregister the file anyhow since the package doesn't know about it any more
        ucf --purge "${locfile}"
        ucfr --purge "$PKGNAME" "${locfile}"
    fi
    set +x
}

handle_all_ucf_files() {
    local pkgdir
    local locdir
    pkgdir="$1"
    locdir="$2"

    generate_directory_structure "$pkgdir" "$locdir"

    # handle regular ucf-conffiles by iterating through all conffiles
    # that come with the package
    for file in $(find "$pkgdir" -type f -printf '%P\n' ); do
        handle_single_ucf_file "$pkgdir/$file" "$locdir/$file"
    done

    # handle ucf-conffiles that were deleted in our package by iterating
    # through all ucf-conffiles that are registered for the package
    for locfile in $(ucfq --with-colons "$PKGNAME" | cut --delimiter=: --fields=1); do
        handle_deleted_ucf_file "$locfile" "$pkgdir" "$locdir"
    done
}

# vim:sw=4:sts=4:et:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      /.
/etc
/etc/ucf.conf
/usr
/usr/bin
/usr/bin/lcf
/usr/bin/ucf
/usr/bin/ucfq
/usr/bin/ucfr
/usr/share
/usr/share/doc
/usr/share/doc/ucf
/usr/share/doc/ucf/changelog.gz
/usr/share/doc/ucf/copyright
/usr/share/doc/ucf/examples
/usr/share/doc/ucf/examples/postinst
/usr/share/doc/ucf/examples/postrm
/usr/share/doc/ucf/examples/ucf_helper_functions
/usr/share/doc/ucf/examples/ucf_helper_functions/00README
/usr/share/doc/ucf/examples/ucf_helper_functions/TODO
/usr/share/doc/ucf/examples/ucf_helper_functions/test-list
/usr/share/doc/ucf/examples/ucf_helper_functions/tests
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/package-changed
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/package-orig
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_01
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_02
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_03
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_04
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_05
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_06
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_07
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_08
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_09
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_10
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_11
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_12
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_13
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_14
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_15
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_16
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_17
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_18
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_19
/usr/share/doc/ucf/examples/ucf_helper_functions/tests/test_20
/usr/share/doc/ucf/examples/ucf_helper_functions/testsuite
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/ucf
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/lcf.1.gz
/usr/share/man/man1/ucf.1.gz
/usr/share/man/man1/ucfq.1.gz
/usr/share/man/man1/ucfr.1.gz
/usr/share/man/man5
/usr/share/man/man5/ucf.conf.5.gz
/usr/share/ucf
/usr/share/ucf/ucf_helper_functions.sh
/var
/var/lib
/var/lib/ucf
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Package: ucf
Status: install ok unpacked
Priority: standard
Section: utils
Installed-Size: 214
Maintainer: Manoj Srivastava <srivasta@debian.org>
Architecture: all
Multi-Arch: foreign
Version: 3.0043+nmu1+deb12u1
Depends: debconf (>= 0.5) | debconf-2.0, sensible-utils
Conffiles:
 /etc/ucf.conf newconffile
Description: Update Configuration File(s): preserve user changes to config files
 Debian policy mandates that user changes to configuration files must be
 preserved during package upgrades. The easy way to achieve this behavior
 is to make the configuration file a 'conffile', in which case dpkg
 handles the file specially during upgrades, prompting the user as
 needed.
 .
 This is appropriate only if it is possible to distribute a default
 version that will work for most installations, although some system
 administrators may choose to modify it. This implies that the
 default version will be part of the package distribution, and must
 not be modified by the maintainer scripts during installation (or at
 any other time).
 .
 This script attempts to provide conffile-like handling for files that
 may not be labelled conffiles, and are not shipped in a Debian package,
 but handled by the postinst instead. This script allows one to
 maintain files in /etc, preserving user changes and in general
 offering the same facilities while upgrading that dpkg normally
 provides for 'conffiles'.
 .
 Additionally, this script provides facilities for transitioning a
 file that had not been provided with conffile-like protection to come
 under this schema, and attempts to minimize questions asked at
 installation time. Indeed, the transitioning facility is better than the
 one offered by dpkg while transitioning a file from a non-conffile to
 conffile status.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   7562ac5340900658ec38eeb127a81dd7  lib/runit-helper/runit-helper
4ce6fec81a1a85d51bdfcbf9b2e33d35  usr/share/doc/runit-helper/changelog.gz
968035ec19da7974b64a5a4b54739de0  usr/share/doc/runit-helper/copyright
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Package: runit-helper
Source: dh-runit
Version: 2.15.2
Architecture: all
Maintainer: Lorenzo Puliti <plorenzo@disroot.org>
Installed-Size: 19
Section: admin
Priority: optional
Multi-Arch: foreign
Homepage: https://salsa.debian.org/debian/dh-runit
Description: dh-runit implementation detail
 runit-helper provides code, which actually perform actions on system
 users on behalf of dh-runit package. This separation allows packages
 take advantage of improvement or fixes in 'dh-runit' without
 rebuilding.
 .
 This package is implementation detail of 'dh-runit'. It should never
 be installed manually. No assumption about its content can be made.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #!/bin/sh
# Copyright (C) 2017 Dmitry Bogatov <KAction@gnu.org>

# Author: Dmitry Bogatov <KAction@gnu.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/>.

set -e

# rescan and invoke-rc.d actions are done only if runit is init
is_runit () {
	[ -f  /run/runit.stopit ]
}

is_installed () {
	[ -f  /sbin/runit ]
}

# No-Op if the service is not enabled
# sv can't send signals to a disabled service
is_enabled () {
	[ -h /etc/service/"$NAME" ]
}

sv_warn () {
	echo "warning: sv: failed to signal $NAME"
	true
}

# workaround for races as in #919296
ok_pipe () {
	[ -p "/etc/sv/$NAME/supervise/ok" ]
}

postinst () {
	local action="${1}" previous="${2:-}"

	# create supervise links at runtime, only if runit is installed
	mkdir -p /run/runit/supervise
	if [ -e /lib/runit/make_svlinks ]; then
		/lib/runit/make_svlinks "$NAME"
	fi

	# loguser transition: to be removed when the transition is done 
	# we do ths before enable to avoid races
	# old loguser is 'runit-log', new is '_runit-log'
	# 'current' and 'lock' files in the run directory must be owned by
	# the new loguser
	if [ "${ENABLE}" = yes ] && \
		[ -f "/var/log/runit/$NAME/current" ] ; then
		loguser="$(stat --format '%U' /var/log/runit/$NAME/current)"
		if [ "${loguser}" = "runit-log" ]; then
			sv d "/etc/sv/$NAME/log" >/dev/null || true
			chown _runit-log:adm /var/log/runit/$NAME/current
			chown _runit-log:adm /var/log/runit/$NAME/lock
		fi
	fi

	# It is important to not override local admin
	# decision (see #899242 and 942323 ).
	if [ "${ENABLE}" = yes ] && \
		[ ! -h "/etc/runit/runsvdir/default/.$NAME" ] ; then
		# avoid infinte loop of symlinks
		if [ ! -h "/etc/runit/runsvdir/default/$NAME" ]; then
			ln -sf "/etc/sv/$NAME" "/etc/runit/runsvdir/default/$NAME"
			if is_runit ; then
				# always force a rescan after enable
				kill -s ALRM 1
			fi
		fi
	fi
	# ENABLE=no is always a no-op

	# Upgrade will changes destination of /etc/sv/{name}/supervise symlink from
	# /var/* to /run/*. If service was running, it important that its supervise
	# directory is still accessible via /etc/sv/{name}/supervise symlink.
	#
	# This code must be removed once there are no more packages with
	# /etc/sv/{name}/supervise -> /var/lib/runit/supervise/{name}

	old="/var/lib/runit/supervise/${NAME}" 
	new="/run/runit/supervise/${NAME}"
	if [ -d "${old}" ] ; then
		ln -sf "${old}" "${new}"
	fi

	old="/var/lib/runit/log/supervise/${NAME}" 
	new="/run/runit/supervise/${NAME}.log"
	if [ -d "${old}" ] ; then
		ln -sf "${old}" "${new}"
	fi

	# loguser transition: to be removed when the transition is done
	# we do this after enable to reduce chance of races
	if [ "${ENABLE}" = yes ] && \
		[ -f "/etc/sv/$NAME/log/run" ] ; then
		if is_installed && is_enabled ; then
			sv u "/etc/sv/$NAME/log" >/dev/null || true
		fi
	fi

	#invoke-rc.d
	if is_runit && is_enabled ; then
		if [ "${action}" = 'configure' ] || [ "${action}" = 'abort-upgrade' ] || \
			[ "${action}" = 'abort-deconfigure' ] || [ "${action}" = 'abort-remove' ] ; then
			if [ "${ONUPGRADE}" = restart ] && [ -n "${previous}" ] && ok_pipe ; then
				sv restart ${NAME} || sv_warn
			elif [ "${ONUPGRADE}" = reload ] && [ -n "${previous}" ] && ok_pipe ; then
				sv reload ${NAME} || sv_warn
			elif  ok_pipe ; then
				# ONUPGRADE=stop || ONUPGRADE=nostop
				# ONUPGRADE= restart || reload and [ ! -n "${previous}" ]
				sv start ${NAME} || sv_warn
			else
				return 0
			fi
		fi
	fi
}

prerm () {
	local action="${1}"
	# invoke-rc.d
	if is_runit && is_enabled ; then
		if [ "${ONUPGRADE}" = stop ] && ok_pipe ; then
			sv stop ${NAME} || sv_warn
		elif [ "${action}" = 'remove' ] && ok_pipe ; then
			# ONUPGRADE=restart || ONUPGRADE=nostop
			sv stop ${NAME} || sv_warn
		else
			return 0
		fi
	fi	
}

postrm () {
	local action="${1}"

	if [ "${action}" != 'purge' ] && [ "${action}" != 'remove' ] ; then
	    return
	fi

	# When "ENABLE=no" the $NAME link is an admin decision
	# so we don't remove it.
	# Links in other runsvdirs is responsibility of administrator.
	if [ "${action}" = 'remove' ] && [ "${ENABLE}" = yes ] ; then
		rm -f "/etc/runit/runsvdir/default/$NAME"
	fi

	# If runscript was never invoked, there will be no files
	# in this directory, and `dpkg' will remove it. In this case,
	# we have nothing to do.
	for supervise in "/var/lib/runit/supervise/$NAME" \
	                 "/var/lib/runit/log/supervise/$NAME" \
	                 "/etc/sv/$NAME/supervise" \
	                 "/etc/sv/$NAME/log/supervise"; do
		if [ -d "$supervise" ] ; then

			# Actually only `down' may be absent, but it does not
			# matter.

			for file in control lock ok pid stat status down ; do
				rm -f "$supervise/$file"
			done

			# It should be empty now. If it is not, it means that
			# system administrator put something there. It is very
			# stupid, but will of user is sacred, and directory is
			# left as-is in such case.
			#
			# NOTE: Non-POSIX option is used. The day coreutils will
			# no longer be essential, it will require a fix.
			if [ -h "$supervise" ]; then
				rm "$supervise"
			else
				rmdir --ignore-fail-on-non-empty "$supervise"
			fi
		fi
	done

	if [ "${action}" = 'purge' ] ; then
		rm -f "/etc/runit/runsvdir/default/$NAME"
		rm -f "/etc/runit/runsvdir/default/.$NAME"
		readonly logdir="/var/log/runit/${NAME}"
		if [ -d "${logdir}" ] ; then
			rm -r "${logdir}"
		fi
	fi
}

"$@"
# vim: sw=4:et
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Yks۸_vQRlfqڦn2@$$bE\ v{/@R,]$cǹfy_Ղ2A#ІNR9ꇒe.ON3eE
U)ͥ+Ռ٭R1I>7\V&ZIiR_P3]k("I4Js}Iik#[/0m+咑
RHi{2h6̤ncg$ʥ3=H>ӃCaHȣ`aEhgPR-\e\rAde8Tk6Q|>ge\ьwƕTTI%Sx`e%U+.d.`5>FzT~boB>{$ xѓ
cI1/`窠:BjwaEx\&!;{Y}<#&T	.d7z"~QاoJZHԒW,5R:uJ,XhB]\M&I?VÐ.*P8=Q	SFV$Uڅ~
i<?Mۊ<F(5rby!S[Z^Xǜ	i6$$
g\p7;|A嬽c~[yqF '9+-*B;X'kΰW
*z?JY|q$K
nT8_9_2N9dLJ_~ҭ{yvD况;P+(	&h3
O5~e2wqRY"уJ1U-xU1AEG*+/yҖь|AHS1ht\jp#rKWMaGIt=Q;vJevgI91ZBĀ"Dje.@F)ѢSڇ_2ceJX,>;'!Rm'J'M[:B8^8#Զn`, r@R![#U/8:^ E#rU)(Ld[F!=]
]A4s{p"I`u5wh{Sa~Fe+ˋpfbT9 &Ϊר6!;u,kZz(r(6ou'ٚzQ9 ,g.p/w>= 㕔CQ9+w!j*$3ʋZ<!gc7R5U%qmO0`:^·kq2&NC{fs.qb~'_[[=]t9e}Ɣvgx6O+n<:i?*7qm*B07@v⑮t˯Zk/.&Ѩ׹YS`Җ\3UԀ3ĲW`󤝜4Qw	ZS` sٜ>xq_4a*
0iAxɳAfH3m$9qY
w-m7Cۻ	l%Დ+Qxt&jгCAŰKq7i%)O$앪[޹?*{SSVJUsGOE{سaR.Xa@.[J=FhXRYW0A Ί
Q0_6S$c|㏳ts}a8_N9gU8l䰲wݡowR C y̻h]Q?>SAНv:Y
W}268NCZRe ~݌5<&QUۛ{?a8	zK,!PeE	A\2V?9n)"7ܡ;'HNOzKHHQ52dA~Thnr#meЉgY!;tgC[/
{;nʹv;ĠCu=lƽA<t	oc [9
[`- ޿Ri`o{Ǹ	%d3`;T&͡B7I4\.
mKvhqt{mQ܊(']ӚYߕ*F؃
}7;`9\?%\GS4H:iGAok9JnPqæ`ybBcX|h'4=UؒYZ6v=	x"2#?Svokij7Z
!eLҕjjyx#@64_}>}-I8I溞M*&О7`^A`,c6Ng'pH5C9ȷWi^ʬ/ZR;X}h
#X_f<J`a'%/_)L0C(!~3%KGߢǓ&MX+Y5D ?A
5PbOi}Y/?^Y5柷4|pIR$QYQ%{߷x)8|#'au`o']P;\\9lߎM@yEI| 5}G>0C䓜֦Xed&z}3$VR04!
W
`\_+qYª                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: dh-runit
Upstream-Contact: Lorenzo Puliti <plorenzo@disroot.org>
Source: https://salsa.debian.org/debian/dh-runit.git

Files: *
Copyright: 2016-2019 Dmitry Bogatov <KAction@disroot.org>
	2020-2022 Lorenzo Puliti <plorenzo@disroot.org>
License: GPL-3+

License: GPL-3+
 This package 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 package 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/>
 .
 On Debian systems, the complete text of the GNU General
 Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               /.
/lib
/lib/runit-helper
/lib/runit-helper/runit-helper
/usr
/usr/share
/usr/share/doc
/usr/share/doc/runit-helper
/usr/share/doc/runit-helper/changelog.gz
/usr/share/doc/runit-helper/copyright
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Package: runit-helper
Status: install reinstreq unpacked
Priority: optional
Section: admin
Installed-Size: 19
Maintainer: Lorenzo Puliti <plorenzo@disroot.org>
Architecture: all
Multi-Arch: foreign
Source: dh-runit
Version: 2.15.2
Description: dh-runit implementation detail
 runit-helper provides code, which actually perform actions on system
 users on behalf of dh-runit package. This separation allows packages
 take advantage of improvement or fixes in 'dh-runit' without
 rebuilding.
 .
 This package is implementation detail of 'dh-runit'. It should never
 be installed manually. No assumption about its content can be made.
Homepage: https://salsa.debian.org/debian/dh-runit
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Package: runit-helper
Status: install ok unpacked
Priority: optional
Section: admin
Installed-Size: 19
Maintainer: Lorenzo Puliti <plorenzo@disroot.org>
Architecture: all
Multi-Arch: foreign
Source: dh-runit
Version: 2.15.2
Description: dh-runit implementation detail
 runit-helper provides code, which actually perform actions on system
 users on behalf of dh-runit package. This separation allows packages
 take advantage of improvement or fixes in 'dh-runit' without
 rebuilding.
 .
 This package is implementation detail of 'dh-runit'. It should never
 be installed manually. No assumption about its content can be made.
Homepage: https://salsa.debian.org/debian/dh-runit
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            # Triggers added by dh_makeshlibs/13.2.1
activate-noawait ldconfig
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             a515e1a63090ec10e0a8ca7d7c93b021  usr/lib/x86_64-linux-gnu/libnsl.so.2.0.1
e92fe3cae0db55946becbc9afafa1caa  usr/share/doc/libnsl2/changelog.Debian.gz
6630929754e0b23b4d0a0df9a4222408  usr/share/doc/libnsl2/changelog.gz
42dce1c4da6a668b04a202ba2f800e5a  usr/share/doc/libnsl2/copyright
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Package: libnsl2
Source: libnsl
Version: 1.3.0-2
Architecture: amd64
Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Installed-Size: 127
Depends: libc6 (>= 2.14), libtirpc3 (>= 1.0.2)
Section: libs
Priority: optional
Multi-Arch: same
Homepage: https://github.com/thkukuk/libnsl
Description: Public client interface for NIS(YP) and NIS+
 This package contains the libnsl library, which contains the public client
 interface for NIS(YP) and NIS+. This code was formerly part of glibc, but is
 now standalone to be able to link against TI-RPC for IPv6 support.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 libnsl.so.2 libnsl2 #MINVER#
| libnsl2 (>> 1.3.0), libnsl2 (<< 1.3.1)
 LIBNSL_1.0.1@LIBNSL_1.0.1 1.0.1
 LIBNSL_1.0.2@LIBNSL_1.0.2 1.0.2
 LIBNSL_1.0@LIBNSL_1.0 1.0
 LIBNSL_PRIVATE@LIBNSL_PRIVATE 0 1
 __create_ib_request@LIBNSL_PRIVATE 0 1
 __do_niscall3@LIBNSL_PRIVATE 0 1
 __follow_path@LIBNSL_PRIVATE 0 1
 __nisbind_destroy@LIBNSL_PRIVATE 0 1
 __prepare_niscall@LIBNSL_PRIVATE 0 1
 _xdr_ib_request@LIBNSL_PRIVATE 0 1
 _xdr_nis_result@LIBNSL_PRIVATE 0 1
 nis_add@LIBNSL_1.0 1.0
 nis_add_entry@LIBNSL_1.0 1.0
 nis_addmember@LIBNSL_1.0 1.0
 nis_checkpoint@LIBNSL_1.0 1.0
 nis_clone_directory@LIBNSL_1.0 1.0
 nis_clone_object@LIBNSL_1.0 1.0
 nis_clone_result@LIBNSL_1.0 1.0
 nis_creategroup@LIBNSL_1.0 1.0
 nis_destroy_object@LIBNSL_1.0 1.0
 nis_destroygroup@LIBNSL_1.0 1.0
 nis_dir_cmp@LIBNSL_1.0 1.0
 nis_domain_of@LIBNSL_1.0 1.0
 nis_domain_of_r@LIBNSL_1.0 1.0
 nis_first_entry@LIBNSL_1.0 1.0
 nis_free_directory@LIBNSL_1.0 1.0
 nis_free_object@LIBNSL_1.0 1.0
 nis_free_request@LIBNSL_1.0 1.0
 nis_freenames@LIBNSL_1.0 1.0
 nis_freeresult@LIBNSL_1.0 1.0
 nis_freeservlist@LIBNSL_1.0 1.0
 nis_freetags@LIBNSL_1.0 1.0
 nis_getnames@LIBNSL_1.0 1.0
 nis_getservlist@LIBNSL_1.0 1.0
 nis_ismember@LIBNSL_1.0 1.0
 nis_leaf_of@LIBNSL_1.0 1.0
 nis_leaf_of_r@LIBNSL_1.0 1.0
 nis_lerror@LIBNSL_1.0 1.0
 nis_list@LIBNSL_1.0 1.0
 nis_local_directory@LIBNSL_1.0 1.0
 nis_local_group@LIBNSL_1.0 1.0
 nis_local_host@LIBNSL_1.0 1.0
 nis_local_principal@LIBNSL_1.0 1.0
 nis_lookup@LIBNSL_1.0 1.0
 nis_mkdir@LIBNSL_1.0 1.0
 nis_modify@LIBNSL_1.0 1.0
 nis_modify_entry@LIBNSL_1.0 1.0
 nis_name_of@LIBNSL_1.0 1.0
 nis_name_of_r@LIBNSL_1.0 1.0
 nis_next_entry@LIBNSL_1.0 1.0
 nis_perror@LIBNSL_1.0 1.0
 nis_ping@LIBNSL_1.0 1.0
 nis_print_directory@LIBNSL_1.0 1.0
 nis_print_entry@LIBNSL_1.0 1.0
 nis_print_group@LIBNSL_1.0 1.0
 nis_print_group_entry@LIBNSL_1.0 1.0
 nis_print_link@LIBNSL_1.0 1.0
 nis_print_object@LIBNSL_1.0 1.0
 nis_print_result@LIBNSL_1.0 1.0
 nis_print_rights@LIBNSL_1.0 1.0
 nis_print_table@LIBNSL_1.0 1.0
 nis_read_obj@LIBNSL_1.0 1.0
 nis_remove@LIBNSL_1.0 1.0
 nis_remove_entry@LIBNSL_1.0 1.0
 nis_removemember@LIBNSL_1.0 1.0
 nis_rmdir@LIBNSL_1.0 1.0
 nis_servstate@LIBNSL_1.0 1.0
 nis_sperrno@LIBNSL_1.0 1.0
 nis_sperror@LIBNSL_1.0 1.0
 nis_sperror_r@LIBNSL_1.0 1.0
 nis_stats@LIBNSL_1.0 1.0
 nis_verifygroup@LIBNSL_1.0 1.0
 nis_write_obj@LIBNSL_1.0 1.0
 taddr2host@LIBNSL_1.0.2 1.0.2
 taddr2ipstr@LIBNSL_1.0.2 1.0.2
 taddr2port@LIBNSL_1.0.2 1.0.2
 xdr_cback_data@LIBNSL_1.0 1.0
 xdr_domainname@LIBNSL_1.0 1.0
 xdr_keydat@LIBNSL_1.0.1 1.0.1
 xdr_obj_p@LIBNSL_1.0 1.0
 xdr_valdat@LIBNSL_1.0.1 1.0.1
 xdr_ypbind2_binding@LIBNSL_1.0 1.0
 xdr_ypbind2_resp@LIBNSL_1.0 1.0
 xdr_ypbind2_setdom@LIBNSL_1.0 1.0
 xdr_ypbind3_binding@LIBNSL_1.0 1.0
 xdr_ypbind3_resp@LIBNSL_1.0 1.0
 xdr_ypbind3_setdom@LIBNSL_1.0 1.0
 xdr_ypbind_oldsetdom@LIBNSL_1.0 1.0
 xdr_ypbind_resptype@LIBNSL_1.0 1.0
 xdr_ypmap_parms@LIBNSL_1.0 1.0
 xdr_ypmaplist@LIBNSL_1.0 1.0
 xdr_yppushresp_xfr@LIBNSL_1.0 1.0
 xdr_ypreq_key@LIBNSL_1.0 1.0
 xdr_ypreq_newxfr@LIBNSL_1.0 1.0
 xdr_ypreq_nokey@LIBNSL_1.0 1.0
 xdr_ypreq_xfr@LIBNSL_1.0 1.0
 xdr_ypresp_all@LIBNSL_1.0 1.0
 xdr_ypresp_key_val@LIBNSL_1.0 1.0
 xdr_ypresp_maplist@LIBNSL_1.0 1.0
 xdr_ypresp_master@LIBNSL_1.0 1.0
 xdr_ypresp_order@LIBNSL_1.0 1.0
 xdr_ypresp_val@LIBNSL_1.0 1.0
 xdr_ypresp_xfr@LIBNSL_1.0 1.0
 xdr_ypstat@LIBNSL_1.0 1.0
 xdr_ypxfrstat@LIBNSL_1.0 1.0
 yp_all@LIBNSL_1.0 1.0
 yp_bind@LIBNSL_1.0 1.0
 yp_first@LIBNSL_1.0 1.0
 yp_get_default_domain@LIBNSL_1.0 1.0
 yp_maplist@LIBNSL_1.0 1.0
 yp_master@LIBNSL_1.0 1.0
 yp_match@LIBNSL_1.0 1.0
 yp_next@LIBNSL_1.0 1.0
 yp_order@LIBNSL_1.0 1.0
 yp_unbind@LIBNSL_1.0 1.0
 ypbinderr_string@LIBNSL_1.0 1.0
 yperr_string@LIBNSL_1.0 1.0
 ypprot_err@LIBNSL_1.0 1.0
                                                                                                                                                                                                                                                                                                                                                                 libnsl 2 libnsl2 (>= 1.3.0)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ELF          >            @       (          @ 8 	 @                                 (      (                    0       0       0      iA      iA                                                                                   
      H                                                                8      8      8      $       $              Ptd                                        Qtd                                                  Rtd                                                 GNU :i~\=padY    %   [         "  5(#2RM     [       \   ^   a   b   d           i       j       k   l       o   p   q   s   t   u   w       x           z   {   }   ~                     ֙Y4;Djq
AY9/(T&#܎;_ZA(S{NFY8SF)	WOeZNTN:+òFTJ RB``
qAdJ!\4gCw1kͲFT&"8U4]Њ                                                 r                      @                     s                                                                                                                                                                                                                                                               -                                                                                                          ,                                                                                     9                                          3                                                                                                                                                                                                W                                                                                                         *                     ]                                                                                      ]                                          X                                                               -                                                                                    9                     3                                          }                     	                                                               b                                                                                                                                                      q                                                                                                         ,                       <                     @                     #                                          C                                          _                     }                                          F   "                   i                                                               T                                                                                     0\      ^           0d                 [      c           \      ~       c     `n      7       p    8                  0                                  c      I           `                 T      2      Q    `^      P            h                  m                 @l                                   `Q      %                	       U      n      `         !                    m      S       L                 N  !                   p      n       .    p]      r            a      %       x    0p             :    ]      m       D    k      %      $    \      X                        o    [      >           E             e    0a      A      M    ^      L          `o                 W            a    [      Y            ,              __gmon_start__ _ITM_deregisterTMCloneTable _ITM_registerTMCloneTable __cxa_finalize dot_quad_addr cidr_mask_addr __ctype_toupper_loc strtok strcasecmp tcpd_context fopen xgets strlen strspn split_at fclose hosts_access_verbose process_options __syslog_chk tcpd_warn __errno_location __stack_chk_fail strncasecmp strchr getaddrinfo unknown freeaddrinfo eval_hostaddr eval_hostname innetgr paranoid yp_get_default_domain strtol __isoc99_fscanf eval_user __isoc99_sscanf hosts_access resident tcpd_buf _setjmp hosts_allow_table hosts_deny_table __sprintf_chk write fgetc ungetc __strcat_chk percent_x fgets stat __longjmp_chk dry_run tcpd_jump nice rfc931_timeout shell_cmd setsockopt umask __ctype_b_loc strcspn setenv eval_client deny_severity dup clean_exit execl fork wait getgrnam endgrent setgid setgroups getpwnam endpwent setuid initgroups allow_severity sigemptyset sigaddset sigprocmask sigaction waitpid raise signal rfc931 socket fdopen setbuf __sigsetjmp strncpy alarm fileno bind connect __fprintf_chk fflush ferror feof __strcpy_chk eval_hostinfo eval_port eval_server hosts_ctl request_init refuse memcpy sleep fix_options getsockname getprotobyname getsockopt shutdown recvfrom sock_hostaddr getnameinfo sock_hostname memcmp sock_host getpeername getpid request_set inet_addr __vsyslog_chk percent_m strerror stpcpy libnsl.so.2 libc.so.6 libwrap.so.0 LIBNSL_1.0 GLIBC_2.11 GLIBC_2.14 GLIBC_2.33 GLIBC_2.4 GLIBC_2.7 GLIBC_2.3.4 GLIBC_2.3 GLIBC_2.2.5                                                                	        
                                                                 3         `/  
 V        ?           	 a        l        w     ii
        ii
        ti	        ii
        ui	                      7                    P7                                                                  @                   `             [      p             a                   g                   l                   p                   x                         а                                                                              0                   @                   P                   `                   p                                                                                         ƃ                   ̓      б             ԃ                   ۃ                                                                 (              O      8                   @             N      P                   X             J      h                   p             I                                      0N                   
                    M                                      I      Ȳ                   в              L                   !                   I                   (                    K                   /                   `H      (             4      0             P      @                   H             @H      X                   `              H      p             =      x             F      p         o           x         	                    d                    k                    e                    b                    ]                    a                    q                    ,                    z           ȯ         m           Я         [           د         c                    r                    J                                        T                                (                    0                    8                    @                    H         ^           P                    X         l           `                    h                    p         
           x            