diff options
author | Chris 'BinGOs' Williams <chris@bingosnet.co.uk> | 2011-05-19 00:31:23 +0100 |
---|---|---|
committer | Chris 'BinGOs' Williams <chris@bingosnet.co.uk> | 2011-06-09 12:17:11 +0100 |
commit | 06fd9d7a579f00bca05b6ba920373565ea10c138 (patch) | |
tree | b0bd9adc6f6d9985b0082f971892bbef2f3eb4f0 /cpan | |
parent | d1f3365ee1edd6c60be83dd2d03cbdd0d4278219 (diff) | |
download | perl-06fd9d7a579f00bca05b6ba920373565ea10c138.tar.gz |
Updated Sys-Syslog to CPAN version 0.29
[DELTA]
0.29 -- 2011.04.18 -- Sebastien Aperghis-Tramoni (SAPER) #PerlQA2011
[BUGFIX] CPAN-RT#55215: Sys::Syslog might call exit which triggers
DESTROY (Alexander Berger).
[BUGFIX] CPAN-RT#55151: Allow temporary facility with native mechanism
(Tim Jenkins).
[BUGFIX] CPAN-RT#50928: Convert Win32 files to Unix EOLs (Steve Hay).
[BUGFIX] CPAN-RT#50534: Unwanted space at the end of syslog message
(Eugene V. Lyubimkin).
[BUGFIX] CPAN-RT#49877: Options not reset after closelog() (Herbert Brezina).
[BUGFIX] CPAN-RT#48386: Add Win32::EventLog as a prerequisite (kmx and
Laurent Dami).
[FEATURE] CPAN-RT#50534: Added options noeol and nonul.
[DIST] Set INSTALLDIRS to "site" when installed on Perl 5.11+
0.28 -- 2011.04.16 -- Sebastien Aperghis-Tramoni (SAPER) #PerlQA2011
[BUGFIX] CPAN-RT#56084: Reset connection tracking vars (Vladimir Marek).
[BUGFIX] CPAN-RT#56826: Avoid memory corruption when closelog() is
called twice (Andreas Jaekel).
[BUGFIX] CPAN-RT#64287: Make strftime() Windows-compatible (Dave Stafford).
[FEATURE] New API for setlogsock(), in order to allow the setting
of new options. Thanks to Jake Scott for the idea.
[CODE] Modify can_load() so it can print the warnings if desired.
[CODE] CPAN-RT#44410: Provide fallback macros in Syslog.xs in
order to compile on Novell Netware.
[TESTS] In blead, the distribution was moved from ext/Sys/Syslog
to ext/Sys-Syslog. t/constants.t had to be fixed (Vincent Pit).
[TESTS] CPAN-RT#53317: In core, Sys-Syslog was moved to cpan/, thus
making t/constants.t unable to find macros.all (David Mitchell).
[TESTS] CPAN-RT#64716: Skip t/data-validation.t if the available
version of POE::Component::Server::Syslog is too old.
[DIST] Bleadperl no longer require an empty MAN3PODS (Nicholas Clark).
[DIST] Removed unneeded modules in Makefile.PL (Nicholas Clark).
[DOC] Recreated Sys::Syslog history from the unified git repository.
[DOC] Added a section to list the matching Perl and Sys::Syslog version.
[DOC] CPAN-RT#49859: Removed a dead link (Leon Brocard).
Diffstat (limited to 'cpan')
-rw-r--r-- | cpan/Sys-Syslog/Changes | 116 | ||||
-rw-r--r-- | cpan/Sys-Syslog/Makefile.PL | 34 | ||||
-rw-r--r-- | cpan/Sys-Syslog/README | 2 | ||||
-rw-r--r-- | cpan/Sys-Syslog/Syslog.pm | 561 | ||||
-rw-r--r-- | cpan/Sys-Syslog/Syslog.xs | 85 | ||||
-rw-r--r-- | cpan/Sys-Syslog/t/constants.t | 1 | ||||
-rw-r--r-- | cpan/Sys-Syslog/t/syslog.t | 16 | ||||
-rw-r--r-- | cpan/Sys-Syslog/win32/PerlLog.mc | 1204 | ||||
-rw-r--r-- | cpan/Sys-Syslog/win32/PerlLog_dll.uu | 342 |
9 files changed, 1305 insertions, 1056 deletions
diff --git a/cpan/Sys-Syslog/Changes b/cpan/Sys-Syslog/Changes index 2f6653baa8..81f8bb1892 100644 --- a/cpan/Sys-Syslog/Changes +++ b/cpan/Sys-Syslog/Changes @@ -1,5 +1,41 @@ Revision history for Sys-Syslog +0.29 -- 2011.04.18 -- Sebastien Aperghis-Tramoni (SAPER) #PerlQA2011 + [BUGFIX] CPAN-RT#55215: Sys::Syslog might call exit which triggers + DESTROY (Alexander Berger). + [BUGFIX] CPAN-RT#55151: Allow temporary facility with native mechanism + (Tim Jenkins). + [BUGFIX] CPAN-RT#50928: Convert Win32 files to Unix EOLs (Steve Hay). + [BUGFIX] CPAN-RT#50534: Unwanted space at the end of syslog message + (Eugene V. Lyubimkin). + [BUGFIX] CPAN-RT#49877: Options not reset after closelog() (Herbert Brezina). + [BUGFIX] CPAN-RT#48386: Add Win32::EventLog as a prerequisite (kmx and + Laurent Dami). + [FEATURE] CPAN-RT#50534: Added options noeol and nonul. + [DIST] Set INSTALLDIRS to "site" when installed on Perl 5.11+ + +0.28 -- 2011.04.16 -- Sebastien Aperghis-Tramoni (SAPER) #PerlQA2011 + [BUGFIX] CPAN-RT#56084: Reset connection tracking vars (Vladimir Marek). + [BUGFIX] CPAN-RT#56826: Avoid memory corruption when closelog() is + called twice (Andreas Jaekel). + [BUGFIX] CPAN-RT#64287: Make strftime() Windows-compatible (Dave Stafford). + [FEATURE] New API for setlogsock(), in order to allow the setting + of new options. Thanks to Jake Scott for the idea. + [CODE] Modify can_load() so it can print the warnings if desired. + [CODE] CPAN-RT#44410: Provide fallback macros in Syslog.xs in + order to compile on Novell Netware. + [TESTS] In blead, the distribution was moved from ext/Sys/Syslog + to ext/Sys-Syslog. t/constants.t had to be fixed (Vincent Pit). + [TESTS] CPAN-RT#53317: In core, Sys-Syslog was moved to cpan/, thus + making t/constants.t unable to find macros.all (David Mitchell). + [TESTS] CPAN-RT#64716: Skip t/data-validation.t if the available + version of POE::Component::Server::Syslog is too old. + [DIST] Bleadperl no longer require an empty MAN3PODS (Nicholas Clark). + [DIST] Removed unneeded modules in Makefile.PL (Nicholas Clark). + [DOC] Recreated Sys::Syslog history from the unified git repository. + [DOC] Added a section to list the matching Perl and Sys::Syslog version. + [DOC] CPAN-RT#49859: Removed a dead link (Leon Brocard). + 0.27 -- 2008.09.21 -- Sebastien Aperghis-Tramoni (SAPER) [BUGFIX] Fixed compilation on Win32, thanks to Serguei Trouchelle. Also added stubs so calling the XS functions will never fail. @@ -167,6 +203,8 @@ Revision history for Sys-Syslog [TESTS] Added t/distchk.t, t/podspell.t, t/podcover.t, t/portfs.t 0.09 -- 2005.12.06 -- Sebastien Aperghis-Tramoni (SAPER) + [BUGFIX] Escape percent signs in error message when interpolating %m + (Ronald J. Kimball). [CODE] Now setlogsock() really croak(), as documented. [DIST] CPANized from blead@26281. [DIST] Modified Makefile.PL so that ExtUtils::Constant is conditionaly @@ -175,3 +213,81 @@ Revision history for Sys-Syslog [DOC] Added support and license information. [TESTS] Rewrote and ported t/syslog.t to Test::More +0.08 -- 2005.12.03 + [FEATURES] syslog() can now accept a message without printf() escapes + and arguments (Gisle Aas ). + [DOC] Document that openlog() might die (Rafael Garcia-Suarez). + +0.07 -- 2005.06.27 + [CODE] Use XSLoader instead of DynaLoader (Alexey Tourbin). + [DOC] Shows the correct way to use syslog() (Dave Mitchell). + +0.06 -- 2004.12.14 + [FEATURE] Allow escaping %m as %%m in Sys::Syslog format strings (Rafael + Garcia-Suarez, suggested by Joshua Richardson and Yitzchak Scott-Thoennes). + [CODE] Make Sys::Syslog stricture-compliant (Rafael Garcia-Suarez). + [DOC] Document $Sys::Syslog::host (Jay Hannah). + +0.05 -- 2004.04.06 + [FEATURE] IRIX wants setlogsock("stream") (Jarkko Hietaniemi). + [FEATURE] Allow syslog() to use numeric constants in addition to strings + for facility names and priorities (Jim Schneider ). + [DOC] Remind users to always use openlog() (Jarkko Hietaniemi). + +0.04 -- 2003.08.13 + [BUGFIX] Do not use "udp" on some platforms (Slaven Rezic). + [BUGFIX] Perl-RT#18180: Fixed a problem with Sys:Syslog on Solaris 8 + with perl 5.8.0 (Joost van Baal). + [BUGFIX] Fixed some warnings (Jarkko Hietaniemi). + [BUGFIX] Better error messages (Jari Aalto). + +0.03 -- 2002.03.23 + [BUGFIX] Fixed copious warnings from Sys::Syslog (Andreas König). + [FEATURE] Failover to different communication modes by Nick Williams. + +0.02 -- 2001.06.04 + [BUGFIX] /dev/console may not be writable in Syslog.pm (Ask Bjoern Hansen). + [BUGFIX] Fixed for accidental arguments to autoloaded constants (Gurusamy Sarathy). + [BUGFIX] Make _PATH_LOG() return "" if not available (Gurusamy Sarathy). + [BUGFIX] Forked child may not exit correctly if it failed to open + /dev/console (Graham Barr). + [BUGFIX] More checking in case someone has broken their services or + protocol databases (Robert Spier). + [BUGFIX] xlate() doesn't handle LOG_EMERG (Mark J. Reed). + [CODE] Code for constant()s regenerated by Nicholas Clark. + [TESTS] Added syslog.t to check if Sys::Syslog works (Tom Hughes). + +0.01 -- 2000.02.04 -- Gurusamy Sarathy + [FEATURE] Sys::Syslog now uses XSUBs to access facilities from syslog.h + so it no longer requires syslog.ph to exist. Thanks to Tom Hughes. + As a consequence, Sys::Syslog moved from lib/ to ext/. + +perl 5.004_03 -- 1997.09.05 -- Tim Bunce + [BUGFIX] Handle missing _PATH_LOG (Ulrich Pfeifer). + +perl 5.004_02 -- 1997.08.07 -- Tim Bunce + [FEATURE] UNIX domain sockets support, by Sean Robinson and Tim Bunce. + +perl 5.004_01 -- 1997.06.11 -- Tim Bunce + [BUGFIX] Allows FQDN (even allowing "_"). + +perl 5.004 -- 1997.05.15 -- Chip Salzenberg + [BUGFIX] Fixed $whoami calulation (Marc Rouleau). + [BUGFIX] Allows hyphens in hostnames (Jerome Abela). + +perl 5.003_01 -- 1996.06.18 -- Charles Bailey + [CODE] Moved call to hostname() into connect() function, and eliminated + domain suffix. + [DOC] Correct documentation for calling sequence of syslog() function. + +perl 5.002_01 -- 1996.03.25 -- Charles Bailey + [CODE] Use Sys::Hostname::hostname() only when necessary. + +perl 5.002 -- 1996.02.29 -- Larry Wall + [CODE] Use constants from Socket.pm (Andy Dougherty). + [CODE] Connect to the name given by Sys::Hostname::hostname() instead + of "localhost" (Andy Dougherty). + [DOC] Added documentation, thanks to Hallvard B Furuseth. + +perl 5.000 -- 1994.10.17 -- Larry Wall + [DIST] Converted from lib/syslog.pl to lib/Sys/Syslog.pm diff --git a/cpan/Sys-Syslog/Makefile.PL b/cpan/Sys-Syslog/Makefile.PL index 790853ce8a..a402896a3d 100644 --- a/cpan/Sys-Syslog/Makefile.PL +++ b/cpan/Sys-Syslog/Makefile.PL @@ -1,11 +1,8 @@ +use 5.005; use strict; -use Config; use ExtUtils::MakeMaker; -eval 'use ExtUtils::MakeMaker::Coverage'; use File::Copy; -use File::Path; use File::Spec; -require 5.005; # create a typemap for Perl 5.6 @@ -23,14 +20,15 @@ my %virtual_path = ( 'Syslog.pm' => '$(INST_LIBDIR)/Syslog.pm' ); # detect when to use Win32::EvenLog my (@extra_params, @extra_prereqs); -my $use_eventlog = eval "use Win32::EventLog; 1"; -if ($use_eventlog) { +if ($^O =~ /Win32/) { print " * Win32::EventLog detected.\n"; my $name = "PerlLog"; push @extra_prereqs, - Win32 => 0, "Win32::TieRegistry" => 0, "Win32::EventLog" => 0; + "Win32::EventLog" => 0, + "Win32::TieRegistry" => 0, + "Win32::EventLog" => 0; $virtual_path{'win32/Win32.pm' } = '$(INST_LIBDIR)/Syslog/Win32.pm'; $virtual_path{'win32/PerlLog.dll'} = '$(INST_ARCHAUTODIR)/PerlLog.dll'; @@ -53,22 +51,9 @@ if ($use_eventlog) { close(DLL); } } -elsif ($^O =~ /Win32/) { - print <<"NOTICE" - *** You're running on a Win32 system, but you lack the Win32::EventLog\a - *** module, part of the libwin32 distribution. Although Sys::Syslog can - *** be used without Win32::EventLog, it won't be very useful except for - *** sending remote syslog messages. If you want to log messages on the - *** local host as well, please install libwin32 then Sys::Syslog again. -NOTICE -} # detect when being built in Perl core -if (grep { $_ eq 'PERL_CORE=1' } @ARGV) { - push @extra_params, - MAN3PODS => {}; # Pods will be built by installman. -} -else { +if (not grep { $_ eq 'PERL_CORE=1' } @ARGV) { push @extra_params, DEFINE => '-DUSE_PPPORT_H'; } @@ -76,13 +61,18 @@ else { # on pre-5.6 Perls, add warnings::compat to the prereq modules push @extra_prereqs, "warnings::compat" => "0.06" if $] < 5.006; +# starting with Perl 5.11, "site" and "vendor" directories finally are +# before "perl" (core) in @INC, thus allowing dual-life modules to be +# updated without the need to overwrite the old version +my $installdirs = $] < 5.011 ? "perl" : "site"; + WriteMakefile( NAME => 'Sys::Syslog', LICENSE => 'perl', AUTHOR => 'Sebastien Aperghis-Tramoni <sebastien@aperghis.net>', VERSION_FROM => 'Syslog.pm', ABSTRACT_FROM => 'Syslog.pm', - INSTALLDIRS => 'perl', + INSTALLDIRS => $installdirs, XSPROTOARG => '-noprototypes', PM => \%virtual_path, PREREQ_PM => { diff --git a/cpan/Sys-Syslog/README b/cpan/Sys-Syslog/README index 68bf1b69e0..d68a12aa43 100644 --- a/cpan/Sys-Syslog/README +++ b/cpan/Sys-Syslog/README @@ -63,7 +63,7 @@ SUPPORT AND DOCUMENTATION COPYRIGHT AND LICENCE - Copyright (C) 1990-2008 by Larry Wall and others. + Copyright (C) 1990-2009 by Larry Wall and others. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/cpan/Sys-Syslog/Syslog.pm b/cpan/Sys-Syslog/Syslog.pm index 002e6e4f16..a68f817a81 100644 --- a/cpan/Sys-Syslog/Syslog.pm +++ b/cpan/Sys-Syslog/Syslog.pm @@ -3,16 +3,17 @@ use strict; use warnings; use warnings::register; use Carp; -use Exporter (); -use Fcntl qw(O_WRONLY); +use Exporter (); +use Fcntl qw< O_WRONLY >; use File::Basename; -use POSIX qw(strftime setlocale LC_TIME); -use Socket ':all'; +use POSIX qw< strftime setlocale LC_TIME >; +use Socket qw< :all >; require 5.005; + { no strict 'vars'; - $VERSION = '0.27'; - @ISA = qw(Exporter); + $VERSION = '0.29'; + @ISA = qw< Exporter >; %EXPORT_TAGS = ( standard => [qw(openlog syslog closelog setlogmask)], @@ -86,20 +87,23 @@ sub silent_eval (&); # Global variables # use vars qw($facility); -my $connected = 0; # flag to indicate if we're connected or not +my $connected = 0; # flag to indicate if we're connected or not my $syslog_send; # coderef of the function used to send messages -my $syslog_path = undef; # syslog path for "stream" and "unix" mechanisms -my $syslog_xobj = undef; # if defined, holds the external object used to send messages -my $transmit_ok = 0; # flag to indicate if the last message was transmited -my $sock_timeout = 0; # socket timeout, see below -my $current_proto = undef; # current mechanism used to transmit messages -my $ident = ''; # identifiant prepended to each message -$facility = ''; # current facility -my $maskpri = LOG_UPTO(&LOG_DEBUG); # current log mask +my $syslog_path = undef; # syslog path for "stream" and "unix" mechanisms +my $syslog_xobj = undef; # if defined, holds the external object used to send messages +my $transmit_ok = 0; # flag to indicate if the last message was transmited +my $sock_port = undef; # socket port +my $sock_timeout = 0; # socket timeout, see below +my $current_proto = undef; # current mechanism used to transmit messages +my $ident = ''; # identifiant prepended to each message +$facility = ''; # current facility +my $maskpri = LOG_UPTO(&LOG_DEBUG); # current log mask my %options = ( ndelay => 0, + noeol => 0, nofatal => 0, + nonul => 0, nowait => 0, perror => 0, pid => 0, @@ -108,7 +112,7 @@ my %options = ( # Default is now to first use the native mechanism, so Perl programs # behave like other normal Unix programs, then try other mechanisms. my @connectMethods = qw(native tcp udp unix pipe stream console); -if ($^O =~ /^(freebsd|linux)$/) { +if ($^O eq "freebsd" or $^O eq "linux") { @connectMethods = grep { $_ ne 'udp' } @connectMethods; } @@ -117,12 +121,9 @@ if ($^O =~ /^(freebsd|linux)$/) { EVENTLOG: { my $is_Win32 = $^O =~ /Win32/i; - if (can_load("Sys::Syslog::Win32")) { + if (can_load("Sys::Syslog::Win32", $is_Win32)) { unshift @connectMethods, 'eventlog'; } - elsif ($is_Win32) { - warn $@; - } } my @defaultMethods = @connectMethods; @@ -177,8 +178,11 @@ sub openlog { } sub closelog { - $facility = $ident = ''; - disconnect_log(); + disconnect_log() if $connected; + $options{$_} = 0 for keys %options; + $facility = $ident = ""; + $connected = 0; + return 1 } sub setlogmask { @@ -186,117 +190,135 @@ sub setlogmask { $maskpri = shift unless $_[0] == 0; $oldmask; } - -sub setlogsock { - my ($setsock, $setpath, $settime) = @_; - - # check arguments - my $diag_invalid_arg - = "Invalid argument passed to setlogsock; must be 'stream', 'pipe', " - . "'unix', 'native', 'eventlog', 'tcp', 'udp' or 'inet'"; - croak $diag_invalid_arg unless defined $setsock; - croak "Invalid number of arguments" unless @_ >= 1 and @_ <= 3; - - $syslog_path = $setpath if defined $setpath; - $sock_timeout = $settime if defined $settime; - disconnect_log() if $connected; - $transmit_ok = 0; - @fallbackMethods = (); - @connectMethods = @defaultMethods; - - if (ref $setsock eq 'ARRAY') { - @connectMethods = @$setsock; - - } elsif (lc $setsock eq 'stream') { - if (not defined $syslog_path) { - my @try = qw(/dev/log /dev/conslog); - - if (length &_PATH_LOG) { # Undefined _PATH_LOG is "". - unshift @try, &_PATH_LOG; - } - - for my $try (@try) { - if (-w $try) { - $syslog_path = $try; - last; - } - } +my %mechanism = ( + console => { + check => sub { 1 }, + }, + eventlog => { + check => sub { return can_load("Win32::EventLog") }, + err_msg => "no Win32 API available", + }, + inet => { + check => sub { 1 }, + }, + native => { + check => sub { 1 }, + }, + pipe => { + check => sub { + ($syslog_path) = grep { defined && length && -p && -w _ } + $syslog_path, &_PATH_LOG, "/dev/log"; + return $syslog_path ? 1 : 0 + }, + err_msg => "path not available", + }, + stream => { + check => sub { if (not defined $syslog_path) { - warnings::warnif "stream passed to setlogsock, but could not find any device"; - return undef + my @try = qw(/dev/log /dev/conslog); + unshift @try, &_PATH_LOG if length &_PATH_LOG; + ($syslog_path) = grep { -w } @try; } + return defined $syslog_path && -w $syslog_path + }, + err_msg => "could not find any writable device", + }, + tcp => { + check => sub { + if (getservbyname('syslog', 'tcp') || getservbyname('syslogng', 'tcp')) { + $host = $syslog_path; + return 1 + } + else { + return + } + }, + err_msg => "TCP service unavailable", + }, + udp => { + check => sub { + if (getservbyname('syslog', 'udp')) { + $host = $syslog_path; + return 1 + } + else { + return + } + }, + err_msg => "UDP service unavailable", + }, + unix => { + check => sub { + my @try = ($syslog_path, &_PATH_LOG); + ($syslog_path) = grep { defined && length && -w } @try; + return defined $syslog_path && -w $syslog_path + }, + err_msg => "path not available", + }, +); + +sub setlogsock { + my %opt; + + # handle arguments + # - old API: setlogsock($sock_type, $sock_path, $sock_timeout) + # - new API: setlogsock(\%options) + croak "setlogsock(): Invalid number of arguments" + unless @_ >= 1 and @_ <= 3; + + if (my $ref = ref $_[0]) { + if ($ref eq "HASH") { + %opt = %{ $_[0] }; + croak "setlogsock(): No argument given" unless keys %opt; } - - if (not -w $syslog_path) { - warnings::warnif "stream passed to setlogsock, but $syslog_path is not writable"; - return undef; - } else { - @connectMethods = qw(stream); - } - - } elsif (lc $setsock eq 'unix') { - if (length _PATH_LOG() || (defined $syslog_path && -w $syslog_path)) { - $syslog_path = _PATH_LOG() unless defined $syslog_path; - @connectMethods = qw(unix); - } else { - warnings::warnif 'unix passed to setlogsock, but path not available'; - return undef; - } - - } elsif (lc $setsock eq 'pipe') { - for my $path ($syslog_path, &_PATH_LOG, "/dev/log") { - next unless defined $path and length $path and -p $path and -w _; - $syslog_path = $path; - last - } - - if (not $syslog_path) { - warnings::warnif "pipe passed to setlogsock, but path not available"; - return undef + elsif ($ref eq "ARRAY") { + @opt{qw< type path timeout >} = @_; } - - @connectMethods = qw(pipe); - - } elsif (lc $setsock eq 'native') { - @connectMethods = qw(native); - - } elsif (lc $setsock eq 'eventlog') { - if (can_load("Win32::EventLog")) { - @connectMethods = qw(eventlog); - } else { - warnings::warnif "eventlog passed to setlogsock, but no Win32 API available"; - $@ = ""; - return undef; + else { + croak "setlogsock(): Unexpected \L$ref\E reference" } + } + else { + @opt{qw< type path timeout >} = @_; + } - } elsif (lc $setsock eq 'tcp') { - if (getservbyname('syslog', 'tcp') || getservbyname('syslogng', 'tcp')) { - @connectMethods = qw(tcp); - $host = $syslog_path; - } else { - warnings::warnif "tcp passed to setlogsock, but tcp service unavailable"; - return undef; - } + # check socket type, remove + my $diag_invalid_type = "setlogsock(): Invalid type%s; must be one of " + . join ", ", map { "'$_'" } sort keys %mechanism; + croak sprintf $diag_invalid_type, "" unless defined $opt{type}; + my @sock_types = ref $opt{type} eq "ARRAY" ? @{$opt{type}} : ($opt{type}); + my @tmp; + + for my $sock_type (@sock_types) { + carp sprintf $diag_invalid_type, " '$sock_type'" and next + unless exists $mechanism{$sock_type}; + push @tmp, "tcp", "udp" and next if $sock_type eq "inet"; + push @tmp, $sock_type; + } - } elsif (lc $setsock eq 'udp') { - if (getservbyname('syslog', 'udp')) { - @connectMethods = qw(udp); - $host = $syslog_path; - } else { - warnings::warnif "udp passed to setlogsock, but udp service unavailable"; - return undef; - } + @sock_types = @tmp; - } elsif (lc $setsock eq 'inet') { - @connectMethods = ( 'tcp', 'udp' ); + # set global options + $syslog_path = $opt{path} if defined $opt{path}; + $host = $opt{host} if defined $opt{host}; + $sock_timeout = $opt{timeout} if defined $opt{timeout}; + $sock_port = $opt{port} if defined $opt{port}; - } elsif (lc $setsock eq 'console') { - @connectMethods = qw(console); + disconnect_log() if $connected; + $transmit_ok = 0; + @fallbackMethods = (); + @connectMethods = @defaultMethods; - } else { - croak $diag_invalid_arg + for my $sock_type (@sock_types) { + if ( $mechanism{$sock_type}{check}->() ) { + unshift @connectMethods, $sock_type; + } + else { + warnings::warnif "setlogsock(): type='$sock_type': " + . $mechanism{$sock_type}{err_msg}; + } } return 1; @@ -320,30 +342,43 @@ sub syslog { croak "syslog: expecting argument \$priority" unless defined $priority; croak "syslog: expecting argument \$format" unless defined $mask; - croak "syslog: invalid level/facility: $priority" if $priority =~ /^-\d+$/; - @words = split(/\W+/, $priority, 2); # Allow "level" or "level|facility". - undef $numpri; - undef $numfac; + if ($priority =~ /^\d+$/) { + $numpri = LOG_PRI($priority); + $numfac = LOG_FAC($priority); + } + elsif ($priority =~ /^\w+/) { + # Allow "level" or "level|facility". + @words = split /\W+/, $priority, 2; - for my $word (@words) { - next if length $word == 0; + undef $numpri; + undef $numfac; - $num = xlate($word); # Translate word to number. + for my $word (@words) { + next if length $word == 0; - if ($num < 0) { - croak "syslog: invalid level/facility: $word" - } - elsif ($num <= &LOG_PRIMASK) { - croak "syslog: too many levels given: $word" if defined $numpri; - $numpri = $num; - return 0 unless LOG_MASK($numpri) & $maskpri; - } - else { - croak "syslog: too many facilities given: $word" if defined $numfac; - $facility = $word; - $numfac = $num; + # Translate word to number. + $num = xlate($word); + + if ($num < 0) { + croak "syslog: invalid level/facility: $word" + } + elsif (my $pri = LOG_PRI($num)) { + croak "syslog: too many levels given: $word" + if defined $numpri; + $numpri = $num; + return 0 unless LOG_MASK($numpri) & $maskpri; + } + else { + croak "syslog: too many facilities given: $word" + if defined $numfac; + $facility = $word if $word =~ /^[A-Za-z]/; + $numfac = LOG_FAC($num); + } } } + else { + croak "syslog: invalid level/facility: $priority" + } croak "syslog: level must be given" unless defined $numpri; @@ -364,10 +399,6 @@ sub syslog { $mask .= "\n" unless $mask =~ /\n$/; $message = @_ ? sprintf($mask, @_) : $mask; - # See CPAN-RT#24431. Opened on Apple Radar as bug #4944407 on 2007.01.21 - # Supposedly resolved on Leopard. - chomp $message if $^O =~ /darwin/; - if ($current_proto eq 'native') { $buf = $message; } @@ -381,15 +412,22 @@ sub syslog { $sum = $numpri + $numfac; my $oldlocale = setlocale(LC_TIME); setlocale(LC_TIME, 'C'); - my $timestamp = strftime "%b %e %T", localtime; + my $timestamp = strftime "%b %e %H:%M:%S", localtime; setlocale(LC_TIME, $oldlocale); - $buf = "<$sum>$timestamp $whoami: $message\0"; + + # construct the stream that will be transmitted + $buf = "<$sum>$timestamp $whoami: $message"; + + # add (or not) a newline + $buf .= "\n" if !$options{noeol} and rindex($buf, "\n") == -1; + + # add (or not) a NUL character + $buf .= "\0" if !$options{nonul}; } # handle PERROR option # "native" mechanism already handles it by itself if ($options{perror} and $current_proto ne 'native') { - chomp $message; my $whoami = $ident; $whoami .= "[$$]" if $options{pid}; print STDERR "$whoami: $message\n"; @@ -436,7 +474,7 @@ sub syslog { sub _syslog_send_console { my ($buf) = @_; - chop($buf); # delete the NUL from the end + # The console print is a method which could block # so we do it in a child process and always return success # to the caller. @@ -456,10 +494,11 @@ sub _syslog_send_console { } else { if (open(CONS, ">/dev/console")) { my $ret = print CONS $buf . "\r"; # XXX: should this be \x0A ? - exit $ret if defined $pid; + POSIX::_exit $ret if defined $pid; close CONS; } - exit if defined $pid; + + POSIX::_exit if defined $pid; } } @@ -484,8 +523,8 @@ sub _syslog_send_socket { } sub _syslog_send_native { - my ($buf, $numpri) = @_; - syslog_xs($numpri, $buf); + my ($buf, $numpri, $numfac) = @_; + syslog_xs($numpri|$numfac, $buf); return 1; } @@ -560,15 +599,15 @@ sub connect_log { sub connect_tcp { my ($errs) = @_; - my $tcp = getprotobyname('tcp'); - if (!defined $tcp) { + my $proto = getprotobyname('tcp'); + if (!defined $proto) { push @$errs, "getprotobyname failed for tcp"; return 0; } - my $syslog = getservbyname('syslog', 'tcp'); - $syslog = getservbyname('syslogng', 'tcp') unless defined $syslog; - if (!defined $syslog) { + my $port = $sock_port || getservbyname('syslog', 'tcp'); + $port = getservbyname('syslogng', 'tcp') unless defined $port; + if (!defined $port) { push @$errs, "getservbyname failed for syslog/tcp and syslogng/tcp"; return 0; } @@ -583,9 +622,9 @@ sub connect_tcp { } else { $addr = INADDR_LOOPBACK; } - $addr = sockaddr_in($syslog, $addr); + $addr = sockaddr_in($port, $addr); - if (!socket(SYSLOG, AF_INET, SOCK_STREAM, $tcp)) { + if (!socket(SYSLOG, AF_INET, SOCK_STREAM, $proto)) { push @$errs, "tcp socket: $!"; return 0; } @@ -608,14 +647,14 @@ sub connect_tcp { sub connect_udp { my ($errs) = @_; - my $udp = getprotobyname('udp'); - if (!defined $udp) { + my $proto = getprotobyname('udp'); + if (!defined $proto) { push @$errs, "getprotobyname failed for udp"; return 0; } - my $syslog = getservbyname('syslog', 'udp'); - if (!defined $syslog) { + my $port = $sock_port || getservbyname('syslog', 'udp'); + if (!defined $port) { push @$errs, "getservbyname failed for syslog/udp"; return 0; } @@ -630,9 +669,9 @@ sub connect_udp { } else { $addr = INADDR_LOOPBACK; } - $addr = sockaddr_in($syslog, $addr); + $addr = sockaddr_in($port, $addr); - if (!socket(SYSLOG, AF_INET, SOCK_DGRAM, $udp)) { + if (!socket(SYSLOG, AF_INET, SOCK_DGRAM, $proto)) { push @$errs, "udp socket: $!"; return 0; } @@ -790,10 +829,14 @@ sub disconnect_log { if (defined $current_proto and $current_proto eq 'native') { closelog_xs(); + unshift @fallbackMethods, $current_proto; + $current_proto = undef; return 1; } elsif (defined $current_proto and $current_proto eq 'eventlog') { $syslog_xobj->Close(); + unshift @fallbackMethods, $current_proto; + $current_proto = undef; return 1; } @@ -814,8 +857,11 @@ sub silent_eval (&) { } sub can_load { + my ($module, $verbose) = @_; local($SIG{__DIE__}, $SIG{__WARN__}, $@); - return eval "use $_[0]; 1" + my $loaded = eval "use $module; 1"; + warn $@ if not $loaded and $verbose; + return $loaded } @@ -829,18 +875,17 @@ Sys::Syslog - Perl interface to the UNIX syslog(3) calls =head1 VERSION -Version 0.27 +This is the documentation of version 0.29 =head1 SYNOPSIS - use Sys::Syslog; # all except setlogsock(), or: - use Sys::Syslog qw(:DEFAULT setlogsock); # default set, plus setlogsock() - use Sys::Syslog qw(:standard :macros); # standard functions, plus macros + use Sys::Syslog; # all except setlogsock() + use Sys::Syslog qw(:standard :macros); # standard functions & macros - openlog $ident, $logopt, $facility; # don't forget this - syslog $priority, $format, @args; - $oldmask = setlogmask $mask_priority; - closelog; + openlog($ident, $logopt, $facility); # don't forget this + syslog($priority, $format, @args); + $oldmask = setlogmask($mask_priority); + closelog(); =head1 DESCRIPTION @@ -919,12 +964,22 @@ opened when the first message is logged). =item * +C<noeol> - When set to true, no end of line character (C<\n>) will be +appended to the message. This can be useful for some buggy syslog daemons. + +=item * + C<nofatal> - When set to true, C<openlog()> and C<syslog()> will only emit warnings instead of dying if the connection to the syslog can't be established. =item * +C<nonul> - When set to true, no C<NUL> character (C<\0>) will be +appended to the message. This can be useful for some buggy syslog daemons. + +=item * + C<nowait> - Don't wait for child processes that may have been created while logging the message. (The GNU C library does not create a child process, so this option has no effect on Linux.) @@ -932,7 +987,7 @@ process, so this option has no effect on Linux.) =item * C<perror> - Write the message to standard error output as well to the -system log. +system log (added in C<Sys::Syslo> 0.22). =item * @@ -962,7 +1017,7 @@ C<"$!"> (the latest error message). C<$priority> can specify a level, or a level and a facility. Levels and facilities can be given as strings or as macros. When using the C<eventlog> mechanism, priorities C<DEBUG> and C<INFO> are mapped to event type -C<informational>, C<NOTICE> and C<WARNIN> to C<warning> and C<ERR> to +C<informational>, C<NOTICE> and C<WARNING> to C<warning> and C<ERR> to C<EMERG> to C<error>. If you didn't use C<openlog()> before using C<syslog()>, C<syslog()> will @@ -971,11 +1026,13 @@ C<$format> that ends in a C<":">. B<Examples> - syslog("info", $message); # informational level - syslog(LOG_INFO, $message); # informational level + # informational level + syslog("info", $message); + syslog(LOG_INFO, $message); - syslog("info|local0", $message); # information level, Local0 facility - syslog(LOG_INFO|LOG_LOCAL0, $message); # information level, Local0 facility + # information level, Local0 facility + syslog("info|local0", $message); + syslog(LOG_INFO|LOG_LOCAL0, $message); =over 4 @@ -1012,22 +1069,79 @@ Log everything except informational messages: Log critical messages, errors and warnings: - setlogmask( LOG_MASK(LOG_CRIT) | LOG_MASK(LOG_ERR) | LOG_MASK(LOG_WARNING) ); + setlogmask( LOG_MASK(LOG_CRIT) + | LOG_MASK(LOG_ERR) + | LOG_MASK(LOG_WARNING) ); Log all messages up to debug: setlogmask( LOG_UPTO(LOG_DEBUG) ); -=item B<setlogsock($sock_type)> +=item B<setlogsock()> + +Sets the socket type and options to be used for the next call to C<openlog()> +or C<syslog()>. Returns true on success, C<undef> on failure. -=item B<setlogsock($sock_type, $stream_location)> (added in Perl 5.004_02) +Being Perl-specific, this function has evolved along time. It can currently +be called as follow: -=item B<setlogsock($sock_type, $stream_location, $sock_timeout)> (added in 0.25) +=over + +=item * + +C<setlogsock($sock_type)> + +=item * + +C<setlogsock($sock_type, $stream_location)> (added in Perl 5.004_02) + +=item * + +C<setlogsock($sock_type, $stream_location, $sock_timeout)> (added in +C<Sys::Syslog> 0.25) + +=item * + +C<setlogsock(\%options)> (added in C<Sys::Syslog> 0.28) + +=back -Sets the socket type to be used for the next call to -C<openlog()> or C<syslog()> and returns true on success, -C<undef> on failure. The available mechanisms are: +The available options are: + +=over + +=item * + +C<type> - equivalent to C<$sock_type>, selects the socket type (or +"mechanism"). An array reference can be passed to specify several +mechanisms to try, in the given order. + +=item * + +C<path> - equivalent to C<$stream_location>, sets the stream location. +Defaults to standard Unix location, or C<_PATH_LOG>. + +=item * + +C<timeout> - equivalent to C<$sock_timeout>, sets the socket timeout +in seconds. Defaults to 0 on all systems except S<Mac OS X> where it +is set to 0.25 sec. + +=item * + +C<host> - sets the hostname to send the messages to. Defaults to +the local host. + +=item * + +C<port> - sets the TCP or UDP port to connect to. Defaults to the +first standard syslog port available on the system. + +=back + + +The available mechanisms are: =over @@ -1044,39 +1158,38 @@ added in C<Sys::Syslog> 0.19). =item * C<"tcp"> - connect to a TCP socket, on the C<syslog/tcp> or C<syslogng/tcp> -service. If defined, the second parameter is used as a hostname to connect to. +service. See also the C<host>, C<port> and C<timeout> options. =item * C<"udp"> - connect to a UDP socket, on the C<syslog/udp> service. -If defined, the second parameter is used as a hostname to connect to, -and the third parameter as the timeout used to check for UDP response. +See also the C<host>, C<port> and C<timeout> options. =item * C<"inet"> - connect to an INET socket, either TCP or UDP, tried in that -order. If defined, the second parameter is used as a hostname to connect to. +order. See also the C<host>, C<port> and C<timeout> options. =item * C<"unix"> - connect to a UNIX domain socket (in some systems a character -special device). The name of that socket is the second parameter or, if -you omit the second parameter, the value returned by the C<_PATH_LOG> macro -(if your system defines it), or F</dev/log> or F</dev/conslog>, whatever is -writable. +special device). The name of that socket is given by the C<path> option +or, if omitted, the value returned by the C<_PATH_LOG> macro (if your +system defines it), F</dev/log> or F</dev/conslog>, whichever is writable. =item * -C<"stream"> - connect to the stream indicated by the pathname provided as -the optional second parameter, or, if omitted, to F</dev/conslog>. -For example Solaris and IRIX system may prefer C<"stream"> instead of C<"unix">. +C<"stream"> - connect to the stream indicated by the C<path> option, or, +if omitted, the value returned by the C<_PATH_LOG> macro (if your system +defines it), F</dev/log> or F</dev/conslog>, whichever is writable. For +example Solaris and IRIX system may prefer C<"stream"> instead of C<"unix">. =item * -C<"pipe"> - connect to the named pipe indicated by the pathname provided as -the optional second parameter, or, if omitted, to the value returned by -the C<_PATH_LOG> macro (if your system defines it), or F</dev/log> -(added in C<Sys::Syslog> 0.21). +C<"pipe"> - connect to the named pipe indicated by the C<path> option, +or, if omitted, to the value returned by the C<_PATH_LOG> macro (if your +system defines it), or F</dev/log> (added in C<Sys::Syslog> 0.21). +HP-UX is a system which uses such a named pipe. =item * @@ -1085,10 +1198,6 @@ option of C<openlog()>. =back -A reference to an array can also be passed as the first parameter. -When this calling method is used, the array should contain a list of -mechanisms which are attempted in order. - The default is to try C<native>, C<tcp>, C<udp>, C<unix>, C<pipe>, C<stream>, C<console>. Under systems with the Win32 API, C<eventlog> will be added as the first @@ -1098,11 +1207,19 @@ Giving an invalid value for C<$sock_type> will C<croak>. B<Examples> -Select the UDP socket mechanism: +Select the UDP socket mechanism: setlogsock("udp"); -Select the native, UDP socket then UNIX domain socket mechanisms: +Send messages using the TCP socket mechanism on a custom port: + + setlogsock({ type => "tcp", port => 2486 }); + +Send messages to a remote host using the TCP socket mechanism: + + setlogsock({ type => "tcp", host => $loghost }); + +Try the native, UDP socket then UNIX domain socket mechanisms: setlogsock(["native", "udp", "unix"]); @@ -1392,6 +1509,29 @@ was unable to find an appropriate an appropriate device. =back +=head1 HISTORY + +C<Sys::Syslog> is a core module, part of the standard Perl distribution +since 1990. At this time, modules as we know them didn't exist, the +Perl library was a collection of F<.pl> files, and the one for sending +syslog messages with was simply F<lib/syslog.pl>, included with Perl 3.0. +It was converted as a module with Perl 5.0, but had a version number +only starting with Perl 5.6. Here is a small table with the matching +Perl and C<Sys::Syslog> versions. + + Sys::Syslog Perl + ----------- ---- + undef 5.0.x -- 5.5.x + 0.01 5.6.0, 5.6.1, 5.6.2 + 0.03 5.8.0 + 0.04 5.8.1, 5.8.2, 5.8.3 + 0.05 5.8.4, 5.8.5, 5.8.6 + 0.06 5.8.7 + 0.13 5.8.8 + 0.22 5.10.0 + 0.27 5.8.9 + + =head1 SEE ALSO =head2 Manual Pages @@ -1502,7 +1642,7 @@ L<http://cpanratings.perl.org/d/Sys-Syslog> =item * RT: CPAN's request tracker -L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Sys-Syslog> +L<http://rt.cpan.org/Dist/Display.html?Queue=Sys-Syslog> =item * Search CPAN @@ -1521,7 +1661,7 @@ L<http://perldoc.perl.org/Sys/Syslog.html> =head1 COPYRIGHT -Copyright (C) 1990-2008 by Larry Wall and others. +Copyright (C) 1990-2009 by Larry Wall and others. =head1 LICENSE @@ -1563,7 +1703,6 @@ but also has this strange piece of code: I don't know what bug the author referred to. - L<http://www.tpc.int/> -- L<ftp://ftp.tpc.int/tpc/server/UNIX/> - L<ftp://ftp-usa.tpc.int/pub/tpc/server/UNIX/> diff --git a/cpan/Sys-Syslog/Syslog.xs b/cpan/Sys-Syslog/Syslog.xs index 704ed9e778..e1ba675a7d 100644 --- a/cpan/Sys-Syslog/Syslog.xs +++ b/cpan/Sys-Syslog/Syslog.xs @@ -1,3 +1,10 @@ +/* + * Syslog.xs + * + * XS wrapper for the syslog(3) facility. + * + */ + #if defined(_WIN32) # include <windows.h> #endif @@ -26,6 +33,29 @@ static SV *ident_svptr; #include "const-c.inc" + +#ifndef LOG_FAC +#define LOG_FACMASK 0x03f8 +#define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3) +#endif + +#ifndef LOG_PRI +#define LOG_PRI(p) ((p) & LOG_PRIMASK) +#endif + +#ifndef LOG_MAKEPRI +#define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri)) +#endif + +#ifndef LOG_MASK +#define LOG_MASK(pri) (1 << (pri)) +#endif + +#ifndef LOG_UPTO +#define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1) +#endif + + MODULE = Sys::Syslog PACKAGE = Sys::Syslog INCLUDE: const-xs.inc @@ -34,72 +64,27 @@ int LOG_FAC(p) INPUT: int p - CODE: -#ifdef LOG_FAC - RETVAL = LOG_FAC(p); -#else - croak("Your vendor has not defined the Sys::Syslog macro LOG_FAC"); - RETVAL = -1; -#endif - OUTPUT: - RETVAL int LOG_PRI(p) INPUT: int p - CODE: -#ifdef LOG_PRI - RETVAL = LOG_PRI(p); -#else - croak("Your vendor has not defined the Sys::Syslog macro LOG_PRI"); - RETVAL = -1; -#endif - OUTPUT: - RETVAL int LOG_MAKEPRI(fac,pri) INPUT: int fac int pri - CODE: -#ifdef LOG_MAKEPRI - RETVAL = LOG_MAKEPRI(fac,pri); -#else - croak("Your vendor has not defined the Sys::Syslog macro LOG_MAKEPRI"); - RETVAL = -1; -#endif - OUTPUT: - RETVAL int LOG_MASK(pri) INPUT: int pri - CODE: -#ifdef LOG_MASK - RETVAL = LOG_MASK(pri); -#else - croak("Your vendor has not defined the Sys::Syslog macro LOG_MASK"); - RETVAL = -1; -#endif - OUTPUT: - RETVAL int LOG_UPTO(pri) INPUT: int pri - CODE: -#ifdef LOG_UPTO - RETVAL = LOG_UPTO(pri); -#else - croak("Your vendor has not defined the Sys::Syslog macro LOG_UPTO"); - RETVAL = -1; -#endif - OUTPUT: - RETVAL #ifdef HAVE_SYSLOG @@ -136,10 +121,18 @@ setlogmask_xs(mask) void closelog_xs() + PREINIT: + U32 refcnt; CODE: + if (!ident_svptr) + return; closelog(); - if (SvREFCNT(ident_svptr)) + refcnt = SvREFCNT(ident_svptr); + if (refcnt) { SvREFCNT_dec(ident_svptr); + if (refcnt == 1) + ident_svptr = NULL; + } #else /* HAVE_SYSLOG */ diff --git a/cpan/Sys-Syslog/t/constants.t b/cpan/Sys-Syslog/t/constants.t index 5ebfe6d3d9..847c773e10 100644 --- a/cpan/Sys-Syslog/t/constants.t +++ b/cpan/Sys-Syslog/t/constants.t @@ -3,7 +3,6 @@ use strict; use File::Spec; use Test::More; -# NB. For PERL_CORE to be set, taint mode must not be enabled my $macrosall = 'macros.all'; open(MACROS, $macrosall) or plan skip_all => "can't read '$macrosall': $!"; my @names = map {chomp;$_} <MACROS>; diff --git a/cpan/Sys-Syslog/t/syslog.t b/cpan/Sys-Syslog/t/syslog.t index 0b7a9c42b3..ee136d56a2 100644 --- a/cpan/Sys-Syslog/t/syslog.t +++ b/cpan/Sys-Syslog/t/syslog.t @@ -45,13 +45,25 @@ BEGIN { $tests += 1 } can_ok( 'Sys::Syslog' => qw(openlog syslog syslog setlogmask setlogsock closelog) ); -BEGIN { $tests += 1 } +BEGIN { $tests += 4 } # check the diagnostics # setlogsock() eval { setlogsock() }; -like( $@, qr/^Invalid argument passed to setlogsock/, +like( $@, qr/^setlogsock\(\): Invalid number of arguments/, "calling setlogsock() with no argument" ); +eval { setlogsock(undef) }; +like( $@, qr/^setlogsock\(\): Invalid type; must be one of /, + "calling setlogsock() with undef" ); + +eval { setlogsock(\"") }; +like( $@, qr/^setlogsock\(\): Unexpected scalar reference/, + "calling setlogsock() with a scalar reference" ); + +eval { setlogsock({}) }; +like( $@, qr/^setlogsock\(\): No argument given/, + "calling setlogsock() with an empty hash reference" ); + BEGIN { $tests += 3 } # syslog() eval { syslog() }; diff --git a/cpan/Sys-Syslog/win32/PerlLog.mc b/cpan/Sys-Syslog/win32/PerlLog.mc index 3a7c1fdd06..e1e06b37b5 100644 --- a/cpan/Sys-Syslog/win32/PerlLog.mc +++ b/cpan/Sys-Syslog/win32/PerlLog.mc @@ -1,602 +1,602 @@ -; // Sys::Syslog Message File 1.0.0
-
-MessageIdTypedef = DWORD
-
-SeverityNames = (
- Success = 0x0:STATUS_SEVERITY_SUCCESS
- Informational = 0x1:STATUS_SEVERITY_INFORMATIONAL
- Warning = 0x2:STATUS_SEVERITY_WARNING
- Error = 0x3:STATUS_SEVERITY_ERROR
-)
-
-LanguageNames = ( English = 0x0409:MSG00409 )
-LanguageNames = ( French = 0x040C:MSG0040C )
-
-
-; // =================================================================
-; // The following are facility name definitions
-
-MessageId = 0x0001
-SymbolicName = CAT_KERN
-Language = English
-Kernel
-.
-Language = French
-Kernel
-.
-
-MessageId = 0x0002
-SymbolicName = CAT_USER
-Language = English
-User
-.
-Language = French
-User
-.
-
-MessageId = 0x0003
-SymbolicName = CAT_MAIL
-Language = English
-Mail
-.
-Language = French
-Mail
-.
-
-MessageId = 0x0004
-SymbolicName = CAT_DAEMON
-Language = English
-Daemon
-.
-Language = French
-Daemon
-.
-
-MessageId = 0x0005
-SymbolicName = CAT_AUTH
-Language = English
-Auth
-.
-Language = French
-Auth
-.
-
-MessageId = 0x0006
-SymbolicName = CAT_SYSLOG
-Language = English
-Syslog
-.
-Language = French
-Syslog
-.
-
-MessageId = 0x0007
-SymbolicName = CAT_LPR
-Language = English
-LPR
-.
-Language = French
-LPR
-.
-
-MessageId = 0x0008
-SymbolicName = CAT_NEWS
-Language = English
-News
-.
-Language = French
-News
-.
-
-MessageId = 0x0009
-SymbolicName = CAT_UUCP
-Language = English
-UUCP
-.
-Language = French
-UUCP
-.
-
-MessageId = 0x000a
-SymbolicName = CAT_CRON
-Language = English
-Cron
-.
-Language = French
-Cron
-.
-
-MessageId = 0x000b
-SymbolicName = CAT_AUTHPRIV
-Language = English
-AuthPrivate
-.
-Language = French
-AuthPrivate
-.
-
-MessageId = 0x000c
-SymbolicName = CAT_FTP
-Language = English
-FTP
-.
-Language = French
-FTP
-.
-
-MessageId = 0x000d
-SymbolicName = CAT_LOCAL0
-Language = English
-Local0
-.
-Language = French
-Local0
-.
-
-MessageId = 0x000e
-SymbolicName = CAT_LOCAL1
-Language = English
-Local1
-.
-Language = French
-Local1
-.
-
-MessageId = 0x000f
-SymbolicName = CAT_LOCAL2
-Language = English
-Local2
-.
-Language = French
-Local2
-.
-
-MessageId = 0x0010
-SymbolicName = CAT_LOCAL3
-Language = English
-Local3
-.
-Language = French
-Local3
-.
-
-MessageId = 0x0011
-SymbolicName = CAT_LOCAL4
-Language = English
-Local4
-.
-Language = French
-Local4
-.
-
-MessageId = 0x0012
-SymbolicName = CAT_LOCAL5
-Language = English
-Local5
-.
-Language = French
-Local5
-.
-
-MessageId = 0x0013
-SymbolicName = CAT_LOCAL6
-Language = English
-Local6
-.
-Language = French
-Local6
-.
-
-MessageId = 0x0014
-SymbolicName = CAT_LOCAL7
-Language = English
-Local7
-.
-Language = French
-Local7
-.
-
-; // Mac OS X specific facilities ------------------------------------
-
-MessageId = 0x0015
-SymbolicName = CAT_NETINFO
-Language = English
-NetInfo
-.
-Language = French
-NetInfo
-.
-
-MessageId = 0x0016
-SymbolicName = CAT_REMOTEAUTH
-Language = English
-RemoteAuth
-.
-Language = French
-RemoteAuth
-.
-
-MessageId = 0x0017
-SymbolicName = CAT_RAS
-Language = English
-RAS
-.
-Language = French
-RAS
-.
-
-MessageId = 0x0018
-SymbolicName = CAT_INSTALL
-Language = English
-Install
-.
-Language = French
-Install
-.
-
-MessageId = 0x0019
-SymbolicName = CAT_LAUNCHD
-Language = English
-Launchd
-.
-Language = French
-Launchd
-.
-
-; //modern BSD specific facilities ----------------------------------
-
-MessageId = 0x001a
-SymbolicName = CAT_CONSOLE
-Language = English
-Console
-.
-Language = French
-Console
-.
-
-MessageId = 0x001b
-SymbolicName = CAT_NTP
-Language = English
-NTP
-.
-Language = French
-NTP
-.
-
-MessageId = 0x001c
-SymbolicName = CAT_SECURITY
-Language = English
-Security
-.
-Language = French
-Sécurité
-.
-
-; // IRIX specific facilities ----------------------------------------
-
-MessageId = 0x001d
-SymbolicName = CAT_AUDIT
-Language = English
-Audit
-.
-Language = French
-Audit
-.
-
-MessageId = 0x001e
-SymbolicName = CAT_LFMT
-Language = English
-LogAlert
-.
-Language = French
-LogAlert
-.
-
-
-; // =================================================================
-; // The following are message definitions.
-
-MessageId = 0x0080
-SymbolicName = MSG_KERNEL
-Language = English
-Kernel message: %1
-.
-Language = French
-Message du noyau : %1
-.
-
-
-MessageId = 0x0081
-SymbolicName = MSG_USER
-Language = English
-User message: %1
-.
-Language = French
-Message utilisateur : %1
-.
-
-
-MessageId = 0x0082
-SymbolicName = MSG_MAIL
-Language = English
-Mail subsystem message: %1
-.
-Language = French
-Message du sous-système de courrier : %1
-.
-
-
-MessageId = 0x0083
-SymbolicName = MSG_DAEMON
-Language = English
-Message from a system daemon without separate facility value: %1
-.
-Language = French
-Message d'un daemon sans catégorie spécifique : %1
-.
-
-
-MessageId = 0x0084
-SymbolicName = MSG_AUTH
-Language = English
-Security/authorization message: %1
-.
-Language = French
-Message de sécurite ou d'authorisation : %1
-.
-
-
-MessageId = 0x0085
-SymbolicName = MSG_SYSLOG
-Language = English
-Message generated internally by syslogd: %1
-.
-Language = French
-Message interne généré par le daemon syslogd : %1
-.
-
-
-MessageId = 0x0086
-SymbolicName = MSG_LPR
-Language = English
-Line printer subsystem message: %1
-.
-Language = French
-Message du sous-système d'impression : %1
-.
-
-
-MessageId = 0x0087
-SymbolicName = MSG_NEWS
-Language = English
-USENET news subsystem message: %1
-.
-Language = French
-Message du sous-système de nouvelles USENET : %1
-.
-
-
-MessageId = 0x0088
-SymbolicName = MSG_UUCP
-Language = English
-UUCP subsystem message: %1
-.
-Language = French
-Message du sous-système UUCP : %1
-.
-
-
-MessageId = 0x0089
-SymbolicName = MSG_CRON
-Language = English
-Message generated by the clock daemons (cron and at): %1
-.
-Language = French
-Message généré par les daemons d'exécution programmée (cron et at) : %1
-.
-
-
-MessageId = 0x008A
-SymbolicName = MSG_AUTHPRIV
-Language = English
-Security or authorization private message: %1
-.
-Language = French
-Message privé de sécurité ou d'authorisation : %1
-.
-
-
-MessageId = 0x008B
-SymbolicName = MSG_FTP
-Language = English
-FTP daemon message: %1
-.
-Language = French
-Message du daemon FTP : %1
-.
-
-
-MessageId = 0x008C
-SymbolicName = MSG_LOCAL0
-Language = English
-Local message on channel 0: %1
-.
-Language = French
-Message local sur le canal 0 : %1
-.
-
-
-MessageId = 0x008D
-SymbolicName = MSG_LOCAL1
-Language = English
-Local message on channel 1: %1
-.
-Language = French
-Message local sur le canal 1 : %1
-.
-
-
-MessageId = 0x008E
-SymbolicName = MSG_LOCAL2
-Language = English
-Local message on channel 2: %1
-.
-Language = French
-Message local sur le canal 2 : %1
-.
-
-
-MessageId = 0x008F
-SymbolicName = MSG_LOCAL3
-Language = English
-Local message on channel 3: %1
-.
-Language = French
-Message local sur le canal 3 : %1
-.
-
-
-MessageId = 0x0090
-SymbolicName = MSG_LOCAL4
-Language = English
-Local message on channel 4: %1
-.
-Language = French
-Message local sur le canal 4 : %1
-.
-
-
-MessageId = 0x0091
-SymbolicName = MSG_LOCAL5
-Language = English
-Local message on channel 5: %1
-.
-Language = French
-Message local sur le canal 5 : %1
-.
-
-
-MessageId = 0x0092
-SymbolicName = MSG_LOCAL6
-Language = English
-Local message on channel 6: %1
-.
-Language = French
-Message local sur le canal 6 : %1
-.
-
-
-MessageId = 0x0093
-SymbolicName = MSG_LOCAL7
-Language = English
-Local message on channel 7: %1
-.
-Language = French
-Message local sur le canal 7 : %1
-.
-
-
-; // Mac OS X specific facilities ------------------------------------
-
-MessageId = 0x0094
-SymbolicName = MSG_NETINFO
-Language = English
-NetInfo subsystem message: %1
-.
-Language = French
-Message du sous-système NetInfo : %1
-.
-
-
-MessageId = 0x0095
-SymbolicName = MSG_REMOTEAUTH
-Language = English
-Remote authentication or authorization message: %1
-.
-Language = French
-Message d'authentification ou d'authorisation distante : %1
-.
-
-
-MessageId = 0x0096
-SymbolicName = MSG_RAS
-Language = English
-Message generated by the Remote Access Service (VPN / PPP): %1
-.
-Language = French
-Message généré par le Service d'Accès Distant (Remote Access Service) (VPN / PPP) : %1
-.
-
-
-MessageId = 0x0097
-SymbolicName = MSG_INSTALL
-Language = English
-Installer subsystem message: %1
-.
-Language = French
-Message du sous-système d'installation : %1
-.
-
-
-MessageId = 0x0098
-SymbolicName = MSG_LAUNCHD
-Language = English
-Message generated by launchd, the general bootstrap daemon: %1
-.
-Language = French
-Message généré par launchd, le daemon générique de démarrage : %1
-.
-
-; //modern BSD specific facilities ----------------------------------
-
-MessageId = 0x0099
-SymbolicName = MSG_CONSOLE
-Language = English
-Message for the console: %1
-.
-Language = French
-Message pour la console : %1
-.
-
-
-MessageId = 0x009a
-SymbolicName = MSG_NTP
-Language = English
-NTP subsystem message: %1
-.
-Language = French
-Message du sous-système NTP : %1
-.
-
-
-MessageId = 0x009b
-SymbolicName = MSG_SECURITY
-Language = English
-Security subsystem message (firewalling, etc.): %1
-.
-Language = French
-Message du sous-système de sécurité (pare-feu, etc.) : %1
-.
-
-
-; // IRIX specific facilities ----------------------------------------
-
-MessageId = 0x009c
-SymbolicName = MSG_AUDIT
-Language = English
-Audit daemon message: %1
-.
-Language = French
-Message du daemon d'audit NTP : %1
-.
-
-
-MessageId = 0x009d
-SymbolicName = MSG_LFMT
-Language = English
-Logalert facility: %1
-.
-Language = French
-Message de logalert : %1
-.
-
+; // Sys::Syslog Message File 1.0.0 + +MessageIdTypedef = DWORD + +SeverityNames = ( + Success = 0x0:STATUS_SEVERITY_SUCCESS + Informational = 0x1:STATUS_SEVERITY_INFORMATIONAL + Warning = 0x2:STATUS_SEVERITY_WARNING + Error = 0x3:STATUS_SEVERITY_ERROR +) + +LanguageNames = ( English = 0x0409:MSG00409 ) +LanguageNames = ( French = 0x040C:MSG0040C ) + + +; // ================================================================= +; // The following are facility name definitions + +MessageId = 0x0001 +SymbolicName = CAT_KERN +Language = English +Kernel +. +Language = French +Kernel +. + +MessageId = 0x0002 +SymbolicName = CAT_USER +Language = English +User +. +Language = French +User +. + +MessageId = 0x0003 +SymbolicName = CAT_MAIL +Language = English +Mail +. +Language = French +Mail +. + +MessageId = 0x0004 +SymbolicName = CAT_DAEMON +Language = English +Daemon +. +Language = French +Daemon +. + +MessageId = 0x0005 +SymbolicName = CAT_AUTH +Language = English +Auth +. +Language = French +Auth +. + +MessageId = 0x0006 +SymbolicName = CAT_SYSLOG +Language = English +Syslog +. +Language = French +Syslog +. + +MessageId = 0x0007 +SymbolicName = CAT_LPR +Language = English +LPR +. +Language = French +LPR +. + +MessageId = 0x0008 +SymbolicName = CAT_NEWS +Language = English +News +. +Language = French +News +. + +MessageId = 0x0009 +SymbolicName = CAT_UUCP +Language = English +UUCP +. +Language = French +UUCP +. + +MessageId = 0x000a +SymbolicName = CAT_CRON +Language = English +Cron +. +Language = French +Cron +. + +MessageId = 0x000b +SymbolicName = CAT_AUTHPRIV +Language = English +AuthPrivate +. +Language = French +AuthPrivate +. + +MessageId = 0x000c +SymbolicName = CAT_FTP +Language = English +FTP +. +Language = French +FTP +. + +MessageId = 0x000d +SymbolicName = CAT_LOCAL0 +Language = English +Local0 +. +Language = French +Local0 +. + +MessageId = 0x000e +SymbolicName = CAT_LOCAL1 +Language = English +Local1 +. +Language = French +Local1 +. + +MessageId = 0x000f +SymbolicName = CAT_LOCAL2 +Language = English +Local2 +. +Language = French +Local2 +. + +MessageId = 0x0010 +SymbolicName = CAT_LOCAL3 +Language = English +Local3 +. +Language = French +Local3 +. + +MessageId = 0x0011 +SymbolicName = CAT_LOCAL4 +Language = English +Local4 +. +Language = French +Local4 +. + +MessageId = 0x0012 +SymbolicName = CAT_LOCAL5 +Language = English +Local5 +. +Language = French +Local5 +. + +MessageId = 0x0013 +SymbolicName = CAT_LOCAL6 +Language = English +Local6 +. +Language = French +Local6 +. + +MessageId = 0x0014 +SymbolicName = CAT_LOCAL7 +Language = English +Local7 +. +Language = French +Local7 +. + +; // Mac OS X specific facilities ------------------------------------ + +MessageId = 0x0015 +SymbolicName = CAT_NETINFO +Language = English +NetInfo +. +Language = French +NetInfo +. + +MessageId = 0x0016 +SymbolicName = CAT_REMOTEAUTH +Language = English +RemoteAuth +. +Language = French +RemoteAuth +. + +MessageId = 0x0017 +SymbolicName = CAT_RAS +Language = English +RAS +. +Language = French +RAS +. + +MessageId = 0x0018 +SymbolicName = CAT_INSTALL +Language = English +Install +. +Language = French +Install +. + +MessageId = 0x0019 +SymbolicName = CAT_LAUNCHD +Language = English +Launchd +. +Language = French +Launchd +. + +; //modern BSD specific facilities ---------------------------------- + +MessageId = 0x001a +SymbolicName = CAT_CONSOLE +Language = English +Console +. +Language = French +Console +. + +MessageId = 0x001b +SymbolicName = CAT_NTP +Language = English +NTP +. +Language = French +NTP +. + +MessageId = 0x001c +SymbolicName = CAT_SECURITY +Language = English +Security +. +Language = French +Sécurité +. + +; // IRIX specific facilities ---------------------------------------- + +MessageId = 0x001d +SymbolicName = CAT_AUDIT +Language = English +Audit +. +Language = French +Audit +. + +MessageId = 0x001e +SymbolicName = CAT_LFMT +Language = English +LogAlert +. +Language = French +LogAlert +. + + +; // ================================================================= +; // The following are message definitions. + +MessageId = 0x0080 +SymbolicName = MSG_KERNEL +Language = English +Kernel message: %1 +. +Language = French +Message du noyau : %1 +. + + +MessageId = 0x0081 +SymbolicName = MSG_USER +Language = English +User message: %1 +. +Language = French +Message utilisateur : %1 +. + + +MessageId = 0x0082 +SymbolicName = MSG_MAIL +Language = English +Mail subsystem message: %1 +. +Language = French +Message du sous-système de courrier : %1 +. + + +MessageId = 0x0083 +SymbolicName = MSG_DAEMON +Language = English +Message from a system daemon without separate facility value: %1 +. +Language = French +Message d'un daemon sans catégorie spécifique : %1 +. + + +MessageId = 0x0084 +SymbolicName = MSG_AUTH +Language = English +Security/authorization message: %1 +. +Language = French +Message de sécurite ou d'authorisation : %1 +. + + +MessageId = 0x0085 +SymbolicName = MSG_SYSLOG +Language = English +Message generated internally by syslogd: %1 +. +Language = French +Message interne généré par le daemon syslogd : %1 +. + + +MessageId = 0x0086 +SymbolicName = MSG_LPR +Language = English +Line printer subsystem message: %1 +. +Language = French +Message du sous-système d'impression : %1 +. + + +MessageId = 0x0087 +SymbolicName = MSG_NEWS +Language = English +USENET news subsystem message: %1 +. +Language = French +Message du sous-système de nouvelles USENET : %1 +. + + +MessageId = 0x0088 +SymbolicName = MSG_UUCP +Language = English +UUCP subsystem message: %1 +. +Language = French +Message du sous-système UUCP : %1 +. + + +MessageId = 0x0089 +SymbolicName = MSG_CRON +Language = English +Message generated by the clock daemons (cron and at): %1 +. +Language = French +Message généré par les daemons d'exécution programmée (cron et at) : %1 +. + + +MessageId = 0x008A +SymbolicName = MSG_AUTHPRIV +Language = English +Security or authorization private message: %1 +. +Language = French +Message privé de sécurité ou d'authorisation : %1 +. + + +MessageId = 0x008B +SymbolicName = MSG_FTP +Language = English +FTP daemon message: %1 +. +Language = French +Message du daemon FTP : %1 +. + + +MessageId = 0x008C +SymbolicName = MSG_LOCAL0 +Language = English +Local message on channel 0: %1 +. +Language = French +Message local sur le canal 0 : %1 +. + + +MessageId = 0x008D +SymbolicName = MSG_LOCAL1 +Language = English +Local message on channel 1: %1 +. +Language = French +Message local sur le canal 1 : %1 +. + + +MessageId = 0x008E +SymbolicName = MSG_LOCAL2 +Language = English +Local message on channel 2: %1 +. +Language = French +Message local sur le canal 2 : %1 +. + + +MessageId = 0x008F +SymbolicName = MSG_LOCAL3 +Language = English +Local message on channel 3: %1 +. +Language = French +Message local sur le canal 3 : %1 +. + + +MessageId = 0x0090 +SymbolicName = MSG_LOCAL4 +Language = English +Local message on channel 4: %1 +. +Language = French +Message local sur le canal 4 : %1 +. + + +MessageId = 0x0091 +SymbolicName = MSG_LOCAL5 +Language = English +Local message on channel 5: %1 +. +Language = French +Message local sur le canal 5 : %1 +. + + +MessageId = 0x0092 +SymbolicName = MSG_LOCAL6 +Language = English +Local message on channel 6: %1 +. +Language = French +Message local sur le canal 6 : %1 +. + + +MessageId = 0x0093 +SymbolicName = MSG_LOCAL7 +Language = English +Local message on channel 7: %1 +. +Language = French +Message local sur le canal 7 : %1 +. + + +; // Mac OS X specific facilities ------------------------------------ + +MessageId = 0x0094 +SymbolicName = MSG_NETINFO +Language = English +NetInfo subsystem message: %1 +. +Language = French +Message du sous-système NetInfo : %1 +. + + +MessageId = 0x0095 +SymbolicName = MSG_REMOTEAUTH +Language = English +Remote authentication or authorization message: %1 +. +Language = French +Message d'authentification ou d'authorisation distante : %1 +. + + +MessageId = 0x0096 +SymbolicName = MSG_RAS +Language = English +Message generated by the Remote Access Service (VPN / PPP): %1 +. +Language = French +Message généré par le Service d'Accès Distant (Remote Access Service) (VPN / PPP) : %1 +. + + +MessageId = 0x0097 +SymbolicName = MSG_INSTALL +Language = English +Installer subsystem message: %1 +. +Language = French +Message du sous-système d'installation : %1 +. + + +MessageId = 0x0098 +SymbolicName = MSG_LAUNCHD +Language = English +Message generated by launchd, the general bootstrap daemon: %1 +. +Language = French +Message généré par launchd, le daemon générique de démarrage : %1 +. + +; //modern BSD specific facilities ---------------------------------- + +MessageId = 0x0099 +SymbolicName = MSG_CONSOLE +Language = English +Message for the console: %1 +. +Language = French +Message pour la console : %1 +. + + +MessageId = 0x009a +SymbolicName = MSG_NTP +Language = English +NTP subsystem message: %1 +. +Language = French +Message du sous-système NTP : %1 +. + + +MessageId = 0x009b +SymbolicName = MSG_SECURITY +Language = English +Security subsystem message (firewalling, etc.): %1 +. +Language = French +Message du sous-système de sécurité (pare-feu, etc.) : %1 +. + + +; // IRIX specific facilities ---------------------------------------- + +MessageId = 0x009c +SymbolicName = MSG_AUDIT +Language = English +Audit daemon message: %1 +. +Language = French +Message du daemon d'audit NTP : %1 +. + + +MessageId = 0x009d +SymbolicName = MSG_LFMT +Language = English +Logalert facility: %1 +. +Language = French +Message de logalert : %1 +. + diff --git a/cpan/Sys-Syslog/win32/PerlLog_dll.uu b/cpan/Sys-Syslog/win32/PerlLog_dll.uu index 2661a9c173..3bb5ff5b29 100644 --- a/cpan/Sys-Syslog/win32/PerlLog_dll.uu +++ b/cpan/Sys-Syslog/win32/PerlLog_dll.uu @@ -1,171 +1,171 @@ -M35J0``,````$````__\``+@`````````0```````````````````````````
-M````````````````````L`````X?N@X`M`G-(;@!3,TA5&AI<R!P<F]G<F%M
-M(&-A;FYO="!B92!R=6X@:6X@1$]3(&UO9&4N#0T*)`````````"?JCW:V\M3
-MB=O+4XG;RU.)(>\6B=K+4XDX[6Z)VLM3B5)I8VC;RU.)``````````!010``
-M3`$"`!LK3D4``````````.``#B$+`0<````````<```````````````0````
-M$```````8``0`````@``!``````````$``````````!``````@``IAX```(`
-M`````!```!``````$```$````````!```````````````````````````!``
-M`+`8`````````````````````````#````@`````````````````````````
-M````````````````````````````````````````````````````````````
-M`````````````````````````"YR<W)C````L!@````0````&@````(`````
-M`````````````$```$`N<F5L;V,```@`````,`````(````<````````````
-M``````!```!"``````````````````````````````$`"P```!@``(``````
-M``````````````$``0```#```(````````````````````(`"00``%`````,
-M!```8````"`=``","P````````````!P$```K`P`````````````&@````$`
-M```9````/`$``(```0"```$`=`,``($``@"!``(`J`,``((``P""``,`Y`,`
-M`(,`!`"#``0`0`0``(0`!0"$``4`L`0``(4`!@"%``8`$`4``(8`!P"&``<`
-M?`4``(<`"`"'``@`V`4``(@`"0"(``D`1`8``)H("@":"`H`D`8``*L("P"K
-M"`L`*`<``+P(#`"\"`P`E`<``(P`$`",`!``U`<``(T`$0"-`!$`(`@``(X`
-M$@".`!(`;`@``(\`$P"/`!,`N`@``)``%`"0`!0`!`D``)$`%0"1`!4`4`D`
-M`)(`%@"2`!8`G`D``),`%P"3`!<`Z`D``)0`(`"4`"``-`H``)4`(0"5`"$`
-MB`H``)8`(@"6`"(`"`L``)<`(P"7`",`P`L``)@`)`"8`"0`(`P``!@``0!+
-M`&4`<@!N`&4`;``-``H``````!0``0!5`',`90!R``T`"@``````%``!`$T`
-M80!I`&P`#0`*```````8``$`1`!A`&4`;0!O`&X`#0`*```````4``$`00!U
-M`'0`:``-``H``````!@``0!3`'D`<P!L`&\`9P`-``H``````!```0!,`%``
-M4@`-``H````4``$`3@!E`'<`<P`-``H``````!0``0!5`%4`0P!0``T`"@``
-M````%``!`$,`<@!O`&X`#0`*```````@``$`00!U`'0`:`!0`'(`:0!V`&$`
-M=`!E``T`"@```!```0!&`%0`4``-``H````8``$`3`!O`&,`80!L`#``#0`*
-M```````8``$`3`!O`&,`80!L`#$`#0`*```````8``$`3`!O`&,`80!L`#(`
-M#0`*```````8``$`3`!O`&,`80!L`#,`#0`*```````8``$`3`!O`&,`80!L
-M`#0`#0`*```````8``$`3`!O`&,`80!L`#4`#0`*```````8``$`3`!O`&,`
-M80!L`#8`#0`*```````8``$`3`!O`&,`80!L`#<`#0`*```````8``$`3@!E
-M`'0`20!N`&8`;P`-``H````@``$`4@!E`&T`;P!T`&4`00!U`'0`:``-``H`
-M`````!```0!2`$$`4P`-``H````8``$`20!N`',`=`!A`&P`;``-``H````8
-M``$`3`!A`'4`;@!C`&@`9``-``H````T``$`30!E`',`<P!A`&<`90`@`&0`
-M=0`@`&X`;P!Y`&$`=0`@`#H`(``E`#$`#0`*````/``!`$T`90!S`',`80!G
-M`&4`(`!U`'0`:0!L`&D`<P!A`'0`90!U`'(`(``Z`"``)0`Q``T`"@``````
-M7``!`$T`90!S`',`80!G`&4`(`!D`'4`(`!S`&\`=0!S`"T`<P!Y`',`=`"F
-M`VT`90`@`&0`90`@`&,`;P!U`'(`<@!I`&4`<@`@`#H`(``E`#$`#0`*````
-M``!P``$`30!E`',`<P!A`&<`90`@`&0`)P!U`&X`(`!D`&$`90!M`&\`;@`@
-M`',`80!N`',`(`!C`&$`=`"8`V<`;P!R`&D`90`@`',`<`"8`V,`:0!F`&D`
-M<0!U`&4`(``Z`"``)0`Q``T`"@``````8``!`$T`90!S`',`80!G`&4`(`!D
-M`&4`(`!S`)@#8P!U`'(`:0!T`&4`(`!O`'4`(`!D`"<`80!U`'0`:`!O`'(`
-M:0!S`&$`=`!I`&\`;@`@`#H`(``E`#$`#0`*````;``!`$T`90!S`',`80!G
-M`&4`(`!I`&X`=`!E`'(`;@!E`"``9P"8`VX`F`-R`)@#(`!P`&$`<@`@`&P`
-M90`@`&0`80!E`&T`;P!N`"``<P!Y`',`;`!O`&<`9``@`#H`(``E`#$`#0`*
-M````7``!`$T`90!S`',`80!G`&4`(`!D`'4`(`!S`&\`=0!S`"T`<P!Y`',`
-M=`"F`VT`90`@`&0`)P!I`&T`<`!R`&4`<P!S`&D`;P!N`"``.@`@`"4`,0`-
-M``H```!L``$`30!E`',`<P!A`&<`90`@`&0`=0`@`',`;P!U`',`+0!S`'D`
-M<P!T`*8#;0!E`"``9`!E`"``;@!O`'4`=@!E`&P`;`!E`',`(`!5`%,`10!.
-M`$4`5``@`#H`(``E`#$`#0`*``````!,``$`30!E`',`<P!A`&<`90`@`&0`
-M=0`@`',`;P!U`',`+0!S`'D`<P!T`*8#;0!E`"``50!5`$,`4``@`#H`(``E
-M`#$`#0`*````F``!`$T`90!S`',`80!G`&4`(`!G`)@#;@"8`W(`F`,@`'``
-M80!R`"``;`!E`',`(`!D`&$`90!M`&\`;@!S`"``9``G`&4`>`"8`V,`=0!T
-M`&D`;P!N`"``<`!R`&\`9P!R`&$`;0!M`)@#90`@`"@`8P!R`&\`;@`@`&4`
-M=``@`&$`=``I`"``.@`@`"4`,0`-``H```!L``$`30!E`',`<P!A`&<`90`@
-M`'``<@!I`'8`F`,@`&0`90`@`',`F`-C`'4`<@!I`'0`F`,@`&\`=0`@`&0`
-M)P!A`'4`=`!H`&\`<@!I`',`80!T`&D`;P!N`"``.@`@`"4`,0`-``H```!`
-M``$`30!E`',`<P!A`&<`90`@`&0`=0`@`&0`80!E`&T`;P!N`"``1@!4`%``
-M(``Z`"``)0`Q``T`"@``````3``!`$T`90!S`',`80!G`&4`(`!L`&\`8P!A
-M`&P`(`!S`'4`<@`@`&P`90`@`&,`80!N`&$`;``@`#``(``Z`"``)0`Q``T`
-M"@```$P``0!-`&4`<P!S`&$`9P!E`"``;`!O`&,`80!L`"``<P!U`'(`(`!L
-M`&4`(`!C`&$`;@!A`&P`(``Q`"``.@`@`"4`,0`-``H```!,``$`30!E`',`
-M<P!A`&<`90`@`&P`;P!C`&$`;``@`',`=0!R`"``;`!E`"``8P!A`&X`80!L
-M`"``,@`@`#H`(``E`#$`#0`*````3``!`$T`90!S`',`80!G`&4`(`!L`&\`
-M8P!A`&P`(`!S`'4`<@`@`&P`90`@`&,`80!N`&$`;``@`#,`(``Z`"``)0`Q
-M``T`"@```$P``0!-`&4`<P!S`&$`9P!E`"``;`!O`&,`80!L`"``<P!U`'(`
-M(`!L`&4`(`!C`&$`;@!A`&P`(``T`"``.@`@`"4`,0`-``H```!,``$`30!E
-M`',`<P!A`&<`90`@`&P`;P!C`&$`;``@`',`=0!R`"``;`!E`"``8P!A`&X`
-M80!L`"``-0`@`#H`(``E`#$`#0`*````3``!`$T`90!S`',`80!G`&4`(`!L
-M`&\`8P!A`&P`(`!S`'4`<@`@`&P`90`@`&,`80!N`&$`;``@`#8`(``Z`"``
-M)0`Q``T`"@```$P``0!-`&4`<P!S`&$`9P!E`"``;`!O`&,`80!L`"``<P!U
-M`'(`(`!L`&4`(`!C`&$`;@!A`&P`(``W`"``.@`@`"4`,0`-``H```!4``$`
-M30!E`',`<P!A`&<`90`@`&0`=0`@`',`;P!U`',`+0!S`'D`<P!T`*8#;0!E
-M`"``3@!E`'0`20!N`&8`;P`@`#H`(``E`#$`#0`*``````"```$`30!E`',`
-M<P!A`&<`90`@`&0`)P!A`'4`=`!H`&4`;@!T`&D`9@!I`&,`80!T`&D`;P!N
-M`"``;P!U`"``9``G`&$`=0!T`&@`;P!R`&D`<P!A`'0`:0!O`&X`(`!D`&D`
-M<P!T`&$`;@!T`&4`(``Z`"``)0`Q``T`"@```+@``0!-`&4`<P!S`&$`9P!E
-M`"``9P"8`VX`F`-R`)@#(`!P`&$`<@`@`&P`90`@`%,`90!R`'8`:0!C`&4`
-M(`!D`"<`00!C`&,`I@-S`"``1`!I`',`=`!A`&X`=``@`"@`4@!E`&T`;P!T
-M`&4`(`!!`&,`8P!E`',`<P`@`%,`90!R`'8`:0!C`&4`*0`@`"@`5@!0`$X`
-M(``O`"``4`!0`%``*0`@`#H`(``E`#$`#0`*``````!@``$`30!E`',`<P!A
-M`&<`90`@`&0`=0`@`',`;P!U`',`+0!S`'D`<P!T`*8#;0!E`"``9``G`&D`
-M;@!S`'0`80!L`&P`80!T`&D`;P!N`"``.@`@`"4`,0`-``H```",``$`30!E
-M`',`<P!A`&<`90`@`&<`F`-N`)@#<@"8`R``<`!A`'(`(`!L`&$`=0!N`&,`
-M:`!D`"P`(`!L`&4`(`!D`&$`90!M`&\`;@`@`&<`F`-N`)@#<@!I`'$`=0!E
-M`"``9`!E`"``90!M`&$`<@!R`&$`9P!E`"``.@`@`"4`,0`-``H`````````
-M```:`````0```!D````\`0``@``!`(```0!T`P``@0`"`($``@"D`P``@@`#
-M`((``P#0`P``@P`$`(,`!``0!```A``%`(0`!0"<!```A0`&`(4`!@#L!```
-MA@`'`(8`!P!,!0``AP`(`(<`"`"<!0``B``)`(@`"0#H!0``F@@*`)H("@`H
-M!@``JP@+`*L("P"D!@``O`@,`+P(#``(!P``C``0`(P`$`!`!P``C0`1`(T`
-M$0"(!P``C@`2`(X`$@#0!P``CP`3`(\`$P`8"```D``4`)``%`!@"```D0`5
-M`)$`%0"H"```D@`6`)(`%@#P"```DP`7`),`%P`X"0``E``@`)0`(`"`"0``
-ME0`A`)4`(0#$"0``E@`B`)8`(@`T"@``EP`C`)<`(P"\"@``F``D`)@`)``$
-M"P``&``!`$L`90!R`&X`90!L``T`"@``````%``!`%4`<P!E`'(`#0`*````
-M```4``$`30!A`&D`;``-``H``````!@``0!$`&$`90!M`&\`;@`-``H`````
-M`!0``0!!`'4`=`!H``T`"@``````&``!`%,`>0!S`&P`;P!G``T`"@``````
-M$``!`$P`4`!2``T`"@```!0``0!.`&4`=P!S``T`"@``````%``!`%4`50!#
-M`%``#0`*```````4``$`0P!R`&\`;@`-``H``````"```0!!`'4`=`!H`%``
-M<@!I`'8`80!T`&4`#0`*````$``!`$8`5`!0``T`"@```!@``0!,`&\`8P!A
-M`&P`,``-``H``````!@``0!,`&\`8P!A`&P`,0`-``H``````!@``0!,`&\`
-M8P!A`&P`,@`-``H``````!@``0!,`&\`8P!A`&P`,P`-``H``````!@``0!,
-M`&\`8P!A`&P`-``-``H``````!@``0!,`&\`8P!A`&P`-0`-``H``````!@`
-M`0!,`&\`8P!A`&P`-@`-``H``````!@``0!,`&\`8P!A`&P`-P`-``H`````
-M`!@``0!.`&4`=`!)`&X`9@!O``T`"@```"```0!2`&4`;0!O`'0`90!!`'4`
-M=`!H``T`"@``````$``!`%(`00!3``T`"@```!@``0!)`&X`<P!T`&$`;`!L
-M``T`"@```!@``0!,`&$`=0!N`&,`:`!D``T`"@```#```0!+`&4`<@!N`&4`
-M;``@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H``````"P``0!5`',`90!R
-M`"``;0!E`',`<P!A`&<`90`Z`"``)0`Q``T`"@``````0``!`$T`80!I`&P`
-M(`!S`'4`8@!S`'D`<P!T`&4`;0`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-
-M``H``````(P``0!-`&4`<P!S`&$`9P!E`"``9@!R`&\`;0`@`&$`(`!S`'D`
-M<P!T`&4`;0`@`&0`80!E`&T`;P!N`"``=P!I`'0`:`!O`'4`=``@`',`90!P
-M`&$`<@!A`'0`90`@`&8`80!C`&D`;`!I`'0`>0`@`'8`80!L`'4`90`Z`"``
-M)0`Q``T`"@``````4``!`%,`90!C`'4`<@!I`'0`>0`O`&$`=0!T`&@`;P!R
-M`&D`>@!A`'0`:0!O`&X`(`!M`&4`<P!S`&$`9P!E`#H`(``E`#$`#0`*````
-M``!@``$`30!E`',`<P!A`&<`90`@`&<`90!N`&4`<@!A`'0`90!D`"``:0!N
-M`'0`90!R`&X`80!L`&P`>0`@`&(`>0`@`',`>0!S`&P`;P!G`&0`.@`@`"4`
-M,0`-``H```!0``$`3`!I`&X`90`@`'``<@!I`&X`=`!E`'(`(`!S`'4`8@!S
-M`'D`<P!T`&4`;0`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H``````$P`
-M`0!5`%,`10!.`$4`5``@`&X`90!W`',`(`!S`'4`8@!S`'D`<P!T`&4`;0`@
-M`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H```!```$`50!5`$,`4``@`',`
-M=0!B`',`>0!S`'0`90!M`"``;0!E`',`<P!A`&<`90`Z`"``)0`Q``T`"@``
-M````?``!`$T`90!S`',`80!G`&4`(`!G`&4`;@!E`'(`80!T`&4`9``@`&(`
-M>0`@`'0`:`!E`"``8P!L`&\`8P!K`"``9`!A`&4`;0!O`&X`<P`@`"@`8P!R
-M`&\`;@`@`&$`;@!D`"``80!T`"D`.@`@`"4`,0`-``H``````&0``0!3`&4`
-M8P!U`'(`:0!T`'D`(`!O`'(`(`!A`'4`=`!H`&\`<@!I`'H`80!T`&D`;P!N
-M`"``<`!R`&D`=@!A`'0`90`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H`
-M```X``$`1@!4`%``(`!D`&$`90!M`&\`;@`@`&T`90!S`',`80!G`&4`.@`@
-M`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``
-M;P!N`"``8P!H`&$`;@!N`&4`;``@`#``.@`@`"4`,0`-``H``````$@``0!,
-M`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`
-M;``@`#$`.@`@`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S
-M`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`;``@`#(`.@`@`"4`,0`-``H`
-M`````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H
-M`&$`;@!N`&4`;``@`#,`.@`@`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`
-M(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`;``@`#0`.@`@
-M`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``
-M;P!N`"``8P!H`&$`;@!N`&4`;``@`#4`.@`@`"4`,0`-``H``````$@``0!,
-M`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`
-M;``@`#8`.@`@`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S
-M`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`;``@`#<`.@`@`"4`,0`-``H`
-M`````$0``0!.`&4`=`!)`&X`9@!O`"``<P!U`&(`<P!Y`',`=`!E`&T`(`!M
-M`&4`<P!S`&$`9P!E`#H`(``E`#$`#0`*````<``!`%(`90!M`&\`=`!E`"``
-M80!U`'0`:`!E`&X`=`!I`&,`80!T`&D`;P!N`"``;P!R`"``80!U`'0`:`!O
-M`'(`:0!Z`&$`=`!I`&\`;@`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H`
-M`````(@``0!-`&4`<P!S`&$`9P!E`"``9P!E`&X`90!R`&$`=`!E`&0`(`!B
-M`'D`(`!T`&@`90`@`%(`90!M`&\`=`!E`"``00!C`&,`90!S`',`(`!3`&4`
-M<@!V`&D`8P!E`"``*`!6`%``3@`@`"\`(`!0`%``4``I`#H`(``E`#$`#0`*
-M``````!(``$`20!N`',`=`!A`&P`;`!E`'(`(`!S`'4`8@!S`'D`<P!T`&4`
-M;0`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H```"(``$`30!E`',`<P!A
-M`&<`90`@`&<`90!N`&4`<@!A`'0`90!D`"``8@!Y`"``;`!A`'4`;@!C`&@`
-M9``L`"``=`!H`&4`(`!G`&4`;@!E`'(`80!L`"``8@!O`&\`=`!S`'0`<@!A
-M`'``(`!D`&$`90!M`&\`;@`Z`"``)0`Q``T`"@``````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M```````````````````````(````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
->````````````````````````````````````````
+M35J0``,````$````__\``+@`````````0``````````````````````````` +M````````````````````L`````X?N@X`M`G-(;@!3,TA5&AI<R!P<F]G<F%M +M(&-A;FYO="!B92!R=6X@:6X@1$]3(&UO9&4N#0T*)`````````"?JCW:V\M3 +MB=O+4XG;RU.)(>\6B=K+4XDX[6Z)VLM3B5)I8VC;RU.)``````````!010`` +M3`$"`!LK3D4``````````.``#B$+`0<````````<```````````````0```` +M$```````8``0`````@``!``````````$``````````!``````@``IAX```(` +M`````!```!``````$```$````````!```````````````````````````!`` +M`+`8`````````````````````````#````@````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````"YR<W)C````L!@````0````&@````(````` +M`````````````$```$`N<F5L;V,```@`````,`````(````<```````````` +M``````!```!"``````````````````````````````$`"P```!@``(`````` +M``````````````$``0```#```(````````````````````(`"00``%`````, +M!```8````"`=``","P````````````!P$```K`P`````````````&@````$` +M```9````/`$``(```0"```$`=`,``($``@"!``(`J`,``((``P""``,`Y`,` +M`(,`!`"#``0`0`0``(0`!0"$``4`L`0``(4`!@"%``8`$`4``(8`!P"&``<` +M?`4``(<`"`"'``@`V`4``(@`"0"(``D`1`8``)H("@":"`H`D`8``*L("P"K +M"`L`*`<``+P(#`"\"`P`E`<``(P`$`",`!``U`<``(T`$0"-`!$`(`@``(X` +M$@".`!(`;`@``(\`$P"/`!,`N`@``)``%`"0`!0`!`D``)$`%0"1`!4`4`D` +M`)(`%@"2`!8`G`D``),`%P"3`!<`Z`D``)0`(`"4`"``-`H``)4`(0"5`"$` +MB`H``)8`(@"6`"(`"`L``)<`(P"7`",`P`L``)@`)`"8`"0`(`P``!@``0!+ +M`&4`<@!N`&4`;``-``H``````!0``0!5`',`90!R``T`"@``````%``!`$T` +M80!I`&P`#0`*```````8``$`1`!A`&4`;0!O`&X`#0`*```````4``$`00!U +M`'0`:``-``H``````!@``0!3`'D`<P!L`&\`9P`-``H``````!```0!,`%`` +M4@`-``H````4``$`3@!E`'<`<P`-``H``````!0``0!5`%4`0P!0``T`"@`` +M````%``!`$,`<@!O`&X`#0`*```````@``$`00!U`'0`:`!0`'(`:0!V`&$` +M=`!E``T`"@```!```0!&`%0`4``-``H````8``$`3`!O`&,`80!L`#``#0`* +M```````8``$`3`!O`&,`80!L`#$`#0`*```````8``$`3`!O`&,`80!L`#(` +M#0`*```````8``$`3`!O`&,`80!L`#,`#0`*```````8``$`3`!O`&,`80!L +M`#0`#0`*```````8``$`3`!O`&,`80!L`#4`#0`*```````8``$`3`!O`&,` +M80!L`#8`#0`*```````8``$`3`!O`&,`80!L`#<`#0`*```````8``$`3@!E +M`'0`20!N`&8`;P`-``H````@``$`4@!E`&T`;P!T`&4`00!U`'0`:``-``H` +M`````!```0!2`$$`4P`-``H````8``$`20!N`',`=`!A`&P`;``-``H````8 +M``$`3`!A`'4`;@!C`&@`9``-``H````T``$`30!E`',`<P!A`&<`90`@`&0` +M=0`@`&X`;P!Y`&$`=0`@`#H`(``E`#$`#0`*````/``!`$T`90!S`',`80!G +M`&4`(`!U`'0`:0!L`&D`<P!A`'0`90!U`'(`(``Z`"``)0`Q``T`"@`````` +M7``!`$T`90!S`',`80!G`&4`(`!D`'4`(`!S`&\`=0!S`"T`<P!Y`',`=`"F +M`VT`90`@`&0`90`@`&,`;P!U`'(`<@!I`&4`<@`@`#H`(``E`#$`#0`*```` +M``!P``$`30!E`',`<P!A`&<`90`@`&0`)P!U`&X`(`!D`&$`90!M`&\`;@`@ +M`',`80!N`',`(`!C`&$`=`"8`V<`;P!R`&D`90`@`',`<`"8`V,`:0!F`&D` +M<0!U`&4`(``Z`"``)0`Q``T`"@``````8``!`$T`90!S`',`80!G`&4`(`!D +M`&4`(`!S`)@#8P!U`'(`:0!T`&4`(`!O`'4`(`!D`"<`80!U`'0`:`!O`'(` +M:0!S`&$`=`!I`&\`;@`@`#H`(``E`#$`#0`*````;``!`$T`90!S`',`80!G +M`&4`(`!I`&X`=`!E`'(`;@!E`"``9P"8`VX`F`-R`)@#(`!P`&$`<@`@`&P` +M90`@`&0`80!E`&T`;P!N`"``<P!Y`',`;`!O`&<`9``@`#H`(``E`#$`#0`* +M````7``!`$T`90!S`',`80!G`&4`(`!D`'4`(`!S`&\`=0!S`"T`<P!Y`',` +M=`"F`VT`90`@`&0`)P!I`&T`<`!R`&4`<P!S`&D`;P!N`"``.@`@`"4`,0`- +M``H```!L``$`30!E`',`<P!A`&<`90`@`&0`=0`@`',`;P!U`',`+0!S`'D` +M<P!T`*8#;0!E`"``9`!E`"``;@!O`'4`=@!E`&P`;`!E`',`(`!5`%,`10!. +M`$4`5``@`#H`(``E`#$`#0`*``````!,``$`30!E`',`<P!A`&<`90`@`&0` +M=0`@`',`;P!U`',`+0!S`'D`<P!T`*8#;0!E`"``50!5`$,`4``@`#H`(``E +M`#$`#0`*````F``!`$T`90!S`',`80!G`&4`(`!G`)@#;@"8`W(`F`,@`'`` +M80!R`"``;`!E`',`(`!D`&$`90!M`&\`;@!S`"``9``G`&4`>`"8`V,`=0!T +M`&D`;P!N`"``<`!R`&\`9P!R`&$`;0!M`)@#90`@`"@`8P!R`&\`;@`@`&4` +M=``@`&$`=``I`"``.@`@`"4`,0`-``H```!L``$`30!E`',`<P!A`&<`90`@ +M`'``<@!I`'8`F`,@`&0`90`@`',`F`-C`'4`<@!I`'0`F`,@`&\`=0`@`&0` +M)P!A`'4`=`!H`&\`<@!I`',`80!T`&D`;P!N`"``.@`@`"4`,0`-``H```!` +M``$`30!E`',`<P!A`&<`90`@`&0`=0`@`&0`80!E`&T`;P!N`"``1@!4`%`` +M(``Z`"``)0`Q``T`"@``````3``!`$T`90!S`',`80!G`&4`(`!L`&\`8P!A +M`&P`(`!S`'4`<@`@`&P`90`@`&,`80!N`&$`;``@`#``(``Z`"``)0`Q``T` +M"@```$P``0!-`&4`<P!S`&$`9P!E`"``;`!O`&,`80!L`"``<P!U`'(`(`!L +M`&4`(`!C`&$`;@!A`&P`(``Q`"``.@`@`"4`,0`-``H```!,``$`30!E`',` +M<P!A`&<`90`@`&P`;P!C`&$`;``@`',`=0!R`"``;`!E`"``8P!A`&X`80!L +M`"``,@`@`#H`(``E`#$`#0`*````3``!`$T`90!S`',`80!G`&4`(`!L`&\` +M8P!A`&P`(`!S`'4`<@`@`&P`90`@`&,`80!N`&$`;``@`#,`(``Z`"``)0`Q +M``T`"@```$P``0!-`&4`<P!S`&$`9P!E`"``;`!O`&,`80!L`"``<P!U`'(` +M(`!L`&4`(`!C`&$`;@!A`&P`(``T`"``.@`@`"4`,0`-``H```!,``$`30!E +M`',`<P!A`&<`90`@`&P`;P!C`&$`;``@`',`=0!R`"``;`!E`"``8P!A`&X` +M80!L`"``-0`@`#H`(``E`#$`#0`*````3``!`$T`90!S`',`80!G`&4`(`!L +M`&\`8P!A`&P`(`!S`'4`<@`@`&P`90`@`&,`80!N`&$`;``@`#8`(``Z`"`` +M)0`Q``T`"@```$P``0!-`&4`<P!S`&$`9P!E`"``;`!O`&,`80!L`"``<P!U +M`'(`(`!L`&4`(`!C`&$`;@!A`&P`(``W`"``.@`@`"4`,0`-``H```!4``$` +M30!E`',`<P!A`&<`90`@`&0`=0`@`',`;P!U`',`+0!S`'D`<P!T`*8#;0!E +M`"``3@!E`'0`20!N`&8`;P`@`#H`(``E`#$`#0`*``````"```$`30!E`',` +M<P!A`&<`90`@`&0`)P!A`'4`=`!H`&4`;@!T`&D`9@!I`&,`80!T`&D`;P!N +M`"``;P!U`"``9``G`&$`=0!T`&@`;P!R`&D`<P!A`'0`:0!O`&X`(`!D`&D` +M<P!T`&$`;@!T`&4`(``Z`"``)0`Q``T`"@```+@``0!-`&4`<P!S`&$`9P!E +M`"``9P"8`VX`F`-R`)@#(`!P`&$`<@`@`&P`90`@`%,`90!R`'8`:0!C`&4` +M(`!D`"<`00!C`&,`I@-S`"``1`!I`',`=`!A`&X`=``@`"@`4@!E`&T`;P!T +M`&4`(`!!`&,`8P!E`',`<P`@`%,`90!R`'8`:0!C`&4`*0`@`"@`5@!0`$X` +M(``O`"``4`!0`%``*0`@`#H`(``E`#$`#0`*``````!@``$`30!E`',`<P!A +M`&<`90`@`&0`=0`@`',`;P!U`',`+0!S`'D`<P!T`*8#;0!E`"``9``G`&D` +M;@!S`'0`80!L`&P`80!T`&D`;P!N`"``.@`@`"4`,0`-``H```",``$`30!E +M`',`<P!A`&<`90`@`&<`F`-N`)@#<@"8`R``<`!A`'(`(`!L`&$`=0!N`&,` +M:`!D`"P`(`!L`&4`(`!D`&$`90!M`&\`;@`@`&<`F`-N`)@#<@!I`'$`=0!E +M`"``9`!E`"``90!M`&$`<@!R`&$`9P!E`"``.@`@`"4`,0`-``H````````` +M```:`````0```!D````\`0``@``!`(```0!T`P``@0`"`($``@"D`P``@@`# +M`((``P#0`P``@P`$`(,`!``0!```A``%`(0`!0"<!```A0`&`(4`!@#L!``` +MA@`'`(8`!P!,!0``AP`(`(<`"`"<!0``B``)`(@`"0#H!0``F@@*`)H("@`H +M!@``JP@+`*L("P"D!@``O`@,`+P(#``(!P``C``0`(P`$`!`!P``C0`1`(T` +M$0"(!P``C@`2`(X`$@#0!P``CP`3`(\`$P`8"```D``4`)``%`!@"```D0`5 +M`)$`%0"H"```D@`6`)(`%@#P"```DP`7`),`%P`X"0``E``@`)0`(`"`"0`` +ME0`A`)4`(0#$"0``E@`B`)8`(@`T"@``EP`C`)<`(P"\"@``F``D`)@`)``$ +M"P``&``!`$L`90!R`&X`90!L``T`"@``````%``!`%4`<P!E`'(`#0`*```` +M```4``$`30!A`&D`;``-``H``````!@``0!$`&$`90!M`&\`;@`-``H````` +M`!0``0!!`'4`=`!H``T`"@``````&``!`%,`>0!S`&P`;P!G``T`"@`````` +M$``!`$P`4`!2``T`"@```!0``0!.`&4`=P!S``T`"@``````%``!`%4`50!# +M`%``#0`*```````4``$`0P!R`&\`;@`-``H``````"```0!!`'4`=`!H`%`` +M<@!I`'8`80!T`&4`#0`*````$``!`$8`5`!0``T`"@```!@``0!,`&\`8P!A +M`&P`,``-``H``````!@``0!,`&\`8P!A`&P`,0`-``H``````!@``0!,`&\` +M8P!A`&P`,@`-``H``````!@``0!,`&\`8P!A`&P`,P`-``H``````!@``0!, +M`&\`8P!A`&P`-``-``H``````!@``0!,`&\`8P!A`&P`-0`-``H``````!@` +M`0!,`&\`8P!A`&P`-@`-``H``````!@``0!,`&\`8P!A`&P`-P`-``H````` +M`!@``0!.`&4`=`!)`&X`9@!O``T`"@```"```0!2`&4`;0!O`'0`90!!`'4` +M=`!H``T`"@``````$``!`%(`00!3``T`"@```!@``0!)`&X`<P!T`&$`;`!L +M``T`"@```!@``0!,`&$`=0!N`&,`:`!D``T`"@```#```0!+`&4`<@!N`&4` +M;``@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H``````"P``0!5`',`90!R +M`"``;0!E`',`<P!A`&<`90`Z`"``)0`Q``T`"@``````0``!`$T`80!I`&P` +M(`!S`'4`8@!S`'D`<P!T`&4`;0`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`- +M``H``````(P``0!-`&4`<P!S`&$`9P!E`"``9@!R`&\`;0`@`&$`(`!S`'D` +M<P!T`&4`;0`@`&0`80!E`&T`;P!N`"``=P!I`'0`:`!O`'4`=``@`',`90!P +M`&$`<@!A`'0`90`@`&8`80!C`&D`;`!I`'0`>0`@`'8`80!L`'4`90`Z`"`` +M)0`Q``T`"@``````4``!`%,`90!C`'4`<@!I`'0`>0`O`&$`=0!T`&@`;P!R +M`&D`>@!A`'0`:0!O`&X`(`!M`&4`<P!S`&$`9P!E`#H`(``E`#$`#0`*```` +M``!@``$`30!E`',`<P!A`&<`90`@`&<`90!N`&4`<@!A`'0`90!D`"``:0!N +M`'0`90!R`&X`80!L`&P`>0`@`&(`>0`@`',`>0!S`&P`;P!G`&0`.@`@`"4` +M,0`-``H```!0``$`3`!I`&X`90`@`'``<@!I`&X`=`!E`'(`(`!S`'4`8@!S +M`'D`<P!T`&4`;0`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H``````$P` +M`0!5`%,`10!.`$4`5``@`&X`90!W`',`(`!S`'4`8@!S`'D`<P!T`&4`;0`@ +M`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H```!```$`50!5`$,`4``@`',` +M=0!B`',`>0!S`'0`90!M`"``;0!E`',`<P!A`&<`90`Z`"``)0`Q``T`"@`` +M````?``!`$T`90!S`',`80!G`&4`(`!G`&4`;@!E`'(`80!T`&4`9``@`&(` +M>0`@`'0`:`!E`"``8P!L`&\`8P!K`"``9`!A`&4`;0!O`&X`<P`@`"@`8P!R +M`&\`;@`@`&$`;@!D`"``80!T`"D`.@`@`"4`,0`-``H``````&0``0!3`&4` +M8P!U`'(`:0!T`'D`(`!O`'(`(`!A`'4`=`!H`&\`<@!I`'H`80!T`&D`;P!N +M`"``<`!R`&D`=@!A`'0`90`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H` +M```X``$`1@!4`%``(`!D`&$`90!M`&\`;@`@`&T`90!S`',`80!G`&4`.@`@ +M`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"`` +M;P!N`"``8P!H`&$`;@!N`&4`;``@`#``.@`@`"4`,0`-``H``````$@``0!, +M`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4` +M;``@`#$`.@`@`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S +M`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`;``@`#(`.@`@`"4`,0`-``H` +M`````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H +M`&$`;@!N`&4`;``@`#,`.@`@`"4`,0`-``H``````$@``0!,`&\`8P!A`&P` +M(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`;``@`#0`.@`@ +M`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"`` +M;P!N`"``8P!H`&$`;@!N`&4`;``@`#4`.@`@`"4`,0`-``H``````$@``0!, +M`&\`8P!A`&P`(`!M`&4`<P!S`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4` +M;``@`#8`.@`@`"4`,0`-``H``````$@``0!,`&\`8P!A`&P`(`!M`&4`<P!S +M`&$`9P!E`"``;P!N`"``8P!H`&$`;@!N`&4`;``@`#<`.@`@`"4`,0`-``H` +M`````$0``0!.`&4`=`!)`&X`9@!O`"``<P!U`&(`<P!Y`',`=`!E`&T`(`!M +M`&4`<P!S`&$`9P!E`#H`(``E`#$`#0`*````<``!`%(`90!M`&\`=`!E`"`` +M80!U`'0`:`!E`&X`=`!I`&,`80!T`&D`;P!N`"``;P!R`"``80!U`'0`:`!O +M`'(`:0!Z`&$`=`!I`&\`;@`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H` +M`````(@``0!-`&4`<P!S`&$`9P!E`"``9P!E`&X`90!R`&$`=`!E`&0`(`!B +M`'D`(`!T`&@`90`@`%(`90!M`&\`=`!E`"``00!C`&,`90!S`',`(`!3`&4` +M<@!V`&D`8P!E`"``*`!6`%``3@`@`"\`(`!0`%``4``I`#H`(``E`#$`#0`* +M``````!(``$`20!N`',`=`!A`&P`;`!E`'(`(`!S`'4`8@!S`'D`<P!T`&4` +M;0`@`&T`90!S`',`80!G`&4`.@`@`"4`,0`-``H```"(``$`30!E`',`<P!A +M`&<`90`@`&<`90!N`&4`<@!A`'0`90!D`"``8@!Y`"``;`!A`'4`;@!C`&@` +M9``L`"``=`!H`&4`(`!G`&4`;@!E`'(`80!L`"``8@!O`&\`=`!S`'0`<@!A +M`'``(`!D`&$`90!M`&\`;@`Z`"``)0`Q``T`"@`````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````(```````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +>```````````````````````````````````````` |