Accepting request 1183575 from home:etamPL:branches:server:monitoring

replace FCGI with CGI::Fast.

Currently munin is broken and this fixes it.
Before submitting to Factory, perl-CGI-Fast must be submitted as well.

OBS-URL: https://build.opensuse.org/request/show/1183575
OBS-URL: https://build.opensuse.org/package/show/server:monitoring/munin?expand=0&rev=94
This commit is contained in:
Wolfgang Rosenauer 2024-07-04 07:58:29 +00:00 committed by Git OBS Bridge
commit 3a4daca137
23 changed files with 2288 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

165
Makefile.config Normal file
View File

@ -0,0 +1,165 @@
# -*- makefile -*-
#
# This is the Makefile.config file to use for a "clean" distribution.
#
# This file specifies where Munin will look for things after you've
# run 'make' in the source directory. Modify it to suit your needs.
# DESTDIR is meant only for use when making Munin packages. Unless
# you're doing packaging do NOT set it.
# DESTDIR is empty during building, and optionally set to point to
# a shadow tree during make install.
# Note: There is a need for a VARDIR, with DBDIR, PLUGSTATE, HTMLDIR
# and LOGDIR as subdirectories. Today, DBDIR contains configured
# domains, as well as PLUGSTATE, and we risk collisions.
#
# the base of the Munin installation.
#
PREFIX = $(DESTDIR)/usr
# Where Munin keeps its configurations (server.conf, client.conf, ++)
CONFDIR = $(DESTDIR)/etc/munin
# Server only - where to put munin-cron
BINDIR = $(PREFIX)/bin
# Client only - where to put munin-node, munin-node-configure, and munin-run
SBINDIR = $(PREFIX)/sbin
# Where to put text and html documentation
DOCDIR = $(PREFIX)/doc/packages
# Where to put man pages
MANDIR = $(PREFIX)/share/man
# Where to put internal binaries and plugin repository
LIBDIR = $(PREFIX)/lib/munin
# Server only - Output directory
HTMLDIR = $(DESTDIR)/srv/www/htdocs/munin
CGIDIR = $(DESTDIR)/srv/www/cgi-bin
# Server only - spool directory for data gathered from nodes by
# munin-gather - experimental. Place on ramdisk to make munin
# scale better. On many versions of Linux as well as on Solaris
# /tmp will be a ramdisk.
SPOOLDIR = $(DESTDIR)/var/lib/spool/munin
# Suggested directory name for a pulic ramdisk based tmp directory.
# SSPOOLDIR := /tmp/muninspool
# Client only - Where to put RRD files and other intenal data
DBDIR = $(DESTDIR)/var/lib/munin
# Client only - Where plugins should put their states. Must be writable by
# group "munin", and should be preserved between reboots
PLUGSTATE = $(DBDIR)/plugin-state
# Where Munin should place its logs.
LOGDIR = $(DESTDIR)/var/log/munin
# Location of PID files and other statefiles. On the server, must be
# writable by the user "munin".
STATEDIR = $(DESTDIR)/var/run/munin
# The perl interpreter to use
PERL := $(shell which perl)
# The python interpreter to use (used by some plugins)
PYTHON := /usr/bin/env python
# The ruby interpreter to use (used by some plugins)
RUBY := /usr/bin/env ruby
# The java runtime to use (used by some plugins)
JAVARUN := /usr/bin/java
# The java library dir to use (used by some plugins)
# this is needed in order to be able to install
# java libraries in a custom location. Many distrubutions
# enforce a spesific location for java libraries.
JAVALIBDIR:= $(LIBDIR)
# A modern (posix) shell. We're not looking for arrays, but $() and
# other modern stuff is expected. On a posix-system the expression
# below will find the right shell. Most Unixes released the last 10
# years are POSIX compliant enough for this to work (he said bravely).
#
# On Linux /bin/sh, SunOS/Solaris /usr/xpg4/bin/sh or /bin/ksh
# In general: bash or ksh will work
#
GOODSH := $(shell PATH=`getconf PATH` sh -c 'type sh | sed "s/.* //"')
# Path of bash for bash specific plugins
BASH := /bin/bash
# Server only - Where to install the perl libraries
PERLSITELIB := $(shell $(PERL) -V:sitelib | cut -d"'" -f2)
#PERLLIB = $(DESTDIR)$(PERLSITELIB)
PERLLIB = $(DESTDIR)$(shell ( $(PERL) -V:vendorlib | egrep -v "UNKNOWN|=''" || $(PERL) -V:sitelib) | cut -d\' -f 2)
# Client only - Install plugins for this architecture
OSTYPE := $(shell uname | tr '[A-Z]' '[a-z]')
# How to figure out the hostname. (Only used in default configuration
# files)
HOSTNAME := $(shell hostname)
# What is the safest way to create a tempfile.
# Default is to figure it out by testing various methods.
# Replace this with a known platform-specific method
MKTEMP := $(shell ./test-mktemp)
# Munin version number.
VERSION := $(shell ./getversion)
# User to run munin as
USER := munin
GROUP := munin
# Default user to run the plugins as
PLUGINUSER := nobody
# Which command to use to check if the USER and GROUP to run Munin as, exists.
# These will work on most modern OSes:
#
GETENT := $(shell which getent || which true 2>/dev/null)
CHECKUSER:= true
CHECKGROUP:= true
#CHECKUSER := $(shell $(GETENT) passwd $(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2"))
#CHECKGROUP := $(shell $(GETENT) group $(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2"))
# For OSX, comment out the previous two lines and comment in these
#
#CHECKUSER := $(shell nicl . -read /users/$(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2"))
#CHECKGROUP := $(shell nicl . -read /groups/$(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2"))
# For OSX 10.5 (Leopard), use the following two lines instead of what's above
#
#CHECKUSER := $(shell dscl . -read /Users/$(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2"))
#CHECKGROUP := $(shell dscl . -read /Groups/$(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2"))
# For HP-UX, use these instead:
#
#CHECKUSER := $(shell pwget -n $(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2"))
#CHECKGROUP := $(shell grget -n $(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2"))
CHOWN := echo Not done: chown
CHMOD := echo Not done: chmod
CHGRP := echo Not done: chgrp
# Java compiler stuff - only needed on the buildhost
JC := javac
JFLAGS := -g -source 1.5 -target 1.5
JAR := jar
# Check if the java compiler works
JCVALID := $(shell $(JC) -version >/dev/null 2>/dev/null && echo "yes")
# Check whether setruid functionality can be used
HASSETR := $(shell perl -e 'use Config; my @vars=("d_setruid", "d_setreuid", "d_setresuid"); foreach my $$var (@vars) { if ($$Config{$$var} eq "define") { print "1\n"; exit 0; } } print "0\n"; exit 0;' )

3
gsa-munin.zip Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ff0ddbff6ba6f0bfbbafedb1554c6fce62f582be9410c3c438e2ed3394830477
size 2988

3
munin-2.0.72.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cda0bbd1af142c000e5c1177ffe5b03c4771062e32324fcaf6e94e466fcf2876
size 2258511

24
munin-cgi-graph.service Normal file
View File

@ -0,0 +1,24 @@
[Unit]
Description=Munin CGI Graph generator
Requires=network.target
[Service]
# added automatically, for details please see
# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
ProtectSystem=full
ProtectHome=true
PrivateDevices=true
ProtectHostname=true
ProtectClock=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
RestrictRealtime=true
# end of automatic additions
Type=forking
ExecStart=/usr/bin/spawn-fcgi -s /var/run/munin/munin-cgi-graph.sock -P /var/run/munin/munin-cgi-graph.pid -u munin -g munin -M 0770 -U munin -G www /srv/www/cgi-bin/munin-cgi-graph
PIDFile=/var/run/munin/munin-cgi-graph.pid
[Install]
WantedBy=multi-user.target

24
munin-cgi-html.service Normal file
View File

@ -0,0 +1,24 @@
[Unit]
Description=Munin CGI HTML generator
Requires=network.target
[Service]
# added automatically, for details please see
# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
ProtectSystem=full
ProtectHome=true
PrivateDevices=true
ProtectHostname=true
ProtectClock=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
RestrictRealtime=true
# end of automatic additions
Type=forking
ExecStart=/usr/bin/spawn-fcgi -s /var/run/munin/munin-cgi-html.sock -P /var/run/munin/munin-cgi-html.pid -u munin -g munin -M 0770 -U munin -G www /srv/www/cgi-bin/munin-cgi-html
PIDFile=/var/run/munin/munin-cgi-html.pid
[Install]
WantedBy=multi-user.target

21
munin-cron.service Normal file
View File

@ -0,0 +1,21 @@
[Unit]
Description=Collect node data
Documentation=man:munin-cron(8)
[Service]
# added automatically, for details please see
# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
ProtectSystem=full
ProtectHome=true
PrivateDevices=true
ProtectHostname=true
ProtectClock=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
RestrictRealtime=true
# end of automatic additions
Type=oneshot
User=munin
ExecStart=/usr/bin/munin-cron

9
munin-cron.timer Normal file
View File

@ -0,0 +1,9 @@
[Unit]
Description=Collect data from nodes
Documentation=man:munin-cron(8) man:munin(8)
[Timer]
OnCalendar=*:0/5
[Install]
WantedBy=timers.target

9
munin-node.logrotate Normal file
View File

@ -0,0 +1,9 @@
/var/log/munin/munin-node.log {
daily
missingok
rotate 7
compress
copytruncate
notifempty
create 640 root root
}

94
munin-node.rc Normal file
View File

@ -0,0 +1,94 @@
#!/bin/sh
#
# munin-node Control the Munin Node Server (formerly Linpro RRD client)
#
# Author: Rune Nordbe Skillingstad <runesk@linpro.no>
#
### BEGIN INIT INFO
# Provides: munin-node
# Required-Start: $network $remote_fs
# Required-Stop: $null
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Network-wide graphing framework (node)
# Description: Munin Node Agents
### END INIT INFO
# Source SuSE config
. /etc/rc.status
MUNIN_BIN=/usr/sbin/munin-node
test -x $MUNIN_BIN || exit 5
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
# First reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - misc error
# 2 - invalid or excess args
# 3 - unimplemented feature (e.g. reload)
# 4 - insufficient privilege
# 5 - program not installed
# 6 - program not configured
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
# See how we were called.
case "$1" in
start)
echo -n "Starting Munin Node: "
if [ ! -d /var/run/munin ]; then
mkdir -p /var/run/munin 2>/dev/null
chown munin /var/run/munin
fi
## Start daemon with startproc(8). If this fails
## the echo return value is set appropriate.
startproc $MUNIN_BIN
# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Stopping Munin Node agents: "
## Stop daemon with killproc(8) and if this fails
## set echo the echo return value.
killproc -TERM $MUNIN_BIN
# Remember status and be verbose
rc_status -v
;;
restart|reload)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
# Remember status and be quiet
rc_status
;;
status)
echo -n "Checking for Munin Node: "
checkproc $MUNIN_BIN
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
esac
rc_exit

22
munin-node.service Normal file
View File

@ -0,0 +1,22 @@
[Unit]
Description=Munin Node
Requires=network.target
[Service]
# added automatically, for details please see
# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
ProtectSystem=full
ProtectHome=true
ProtectHostname=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
# end of automatic additions
Type=forking
ExecStart=/usr/sbin/munin-node
ExecStartPre=/usr/bin/mkdir -p /var/run/munin/
PIDFile=/var/run/munin/munin-node.pid
[Install]
WantedBy=multi-user.target

1
munin-node.tmpfiles Normal file
View File

@ -0,0 +1 @@
d /run/munin 0755 munin munin - -

7
munin-node.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>munin-node</short>
<description>munin-node listens on that port for incoming queries from the munin monitoring instance.</description>
<port protocol="tcp" port="4949"/>
</service>

View File

@ -0,0 +1,150 @@
From 012b33a702155ba7c96fd62028a3559364693c7e Mon Sep 17 00:00:00 2001
From: Steve Schnepp <steve.schnepp@pwkf.org>
Date: Wed, 26 Feb 2020 21:50:47 +0100
Subject: [PATCH] Use IO::Socket::IP instead of IO::Socket::INET[6]
---
Build.PL | 2 +-
Dockerfile | 2 +-
cpanfile | 2 +-
lib/Munin/Master/Node.pm | 4 ++--
4 files changed, 5 insertions(+), 5 deletions(-)
Index: munin-2.0.72/cpanfile
===================================================================
--- munin-2.0.72.orig/cpanfile
+++ munin-2.0.72/cpanfile
@@ -11,7 +11,7 @@ requires 'Getopt::Long';
requires 'HTML::Template::Pro';
requires 'HTTP::Server::Simple::CGI';
requires 'IO::Scalar';
-requires 'IO::Socket::INET6';
+requires 'IO::Socket::IP';
requires 'JSON';
requires 'LWP::Simple';
requires 'LWP::UserAgent';
Index: munin-2.0.72/Announce-2.0
===================================================================
--- munin-2.0.72.orig/Announce-2.0
+++ munin-2.0.72/Announce-2.0
@@ -14,7 +14,7 @@ The most important features:
- Large performance improvements on almost all munin's components
* Complete IPv6 integration.
- - The master only require a new perl module (IO::Socket::INET6)
+ - The master only require a new perl module (IO::Socket::IP)
- The node needs a IPv6-patched Net::Server
* Native SSH transport
Index: munin-2.0.72/doc/installation/prerequisites.rst
===================================================================
--- munin-2.0.72.orig/doc/installation/prerequisites.rst
+++ munin-2.0.72/doc/installation/prerequisites.rst
@@ -56,7 +56,7 @@ The munin master needs
* File\::Copy::Recursive
* Getopt::Long
* HTML::Template
- * IO::Socket::INET6
+ * IO::Socket::IP
* Log::Log4perl 1.18 or later
* Net::SSLeay (Optional, if you want to use SSL/TLS)
* Params::Validate
Index: munin-2.0.72/master/lib/Munin/Master/Node.pm
===================================================================
--- munin-2.0.72.orig/master/lib/Munin/Master/Node.pm
+++ munin-2.0.72/master/lib/Munin/Master/Node.pm
@@ -13,7 +13,7 @@ use Munin::Common::TLSClient;
use Data::Dumper;
use Log::Log4perl qw( :easy );
use Time::HiRes qw( gettimeofday tv_interval );
-use IO::Socket::INET6;
+use IO::Socket::IP;
# Used as a timestamp value, this declares none was found
use constant NO_TIMESTAMP => -1;
@@ -82,7 +82,7 @@ sub _do_connect {
LOGCROAK("[FATAL] '$url' is not a valid address!") unless $uri->scheme;
if ($uri->scheme eq "munin") {
- $self->{reader} = $self->{writer} = IO::Socket::INET6->new(
+ $self->{reader} = $self->{writer} = IO::Socket::IP->new(
PeerAddr => $uri->host,
PeerPort => $self->{port} || 4949,
LocalAddr => $self->_get_node_or_global_setting("local_address"),
Index: munin-2.0.72/master/t/munin_master_node.t
===================================================================
--- munin-2.0.72.orig/master/t/munin_master_node.t
+++ munin-2.0.72/master/t/munin_master_node.t
@@ -45,7 +45,7 @@ sub setup {
});
my $connected_socket = Test::MockObject->new();
$connected_socket->set_true('connected');
- my $inet = Test::MockModule->new('IO::Socket::INET6');
+ my $inet = Test::MockModule->new('IO::Socket::IP');
$inet->mock(new => sub { return $connected_socket });
$node->_do_connect();
Index: munin-2.0.72/INSTALL
===================================================================
--- munin-2.0.72.orig/INSTALL
+++ munin-2.0.72/INSTALL
@@ -40,7 +40,7 @@ Server:
- Getopt::Long
- File::Copy::Recursive
- CGI::Fast
- - IO::Socket::INET6
+ - IO::Socket::IP
- Log::Log4perl 1.18 or later (which depends on
- IPC::Shareable
- Log::Dispatch
Index: munin-2.0.72/contrib/Net-Server.patch
===================================================================
--- munin-2.0.72.orig/contrib/Net-Server.patch
+++ munin-2.0.72/contrib/Net-Server.patch
@@ -9,7 +9,7 @@ diff -ur lib.orig/Net/Server/Proto/SSLEA
use strict;
use vars qw($VERSION $AUTOLOAD @ISA);
-use IO::Socket::INET;
-+use IO::Socket::INET6;
++use IO::Socket::IP;
use Fcntl ();
use Errno ();
use Socket ();
@@ -18,7 +18,7 @@ diff -ur lib.orig/Net/Server/Proto/SSLEA
$VERSION = $Net::Server::VERSION; # done until separated
-@ISA = qw(IO::Socket::INET);
-+@ISA = qw(IO::Socket::INET6);
++@ISA = qw(IO::Socket::IP);
sub object {
my $type = shift;
@@ -63,11 +63,11 @@ diff -ur lib.orig/Net/Server/Proto/TCP.p
use strict;
use vars qw($VERSION $AUTOLOAD @ISA);
-use IO::Socket ();
-+use IO::Socket::INET6 ();
++use IO::Socket::IP ();
$VERSION = $Net::Server::VERSION; # done until separated
-@ISA = qw(IO::Socket::INET);
-+@ISA = qw(IO::Socket::INET6);
++@ISA = qw(IO::Socket::IP);
sub object {
my $type = shift;
@@ -156,12 +156,12 @@ diff -ur lib.orig/Net/Server.pm lib/Net/
### perform basic allow/deny service
sub allow_deny {
my $self = shift;
-@@ -1145,7 +1147,7 @@
+@@ -1145,6 +1147,6 @@
or $self->fatal("Can't dup socket [$!]");
### hold on to the socket copy until exec
- $prop->{_HUP}->[$i] = IO::Socket::INET->new;
-+ $prop->{_HUP}->[$i] = IO::Socket::INET6->new();
++ $prop->{_HUP}->[$i] = IO::Socket::IP->new();
$prop->{_HUP}->[$i]->fdopen($fd, 'w')
or $self->fatal("Can't open to file descriptor [$!]");

578
munin.changes Normal file
View File

@ -0,0 +1,578 @@
-------------------------------------------------------------------
Thu Jun 27 12:31:46 UTC 2024 - Adam Mizerski <adam@mizerski.pl>
- replace FCGI with CGI::Fast
-------------------------------------------------------------------
Thu Jun 13 10:19:33 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
- Fix dependenices: the FastCGI perl module is called FCGI.
-------------------------------------------------------------------
Wed Jun 12 08:21:32 UTC 2024 - Dirk Stoecker <opensuse@dstoecker.de>
- remove package name based perl requires
-------------------------------------------------------------------
Mon Mar 18 09:58:18 UTC 2024 - pgajdos@suse.com
- remove dependency on /usr/bin/python3 using
%python3_fix_shebang_path macro, [bsc#1212476]
-------------------------------------------------------------------
Thu Feb 22 12:03:55 UTC 2024 - pgajdos@suse.com
- Use %patch -P N instead of deprecated %patchN.
-------------------------------------------------------------------
Mon Jan 22 10:33:43 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
- Provide user(munin) and group(munin): the user and group are
created during in the pre script.
-------------------------------------------------------------------
Mon Jan 15 11:41:47 UTC 2024 - Pedro Monreal <pmonreal@suse.com>
- Use IO::Socket::IP instead of IO::Socket::INET[6]
* Remove the dependency on perl(IO::Socket::INET6) as it has been
deprecated by upstream, is no longer suitable for use and its not
being maintained. A compatible replacement for this package is
perl(IO::Socket::IP) which is shipped by the perl-base package.
* Upstream commit back-ported:
https://github.com/munin-monitoring/munin/commit/012b33a7
* Add upstream munin-remove-deprecated-INET6.patch
-------------------------------------------------------------------
Tue May 2 07:52:08 UTC 2023 - Bernhard Wiedemann <bwiedemann@suse.com>
- Drop manual requires for python (boo#1210588)
-------------------------------------------------------------------
Fri Apr 21 08:13:58 UTC 2023 - Max Lin <mlin@suse.com>
- Use python3 as the interpreter in ipmi_sensor_ and
smart_, boo#1210588
-------------------------------------------------------------------
Sun Mar 12 10:13:53 UTC 2023 - Carsten Ziepke <kieltux@gmail.com>
- Update to 2.0.72
* Import custom css file in style-new.css
-------------------------------------------------------------------
Thu Jan 12 13:16:28 UTC 2023 - Bernhard Wiedemann <bwiedemann@suse.com>
- Drop harmful chown in %post scripts (boo#1155078)
-------------------------------------------------------------------
Thu Dec 15 17:20:35 UTC 2022 - Carsten Ziepke <kieltux@gmail.com>
- Update to 2.0.71
* fix the fix for Date::Manip
- Changes in 2.0.70
* plugins/http_loadtime: enable saving cookies between requests
* UpdateWorker: prevent use of uninitialized value $first_epoch
* fix html_strategy to point to munin-cgi-html
* plugin fail2ban: allow configuration of warning/critical
thresholds
* Plugin haproxy_: handle backends with special characters
* [snmp__df_ram] Update title to match the memory plugin
* [snmp__cpuload] Update title to match the cpu plugin
* Plugin df_inode : Exclude msdosfs on FreeBSD as there's no
concept of inode
* Plugin bind9: stabilize order of values in graph
* Plugin bind9: Author's blog has moved to .no TLD
* Plugin bind9: Move 'Other' to bottom of list
* Update munin-graph.in
* Update munin-cgi-graph.in
- Run spec-cleaner
- Fix rpmlint warning: This script uses 'env' as an interpreter.
-------------------------------------------------------------------
Mon Oct 24 11:04:04 UTC 2022 - Ludwig Nussel <lnussel@suse.de>
- UsrMerge: move stuff from /sbin to /usr/sbin (boo#1191080)
-------------------------------------------------------------------
Sun Feb 20 10:39:50 UTC 2022 - Wolfgang Rosenauer <wr@rosenauer.org>
- update to 2.0.69
* bugfixes
* Handle NVME drives in the Linux iostat plugin
* munin-run: allow to pass additional arguments to the plugin
* use dedicated munin SNMP plugin
- require the www group (boo#1195732)
-------------------------------------------------------------------
Mon Nov 29 15:46:03 UTC 2021 - Johannes Segitz <jsegitz@suse.com>
- Removed
* PrivateDevices=true
* ProtectClock=true
* RestrictRealtime=true
from munin-node.service (bsc#1193118)
-------------------------------------------------------------------
Thu Oct 7 10:26:31 UTC 2021 - Johannes Segitz <jsegitz@suse.com>
- Added hardening to systemd service(s) (bsc#1181400). Modified:
* munin-cgi-graph.service
* munin-cgi-html.service
* munin-cron.service
* munin-node.service
-------------------------------------------------------------------
Fri Mar 5 09:49:51 UTC 2021 - Thorsten Kukuk <kukuk@suse.com>
- Run munin-update as user munin [bsc#1183078]
-------------------------------------------------------------------
Tue Feb 23 11:12:14 UTC 2021 - Andreas Stieger <andreas.stieger@gmx.de>
- add upstream singing key and verify source signature
-------------------------------------------------------------------
Mon Feb 8 22:09:56 UTC 2021 - Dirk Müller <dmueller@suse.com>
- update to 2.0.66:
* unknown_limit: do not misinterpret zero as one
* unknown_limit: fix handling of value "1"
* SpoolReader: process spooled content lines separately
* async: fetch spooled data in order of timestamps
* async: use name squashing rules when determining the names of spooled files
* async: clarify handling of timestamp
* doc: describe "timeout_fetch_all_nodes" and "timeout_fetch_one_node"
* Make sensors_ temperature plugin work on musl libc
* Symlink and custom name support for diskstat_
* fix reporting on URL in the munin-update log (stable-2.0)
* make it possible to configure global munin-update timeouts
* Use configured plugin group as primary group
* plugins/memory: add per-cpu counter
* Munin thresholds support for http_loadtime
* adjust_threshold: strings indexes are 1 based in AWK
* Plugin apt_all: prevent ambiguity between slash and hyphen in release names
* Fix utf8 encoding in plugins
* Fix special character for author name (Kristian Lyngst370l)
* Plugin snmp__if_err_: clarify authors list
* Plugin nomadix_users_: clarify formatting of authors
* Plugin vserver_cpu_: clarify copyright statement
* Plugin snmp__uptime: clarify authors
* Unify spelling of author "Dagfinn Ilmari Manns345ker"
* Unify more author names
* Fix template error in case of an empty host list
-------------------------------------------------------------------
Tue Sep 29 11:17:39 UTC 2020 - Thorsten Kukuk <kukuk@suse.com>
- pwdutils is long gone, use shadow
- Don't hard require systemd
- Update to 2.0.64
* several bugfixes in minor releases
https://github.com/munin-monitoring/munin/blob/stable-2.0/ChangeLog
-------------------------------------------------------------------
Wed Aug 19 10:11:07 UTC 2020 - Dominique Leuenberger <dimstar@opensuse.org>
- Stop abusing %{_libexecdir} for the firewalld service files.
-------------------------------------------------------------------
Sat Mar 21 11:04:27 UTC 2020 - Wolfgang Rosenauer <wr@rosenauer.org>
- add service definition for firewalld
-------------------------------------------------------------------
Fri Feb 21 23:05:43 UTC 2020 - Wolfgang Rosenauer <wr@rosenauer.org>
- update to 2.0.56
* several bugfixes in minor releases
https://github.com/munin-monitoring/munin/blob/stable-2.0/ChangeLog
-------------------------------------------------------------------
Tue Sep 10 10:11:38 UTC 2019 - Wolfgang Rosenauer <wr@rosenauer.org>
- use systemd timer instead of cron for new distributions (boo#1115448)
- require perl-rrdtool (boo#1149880)
- removed old (non-systemd) conditionals from spec
-------------------------------------------------------------------
Tue Aug 20 11:53:15 CEST 2019 - kukuk@suse.de
- Package /etc/cron.d as this is now part of cron which we don't
want to require
-------------------------------------------------------------------
Wed Jun 12 15:09:10 UTC 2019 - dimstar@opensuse.org
- Allow OBS to pick better candidates to shorten rebuild queues
-------------------------------------------------------------------
Thu May 9 05:31:28 UTC 2019 - Mathias Homann <Mathias.Homann@opensuse.org>
- update to 2.0.49
* fixes and improvements
-------------------------------------------------------------------
Mon May 6 14:33:17 UTC 2019 - Mathias Homann <Mathias.Homann@opensuse.org>
- update to 2.0.48
* many fixes and improvements in plugins
-------------------------------------------------------------------
Tue Sep 4 21:55:53 UTC 2018 - wr@rosenauer.org
- update to 2.0.40
* many fixes and improvements in plugins
* fixes and improvements of the build system
- removed obsolete patch
munin-plugin-quota_usage_warnings.patch
-------------------------------------------------------------------
Mon May 28 08:22:36 UTC 2018 - wr@rosenauer.org
- update to 2.0.37
* Add support for IBM i
* Update lighttpd.rst
* Update nginx.rst
* ejabberd improvements
* add example plugin graphs
* Add support for MySQL 5.5/5.6
* Added HP-UX support to processes plugin
* snmp__if_multi: Set warning to 75% of interface speed instead of 133%
* Add support for rndc options in bind9_rndc plugin
* Correcting mysql_queries plugin random hash ordering
* Add PostgreSQL 10 support to postgres_xlog
* mysql improvements
* Add IPv6 support
* many other improvements
- require also perl-rrdtool where it exists (boo#1094776)
- remove obsolete mysql55.patch
-------------------------------------------------------------------
Fri Sep 29 04:56:09 UTC 2017 - coolo@suse.com
- add perl526.patch to compile with perl 5.26 (no more . in @INC)
-------------------------------------------------------------------
Fri Jun 2 15:43:10 UTC 2017 - suse-beta@cboltz.de
- add Requires(pre): user(nobody) and group(nobody) to munin-node to fix
Tumbleweed build
- add %ghost /run/munin to munin and munin-node to fix a rpmlint warning
(Tumbleweed only, would cause build failures on SLE11)
-------------------------------------------------------------------
Thu Mar 2 13:45:33 UTC 2017 - aj@ajaissle.de
- fix source url
- update to 2.0.32
- remove CVE-2017-6188-fix-parameter-injection.patch (applied upstream)
-------------------------------------------------------------------
Thu Feb 23 12:33:21 UTC 2017 - wr@rosenauer.org
- fix CVE-2017-6188: munin-cgi-graph local file write vulnerability
(boo#1026539, CVE-2017-6188-fix-parameter-injection.patch)
-------------------------------------------------------------------
Sun Feb 19 16:08:24 UTC 2017 - wr@rosenauer.org
- update to version 2.0.30
Bugfix releases (closes the following issues since 2.0.25)
2.0.26: Closes: D:761190, GH:426
2.0.27: Closes: D:767032, D:768553, D:825136, D:834194, GH:690, GH:714
2.0.29: Closes: D:847649, D:849383
2.0.30: Closes: GH:745, GH:771, GH:783
-------------------------------------------------------------------
Tue Jan 17 13:04:06 UTC 2017 - bwiedemann@suse.com
- override build host's hostname to make build reproducible
-------------------------------------------------------------------
Tue Nov 24 12:11:20 UTC 2015 - wr@rosenauer.org
- apply upstream change to work correctly for MySQL >= 5.5
(mysql55.patch
-------------------------------------------------------------------
Tue Sep 1 11:54:04 UTC 2015 - dimstar@opensuse.org
- Add perl(Module::Build) BuildRequires: Fix build with perl 5.22.
-------------------------------------------------------------------
Sun Aug 2 05:52:38 UTC 2015 - bwiedemann@suse.com
- fix munin-node start (bnc#940287)
-------------------------------------------------------------------
Wed Jan 7 08:07:48 UTC 2015 - wr@rosenauer.org
- update to version 2.0.25
Bugfix release.
Closes: GH:304, D:769415, D:770745, D:770746, D:770826
* p/irqstats: Improve generated labels
* ip/iostat_ios: also support /dev/xvdX devices
* p/iostat_ios: also support /dev/vdX devices
* plugins/df_abs: fix the naming for regular devices
* p/pgsql: Detect "rc" postgresql versions
* p/ping_: honor ping env variable
- cleanup sysvinit scriptlets to fix the issue which always
disabled the service on update
-------------------------------------------------------------------
Sun Nov 2 22:26:03 UTC 2014 - wr@rosenauer.org
- update to version 2.0.24
* bugfix release
compatibility with perl 5.20
-------------------------------------------------------------------
Sat Sep 27 07:17:33 UTC 2014 - wr@rosenauer.org
- update to version 2.0.21
* bugfix release
It fixes the "start should be less than end" bug.
-------------------------------------------------------------------
Fri Sep 12 12:58:09 UTC 2014 - darin@darins.net
- remove conditions on Sources and include them regardless
-------------------------------------------------------------------
Thu Jan 16 15:54:28 UTC 2014 - wr@rosenauer.org
- require perl-libwww-perl to enable apache plugins (bnc#859046)
-------------------------------------------------------------------
Sat Dec 21 16:11:58 UTC 2013 - wr@rosenauer.org
- recommend logdigest to allow removal of it w/o breaking deps
(munin-node likes to have logtail which is part of logdigest
but the daily cronjob of logdigest is probably unwanted on some
systems)
-------------------------------------------------------------------
Tue Dec 17 20:45:26 UTC 2013 - wr@rosenauer.org
- update to version 2.0.19 (bnc#853570)
* CVE-2013-6048, a node could cause excessive memory consumption
on the Munin master
* CVE-2013-6359, a malicious plug-in could prevent data collection
for the node.
* more bugfixes
-------------------------------------------------------------------
Tue Aug 20 05:20:31 UTC 2013 - opensuse@dstoecker.de
- fix requires for main munin package
-------------------------------------------------------------------
Mon May 27 02:00:38 CEST 2013 - draht@suse.de
- update to version 2.0.14:
* fixes for computing of absolute values
* timeout code decoupled for global and plugin timeout.
* fixes for ntp
* TMPDIR reuse fixes
- do NOT autostart from %post
-------------------------------------------------------------------
Tue May 21 17:09:14 UTC 2013 - vjt@openssl.it
- Add missing perl-URI and perl-FastCGI dependencies
- Add systemd service units to start the HTML and Graph CGI servers
with the aid of spawn-fcgi
NOTE: the FastCGI server listens on an UNIX socket in /var/run/munin
and members of the "www" group can write to it.
- Add the missing [Install] section of the munin-node service unit
-------------------------------------------------------------------
Mon Mar 25 16:23:53 UTC 2013 - vjt@openssl.it
- Add an SNMP wildcard plugin to monitor the Google Search Appliance
https://github.com/ifad/munin-gsa
-------------------------------------------------------------------
Wed Mar 13 18:46:16 UTC 2013 - vjt@openssl.it
- Include an improved quota usage plugin that gets warning and
critical values from the configured soft and hard quotas.
Found in the wild on
https://svn.koumbit.net/koumbit/trunk/munin-plugins/quota-usage
tested and adapted.
-------------------------------------------------------------------
Thu Mar 7 11:06:49 UTC 2013 - vjt@openssl.it
- Update to 2.0.11.1
- Add nginx plugins from http://github.com/ifad/nginx-munin
-------------------------------------------------------------------
Tue Mar 5 19:42:45 UTC 2013 - vjt@openssl.it
- BuildRequire perl-IO-Socket-INET6
-------------------------------------------------------------------
Thu May 3 15:09:14 UTC 2012 - wr@rosenauer.org
- update to bugfix release 1.4.7
- fixed CVE-2012-2147 (bnc#759910)
-------------------------------------------------------------------
Wed Jun 9 00:00:00 UTC 2010 - detlef@links2linux.de
- new upstream version <1.4.5>
* bugfix release
-------------------------------------------------------------------
Sat Mar 6 00:00:00 UTC 2010 - detlef@links2linux.de
- new upstream version <1.4.4>
-------------------------------------------------------------------
Thu Dec 31 00:00:00 UTC 2009 - detlef@links2linux.de
- new upstream release <1.4.3>
-------------------------------------------------------------------
Mon Dec 21 00:00:00 UTC 2009 - detlef@links2linux.de
- new upstream release <1.4.2>
-------------------------------------------------------------------
Mon Dec 7 00:00:00 UTC 2009 - detlef@links2linux.de
- new upstream release <1.4.1>
-------------------------------------------------------------------
Sat Nov 28 00:00:00 UTC 2009 - detlef@links2linux.de
- new upstream release <1.4.0>
-------------------------------------------------------------------
Sat Dec 27 00:00:00 UTC 2008 - detlef@links2linux.de
- add UTF8 patch
-------------------------------------------------------------------
Sat Jul 19 00:00:00 UTC 2008 - detlef@links2linux.de
- new upstream release <1.2.6>
-------------------------------------------------------------------
Wed Aug 15 00:00:00 UTC 2007 - detlef@links2linux.de
- new upstream release <1.2.5>
-------------------------------------------------------------------
Mon Oct 17 00:00:00 UTC 2005 - detlef@links2linux.de
- Fixed missing /sbin/rcmunin-node
-------------------------------------------------------------------
Sun Oct 16 00:00:00 UTC 2005 - detlef@links2linux.de
- First build for packman
-------------------------------------------------------------------
Sun Apr 3 00:00:00 UTC 2005 - runesk@linpro.no
- 1.2.3 release
-------------------------------------------------------------------
Fri Apr 1 00:00:00 UTC 2005 - runesk@linpro.no
- 1.2.2 release
- Fixed SF bug 1164481 (missing /srv/www/htdocs/munin)
- Fixed SF bug 1164477 (patch for Net::Domain on PPC64)
-------------------------------------------------------------------
Fri Mar 11 00:00:00 UTC 2005 - runesk@linpro.no
- 1.2.1 release
-------------------------------------------------------------------
Wed Mar 9 00:00:00 UTC 2005 - runesk@linpro.no
- Fixed erronumous path to web directory
- Added start of node if not running
-------------------------------------------------------------------
Tue Mar 8 00:00:00 UTC 2005 - runesk@linpro.no
- Fixed some build path problems
-------------------------------------------------------------------
Thu Feb 24 00:00:00 UTC 2005 - runesk@linpro.no
- New major release
-------------------------------------------------------------------
Wed Feb 9 00:00:00 UTC 2005 - runesk@linpro.no
- Updated to version 1.2.0rc2.
- Removed Nagios stuff
- Added noreplace for some central configuration files
-------------------------------------------------------------------
Thu Nov 18 00:00:00 UTC 2004 - runesk@linpro.no
- Updated to version 1.0.4
-------------------------------------------------------------------
Mon Nov 8 00:00:00 UTC 2004 - runesk@linpro.no
- Updated version 1.0.3 / sync with redhat-build
-------------------------------------------------------------------
Wed Aug 4 00:00:00 UTC 2004 - runesk@linpro.no
- Initial SuSE build
-------------------------------------------------------------------
Sun Feb 1 00:00:00 UTC 2004 - ingvar@linpro.no
- Sync with CVS. Version 1.0.0pre2
-------------------------------------------------------------------
Sun Jan 18 00:00:00 UTC 2004 - ingvar@linpro.no
- Sync with CVS. Change names to munin.
-------------------------------------------------------------------
Fri Oct 31 00:00:00 UTC 2003 - ingvar@linpro.no
- Lot of small fixes. Now builds on more RPM distros
-------------------------------------------------------------------
Wed May 21 00:00:00 UTC 2003 - ingvar@linpro.no
- Sync with CVS
- 0.9.5-1
-------------------------------------------------------------------
Tue Apr 1 00:00:00 UTC 2003 - ingvar@linpro.no
- Sync with CVS
- Makefile-based install of core files
- Build doc (only pod2man)
-------------------------------------------------------------------
Thu Jan 9 00:00:00 UTC 2003 - ingvar@linpro.no
- Sync with CVS, auto rpmbuild
-------------------------------------------------------------------
Thu Jan 2 00:00:00 UTC 2003 - ingvar@linpro.no
- Fix spec file for RedHat 8.0 and new version of lrrd
-------------------------------------------------------------------
Wed Sep 4 00:00:00 UTC 2002 - ingvar@linpro.no
- Small bugfixes in the rpm package
-------------------------------------------------------------------
Tue Jun 18 00:00:00 UTC 2002 - kjetilho@linpro.no
- new package

8
munin.cron.d Normal file
View File

@ -0,0 +1,8 @@
#
# cron-jobs for munin
#
MAILTO=root
*/5 * * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron

585
munin.keyring Normal file
View File

@ -0,0 +1,585 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.1.6
Comment: Hostname: sks.pod02.fleetstreetops.com
mQINBE9Z0UYBEAChD/KVfJFENj65GLjiVEnrLwPqN6wF2EPsu3hnacKmXBJIUVOhER6XC9hF
mR2ZIXd8vkaHIIJ/3QmeUQsJWtd4JjHKV7vpTwStFbxtsexU0HVGpO10jKJjfrjM9f+xkFW2
xOpk/S16nLKq9kFDjVUOswq5qWuksIE22EBjQPyDROo/fhCJuZbAPJz5RuHuuOrFAzqcDq5p
I1WdY6MRDklKr6TZl6tp8d1mO5HBz37uMzTTBoyV4b7JajeyjLAL+lMW/isxBG3dAbsKkEDe
Esv2J+GKiHKQeRE01g4lRVXzVJQ6AENGhREqcUMTKNXkBcrT4QTO/u3305U54Mv0P7HUdIno
/lT1o4sM18jmlHbseU/fPfbZPf7rxvxnzckmtBtwoBLIBGOmqE5qHGnAc/B35Iay4BFDSVVG
wxrFfx2Bu7LYnuAk/biGlRWitCPC6cRbaRQ8zSO1RBaJ9qqz2+jWJbUpSP1pP8QxSOkOUhlG
iC0EwBB+cuOzmhEev5nQOfleN2uYAUmM83jqjcQUuhuY1SPkIbEg88ZNp3eaRG5DyytHSoKl
Ja3vtNQ1pqLEDeil/+7FBzT3unBnvJGImLHzPI+DwPXtYwjJ7j832H9XA282mL/vEc1xUq/b
SBreOWe2IzofV7PHO1BjAZoo1JdCTP/yC1LwrFIWWPrDz2d2OQARAQABtCZTdGV2ZSBTY2hu
ZXBwIDxzdGV2ZS5zY2huZXBwQHB3a2Yub3JnPohGBBARAgAGBQJPlDWHAAoJEFBy0DasWDUg
v7IAoJ5fxgak3QMj9na5+7FT1uCbtzz8AJsG3HPGd8NG6S51HQIA0QhqPT/x4YhGBBARCAAG
BQJQtiwZAAoJENXKmwTyxCO8vcwAoNbYe+tEqPIYqKPDNHlqGRF8qjMEAKCYIwTaFKdSZHQV
d4tcyohVZjxp0okBHAQQAQIABgUCULI95QAKCRADeeXW8b8B9PC9CACe3yXM/QsmnA14O+vo
+nwStv11nctYPnJ2hY8h6c+LkLTe6BLQwPlsi60PSICa/05aBBk4cvlBwnutF4dC547e6teZ
Sx7McBhJ0anidg5L4IIyBUo/WG7xeqJm2J5dBIsHHaVRfxVikRlEgPRFU4HVxt0NeE0WN+D+
yJgtuvOMULkJ8hFbkE8mISiqvNQvCtz8Lc/WHXe9OT0ouTlqiC35JfFqVCIqHikFaUYwKId8
JgHmE+VLHOLDqNHUzntB+bFNXwFPNhLoMHW94u3xxnFWwCCwdsKeT0Pum303Ck9HjWwW5Ps4
wpZ9+q+2raP3gN73kbslq6IMRgXeFLUPxx3JiQIcBBABAgAGBQJPlDWiAAoJEAkauFYGmqoc
T/wP/RPmbG8cuKfkeik9eP7F/0lLtN7gZ83/po8KsQRGOqXejQ97TtpBTVXBXptVakrCo2Mf
BmSvFM/z3adG4mXII6H5UeAoXvdXKucKitPb0VKzzoBFtuxGOPU7XJ3SngaDfC/ALx5spnD/
w55lTMr5BeCrMREzb/mB06c/bzdsVXJ1Jk8aW4axGsTOQ0kW8VMGI05CT3VGp5s7iXycUo+S
wAB3NGUyEEtuTkPToZjb0ADeIRnl5PS4wrvAd1Myzx4ZFxjYA1saVMj6D2cyggH9triA7q9E
UUIv1Dac1QkVZXa6qoRjVA/XBKx3Y6jiq4lb6cufmaga5xcy2LNgkPDw1UUrCq9vJB6cUhGD
KFP+cBBuORVFqM5tL1ep9I/7PMYMb5i6YcrJ/xD1PZKGJ3ufskQIIix9JEMjnFYwl7FWl8HG
TbLFsdsMuyVrG6FTUwzFhlPAnd3O1SZkzH/6odGFsNvBRbV0BLMNud9MEnkiaVdb2DsrgBlE
iY3+Czhlyg3goman4MjlJbBkw2dwyi1ckq6sYUYHvj/G9jAUsX7eBHSrCxxP9SMyMiMF5tQy
LagWMQYrWh6ptWxBBTGIVXh0VbTmV63GAdCT1+u/3h3+8Y1kNU8fcjMOfF56eMtC/CpV8PZa
wlRvnmCA8EqJN+79AAjed/E0kJXOFeL7SatM4ygoiQIcBBABAgAGBQJQshCrAAoJEFeL03Cq
oiRWaFUP/RQSj0oR15oVeuldzSIYEVCvSBCT5MB4yP7o/9Bse07Fl8Yll63IOh8ayQkl69hL
TSBRoulVqq4ReCtyIPklIPNPS5wU/LNNkWqsEBmE1y5X2tLU7gc++TjcrAhrED8E144LgGw1
N+JoY9zIJrT5ougWN8BmBnRDhMaqjFPIbzv0I5bHSQCmEwPtLpB4f7D7unWRgDSng8I0HmN3
tAJfUaLW5fBob4MdeaKvoaLSxtSu6e8o49UbfdU5dMxB6TWJU93/l59w9U+Cva+dxQCsj+9W
VRmswwmaloQNqtgxUBEdg42PEi6xm2h2PIzQFKrKbtbBoW1CYZKt9eQoCfxtgbL3CPTYj5lc
NrP7kDFusnnS637V4LdCNY/e8YIsGDh1y5OPWc7j2L2/ea211LE6ZBk1WJFZBzt1lntxXZyn
SpNSCNrlx2+MnxXc88t1Fs3z1RnNgciHMSqeV+UJBqAkn3KNG8Bx37jOC4mkiIKXkfG53i8q
n4VSK33jeHkbrGJG3An5cw0SaseB/Mc8YRIBDHOHH8+tPRvSs8Ve106i3ZNkWcus5QfM1VSm
dTd46KvRbtpgd3bJPORCBCEKmYdrJO4zG8/1sna0DBYdInWc7r0zpUpyIZRFIM8kRMn89S4f
G6ecb0jy5GhlI0IH3R6LK5EEUc3KdFgsN7A7iMTu75sViQIcBBABAgAGBQJQsjIxAAoJEAVc
SzX////+SbgQAJhhuHedpLOZsZaT/AUhoNZHqWAI6u0ITGrSPgy7Ce0sgYFB2XY9Anq6/Erq
55+100+s76Ejfavd6hH68ZteVpO6JuaZ+MZajz1j1MVI3ldDEkJHppb/bmK5CnGykeR6xP76
7QIc1dPlUdV6sFRDZUhDGThCcj97XhwqfU4ne6FqoijG80RiXLHAO15nGTLkqSp7rUTrgfsi
DBdL5YyJU14hmtZcN8sHMgORgw379sUGZaTR+hWrTW0q20n7cuXtjaCpM7D4wc5/btf8XVhr
xE3hHeSHVzRddAuYqadYVrWtIbbeIQaOYGTZvSozhJVbyHa6wEIrrmR6j3+/0Fo/B/8BpPRV
oDHM3UjwcNJbkOZUGz/Bj5D6VYgc4bRftxm6yAmLMOD5WeyfuBJ+Pv/OeMPxOzyZalMNHD3e
pWLFElIBBkKPppsGsuiHnBvGFzpqkzri9pBMMUnKKMvYCMfApptMVSd5v4Y4LgHb0KFxjvXR
YT6+2pTrNwMUdBd374oVoTfIM9ycTz4xyM6jGEafxltrC6dxQRkbw/XNpH4Dn0tOMB4VVQkk
z3cXYR0cD/NswMiwz1Ooai97zKrH1EGM8+Nwi+yxbkh+D2IcHoqJpwPzauojUDSfRN3geJXn
WX05Iyl5+We8bUce9ChPp0DELgGNjo6XopZXkqwuXHdggr55iQIcBBABAgAGBQJQsmImAAoJ
EOY0VNOn/l3WGQUQAIxG6r92ZnqWpNMoSmidzNFvpq4lhkrTJxpNo1cC14Q3ZsCM6RobuIK9
qgeuF3cltbC7RzJS5GTSXgUsVpoCj/kPGEt2JRQp1G+LXd/c6E3TbULm9mYvvBkaGi0zrCb9
C/xU460jep1WErcOXZc6zQzse/vnJfbDYT9jubs556O9lsACIbSF21S34U7TIWU5VBgLW47P
v62BPiwiFxAl6cCCs62y5eno5iIA0Ecrzrd4251LnLpO53xhG6h4eAN0OSswMPRhxwS67ndN
1KBRFnNvjwslOBggaVTbA9qaeRyPJd2gsMXeHxMsy6+hpMhlv3Q16O/DXHXSTaowDFNZiriI
g5HoS6TyAY01/QA3nEvWrJedIsoh9K704XQXJWNW7e7sPEaD1+xZuR+ZZ2Nb55TwHa2g++6V
YZzs6fmeER3CTGwDJEU9MR1Q82AoU0QwjolqrUML82fsgEY8eSYfBEF8fAsb2Ijv+Esuq1ap
Kpu9LKlfygbbgxPwUx0s+MhnxVLWK34NElWmEL2T33vWCF1BHDGgs8UCe7yC+R36yLWrjBth
zO30a974Gv3S4V+OI8wBIak1+OER7NKbuxMmP1Sr8d4iw5CIsTK6snRTUstgaofOJjOKrE7B
lW1Wq7hRKcxx+b/852y4NDwfNp5hYXiOL0RdKOS5f3x5+bGvoa+XiQIcBBABAgAGBQJQso/S
AAoJELUqnPRJDfyNjGgQAK2ysvQ/IzDrf9s/0LCeiO/bHHf2W7+oMfoTkhGvQA5tTJuBGAVc
P7r+SP1a9oIolYy0RzLtalblSRNrcYg2es+nQFziiQvJ64bkHJpCEdM/fBHZ5gPW8ssSm8jD
inhN5NNXBgv/akkICfN6HuIt+zgaL5RaZuT/pcqI2YGMzgQXhs0bYBUVVe5CCAmSaR09Japd
qOIilvLN9yoQlttfZmPw3ZEzZJXFG0bD61rghZpEK6MQzfFZto+jgTh5ouEisqdWu+64OTAe
RimWcw004TnxhJcypG7u1JnvZGc56ngLXmUFRuAl46v7fqZkzjzxvcCVZaJIExf0o4BgJYjW
fkvXL6DpXnRqvAEEa9l13mvESDhv7ZPjq2Rm35PF5YbJ/a/fAwStQJTaB+KvkO0FkalO68Pp
gFoOCQbPCMl0RMwH+nfbeKysvj+3pH6iKn57mcLw5dl3Oau5HDdRY2z/HjocY7DEhPCbvwGL
ZilpGj6dh10hh0jwi1/DnOIkHlcgsfJ9DVK6HePgJtJ4OB2uFadg+EsVJDlybv8c+Y18znrj
QqcJ2wIwXeWhqCEpmbLvdUnyEZvyMtEn69iv43UUotAlrVhm22GrvD1yFfXqH327NGNXseKI
EHkQys81GFxmUgY5UrbP73UNp5nfOiuO0l6f+H5Ch8pHtcaZ6blShO8MiQIcBBABAgAGBQJQ
srjSAAoJEEwN9WMpZaePDGAP/RibxkWXMlmz1+9gsjwSZswp8DdrRb+u2+Q1n0UVa0N4XQDz
gzdoN4+rEBUt9iKzJCPEIO4VXYm0SklvrK9TDH2f+stVXS/0rO7G0L1x2xRe7uAUxPk0o+Pd
xzjk61w7Co3cfUilTDfIXJV+tUr4lbY84vb7PlDN4iVUjnj2EOPmUe4ERflMbJWN3FXOYqiO
lY4fAilRKS4AfoVWI1ckIjXQ48F7rTULrVED9kg2niac7Xq7y2wQauS/WsocaDFtwzKZ+LK5
FA5BZRE5uYQKYVQCVTKHq5BKKgUN7U0wGwzZfIpYn092aAQhKUqIjW2n4mLLFD0icYVqS7zl
HlXDfeFfj2upJEMYlC5d9+OCK2yoSjTQgvG9N+dZyx95jQwBPS8C7WI6GFtGPaUkCNbfw05x
Y/2HKoFSJ/JqAxO8tbh90WUgV+SFyo6bpzK+nxs8elR7Lx2DNuw9hgqHYVHKqFAcynRZ0bUB
gs77VbdOc0eHx9Df/yTt8+p8NJxm6K3SNlCtqhaJ8S1K5L8uJVLMxieK/nmigGzVpHCziMJ+
B4o813g92xj4mIrh6XT5KTPhRWiNq/RITpCcEXtF0pml9LfZjDuIIWGuzwE8kTu0i5PFcNro
un00V1TR0wKOsvUWzQbLL+Oe8Qvx2mg5bhGqnMsLtEwIALCMjlAIjO3Qj0NkiQIcBBABAgAG
BQJQs5+IAAoJEAqWTzCIRju3RQ4QALCmV11YslN1SjHmP8iAz2/E0m03FB1gbwgXcsH4Chcd
MYRkx+hO0nhkZJZ63CSRYn/XkPKniyuAHm6KpAwhcRDKu1rbWIx8z5USeSQNPD3R8qJ3mR7M
vJtCgqIazIpf8a/iB+iVrkfLfPL430FBdjDioLzv/XT/pGnqeouwwYbmFxJ4J0JGme+WhpsG
sbALY5KKv+FBinlAlmFE5xBi8zA77GaCM+6xlHXjbtAB5q8yPKtHj3SRxLgRmtPIiSfrUiQp
QvjwUHqfh5NxEXx5fCJjR2eKTlgi7SA+Dw0QrJN40IqSg+ehfBtBNue4eYbGQXVibKGZYay/
vi16lvb3bkXZgLQ/NL77lc5SxnVQxoKt2qZtskN2/22RiKfrA/KJlU/h71vKxiY3Wngu8Z02
eE/M/SL0wbGVScAnjr8Iqa1MUyJ/IzMcz0z5pIsIiyPmfEiZRmfRWyntBW4uCQka5B8Mnf/9
8bzL6cyCTA5K9Kqv3E+QeWpHiDvsz4stYCr6unHhQc8hfbAelG736rV9pNcHRrNsfGu43OwF
nFiugTZ2jys7ZFva6lc5Dv/7qdmILv5gBfOX4K07u5C0R6CRHS0c87d5bKCWj4Le5eVyy4nW
7zuAv50/LNXBYxApGiCp9g/kuwhgjC6mz+rqk29AjOdH7uoq8celwZpyor/TD8vYiQIcBBAB
CAAGBQJQslQKAAoJEHRcR2bUys3/7/kP/Aqvf3KqsxX+me/s1wKeZB3VGaIJssvnuFNlgfWb
XCFFJdMnd9uNX1/OMI5oj6KgIg4spfkO5HVMMzd8hmUsb8s2tIVAfh51zvUjbbXu4NkT0e3Z
rmipVTM2dsn1yMbSwxoADCQK+WdcDO1KTbrC0+RDrfzWmbVLUokbVg7mLXc5bIBsQN2QRgCL
BO0pEnW5yK5ex3+/gVm7hmmf9laDM4cUQw8MmTLe0F0L+rceQMrWE3W5wZsoVrLsgTqMRAZT
eYK1iddYS43FQh13qyVEYMl7U+MXoizzyMsoyO39jvlAdzoN+68+WErWdKJhM4B4mI3uvCNF
W7YGODdqrWh3FjutvcRshxVziBi072ki1aKGl1SSDNOjQW6NMcITbrrcLVWgFyBR0TlOUelO
gkvBIfA4bqSVE2Bl7GhiFEskbeSuGRIoSAh81yIqTlLB9mOQj9IbRN6KhDZ+FKYx78GKYuTF
hzy/NREAwqC2GfSHJ5iJZMPhEMugS2kT6iOs+m4fErF3SQzTemzk80hjk50PjtCSxH1bUw6i
DAq/vXw6dEyv4vUcAsBn7sz8amkBJq3IP2CiWBGQMX39xqzlxd6m9LhyO5Wepx7e2BFcnpw1
AkBzKnLna4XxXlTAg080PwP0bavI0AYSxrs0cNNi0sYcCT6noRQ2rrcmOrYS9HiAhLlfiQIc
BBABCAAGBQJQtQCuAAoJEJG378PW1jJfDVgP/1axxEY4yDpDEAXvyEfzwrmoEri68dTGjlP+
aQAlIE/y4AhLtDUg3ULZeus/GMqMPguRZyt8QBUa8PU5y5YJPjlqbwm2Rcw1yLb0v3T3PX2r
xrd3GEUk1fYjvhwVskXkb96xERBJ2npaRlcrM75A/EYQ+yP1M8dW5RdRkgiFvmauIcPD9KtC
iLRmIvyTZmgiIPRKjTfBifS53C7eGJQJRcbmWAz7n7wlrrspArNYyL0KhTApb1q/PnBlOC1z
bhoOXiFmzXKbeRQ9lcpSs8eRI5/FXINcqVgEllW1VLK74Bh/ywoUfvQRjhjQRjxvVR2N5p+O
7rC/t1KsLARPcizYknKCbZQdkG1j86461eLXN3qtMkNlweNBbPIkJB+p4JrYlOa5Tp/b18yV
fDVQvVJNndsShVAmVVd1/HgCKAo2Nb1hM/zF1gckYI0HLzq5+y37BxRnOzJtFSQB7tNJv3ZV
LdrSAYRIMJ1Vo/IlY64A4/fKUIItuzFzS6IKg6vWy6FoCEAQBCZTYcHr0x/iQzrmOtG21E4y
A4R6jg3ZJksFiMKse5lLsaFRYmHOyCiN+uqTEGUzH/FerBealMKnsjZ7tRJWPoIS1cAtvcAh
5cDAlu+bUsAIGtkJ4LWbzdG0CWQYwyjpFfyu+DCb684zJtyW067yHcPREtF7a+XKcO8nwK4v
iQIcBBABCAAGBQJQtiwuAAoJEJwxUDxthmOW8TsP/166/Fvs5OKfznZm8FLV7MIRLvgXzeRx
mbwWWvBelirEdcCx6xMjA3X/aSets5OWYiVaYmDWdXwt++LYzg7tvnL8lXYiu81320R5ZXSK
d5lOf776foe8fyGA4y5BXMse7oN2/+xdbLJfpaRa0LFm/Kwctk/VEw0M1dHHBGPDY0FGvlB/
I6kwuXmg+wYY0578G6wjB6oE25CP7tWjio4u4A1Uf4m0NZCrNQegCzT350dr2grqAct05gcs
rtj7uEc6lSIXdW5ZxxcBg0pqes6WSNRUgHZr9M5z1uEeszbrT+RvitcGu4TgpZvirv1UURDU
1iSN++62bFUm6Dfrb9No4zcuX1bBXDtSBt3q36DlpvAMHqshgd36f8ojaoho943Xu5DPGgR3
KV7swJ11BZH/9NX6JCeAWwWiyxUqWJ6VFbL7t1WtmQoP26v2t0H+ib2N4ePM1lQWmJEK5pMl
1wR74YRSMoxWNC7KOSUVIRU0RfgqnLOTI2SjU32QmrxFwwLdLRbRQoTpcDGPCeht6GTcVqzP
GVgYsVT1epF/BHm021moJiaJ/cX3jkLQIrzPqzPaH83tngU7QEr+zqmpnvJOG9zyGUDr4+eK
fJ+Ldl8R0GjcZw2QUKFO+j/9tLYEvL7bIQZzsWvkOvHxdSgTwOok9ejBz7TQix0k9Imm1MKX
D5tfiQIcBBMBAgAGBQJQv8FMAAoJEDq7jNrGvqgANhwQAJiYBSQSsONlLlq/YYhCysvPEg/S
ue6ZjM707+gDrJyrHhPL0/zOCsB14Ugwbdj7anXADO+dCfUO95ghPMm+llD5WIPrs+PWaDE1
dBTox6su1tAMQL1kNGWP3z8lfq+xfwYGz8b8h37nBflU7e6EWZrFg7sln/P4gpmyv+zrpZ1K
YYw74bo3N+rHWgLk1DDkDfa7S6hBfhvxR/1R7hzivndYL/xsy9433ThMn8UgWrXuzIZ4w0vA
+n8ix66vzmr1Ws4rgkve7YO+5VltwkhsdJb42X2Ya8mKeXM5hesZ6qlF4SIZZGU2xrR15q31
pob+Wq60YYYTAmhiqXIyWbp81w4iqLww8oPpf7k5n/+kqO/wSC4+NzrWrVFBKibRpDdDWRjM
TQjkJJFT0FODZ2vvyVUnV1fEBX1FSayTQAOrRpcK2SNnPCbwZbiZIaIigqQV5hhxFVo4xCEp
mV8z0f43E3itmtRLkFrguIDzBaF5ZtMbhiqzyZs2Ie99nyPwuYqD5QqtWgRzXA8T2/ZL8o9D
7aQ2Zd9ukEG5cnFRDq2T9CC6P29mGFd+grakUgsw6YsTggpjRNMx4fnSxyKHszdKHKbdxVVC
tBSA+DimP0sIKl9sWblBRP5s8mofubR5vajfVt/s68LAkQcqYAIsPcd3xJJM6oLRKcKImmHl
XvZInd/BiQIcBBMBCgAGBQJQsozRAAoJENbvpqxLENhH0EwQAIc85QyeNvq87aFAQjexWFAC
bloy6nKSZlCIFfJzQwofD1jhFTbEKC+J40ko0bUECeJyKlsJZaEtmfU0iaABEbHIuzu/YHI+
ClXsNHf21wZOAFosYilO3OcjWYkRC8XoQf+IYJpf7hyIHJQ66Qi31e/FNQSfWPa7HesCXLaG
+Hpmd3Mrd9fRw8BJ0ntc1vT7YkVrrW11n765VMoOt/V5BaZRg48Dl8v/UHZ10d67BWBEVtD4
wJLoO1PcPt0/luHjIVufJENkBrewDp42PjiBpbqVGVgLcLzeYVgt6rNgbpfr73cm/ReQZ+np
Tr6zj50WOK6UeQMnXRolnROSXEvcdpysL5xOLOx3fZgi2Hz1opr0qjCTXvvOTPnisYNZZeor
kJTcpASNHLG0bCzweuSrxv2wt9RqQXohvUeJgl9ub/49syju8G/rzcSpbkflW/L1rScQBtPV
Z+01JOany81NW/yj0HbesauXLXbwaY8a1iV7GTxq/UdZ46NrqaaXD/2OZamEQzSXJ6xodhG5
O7dTLnLzMfHxHmqig5isNAs/srJ5EzwZktrtiQZfZFKHzm42Nb16Rs1Cf4Q9Js+taLXGVXjF
WrQPH6PMcb+WWvmw2yXHUCblH10B/6xTkVvcuWmlRBFJJz0LiHbhJWG5rFx4F2jnlvvrx8ok
iC3Lb6jgPHw8iQI+BBMBAgAoBQJPWdFGAhsDBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIe
AQIXgAAKCRAKJMBZmLpBM7j1D/9lbjlPXqz9h+a7T6My2WOFAG1cD5LB0izLEgJyXf6bIYdx
W9fxRypWcCtZjkz/J9VMSsA3Z8ARl1CXB4Y0t/cA3B8l6Ny5vFprkYjYgtrBvSACGT5IENyN
XKBF55dUrMYcoFFWXgco+JX1hgxlmjy4KlMpJ1+JtNf5zMm7bzxN0Graojc6bbJC+fa3Sgm/
uMvIyE8CIObvhXTve1+Pxtwz5ORtjD/UcJugcZjf5DLWrWFiHdj1fdV07dGnsOvhgHzhYt3P
U0/Ny5khA02vIWanWiy2j4z4OjWkwKZ8L8kNBY1tH3B2QlF1aEsC/t2KsaqJg5vI1YnygxNE
hP0FAyggjz5s5MbrxKxIoY3al9bW1K2EOjlzKlNkUu25dmPdndQQu28cueMvkuYF5drTZk8T
S3dHFTbQjp5LMFNP1xX8gxFCWL4PV0XFtXHStrkHL/4RpvudMxq+h4xVCsVvrMDZwuV6+mIv
ncAF9a59dAUx4XiuG2uhLIr2dkjy1FSGI8F1UU0IHHQeMorWVLlPXMsHnNR2xxuUAiDPZncz
fRAMG7fm1vaVkwKfGt5bOtu8p06eRb+A6c/AOey6LlROjZgct/P+a9u0p/j+d36EpVfpJRep
QQkVUec/vNxyVUE2hmslSo/xNhGIfuMrK3nD5TvhtZWDQaKhP1b+gbQY40tvGokCQAQTAQIA
KgIbAwUJEswDAAIeAQIXgAIZAQUCUgOeeAULCQgHAwUVCgkICwUWAgMBAAAKCRAKJMBZmLpB
M8DjD/993ks8Tm51fXX6Qj+5RPWlAou46XnCs3u5DbcRvZ9MH+CEFwTm20vdjJlmFeeecJJU
vyQza0SHAZAva+uzlG+oKz/J6eae8wJjRc9oLAaMaXuxRn17Fv6lSVisFeedx+UdHXuG9hZF
+oUkkS+nhCGp+cU0Zp4IR0EnWqLY4gJVY/gB7aihLH5KN6Im5lIHjemVaQ6398x3H2Umz6ij
2fw2VdGtXUDiA3nQFi7PwBbswAhbTGgLL/ELy2Pgpsxkus8sc1DtPqLSsajt+n6wSMuCM7ZY
HiUvDLU6KbZUcvAD3pikJDdSbdLsATtkYHErDw9hOIN3xInwbgPEL2wajfKh6K2XlnnH7M3Q
IUrDgcoZ/E4dswIds+Maz4wcm5TpQGFx9lj1Q7kBbGK+/Dfg4qEBCTqHy+vH4QFLCxWGVYe8
jsmM4WkZhcxdSzfDq3IchC3aUOUAg6KZ5xQSaQ3uDttajdBPMgEewhqRZKfAlupopXbGO4LR
FCwvQYrbBMoauHcwu7WSyY7xFPd4eOPoyagq4Nqexsrfvv10UBfar8GRM6MrdnQ5D1EcKA3j
IFcG7O85bE6t/7ppItALJg3XkZnVnGjDDrgku3vcTClmxR2tXAK6zYpTV8hZw0Ms+/CoqcRV
hmXbpCiNX+SZphvs7b8HQ0GQMTF46nV2hTo/RRP4YIkCQQQTAQIAKwIbAwUJEswDAAYLCQgH
AwIGFQgCCQoLBBYCAwECHgECF4AFAlCweSgCGQEACgkQCiTAWZi6QTMfQA//YioL17dhUKlJ
d2DYQzggweXPHCKf7TZ0vc+aiQV/pgrPFV8h01FwbPZr90s2M5fNoW+MOA1MdxvTUPY9XVDc
STOy5dQfM3TgZBLpfUIbqfNgVNL+LbBNWRJHDjewrT+wPXS2N4y83GFjvK93o6CTIaTilQRi
5b1b8imVLO9w0ozzwTWEByEU+36gjEzNeSKEnuNf0M06mPAJTdGyjNYYey1aAgxw+bO6Ld5E
r+zoWQsqyxxiLde+HHdhKmwzO30ScS4dEeaect2sDkOnTBQovQWmQFfxlky9Ct9/7B9KHfQI
1Bar/PjiI/WVTL/mJEZ1u1oqEsysI/2eZtFbX/rwW3+Ha48XjCZtZZCq/PbyogbEIbncDRfk
2DFnh/bCRrUookS/pEE4b8nCmT6QxB0NoH2Iyc+/r7LXFAEhUSB9NpDstGXBecBhIrTfrB5o
YVGdw1/HJVLd75z2Psx3+Cvbc27WfLZPS/hXP10JIhuK+IE2j6OwOFzswkkVTuO36yqcMeCq
fK2DFxrGijOU5ym6rmoT+4cf/fWEPq6lXjkCU2TxHLSLndmZbjMrcAzlkM0aojThFZnKPw30
qNbw57rD4rV759kCiEZHmkMfg61JH7YqBpSnXHvxIgJgg7HnKhLz0lJ9A3tGI2VWPXkVA6QC
iZ2+aqsG93fi86JBfgCGssu0J1N0ZXZlIFNjaG5lcHAgPHN0ZXZlLnNjaG5lcHBAZ21haWwu
Y29tPohGBBARAgAGBQJQzgg3AAoJEHgz7PG1REgV+HIAn0QL4BgzytGTWBT8sn3bdO41ZCXc
AJ9Ky6f920gDtwnCJbk+jKciBctTm4kBHAQQAQIABgUCULI95QAKCRADeeXW8b8B9J5dB/9B
U0Qrw1ENMXHO0QlykKeZe7ghVCKb6ELiztL1yR4r6lECXPhseWxWoh1t2rgBJmK57L2l4yO7
g6k6aO7wIa1fqWHg3h004DfWdM0GZpqnULa04LHB8opmFRq4inWPjlGbhC10y37OnG5K7nCS
tSODbCxyDSQJUcZxXvTGVplbZMTlz9BC1tR8JRCjmccuN3mhfMspCmzPyrhPj3G34bxqs1GU
zod1dTQysLrHJmKYZP6VEeFZQHNsxyu3iX7YSN8e1eMqOpvXU05PlNQFgrP/0gEfF1nsZR9R
JbBf6J4x2ICl9e4Gq/54t63IrEZ7NbiYbxgnS+rvb0rb4gzaTdoDiQIcBBABAgAGBQJQs7EB
AAoJEKBKs7rb4mPupAUQAIKA3pFS6E6e91mB8mLmViF4nPCN70E6QKmhBU6/lzDTE363FpnT
Pz/n8Vcnfdzhb+8/dtlBqh9FD84owvqGQqXX+jkibtv9Fu0vH+ZL9UOAPy3qm4Z8YngiQfRs
sc5pIDgniUvyqajDPLH/LlFtuF6raFVJLEf4JW1C67yVEU3A/dH4ezGS4pvVNh2ImoI4jUkd
sE/a732tBcWhYJYhAbAxpa1RYfznaxd3+7ayj1BeJCj6T0MSZGSYsk+33euW1E4Xm1QMs/qi
IBliEWkDuUuNZffgRruYvKKF3owUcbHSEhnL1ltXsGWNLhyTOEPPi28sTbWiGMCN+ZCtDtuR
ZfI8Vl9VPs1cn57zzjBjKhT7gEq9P3Gp05Glg7++3sa5sRnpwq0ul9tGSxbCUGI8Jm7ZFSVR
saVqxFC8lL3/SlfVKCiEH9wul/j3yYnHk9imfX+U1raXAE26q85QM2FSLKJMEStHNHipqnMu
7nQimowGSr8CotSNUrfrrPEqnUioElhCYAzi85YSnCzNZnHDZbm+FgEr4PNZ/H7+M83/mc3e
gQ9CNCCfB0a8YmW+dNzpHAV2WTQzvlN8L/5PG6S+Q4HG98v8wZej+4wzJB67Kmy1Oc6NwrH+
CtmJmxSErjz/F5/bDct0C/9/53cVT2GCaNGvAjNwv4ON5iAoWR8Fw8JsiQIcBBABAgAGBQJQ
zgicAAoJEI8OfCtFIuOHXqwP/09N4YsoVzSmOoJ4UAg4q6Ham0o2p8TcyMRMNXIAgxD2nGLe
7LrDjQy66k7Tdzt1/9NP09IXDNRlDtBIHykaIp/x4rI1E+Mxj8fzygRU2M4Bs1Mu8vzJ2Ui1
Bqr52Y7z6tPqOo8LRW/uTql40b57xVoTPV8CWNFsFAQ6yjPas/y/jR8N3qzUmmHlvRN71uiA
OiNaDHZMmT6WpUwrqTbnHRYV6NAxZpCGcmMfzSmkJnSZj2YInFDldf8mwpGRkc6fdCj6dH0h
DGBVJ9XU5wBCkhYjKRwgNcxaP8WBFGrNM7plLZdd7TqBCHxP2inZQQ4nHHr4+Tv9CPw5qIHa
2n3ethF6GlscaBiZGF2GhqvwMVH0Hr7VH6K/Xx432j+Jpk8QIkBYBSXJ2pWqz+pQ+pdyOE9l
5TSyoCUqOI86PiiRR0TDfAZ2/qYCX0nrNlF/FCngo1KwqlyjQryGU4zbrQTUphA6qsidy6Au
0K2HGGyyfvlpiewRR4EFyTaw8lqP43GODm+JsJjaresokU4KvqJM43IMmuzLj7RzOMLRbUXo
TYlvm0KDUjVRtBqPjS1fJPQkyj4im9oJfr2iAojFlIsIfgVxK3P4bnnuNECOIpliM7e6KnLl
dqxhoyQ9zc5pZmcVf6XxA4Mlr3YXHpqlsMAflvFzZ0uFzxMeuB2ZUN1RPcwgiQIcBBABCAAG
BQJQs1KNAAoJEOYZBF3yrHKaX+sP/iZZqMuX1jpGv9o20ZOjcZgK9wWE9hl9N+kDBVGKarOW
cPQy5J55xFWKEbEVzsnjXPsabm6Hl15btNPgczstu+Y6tM+BJdfPoKt0V91teF3vvxA/zJUR
laJrWohKsz0c7pu41403389K+Q2zu6zilBpmEnB952yAS1Z2Z1izDhkapNTXNFyMAZCKs0VN
4NKZZHDqutKbexhJu0tgO03fSRC2z6gVYi3Qx0LnzKEs8qa8DrwaV9ofSDYUv6mf7rHoJ3Rv
CTyYMCYJVS3eCFWxXXwfUhLr3++YAtweUCSIT7UN+7KxL/C1wofpkp4B3xg9afb6y3ksKto3
y89YF0O8RTuX2MBxtNJoet8OSj8CIXJIrhu90/cTsKBqSmwgjr5+EzZgHE3gp0ZHWhPTKyiR
ecjpJHjq+ubmLE+3qEQBK/CdtKVaqGsI054X2izOF7SyuvLGYHwQW3at6CVe5qy0MC9lwF1p
DKI53DpKsU7mM2iO6BJ2v673ZnphOtw/WimFcm7g3/8wKigV/vBdYmYyIAoF+2r9M2+1/cY1
WBQKAaGcv45CmGmLvkd+mMwKmIZMjJqBrQOqbsrRLvFVtEH2vocDi7A7O9FCaEI9lNfrrP0O
Kp+cFkQ012lWiXUDA7TVwuGrfaBwwPVnNo0hCZjTtBg3KrANfC5qVLBx+SxdZodkiQIcBBAB
CAAGBQJQtQCuAAoJEJG378PW1jJfOucP/1HMSy1JLSzUF9Vn6efwUKrHJkeqEYqYrp0MonLg
7vpVRc9lm7RBLzpq+8CVyOYHgmBdmFBTV04MzDFVgyVly4ieAqCAFouCX8s/OhEzIqOrStUW
i5m/Ejc7gy8IZD7WbE+e/msw1qMQvAghl3Q4bQ2E+E9DT8oJji3t2JAtWPvI01L2Mf+O2qvj
vaqCkeik1Zk8RcZnay7O/MJ4iPYXr7eZ73a1lq3z0DgOsAgQqSO1O1kljVn4z96NSyF94g4K
syu4Ca4M1YNGnKOrj6hn0mU1fKQqcwiuhPSuReJo9dqdE7X+IHduvhck+CA670zvE/uVZVzT
SFy1hj+hRO46d8OlkIG60ls8SfITjMfTqb4M20jH/byg82InDZMRYLqm7Znuk6SjiDq5tkLO
CHYasBJ8EZw7N8LJL0Asr6acD0Aq00yNaGoYGwroYAgklrXZ2vh1T6Y0JKyvqwMVEvhULOQ1
7jjfDMDDkzTpqXpHgoPp+v5cGRuSApcEg/3d5aBYYpYMGkOGH8CbZ2bOPwMBKkMjHHqYf+lw
9RapsySUiAGimDvfVj0nfwrSEiN/IL9R8TWilvcGXxUgFiKFuajZppp3E2zN1K8DzCXf+aKH
xSBsogya/RdzflujjGoUX1j2apdIAVNiXM1J5au4kVgO5d91YPs7LsR0f82Dsnx7upj7iQI9
BBMBAgAnAhsDBQkSzAMAAh4BAheABQJSA557BQsJCAcDBRUKCQgLBRYCAwEAAAoJEAokwFmY
ukEzvvIQAJRmoZoichU2j7Pql0+QfkyiIIYKeoj132G+6eA/F3nBxwAfDCjnhx7NpTP+dy3A
+gEc7luK1Wevo1x/HUokMla/gSRqQvanLQF88iLJFjYcyUqYs15vKajS3xgWLfkCuv+jplIT
+OgtPpNa0I1qFuob/GwRbG6O97B/Udicg/DVAjVCfRsyX/RUhdg6DyfjCFiUUC3uQbIjk1zb
sm+UrDkid4y+hlVa/OfKQWc1VwNj1A2UMsotAScUKKJ9aWBvh+g2p/9tAjPog8xAfAtyBpTk
M9mC8jMklHD1xSk9TKXeg1gN7fnL7jLE4dyPtF07+QisgGgxYhtQqNVmb7OmwbUqA2kW/SBY
GEH187S8iFIErYv2dwZJGTshgivIaxDDBM4KS4Lk+eg7QwoAq/G/MHrr+hlm1kmi1dM0XXXC
/zJ7I741WlwKq7jj/mzTi4nKcU50EtyCcRDXW6/cbCEOsqoQddGdE7cszA5Y4IPP0vq5BQxs
JMAG3TFiwf+6dM+xdC0HJkX8oHFf+0SzBUJsIE3hplGsWoXXidmQLsyIbE++aQnb7cDSZWPs
x9SjpSVIRX94/QNMlRnHPnE5kYi3+WNvum8mpsMAqbtGJDBv/5vOfoBRna1cYz/+akYBLj4e
3rsvbK0Ue4W2Q9Ar9ZnC9qH+SP/ztpy6y8vuyejbC8y3iQI+BBMBAgAoBQJQsHe2AhsDBQkS
zAMABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAKJMBZmLpBM14XD/95sBSJjD73TI6p
7qPgWkx64CXRJRQ2yTev6AslQcV6fOrBFlY+IihuOSIrQY7ZZqs7EIe0jfAk+zojqP+Xi0wf
pN7DuvXGzkdqOODKCx2SkIYIYkUpOsbMl52WkYZDUqXsvfyebs0Va0xjb68sFTOs/qhu+olV
Wmf6aJ4jxpMfTOj/lZe+ucJ8ipEFiGOjQsKUpDoGMP89GnEY76jmR7/pw/MYjDtz26dcUl3v
B2roHDh7xSCUcHnozObV6qVL/6Z53wKjsRBMfj2aMKopFHn7Wxnav+qW+aUDtQwj3Hx1ODus
JV4+wluJ50QGSZBSCIo2jRoBi7JzC/WmD0tRsNmsUqpidn4RLuTE1LYo1gi4j7ICUqKcdQe6
ECHVmlZcBCC69DGMXA5dUWHPXjPH9pVpI3Yb0Zn8XGfhQAg+0oEqhR5/E39YcmQNjCAhV7l1
x+AqzkGm0icFk9faS4EA6nbQvzmnoeFmyrEArVArFmP9RW/ndj70GNhHOEv/jpS/2cSvcEqr
REsh+XgMR0gMTo36c7ffG0ye+QhEIUfH+lknmbgP9UKH3Pg6/ZUlRlPuEQkaKQ60MstDZd3b
fcUq+QNAXyIwO3y4NwUxkUU+rSo4bRERh4SsCySceyDEfG1ehALAgBLV5f6dolJbQzl8XOSr
ORMTAisXvfTyAFZOmCq7FbQyU3RldmUgU2NobmVwcCA8c3RldmUuc2NobmVwcEBtdW5pbi1t
b25pdG9yaW5nLm9yZz6IRgQQEQIABgUCULfoYQAKCRBGqhtqO/ufs3/jAJ9mAPl8CQwNLfOa
cLLmrBHGvTC+2ACaA2tI2MsibSHBY2sSgNXojUU6CAyIRgQQEQIABgUCUhSDgQAKCRCGRUS2
xUvXmDKeAJ9pCWYbuVjQ/AOojYJlFPrkIZr3fQCfV4a19C5I8qqIFhSOrAFavQ8ZymOJARwE
EAECAAYFAlCyPeUACgkQA3nl1vG/AfQ6Qgf/cDfSlasxPYUdOEDwrLlMbHuT41BdVydBKlzM
ji+OK0Gs9DT45NVU5sYQ8leUL/+U/P+OV0YGdscVd0x5Hfw56XFhG/yx1GQmqCNfxsjXHuX3
AyRRmVGYegebif4ayPvGAFliAvSOuuQoSAJ8Twb26TKmxKPApjFWRQGGMAc269euieDICFww
qcwrs3PkY9HyLvEI78A/WayezNm9VXPJXptwnVEBiXSxHdWS+1BEooxYUkSq/V50haGaBf2u
RmgOe12Q85HZjQTxQpR2Ceix5ErlTbCE/lRV8mNIvVDvm6oLFbd1IeHOUW6DKrNKHEVn28IJ
8C5LHlx0JvA05hcUookBHAQQAQoABgUCULnP6AAKCRBVThYlPAYhicd7B/9x58apYTWq2soK
PZv7WbgPceFS1YlxyFQynsSeLXti7GAmT0OzC55joHr7uf2NCR1sCPK8HcgZx31eges4GvKD
TWMjrWFwQZyE7Na+CnsWwC167aX3uvXUbaWUVJeqDazgo+JbJd4abqICWgeqLAqLZ1xu01ag
YCFGtUDUY8FIEYEQ2zSXd9ns+fJSO+4y4U8f1ENZyfzkzrquZmpgY0SCmdKdeSG2t6q4Bh+X
IgAzqPwQ/MeNfx/e2dR/eidGhOgoJ7EYrmpUSuQyEE2MbbTmEJwUDvumshHOQOP7hnoH3ZQl
UMIdWV+KDnYslapIQ5uw1cnZz8RtjAiLTx4q2ZGHiQIcBBABAgAGBQJQsjIxAAoJEAVcSzX/
///+RjAP/jC0Bn4GeJeve0lK9W6MGjHVT0GZWDdg1WzHzj2n1cIWCIxtiHITf6VD/Y4TrPYz
nlGeYAY2C3KLsikM8JtNlhufDZDot0TWSaR5SHSOz2aWNNnoS2MgsN3LaNVLZN2e8T8tXy4w
yDovTTjM52q1uRRZtkyv/j4KdBk4cY2TnUKYJnKFPI0hjT44QQScpjffflJa6Xw0wckrmL27
XeNTnRtYida/0gfqIOTSeHfzhLfAk1VzWo/QWAKRKSS+XQjLDlNu7BaqO0YOSF0aY7dL2vgM
ZUMQzDo3TCQSnk6SH0ueBHUQmiy55afean0TC49yMaPeg3qB4ycMX75Kn0T7EOo2y15flWlx
9dyJj9vLd9zSeY/RlRMZUJeMS6vNEAwIYbVYRM6xDFv4C+ga5pAm9rcEkU8iC2Scpps6F8Iz
BiUglEkLgy7lGiFU803nbRCLvb7bSpMIQAQzy7k5ZK8Mz2nFFWYMi68O/RuYJInrsk/d2lBL
mkGX5BmoIIC45pxetzGrfS+Qi8tm0tLVKm+pCxHtdV93JW3YXK9ngmWzwC3hBBk9sXVqa1A4
nflowDBN+HDXxFtMRphADGPmU8O+TbYu1rA/2sz8Ei5aY+gxozwS3CVWipKzVC2V1YFZBz8v
0b+Kukt9vfFNDBgxbrrEQEC/+nDgQqLfNjoSyy+5XVK6iQIcBBABAgAGBQJQsmImAAoJEOY0
VNOn/l3WgGIP/R3cOKpjFC/+8fbKbJTDZO+367BwXq/1fhsJibQJD5/vwysvCHC3vdfRt04A
mOP9KxPfxD0j6S6Swe98COf+gXe9/IfDnBDzNjN53RHXn3xiplxlSFA98NEByTNSfTJg+fM4
mV6h17JXYZjEwaIIwFdq3CKsvOwEqRaCmzPTl72zjk2oqvCpqhCLmQIkwXoWPBMjuYv52bl9
HGBAEnB+iT8BFklfvudT3Hcqz7g020Nyrg2FxHzQnjFDSWhPRA/+F+0KAXCyYe179JCI9LW3
EOW+R04W8vRlLbQwb0lW3xBMNmAibpiSTew5dQ2UhY2pS3YQtRkdHHPH/7b+Y9c9nRZPkdm7
Fz1Iei8cPvY/OrN3DBTD75UJNxyXzAhfLYTIg74TsyR6N1RjvPwN1PQyPUsNzDrUAAmo2zMv
/QM5Oldhu43CRZHfKvZHy9BlWKDom3TrTR6gqPucx1CJPX5fN2Y3U37Kl1Cvqs5ap6nQN49N
JTt7kl3QSioyVktQECIzV+80kTYfGauYw34zkmSyUCKljY7hsTe0rnTudocg2NYJaOxGm6vB
Dz02IvkZF1TmBU4ER6bUVSIvA9LUhaxmBOHFq/GPI1GVPtKGj//pmcdQnIykVcr07swmhB+1
RsGKbwWOILDWrHfoz/+BVcgnwMVvRufl6IojGWP8LPKPkYHuiQIcBBABAgAGBQJQt0/fAAoJ
ECw0o3UxJndb4P0P+gPBoSy1nH1ZxQvAKl5Ya8URlQt1mMZp5dGWDvbmoWI/7z6w1nFQ6cp5
XpILDqkDZ44F437906gDk+lz01SarVVfGC0orUTqPKhvH9KhL1AtO2avw+Vk1ZlnqN7KSWCw
bwQAWNe1JbZd2xilpCge7ba0szMFiqzqRMFOs53mJboPAXMh9+to1r8ExHgHjPQYh8rxqTFg
5rFsnHOGK+S/ekp0d8l5NbsNpPurOeYl/8HHTVPvZqcqgfQHvHbNOhr1aYO4BYzn4GsRORfk
Ib/OnDvD+gxwhPJUu4hMgC4oAixGJ3/I6i6EcikT0rX1Gp9RJKQzHHakPnnqOyEV46pEPB4R
u1MsJUCj6xhVpFZtMtQsCJUCBlgv+5hUr2uBz685A/4c6NDPQH6AEYf/Vaq3i7vMJZ0jsk+9
DiDHhluO6IEbF853CyBCN4A6Vm3Pii7u4w4MyDpobLykSshm7pkGv5lpO6QVUOFlLUAQ+iq5
4M2ik9us/3lQsfi+t9DzO0f1LOZpzqCEis1TSWHYeuPuYLiozSNgtsOJeoMT+UlH2DiZOFkb
3i+DXnheOQfwSNpMYRz87OkH0udPIiqGdg2mt8FRqra0k8E8F0NjRjGbgEVIAdrxHC8mNULo
pHEw3Sqloyhp8jSPuw2ZLHTwpLeUdW1n7USxuT66iH8BH9gb+XiZiQIcBBABAgAGBQJQuc3O
AAoJEHp0kGTTjxGjDW0QAME5jNy37EpRmOuEQkZY4mTDYqWtJyvyiHvUaGeMWYQCGBDZUFRi
/V2Sr6jYNUUDTVP13lzVvq1dQZuRXoGO7anYOcUs67eIrMa+XoSLNfPnRVejd3WqBGdfChfo
ENhbWQcImpILiSdXjZkM+tdv2BKX7QUGr+L7TFMn1Fd0LALVQAMCnMmD2qsxqboWTcQHQpQg
nITtEx6fDw4dUNiJIdMcXzeuFGhZGlzD4w8PZOQ7/2ewkF9DLVKqJt1C8slGcU/xlq5WQngQ
xpxRXLtCm0akc8T7Q4GryAd/GrPGmpcPA/Z4p7UNvNoskFUxStDeIInlHhtz+/VfRYIu+z6y
/dYB0teZO7MAJrsTfj6+dywD0yHHEv0oxDb2ka405uI6az/BltWsAyKrzXCwXbz9tRZvrPDl
SeTBuGgOATqIGHWdBaJkq3CkkPuIbZWPKIDk+CNLnbjoeLup6YRj60N6S7Vx3DE9lqeZ+sD9
RrKJyVkPSvW3DJ2n9hCbu9VDIIFmN+TxSBAMbId0dOl8ax4ERAMCc3VGxL3UbChju2X3GMk+
h8mLk6gibQojjLsiXNQ5IalXaFjcjA0XsO1mgk+ebFpVBzDSpy819+hIvA6w9gVSHXo3npcl
nDf6oiBRRv2LjmdE8RW/T/i4zhzYsG+VmhyS6FvTzUDXXOtzqMrwBTxAiQIcBBABAgAGBQJQ
ukcYAAoJEDY4HEwsuwiq+aYP/iqfZzQxKrijwO+pp7T7RS/fz/IPklfEhQty+Z7e9hWR2LaP
6zwT1WxHWDqkxdwb6PzDlQ2G37n7LN31JprdNk1UwtaWidwE6nTQls6mbxONIkibs9o+gb09
HA1VcNkMIomaWAaCY3Hmr4F6sd6p3dZ8eNVI6Kg7Zc84MrQn05L20z/DUjUzwD2KTEywrgmT
6/Ag+z7OEQiHNVksWbKBmRnV121ngNlz4vlWVU2C7fVT1e2TNhpJ1Cp3MbBQiMMZYOz3y8aw
EaxXppDTEE+WVI1kLsX6kFK3mON4bm6BESuUC+6t6+cHjpUrt0YcVNkKDSdQvRj67Ov2oHsF
4iWYaHP6kYIgJDXnnfceys/1K6CrekyGksCBC+dXbmIlaqMOAg7qHfiyvJ2gj4JXQP5Gy8N0
E6y/SHX57mhze3hxXtU88KL7nTV3RYSzwmTac/80a30kT9jSXb+c7neaOlPw3Dwpd7pFBcW5
bOFJwaPm8HwjoXuO6biVIypZAGCs/EL/z712l9+F+hV2nYnGN6VT9SJ/0Pi5ZWK47z3+QwOz
AORxuNgzs1MVDOpuQBCIf84ZhAG/swsb8LxjllW58J0b99HhCjHJS9bacBTA0MQxdQq85aIL
ncyTNSogNsvlzk43XUMaLlmgEIENZ3NE3XhIwY5YMNZ2R3zQUY/JgUrPYdhMiQIcBBABAgAG
BQJRThXHAAoJELjlCHdmR1qvIqQP/ApA1Fb7/NAC79O2fpfKSPWtCw5J8mm6cKDrbPNVp2eA
bEl9MxfBMEbwPsNDHIv3lBa2/TbuOkqJaIqTfBZ0qPKxQ6OLS2DG+NbGY+L453esRDRsXhQ0
9JNK2FLKA5NfUFuZzMhxHnpI0xZUcKnBwOeqvgc/nM/2asKc3NO1TyWC/zQ53iaa6BlMM5dc
6ltq6KmAQy7ArSiyiBslsOJiuI+870f1WPSQfBU9xW1oNwj4qg1shj0poVfroEKji4TYvcJ/
RTe/O1H3TphpXfAU0KUGWKRG0gN1Ya3qWI6xxZXoat25WuigDYJ/pISRRi/R4ENHV3M6UG1M
egsB+888DtJpnyvnPc/fx4lBmqOHgG6gFGN7o9AFMZ3yg7w2ZWVx9SbWGSboR1WUW2a5Jsjt
x/z2skjo8gO0+3HQiLARBc/XTnBjU0rMpEh2S/8XqXQaZA/wFf9KU8F9RXjS1f7fokkP4FY6
sw8t9zKtu1U7dQZRRbL7Sz1iXLDOYeCvV70ByfJNvXGliI519hysfCx67kwUNrDW0U5saBf0
lkFOUc6mSyFPRUczhocekJmHoCs/wi6oOAgXAquRKyWIqpC1YMmwsSDxwbifEPCjsqQuXTzk
LxLR3fbu2muQ7Pl3M5Xzc2hfsXR+P3MWdGnlMZ71t+eaOmJzAIoYMOYvXBpMNlqIiQIcBBAB
AgAGBQJSFIOXAAoJEC0aqs8kRERCiU0P/1zj1U025kn3zUFkNtfRXRMIvjRq1p+amJRivodl
be4bnfE7avTfvbdDpkyFaZvZgyDabUmr9vthhZQ1W97sPn69OsBANr3XptSbCJYa6XhVrjoL
Jrd3sT0NmyIvLbjAIb394ez+tNpauDIVE+eB30cWNV7AuLi0jlcKg7qO1NPISmXwKTEErnoH
3IpK/40BHgs1iXYhL4dOGx2n0sHxDm6pj5X1fI3qThsnhy/cQjEMEIN7oWZejmpHG/8FC7Nu
OwgIUJ4d7cv2FeeDoR1+E65AR1Jx/YqW+hX8o2syaO/z2I8JxKa4ZKbxjZmT/1VqkQru7Pvz
6gLInNxAdQFsr3AmkeWq9PU1rOmS4440/c1Bjdv+oVsutlc5QmB5A6gEdJ97lQE+b2C9mGwE
tKmCQLHjHSPGL1reDO/OkBhqCnXTpZbk33PvHJogDthlsQNSP2tkGVM7ulBvlvfdcpWCWusN
bJP5m1t8yMk7ZC8BFmuC3Fkax0WrwmxG9Gc2pwa4UTS5dwJ3U8+Useh1W5B6EdMXuJxx/9hX
vteZ1ESgYWspTn9axR7ZxWZDDi7R72e1NEmrMjVz5R6WJw4/JdZvFqdWTC5fcInkrXv+Zv3q
D9rWIvsEYcuQOk17G2t0AKlIN30eolehl5Ys2CzztbtNqP3o+kj3DH8tK5nvIrJeh8wTiQIc
BBABCAAGBQJQslQKAAoJEHRcR2bUys3/z0MP/0uyfQXvtHwRQdGx/TbqvLa6jeb28AFj4YkJ
Fz/Y7F1giW8MJcaXny4qawZsy/BRjcMFISaZO42V4R8MoK1w72q3MMyrVQME/BGrh02goZaY
I03ax2q2cDIzRrH45P+lOdWHmZRY4hL0/EzNevC14W69PnAQ5+oIxFcMuiE3vCTA4f57OWsY
lC8HQ94KLzNtqaDycGdK5UBvof9gumTJeO1svbaA6ro082D+1SOL1jCaqV/79vpB++fJtaUh
uYJV7TsBjre8MvMB9jWRQpgXzpkRMfj4mVSjoAehhuizPBR/Dm4l+A01IsLFJ4qu0GSHO/Fu
022ON+ee4LnBPagLsSMR7xG5YDbZxu9vJhHwOP9fwk2v8ULI02fVcIXrAK7fCdXcJp5W7Ki/
yskIizH5xVIGMEsBOhPnslxOO+PxJF1E+zlm7e8zlWH9/ebP2QUOf8KJnQHNzN19o7Pngv3P
7g6K105K5+oAL5DR8KLTsO5YWaBtqYDKQox2I37aIl9b5twP+cgTLEs0DzfGEtHKgoJfUy+T
Kz3PfDp16zy2AQ1JeUZkD/Ywy4qKXhoED6yGzvbrK5Gfs1+OiPUP6wx1h0SasnYxWwoNrz20
avqKbLzj9dIC2dFKpmpRF7aTCrdrrVAQUL1dkR4PXXuNj3uedP0e12It5r2PgMdKuIhleW7f
iQIcBBABCAAGBQJQs7WNAAoJELs6aAGGSaoGouIP/if4+QzrTSEyqJZYbSylmjbIzm5vlhdG
Nw3STipXPIlh0h4YxIw8/n9HYZu0mdXYvrOksKDfVV+tND5Lrw2cse+eb086MnuiDSWKYbJH
n94Fm57vFJgeuDAxITNXIjbsp+PQCInrmd7gBvpCLD2vPKHFKd7s00xkAdLHIXejQmoxBnJp
qIcW43KBUDTEdQmmGbWf5R7wgIIAwzST2ary5PXUDRFQygRvkX7ZyUW5npydFc5uuq0kaVin
8VpNsO2X4sO6WAh5phRgDD/PCh2hkkLKqDasmsr/9arvd2AkpulcZ9mzmoL3BCB519NsnHfz
0GnAIsk2qqMH9N6jNoT/uMMsRUyQi5R2g3Sw+An0gGHSMdpW/+pSYWKj/sk4WmlTnRJWZv3S
vG5P04j+ESj5vuf5XhlvfmJQOGddyAOR85myCLbGBcfcKJLVMZJgJ/e9G/ngKAQfWiOjfKng
w4TUgZVy9r5V52+khYLZOsIAwuy0YU78uKvTQ6jOaZQ3BtYliAr/uzjH1TVi/viOfjtANKlz
EKNrTOQaqzUioCyHJeigcAs5TwtRipflSUyvarHoF3h8087l3beupjNBssIoiNgQWLHsXKav
K6LuC7CwOk7VhAkuOJSV9r5iGtU3ydE/xUow3USFuKzaov2pA5gLsVqn9yV4GaDP2f3OG9Kz
SHPNiQIcBBABCAAGBQJQtQCuAAoJEJG378PW1jJftA4QAJiB9qg+/lOD2nXgXe1GnyZxyJyg
+vY4HcuQDR7EQ8nhwlpuNAQD1GjqucQ2s+Qj50EnzMeMaKBbA/o4cza1IzKXVigsmpn46Glm
ajcBZ53dLBJpgagzou7njO77CKGJuPi/FLQSwYUEpcWM5V+//hY1lS5Yu8l2PBk9GIXGl9c/
ioOsdXJHz1w1E2HswIuJX/5C1EhUoHXHDzY77e5V7taQp4ITkCgYdS3XTC0jgW4fibQ9DNlo
s7gqce6NPHhiJRgIpCw+UhOUt7RJNwd4T/+AmalOErhKbFJmAbQu3ikFRid/jhcetg7a/0nu
DZSTsvu0BtuU/dyaegJs2gU7EJiGrerU6uufTsEj/hHT1QVIfOHb0YY4eHnPcU9AykSk5iXY
rTi5nQje4N6wMtMNdWoVuJh7KLB0NEO1h+2tb92HQxjG3FUL5djsZhx004X6E4AoU8ngdfWM
RjA+YxXvqSljfOwz918zw/2SsJ99a8dGOWe4YR2D+HWbiwlhzdU7ZzIXiHOEzYM1K2+PdMn3
GlyucSu/8PasvrWGfKT1dcbYVkWKhyJksWYfcNE+s8ZyVzIZ2xJMrdheEE6KQl7PbFfbnZst
knUJxPXrv2QBj/z3y1Hn6I39CFtn1YpQZJCpFIX38R5fqdpH40B3TM5pZqdCOds7vjdCb306
XVGY3+GQiQIcBBIBCAAGBQJQt9V6AAoJEMXDKew1wuLx4G4P/3mDj7pbCS7ybZ/37hMkyqql
zJoOMciegdPYVd9oBVUdrdMp9Gj7H1rJ3pHmaJnhs1PmNd7AyZSlzSLdqcmLZ30koJkwQrqK
kllXCD67AJn+grgWUMkft/m+dGmtYuNwQ31BfeyPjJZEJhq6xb75GxUs6Qlyf/ZQzW0ZIKXl
EGw/o2iCyY4YsXkualmjhleSlmJYFKlqkSWpadzERvxh6/sO5jl/rgFQBPg72c5PPiIBwCYe
9jDH9LW12SjNMjCH1iRL0WcEtbRrO4PnmX+hXHlWSH6DzlA6FXD/Kn2wiqSKs48Ay3NwRjv5
4E3Z1R+Y5arGJ0jcS4EWakv/LKiozfJ5JAnCsFmIZyWhfDVjMK9QVymk4mUqs/yvtC/s6sSi
Tbi47UVwe3f6LoySTQ/EEaGrvaTnWLg2JfHQvuBwLcLhF7S8Y6StEtVviG0ZKX2MTAL5LzPQ
i2KB05fXM/Ika19oWBxNreWN67v9uZYq831RibGC0tYQy1BgAK2RbsjmtQo9s5s3YHB4wPB8
fQUifoqrpmuOYr7JCQs67BQo3J2t//G3kRwZfcAjn+8ED3wm3PKvM2kZ2k6SviwZtNHbnZ81
3kiN4sG/bc6lcwQ4V2SaIxu7aJXbjdGj69U3rG1W9IdO1Yf1csEUO+DZ+Z4OasukPwTVVDP4
X5P0jXC5sdQNiQI9BBMBAgAnAhsDBQkSzAMAAh4BAheABQJSA557BQsJCAcDBRUKCQgLBRYC
AwEAAAoJEAokwFmYukEzfcIP/29U+y6SEaiXpvbuY/D21KlzvVLDBZt5DvLc+vAwHUP9PNAw
lBfo96TZjmd+9HXvIl4oCP81Q6Lfyt8B1DEGVtt8QSwemBBTjq3lbOfaUWapEE135jjq7x53
FUPD/xYjFkmY001MCbv5lmkBs/5FtVrT/6yPOHFTjHwkeUhbm7XJteIj9smw1Ei1ZBIhDvzg
AUmQRmHjQD7pr9nls7n6aCHFiuvClYOJqIJRG+/VJtGM4Co88rHiyPEyecs5sQkbvWGmw8AO
OZr7duBQXhMwcJbfoqZE3lavM591F9I9bOUosmbUCE5bHHQ1VDi0PVOauJvVgWv2pzDSOW6a
53s5R+0AqXt2DWy6hjciSuwVR6PBYYFKwWarpZupdV77ZLLgWyg0o/2bVafOhtz2fRLsYz44
PE4ZCWZ0N616ofcpEPVKhNOTcMgpn8S3RAf2wqxQhAcEZpAE5bHt5d15k989DrTlQ6IJeiQA
T3SFvj6FnDzuiwJGsR3K9kv7P/zo5kfJDwZ0htdcDWI8OZ7sg/MZZsezrVhuJmRC6iY4/B9U
bG1DObWcm6FvKMiL/E2KorOONEMwQKWLoDAX7y0684oZ7cVN3nNh/Zpq6L1fVy4JhR8JMPqN
+Q0DFG38/jQKJkVtBdOAnaF6/3DPEQgX/d5iWOqYRZC5lg8VQheJHLO7GOzmiQI+BBMBAgAo
BQJQsHd8AhsDBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAKJMBZmLpBM37k
D/0dFN2VLmy7PgNP874MyDtde9muHYqIb0YBzZiCdjxu+kAnDEYt/REmgJ5ttY6whlB7hroU
JWp8FJbZLjFue0Y+phyl4BQSpMhFTcHFTU3oF5K/9ReBJKv6m0kBSk5hStbY44KFIqMz3Chl
eY6rL+utTuEZlwqaE4gxmUB83DtfSN2UVf14l6X2rrDZO4Bim9OTIYQ2Etvw71cyZsKoDoar
p2DVJM3DmZVUEz7no0Xt5da/SyKuD8IiLxUqASCYnclbop61Hfm7xs1+dZCoTsrr15m0K1TU
p9jkOYiUnc2u44xsuW88t7oLAhCg0xVbU6FlQqKSOUQuaux5LtgsaSGxHrAUBkTuNi1LhfuA
//wBrrNQVJCru/kY+F0zhaGsqd8YOYdWwBhhr+C6RIlql8XIwLHF14i+PBL9eELSwQsa3Ujm
dLJHZAwUJPhlDcqFdNXLodkpvo4dt192mjyvYujIJIsUBuILGVTCN2xru+cSLmwUqAyXfhUl
i2hLp2qwy+rV5e/mazePXurcRHVpDrWtYw6OiE74mRUNE3UsPTeUerXQjE15IoG6Nq1DVsz/
C8MW+lKslo9nwdAnH5lr0g34bvz0s+gdrOHTVIIrIMsATonxVtFNsADamW0AHZkO8JiMqh8g
DIKM6alicfS1fWhZoIn2BMc7CAHTCW7+xAe26LkCDQRPWdFGARAAqPhsQQyG3WtS+cAOovd7
1u9qB1yQvaL/XAQrULPkp/Y+swdr3aNyclRZjBJfdOVrTpqqLUL6LUtsu7GgfZgB+KxzqUt1
rI5jiJAx4mIh+Hbn2Uf+4txlmUobR2y66Ggu3TA3zEXTpxzJSKHOnCZSnLjLP7E5OOOa2DOF
o7pkxxj7d8WMpEaTy77tQ1KhFkollC7fhUgioIPc06gpfDXzbTwMCHBrqwS8nHWYomNjizMq
c1gKIKfDfhdU1KVkRbTVw93DCs+5vI2OTpohP+GEuOwOjCkNxgjEH6Lf/97UCbxrQphk52Jh
JSvuPF7XIwkKftesbSeQmocrvcwTIpo1UReDzrh935f/MuOCC6IBmjMvNqZxyuJRFwFR8FiE
3desh4SQUuA2DaB0LDx9Cnu/bvI1S+9m7SO07m7aL1IQ1CBr5L+23JThylM8IUWkoLEYtAxD
HnPzrSz9SS8vZMNz6r4jFwpKNWtNIKBNOeJZrhFT0G6CtAha941YjqWLoQU0e23U/cVAbfk7
T6DmC/v90YN+ULHzOPn2gwwQJ+giXFajk/mVzI5jnlIgbQ/PmWi669qRToQPdaxK83PAAz2n
O3JIck1lrO9vmBSXaXVmW5+BtHDDEDwOn+6Egt65+x94IYsxtngvrhgU/QcVWmezAT1GkusY
jH+tN1xezUmt5zkAEQEAAYkCJQQYAQIADwUCT1nRRgIbDAUJEswDAAAKCRAKJMBZmLpBM+84
D/42jMbiFW177BMOp5FD3dbniUoR8Q96JqiSeUNtly/thkMtCImWPzoO/rCDTN3slokAacNP
LmrWJUF1UBrd0H/sDF69A0xbw9YhXgEAQBQb09h8fALAAH8/fdGcb4mKFwCCsnDcd1Zax6Ur
1CExG+LfxnYGgV/zqm0wBGnMk8c17vdmSztCBP/PH+VvuJnK1gudcnmfrJ9Qq0nt7w2gw9Sk
omybCRoskmESjhKQ7SesGsQdNq0Qpquiz0hHGXgLswrlSFFF4If15dBWIcvjcMfNP8F0k/77
4XU0ZJdMGfNYfe4e+dPxJ6u7OuY/9U1iB2nSaFCBtXN4ZucMa4K2kAoaXv91oPsboo3p4bQR
7/hacAvb+6Pzmitw9jMCRyotyY7sHrk9sKuLnYMmIjS6YkYaHpRKN2D17wpb7pq7gbNVSjCB
UzcqmWaZOfJRTALscLilsXSgi/nDc79kidSvTPuWPkAjhK8L9ekcLSwk8ke3pOAH5YHDFs2e
cXqRQUTt4L42hcAWEz7EZxBueSRuF8Z5TqSbrqPgaWenkYkjuG3H9WG6JMUpcVLDKawTgleT
OEwN+zTyffxj9cafT72g2rDBsmZdlQ8THfwbjg4VTzHmsKsl/M76IxnenxxBSmWG5TiM2zaO
QFrQBN88Ro2aB/1aL7FW3jHudm/cMmq68DXxQLkCDQRRSDkrARAA4veJt/fG5vtHJ1oLlHBc
btH0fYuK2DqbGnpX/J7sldCAaErKI6x8VQADZ/PQ9fcyi47K650VAFFSLkWnFpo+2iQVPd/J
thcugJIqJBG7fn3a2nNPZbpkHnuq6f+JQ6VZTDmMYiHjJTkxSyNMpb8Qa8bvt9I1ODORaTL+
EcAgw91jE605r8ppfQx64ZUzR0LBeJ27vj3cZalC1OPhuiZTWJK0rlpH6iiXGZYolHQtKSfE
GZw1vJXQaYqr8LcvyNEnsLDchVxEorX0t6FOAGO+poNNUKH5NRcIGNTvyjZFM5BqK0ZtVzxR
6l2WHSc5q2Dg2fuUJMuXvMSycN+xbW+Lht3sFFTwFZ3urFoJMvBHLx9UCJzRxCO91M0Nfv24
hb6yGA6rVuTGjVqxz4cXmk93L4BrLnjGiF7P7di7kZCaX0AVesClM5El5FEnNjSrteMbOPUg
C9Gd1XEaL719Pqgcut7F9ADzpFaUr0urFE1A/jeQHcei1nd5E7bZDZRVQsB5Lt6NWn/aS+nw
GSnMjzV0VJHAj99xXAajtyrMD+J/XoJrWY04gSuh6bmduFNosHMIdcDCVjeR8h1LX0c004jx
y4yO+haoI00KDHHwweVM4+QhONUCkgakFqsMCzWNKDaU4XVYXiIELJ3MMK3j4MkoNUIWoyLF
bg0fLccczH+0u48AEQEAAYkERAQYAQIADwUCUUg5KwIbAgUJA8JnAAIpCRAKJMBZmLpBM8Fd
IAQZAQIABgUCUUg5KwAKCRCIwCNetuRVp8kID/wL4CL6G1AgLC1TMdR1lolUU6d2gYhIHo/H
7QofBBgTUmafYJ2bJ3IkIse10WesPg5b0YTbMKsRcwuimJutYWVA4jWcMRgsmTrete46gjDv
9pPMuwJ6kCRLIyGE23AiIJNEfmeTqc7aJ8G4cfxKYi6Y9c9bYbLZNl57trxCj/E0gmvDoCSK
nj+89o94CFW57uoXO/oQSWwatT9N95SvaOcdI9qjcmvkG+DxhivMWC2YP1IzKcFEB42aiuyP
ZVjJpPuwCowFRWgoIk2kly2+p4h1NSx4sY9zLTEQR6UPyCvHtugnC4aRiM/bx03pLwZrGU9O
fL1CR4MaoTUcnf4FrF/o9KRVONN39L2T6AR7T5dhnrRX0EBeKZ0hJf400V+ic8Z9IJMxsLXy
NJchXrlpzIEVT2n5iEgfbjhrCUJc7w9fvYck+heT31d/y5I05Fs99mq9yI11T8B84MvVbvnd
54AuaRxyXIS4gP/nd8snhW6VHNNjo/9sNEz5+4jfwQl0EXbf33Nq3RpQJJUHl9yg1idH+ax/
cTrtMvBh2ziNObjRH/06YUgVSVewd2nz19wbNLQFeFV86nGEuG0E528ndL2BfHv90aqBny3w
1L5aKEb8/IZIeXf/oGeQFFNoN4F7XzIVVXhLpyvqrYjucw1IGXc842qlqQ5lr592XtAZAkuc
d+7XD/9bG/yDLMEnxJ9O4q4G0J0TdHw18dEDOavjNUn9YpHVDrBGQDsjkIUZWpSEZHqCbxXn
7KDxFoM3PW4BucXoCi9+gcoqVxjSETly3IsTHgCW6/FAUha2vrfypRIFKEbJ92UxoeXEv+np
B29QpmyB3/bQxeDtaqcc6ZIJpkN5RV4r3RoKSlExpEx5DVwmTCECREqCb5fX93sWkvwOH4E8
OY2hEBNVgNSE5ZrnYTHoOwcKRCaLU4RinhvGu4RhS5bceemZoKlzqRgzekBzPuZDTvwebUrp
4kmzeHnZDtAmJj0ox8cOFuf8wb+lbAuoUhPSB95CAkrWY6h8zY82pXA51BM9zhsW6s99Y/WP
6bCjjFNwFhy5s8RP2yBCvVR0AaMl4LtJC/h8mQJHxcFGgpCm1SOJB8fIBQDgRZNjCr+KQEm3
HkhL+nVbaepMKSkiAKWDiKw1aHTv0WVgRsm3NFV4m2KogvvsW2kJes3qcutypnQDWo8rPaRh
2tdNH3LSdRVDHh1a8h6iPYdM9oyNMA4BiOZRsiEZmf9B3fUlU0Sq0e/5P4baehWrtQNxmmaH
/5dT0N++Ym0BWiVtDZ6QdEQkMDNg4Oue7K1yi+Sp1ApZDBf+8mP6KcY1B1ut8JrYfseBYPSK
vYm05ADXUPAF2wAmo9LNw43N4THJOQzGKKdSbY0AFbkCDQRVDqF6ARAAzXsYUT+EZBvKLRRK
Nxuk43LUzTy1Hy3afF2aDf0ZGMI+U1Ov5g0BR3NZfWe0c5QssYuUEBV2b/UqLlqfMzg6aKj1
xVzhYflGJ3UZ13iPzRAhXAth0imV6fsZ1CiKwIgteHlEzctuU3R5Pd+GbT0IcGSyruV+AJi8
APUdpkjvQjjz82i4LwinJTEadOiiZg9a3CKnl9LL+GQbQl+dMWyLfdPoLBmkBxieNFs0hpgH
t9dbyQCn/yA//Hq1Gt9FrElFP9EwdZBL5cTrlqSWDourvCFxWuGwkA6miZ6Qx0l9w8wd4Yzg
ytvD4nvPIwjarXc35p8iZEujdB9ktRlVhHJHahegZKkzArSaXY4MIWluiy1IVolYQmR7lJ7N
Fw8VaPiOvWF4ag1RYrVJgtyYhMlBpfjiYMMsYzmaMT7ePJPxzxMAeO9o8F7IUeqZJGpCJubl
/X6etRPGnEgp0ZU0nJLdWtzWHVosVRHRASAWxUhRR+PnonLS0tvUNoZS3QQ4vCt9Iad+5J59
5lPYyWkPOGbcKXyHou93swe2mOuDVxPv7yev6uw9ewn2bYbWDp4Luxnr++slUa8tkekjDfsK
9vKw6JFzIBOgim1bq+GeR3XLbatZuv5oBl24JuLisXkRI6oQVCtE9na6F6bJfJ+/FfxFaCli
OZT8RyvjAGTFxxu39j8AEQEAAYkERAQYAQIADwUCVQ6hegIbAgUJAeEzgAIpCRAKJMBZmLpB
M8FdIAQZAQIABgUCVQ6hegAKCRCnTQhMxGh1lhQZD/wIxrpPsxOo5g+pkG0FneHc0fE4VJAR
ESlSve1Lv0JZbxWP2mkFzjUvLmlcs5jcz3xgTSnielJmvjYT3EDhGQNmDvsJU244w/aDLnNv
Ut2uMQchbDMnYPJpa2KjUOZSvt+6/v5jjbrEV5hcMDlyMuJCBOq1dmBVwmgvgaHPCvFQ8Le/
rrGbnXbPGqwlZNxVvW4RBsX2qR9O4eUYImRRbrce+wJPIdRqlzoAn+kr55zyqbgWhbh6zvhl
BbQx+exMKxQM8VnshiYTE97gJeuVJnEycEKVRBF2A+S/XeeYW4WRX/zxADYDle+hjr2NEq16
TdeQt3rvXAsaeSL3HqLVhwfyASvDzpOuo2WgPZUtdrqK8VYJSjeU3qJlAp3MmvJTZjL2mk3t
Qk5OnRleJfhtAKn4EkayudyDIOZ8FtFAgoMkk+4YAp5SKYpGkFsof5js1p1hjcvtANSgk06c
2kFTjGuUVoyl4QE1aIFTY+/Qb01AIarY6tJ1S6JmxqLIqOWhN4q6HJ4ZnARob0DvYfXIZ/1W
kOJ7VpB2EMTuGUqc9jOug+hzuLiROse7LqErQ0OOeIngH/DxA5IWjn7sEYK0b7KcYTQHjaJu
5zSxJ/meBH2IARSKHJ8b8nFRsvidvskiiYf42hEaLGQyfKyWWrJToMfeswRU8N13QLq5oY0s
2gdNUpg+D/4i/A2qreZbC+8L65c2D4p63I1GTgxTAIjMqC4jhARspIZq1KsYItJpIDmBBZnR
jJ59JESFHm+63CLMc5xYPMA2r52TVVz7BAas9Lj3jp5TQ8S0tBjw5HcMx7aVPkScZ/l7qEMr
HPvX1oV2wp3+dndzavBXT/vh4D6LGQxI49dRPLLk7tIXk0lGtitQlreowZNivLrKDXriBEZz
C8bu51jzsGoHoZCxR+Z4m/mTjAHZQhdjPYpos1+XUxSmYaxHCUH4rhKJdKisrHDvO6BUKEr3
fybfR6zv9zKv/r/gnJTcmFbj4Tp5IHad1a+AD7IxRvETMuLWAsfEnrPkzBEelbGQWHUYzU/G
3GuKn+BjL03mBAbm2MNCUecCxmp12WnAwqUgp9cMdZrpYxPWy41JOlM+SuUFmFwCsoKGlF2W
6k76hFeLeQy942h5aRuye1jwfnr8C8dRhJcDaLFO0tIt5I97saLOXDZna4YkYZYZjJZtsoZH
aRmjhY0mVPWp+GM4KtR3E0xpjag/ImXtTIGXukOjh71EQMDdbolQQhOOWL3upjEqsXLYyoBY
6eKjoSZi0dirIvs3UaH1zntyM8Gc3v8255Wn5tQcoAzOoGfFMchUCMQ+SN3ndysfK0zlxUh0
WWrKK6wAkKuEUkZ3jIGuj0vHXSV+lpLdPnlUkWJZvvffjbkCDQRVDqMlARAA6/p0KF6Vc3D1
8skZc1P2Rxq+NPvf7lXf8hXZwGW0qa0jX/RTSEN9GmTU2yDjiyDWofGizMt2yMOQNrIvAsXX
h6WmaJUJ0tZjNbmW+UBTiCQnra+HUkNbgD8QZTHUh+01f7+YD3lgyOZEdBh8bErMDTmW862u
2M4qBDVNEMZY6T7ar/hmO5X2pN3eZBoveJ2m/J1vyK7tnviVntYVdEdTz2s4fCbjcjNKwoeX
RUTwF6QfxYRsIzWOaj/eYvmrz9GW3sDKZg9QNL8pm2vJuondxVDNRwUfpTrvo/E4OfV9gUgM
QUKR0GarlSjelHyzUoTBmqg9ah7qt3cuNkwa1050ADB2gW2Z/qt7Vsrxh4/rgIw7mVZiCwXt
+pRM0mZ4hp8cNV1SC/qsD1LMohF4v+uahOK+Fm7NpwdDUBk7ymx/u3AB48sCeOku1Nznqxkt
wSWAJUuUg6HwZ4FE8p86tv6ou4DnTfQ9xnZrh2trVSnEP40ixBUVbPEb0aWPYvhrh7f0tYqu
HiA/nOTqjmiZilvdSkGkq418u03H9jEwZMio14/bEunBL/HFCx36Z1WfBZWntQEnI+BLgM1S
+Vp4YLCBwxXsGOJ6Lutbw1epb7El3d5Nsx6hb/8Sl432b01l5C03St6UhzkRSYQRY12G7YBQ
sAo34VMhD5KIWZnXN9ut+VUAEQEAAYkCJQQYAQIADwUCVQ6jJQIbDAUJAeEzgAAKCRAKJMBZ
mLpBM6yGD/9oiG5tDWqUWxO2D3qPOd1voNHPIKAF87AgzeZvkGOT4PNSp6vMYrH2LvYbjeAw
AoZD0JcY7PAgtDE2Dvij62deXjCRR0ZEJ+m7XNmDu2cwIJxN8/ktoFs9ZNzHP4KphNXwTmAK
SagOo7mUNIDCHmAuGiqO3C8KLdeKg0Ci5QQQ+FNnGY+Oi1bDhhR3O9a53gZBAWKtFE/VRXlT
w8jROLUvreRCt++Ekcc1lU3oFXuqphzl8d7um0a0Q4KjNE0pzAHNDlGm+Qypt26b6yucAK3l
8nIg+zpcbu9R0KZZHt/vDw4nPlrQLBHA6dP5vnlMIM2br+CzLGjCcqzrda33mCaWfHH1oVB/
/6E43Il/2wlhqc32CUB4x7Qj/DpOCNgO+lZrkXXMHa+O/9G21ipNRJEdVzyMeEj7rC+SatJh
5E9Zgd71tHJsNQTGPhKPc3RwxLMu/HOQohjbJUSMJCeVzgRAXeX06/ik5gOe8gQ+aHXHiTO4
SGbvenztAwFyL8uoC4SDeGtRezi7C55BGeu22s7AhMoNRBBAh9l0tu5CzX1j/zhsAPmlmxiQ
9wuahVglZSDl+tl+8F4cLl3++5fHTnu0jiR4/w/h0tCUq8zBGoeJXjTztay4Eh7Lr/Vz2HWn
s+XB/L5ozVSxFZuOdwNQy3E/k9u3g72rn/XLQBZaBHh4q7kCDQRXzIQOARAAsRk/69w1hn0p
vOQx+9QFe96UFfFvqX3eqrO7WruSz03poPEg7OJtxhyZA8VnpT5BtMehnhczumLtEvSt94bZ
mx6ZEvUU/Uah7ajOyElqmdtMY2X2i6Sc1jb7CMYat8C40/wNzw9WNIV45OHEGhKZXz2TOKga
edTt77GEIbiOipsQI3Frgre08VVXyby2YdYLzQNWOIF95GBLGHcAlSe/DSusR23DDxIFUM4I
5ISWsU5yz397mYjxKP1D42I7OR8syomcu/rpb8XXd48Kr2OtjE3C2OgpzwhFQDFWb/mU3yFJ
okqkutjdPOnxVjBIzfQHbDWSEVvzHqVGEkXhGKyUU76p6btX52g0HM4vEBNKK1q4tuUwBs3V
WvyGuIPczji6kdYbijJYUQbCEizZ9KptnHhnBCrHuN4bJCVgoT5uOlrYo3E7+tWoKuHY2BlB
jpsrWRl77iEriwN0I9soBp2DJ2EacSNU6eTfcZxOaTceADQxO9uQyAaGEU8PYKw/pbmzciVm
mXanJSeNAorCMBhsoHbKawq4+gK4bH7KpOg1N/01MCLjguGPmkMw4tBodSWD1ED930aouLPO
CuM/cRNKmv0RTE+Om0DOlEB+Cp0L9CBh41Resd4eANLVIpyOG3GDW+iIl3j5AYGGpQNbLth/
SzoOAy3v8JQHha5Zo7F66S8AEQEAAYkERAQYAQgADwUCV8yEDgIbAgUJAeEzgAIpCRAKJMBZ
mLpBM8FdIAQZAQgABgUCV8yEDgAKCRAvaIV3JmcqdoQIEACtXdUL3M1tP0BexCRLXLCThtGz
OVlb/WFQsD47cRQ54Hres7yutaDC+7WoXEcESy1co/D9cvpdtAT/0FkYU+hz1TmVKv1uGZ/5
wC8WmGmSNPEkCCphYuT8+IQd6fSSUNghYRMdqc2WtB2lFpUAXKrVvdHGYJ/EJLbWSwhu/lXL
FMQ4kYKaQfkwFjczVapAe6OEpAV8xKfI7T8Wbbau06GfRdT5lVpY6wUBUnOafcTpjPdyl7or
gQcKwQyZckiUYap8aff111Qi7cQjXjcU16cfIxD7J6jf2zS7K/pqqPfpD1Lq4pYUOTkOPAxA
6Dq2UgfHVT5aM+BLg4J6IWZZ6Pd6kgCUy2Bwr01DJHIjQZxpMeU2j5Z1XNkVsFgxH3606IVl
vrLbahkSA95jpNL3Hqd+woPbmuvJXCqsNca1wRk8GfPKhWzIzBgxoEVmNmbZfpoz5xQR+nTI
EOCHqWzMfl6RaPn38Kl6cVu0tnlBY0TH+9b1Pp3QDU0PteDLqNc9lmDll+6bzyv7rPXjFGPo
Akybbp53G/I8Qnxt/453LKlfbd3iBbqRgC+x6eTxjT5+2gBf8yxKFn2OCaTlgFg8ejW/9/Jr
+AcPA0UhjAHshR51WNVm43q+xJxZ2K2YIv9Go7wzygbGFO8ga47BG8Xzl0WmxEqcA63AvIo1
ZYij9xfkrvPKD/9/axwLNmuXLR869py7VZZ3wF5N6ad8MDz0g0aLo1Aps2J4CVuDab8++Z6t
9E3QJO/ynzQCRWI+tJ1lwmLop846yPEy+27oMeIns0ouLJTbUOzSxuRXTO+18jg9cqJjBm5E
K0EH2cgD7x6+NHpskYMwSDE6EzT0R5NoenyaM8Sv3Pxr8k/Ean5mtFkI/qsZpKx50GQnsm2X
MufnlJQ5F5Z37+4E9ibvcgu/H4Vd+xBDJUpHjtyZb7X2+lMgmV+dKVzUhusBegvcslGH/hxi
qukg85VaTdrD/262yawCExB2JPx7mc0/0VCjtHsUQFDgeZlRD3XKP69UvpPxbH1mCM4ginaY
D8w5SOQgMz0WODCYixzuQfUtdJyL9s+4/VZRPsE02v01VLZ6m3khxMXdUvTNpeLLWPX/oTQ4
zGknZ0pccxQBL+sEp+zFoG8XYNtxtgRl7Wm1YctBEqYVul/1pGLkW/oZypUB/o6RcHpac8ia
4io3Exh+QXAzC22ba1BSMxcDDDx4YYqxUGWkr85+1aubZjw2K1BOEq1XGgoLOZLrmCum0ydH
AYy+kTVhBhwICwHTlATBRw90s6ghYM6EKpVUXy5peV3yP9SHPiIV1GH0s1e204sOUe+EFvhY
NS16o95UsMMX4cSyFdYP6hjiUXFUJKXtyMQNylmG+iqtBblimLkCDQRZ6ksyARAAxT6SIohA
aQ7PAVfP99f51ZTd5N2dSKSQwNrS8n/VVHjp/IH8d7dp7ajfMwU4fRKmbkjSyzyW7rYESH6x
7hgiKofBdxUQCyZfPwBYXYLd1iLpdwanJn+pFg1WacIIZ7SndVo/th1uqfAa+WtlnnXgx8ni
kMDOdRETld6it4LEHvnh6nlSbvY/TVQsrJQ9LzzZ6Vdz0HqLPnbWxN8+5EzoQxPEfFbCqqGv
J5M+DWigfWXJiDybG1QwQK9sayRxxm6bwFPeZf5XKqmVo2EuxWh6GaTUPmP9IzrVSKhW7LQy
F3iK2NodDmw3RSlUywc3jBS0FJDIolD9a0d5S34XBVue43MIdG+ffjsjr5Vk1YG5lFOefbIA
SeCLZLiqbPNZkwkt9qafvrOgm0zdVgU3eUE0Popmyf0M+IbIw1WZGQueGA1c5VjSbY4QVknI
IVFtDQxKsVgU+As2TsQYQZa1NXOGt/jQQnzp1rQoNZAJAi7fDzv9GJ3Rr2BBnRidCgitBDM1
ZS3aPrPD5vRku+ScPPH3JUNUTJ6+zNwSMN0AShKyv9VvcvR1DmrEOzqzF8tZEDY72Uc+TwgO
oXi7xMA84f9nefKea+6SoRzLyAzXGxQiiHlv9fexSHqx3oMrTlUopcQC1R3PD2Lnby54HUqR
li2ETNx5B4zZGG6jWEYtMjKLJ5kAEQEAAYkEcgQYAQgAJhYhBJEIRq3uTF1nwZs+bwokwFmY
ukEzBQJZ6ksyAhsCBQkB4TOAAkAJEAokwFmYukEzwXQgBBkBCAAdFiEERCGUIDwnqcHDjWLG
G/odl8TvLIoFAlnqSzIACgkQG/odl8TvLIoXnQ//QplJ2YeJ/VQyH1HJauIMCCVl5t1w9KJ5
sPB0oaSHe+mnKQUBKEwe8jTThGG+fKy8FviEApVVnCB3szcD4rlrOqQz5SyBVyUU4mc3f0Tq
8goegkRYYx/n0xJUMlahd5gLqmh5WkYUfyT0x6cCHnTi6BbKhpHuwXwCkldv4+3EWfBHwjzp
9r5xjmuhvIEBZcua3f+/mwanZ/nT2q2IXBTnJOMUGvtB0uy+rvWOzUvJjsImnsXB99xhiYGx
Sru+l8lBdqufNuZtSDam57+9lkllR3Eng19MatD60Y53O3avzyqKdif1Hol0riavfOBvbUXZ
VRqx7r21pD7BrRDuBmjjcgnCYN9Xbz/Flez/Ys5hvZ8VD9TNzeU9wEuDV4KCNs3HllnBHKH/
s3mI0H7D/qYCq2eVliBg/FXmEffP4mLl2310n9GGDkZeZN0DZy8adZxttPpZoU9+2yoK0u8D
2DAECCrxs59nii+OFsWusP7pZ3uXm3J8MOEn8OeXbl4wX6SmQsj65mtCGuKQ/PvN5tcLOtBx
CPSMlIAFMeaHkctQu6AVuyeGJ8B6/qmc7mw3h1oUOTIUUKO65hozbtyvrZBwsmHvBBLOcqFK
0exeBtNLbuKmfL0VR37tDeCvVtftlWw58hMk9fSlcptF8yAXVLQQ5WXpH5JBVqi0VFy0VfSY
f2b/Cw//QTFcqT+Ny1fSB/VEwQijP3TMptbwBubi0+8pBsDPseJumGfdFcCHaA5DGb5m082t
Tp5PO++jEh4dngOjiOq94XHQ1mp6MO/uTRUVezJ1XbLiD9SgQADEY94aiE8rp/zvSM6xs0td
HP9c4+JafLG80LGDqfivEK7p299645WC+V9VqzAl11goZN1s1WeDcEZrowV/PeEDDe37Mc04
vf4SDzy69msDT9RvnYGhNKQHgDOYkH9mnUe4FSobM3HaRQDuqGpl6m6bNdmOC1EEHKgKA+wH
fpPe6wy6PZN7Jj8ZnY4BJ39SsoOtj3ELs9LbpeDZXpH3O6qyoRRMAnBxmPJeXnL3QGJ765P0
Swfz9l0o3PKqnvAoyeSJVNLHNPSyktswbZzxY/31HAIhQF5xrfW7yyHlhqH0jfnOyan+8Sks
n5k+DeJfe8mHHpwAtgHgqm5MPSWnYptZ8lLtaIw/cFNBnouWkPrjpj0aZ4jCCwiGTBtbC2Q0
zOiFVGNaS91RUiytX0rYNRkEzGtdtpmYAPS+ASzgx8V956ukC0GwjcpRujTXn0cX+HlrcKQa
EIYkVEL4RakVHGKZ5h70Z8JnqbkUJAHZ3TGS3YGMx60TR2q5AExrMFXQAC9j/9rOu6SEAnH9
TUj6jLpmjBxIBeB4navzVGmGH/0B8EQDGnsGJi7+2dK5Ag0EW+/4WwEQAL1O3LUUP7R+UKCn
0zSW6I4v/4qf5aRxQoRzcI5nisicoG4U5wuNfV8If1c/OsonizdgMqVzOQPL2yo8szbPI/7h
g4f+srZ7Oa5AUW0gk/jcGjLjtbuMGwcLZC2Uwk0OP61gIjn0yar2JwASMdX93Wgn3islEYSn
sRtiWDkq5Shk7dt37Jrn5lHw80KP7oGB7kZDGrthkVdyJgS+zDniQhdSmmDo0z9Ht3uHBX4X
oJZJpcUZT8KQ2iAlTLCnGAsv5McIQttPKYlSAiLt+bzut/Jt6a3befrn/ujIvgE0CTep1+tT
CgVJL924Nee+DbjXq5SVH7XP9ThiPI6bYaE3SMnFAQYELvWQBD4lUbp5lA8YctsKk1PtWo6Y
xX80EEebT8Af0B2qI/tKKxsuFOtrnixsH5ZAY4JpgrJgzBqGDzYSy4ycEEVWA/w/yS6vzo/I
7L+vJbF559ptZxlu9gEf43pQtafJSW63sUtHtAb685RCzRbOVCFgw6Gve7yR/qANpUfrnfGU
J1LJBG6uNiyOTxlMwWQ+eZf5+RGI/XP+ZKRUNQbOVs653qX7xD2AsjDkbmTp1gR27zbIXkAd
XqkkplZFemMTg7t/WHxxeq8TfLwNSLddsU5ne62P2b/SQaSaU0ld0jBoCwBr3kE+55xY8SYk
KV1EUnM5mqDp/5WN8yqPABEBAAGJBHIEGAEIACYWIQSRCEat7kxdZ8GbPm8KJMBZmLpBMwUC
W+/4WwIbAgUJAeEzgAJACRAKJMBZmLpBM8F0IAQZAQgAHRYhBEv2i8dBAQyhWkJFPZwUiyt3
NGbuBQJb7/hbAAoJEJwUiyt3NGbu4okQAIrRlyZXLz/F55yZ9EnTf5qcxXcuWpQTuidW9hAM
ZO/loSMOB8xWe8kErauajqaVdEFMYeKvlrVnbYOIGHPu4WlHz4hTDKkNf+kvYjpOKLvAxyRV
NGSRgIHSVrEXp0E9xyxwbM8p9uex3Hsk5NLv9HrhqOebiXh1zLFNPWBwEDJbAcquxu2ww5mJ
ectiXowsjA5Cmg85L9LWbvMlIbYfKbftF7RBv8hgPNB+HvZG2qTgUfDI8/+J5llGsncu6DS2
2JKI2kOFK1ANh0oCxmsQ5Ed96VUYy1n8OqRFv3+D0T5GeNiwIpH8g43D1h+neEoRhZZAApWJ
nfFIpI7yfdLo9tSbjPuB/vCwTrPA3gNoX5JnrEeA9fW7mkOkqncHgPGSlYhVnB7mN7y8jBcn
0fWN8CZRnpEO1AmGDcR4lst5rVakqQZ3c77encOUQangvNZI+DpbEeqCFTH70ogTXZPh6aHi
dXeuwRV7UVYuBo3SIHPZlZMrC5lbzIJP1XiprDfzwVm/p8xn8JeOaRlWsDJPIwMrbELQe1xX
7mO2kEa3s+esoq/Ysi1F0MgelOf9u56rw7ZoxgbC7pqMVLdJb3SAQp5N5fabV9/Uvd10MbDB
MxN0rDsntUG8CDJAyHzDk2TjM/4e868VK6j6F3IDU26SXQ58IVB8HLwVaXU7MFRSDmSLgnUP
/39yMN14HdjJ7Q0RQ0qSyGyJWfoyBq7GDi7fJxiKD04zNnfgZj650HSXxnIQiH2qAJpyvSBf
icSn6JItjhqTVyvd4+hScJlBOYgxRtdeJP1fUspG4otgSGyWerPP0LknAKttS9a75qTidcBC
etcDhUFzRkop52bXZxN76CYdmLTcT7voQJm9/YKmNuz6QGNgJIiIf+sfBeqwmuFxfl407rh1
oracQjvWi64XY6ijJkrspkb10ZRiBZY20OGO/IQXNKhQYkczAiKRRuzlgnkxccZZL+KpzO3/
MF1Lb9et7qPiHeAtDms5QZcoN3Z2d9gblye1U4OEXOWZqYsKr2O2uqhPLFFeeAQjfms7DUul
jE+JSmXXDs+fGMVvvOGLMWv1u7H7HrPETK5YdMZ0nAeAmcYRD9LavHGvw91NGu5BMU+VDNqY
L8JMWGfVNxP7Em/BGWm/CVlNTsDCML0BvNfz+vqaAPPg/dOpMhUDrcCtSQ9S6rIUcYBwX/CB
QBjIn178c0/tqcAOWdXh2CG99mUVNXwlqvPdf7xa4Fb21bAK9Bh/dmgh54UxcAblqqQPOvUY
AuUdO4ki0gs3uNptJukNwMP0046XVRdFUjbhniUwhQQ9XbCSJyqLZrN/TUH02590KOgQEzNc
1Zcs1symOLXulLN7Xx0dXwO1FWB+y42KSv45
=UZLg
-----END PGP PUBLIC KEY BLOCK-----

14
munin.logrotate Normal file
View File

@ -0,0 +1,14 @@
/var/log/munin/munin-graph.log
/var/log/munin/munin-html.log
/var/log/munin/munin-nagios.log
/var/log/munin/munin-limits.log
/var/log/munin/munin-update.log {
daily
missingok
rotate 7
compress
copytruncate
notifempty
create 640 munin munin
su munin munin
}

462
munin.spec Normal file
View File

@ -0,0 +1,462 @@
#
# spec file for package munin
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define htmldir /srv/www/htdocs/munin
%define cgidir /srv/www/cgi-bin
%define dbdir %{_localstatedir}/lib/munin
%define logdir %{_localstatedir}/log/munin
%define plugindir %{_prefix}/lib/munin/plugins
%define active_by_default 0
Name: munin
Version: 2.0.72
Release: 0
Summary: Network-wide graphing framework (grapher/gatherer)
License: GPL-2.0-only
Group: System/Monitoring
URL: https://munin-monitoring.org/
Source0: https://codeload.github.com/munin-monitoring/munin/tar.gz/refs/tags/%{version}#/%{name}-%{version}.tar.gz
Source1: Makefile.config
Source2: munin-node.rc
Source3: munin.cron.d
Source4: munin.logrotate
Source5: munin-node.logrotate
Source6: munin-node.xml
Source7: plugins.conf
Source8: munin-node.tmpfiles
Source9: munin-node.service
Source10: munin-cgi-graph.service
Source11: munin-cgi-html.service
# https://github.com/ifad/nginx-munin/archive/master.zip
Source12: nginx-munin.zip
# https://github.com/ifad/gsa-munin/archive/master.zip
Source13: gsa-munin.zip
Source14: munin-cron.timer
Source15: munin-cron.service
# Source16: http://downloads.munin-monitoring.org/%{name}/stable/%{version}/%{name}-%{version}.tar.gz.asc
# 0x910846ADEE4C5D67C19B3E6F0A24C05998BA4133
Source17: munin.keyring
Patch1: perl526.patch
# PATCH-FIX-UPSTREAM Use IO::Socket::IP instead of IO::Socket::INET[6]
Patch2: munin-remove-deprecated-INET6.patch
BuildRequires: firewall-macros
BuildRequires: html2text
BuildRequires: htmldoc
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: shadow
BuildRequires: unzip
BuildRequires: perl(HTML::Template)
BuildRequires: perl(Log::Log4perl)
BuildRequires: perl(Module::Build)
BuildRequires: perl(Net::SNMP)
BuildRequires: perl(Net::SSLeay)
BuildRequires: perl(Net::Server)
BuildRequires: pkgconfig(systemd)
Requires: perl-base = %{perl_version}
Requires: perl-rrdtool
Requires: rrdtool
Requires: shadow
Requires: spawn-fcgi
Requires: perl(CGI::Fast)
Requires: perl(Date::Manip)
Requires: perl(File::Copy::Recursive)
Requires: perl(HTML::Template)
Requires: perl(IO::Socket::IP)
Requires: perl(Log::Log4perl)
Requires: perl(Munin::Common::Defaults)
Requires: perl(Net::SNMP)
Requires: perl(Net::SSLeay)
Requires: perl(Net::Server)
Requires: perl(URI)
Recommends: logrotate
Provides: group(munin)
Provides: user(munin)
BuildArch: noarch
%{?systemd_ordering}
%if 0%{?suse_version} <= 1510
Recommends: cron
%endif
%description
Munin is a highly flexible and powerful solution used to create graphs of
virtually everything imaginable throughout your network, while still
maintaining a rattling ease of installation and configuration.
This package contains the grapher/gatherer. You will only need one instance of
it in your network. It will periodically poll all the nodes in your network
it's aware of for data, which it in turn will use to create graphs and HTML
pages, suitable for viewing with your graphical web browser of choice.
Munin is written in Perl, and relies heavily on Tobi Oetiker's excellent
RRDtool.
%package node
Summary: Network-wide graphing framework (node)
# some scripts need logtail which is part of package logdigest in openSUSE
# problem with logdigest is that it installs a cronjob for itself which
# might be unwanted
Group: System/Monitoring
Requires: perl-HTML-Template
Requires: perl-Log-Log4perl
Requires: perl-Net-SNMP
Requires: perl-Net-SSLeay
Requires: perl-Net-Server
Requires: perl-base = %{perl_version}
Requires: perl-libwww-perl
Requires: ps
Requires: ruby
Requires: shadow
Requires: sysstat
Requires(pre): group(nobody)
Requires(pre): group(www)
Requires(pre): user(nobody)
Recommends: logdigest
Recommends: logrotate
BuildArch: noarch
%{?systemd_ordering}
%description node
Munin is a highly flexible and powerful solution used to create graphs of
virtually everything imaginable throughout your network, while still
maintaining a rattling ease of installation and configuration.
This package contains node software. You should install it on all the nodes
in your network. It will know how to extract all sorts of data from the
node it runs on, and will wait for the gatherer to request this data for
further processing.
It includes a range of plugins capable of extracting common values such as
cpu usage, network usage, load average, and so on. Creating your own plugins
which are capable of extracting other system-specific values is very easy,
and is often done in a matter of minutes. You can also create plugins which
relay information from other devices in your network that can't run Munin,
such as a switch or a server running another operating system, by using
SNMP or similar technology.
Munin is written in Perl, and relies heavily on Tobi Oetiker's excellent
RRDtool. To see a real example of Munin in action, take a peek at
<http://www.linpro.no/projects/munin/example/>.
%prep
%setup -q
cp %{SOURCE1} .
unzip %{SOURCE12}
unzip %{SOURCE13}
%patch -P 1 -p1
%patch -P 2 -p1
%build
%__make HOSTNAME=yourhostname
%install
%makeinstall
%__mkdir_p %{buildroot}/%{_sysconfdir}/munin/plugins
%__mkdir_p %{buildroot}/%{_sysconfdir}/munin/munin-conf.d
%__mkdir_p %{buildroot}%{_sysconfdir}/logrotate.d
%__install -m0644 %{SOURCE4} %{buildroot}/%{_sysconfdir}/logrotate.d/munin
%__install -m0644 %{SOURCE5} %{buildroot}/%{_sysconfdir}/logrotate.d/munin-node
%__install -m0644 %{SOURCE7} %{buildroot}/%{_sysconfdir}/munin/plugin-conf.d/munin-node
%__mkdir_p %{buildroot}%{_sbindir}
%__ln_s service %{buildroot}%{_sbindir}/rcmunin-node
%__ln_s service %{buildroot}%{_sbindir}/rcmunin-cgi-graph
%__ln_s service %{buildroot}%{_sbindir}/rcmunin-cgi-html
%__mkdir_p %{buildroot}/%{_prefix}/lib/tmpfiles.d
%__install -m0644 %{SOURCE8} %{buildroot}/%{_prefix}/lib/tmpfiles.d/munin.conf
%__install -m0644 %{SOURCE8} %{buildroot}/%{_prefix}/lib/tmpfiles.d/munin-node.conf
%__mkdir_p %{buildroot}/%{_unitdir}
%__install -m0644 %{SOURCE9} %{buildroot}/%{_unitdir}/munin-node.service
%__install -m0644 %{SOURCE10} %{buildroot}/%{_unitdir}/munin-cgi-graph.service
%__install -m0644 %{SOURCE11} %{buildroot}/%{_unitdir}/munin-cgi-html.service
%if 0%{?suse_version} > 1510
%__install -m0644 %{SOURCE14} %{buildroot}/%{_unitdir}/
%__install -m0644 %{SOURCE15} %{buildroot}/%{_unitdir}/
%else
%__mkdir_p %{buildroot}/%{_sysconfdir}/cron.d
%__install -m0644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/cron.d/munin
%endif
%__mkdir_p %{buildroot}/%{logdir}
%__mkdir_p %{buildroot}/%{htmldir}
%__mkdir_p %{buildroot}/%{dbdir}
%__mkdir_p %{buildroot}/%{dbdir}/plugin-state
%__install -m0755 nginx-munin-master/nginx_* %{buildroot}/%{plugindir}
ln nginx-munin-master/README.org README.nginx
%__install -m0755 munin-gsa-master/snmp_* %{buildroot}/%{plugindir}
ln munin-gsa-master/README.md README.gsa
%if %{suse_version} >= 1600
%python3_fix_shebang_path %{buildroot}/%{plugindir}/*
%endif
# Fix rpmlint warning: This script uses 'env' as an interpreter.
for F in \
%{buildroot}/%{_prefix}/lib/munin/plugins/ipmi_sensor_ \
%{buildroot}/%{_prefix}/lib/munin/plugins/smart_ \
; do
sed -i -e 's|^#!%{_bindir}/env python|#!%{_bindir}/python3|' $F
done
for F in \
%{buildroot}/%{_prefix}/lib/munin/plugins/tomcat_ \
; do
sed -i -e 's|^#!%{_bindir}/env ruby|#!%{_bindir}/ruby|' $F
done
# firewalld
install -D -m 644 %{SOURCE6} %{buildroot}%{_prefix}/lib/firewalld/services/munin-node.xml
%pre
getent group munin >/dev/null || %{_sbindir}/groupadd -r munin
getent passwd munin > /dev/null || %{_sbindir}/useradd -r -c "munin monitoring" -d %{dbdir} -g munin munin
%service_add_pre munin-cgi-graph.service
%service_add_pre munin-cgi-html.service
%if 0%{?suse_version} > 1510
%service_add_pre munin-cron.timer
%service_add_pre munin-cron.service
%endif
%post
%tmpfiles_create munin.conf
%service_add_post munin-cgi-graph.service
%service_add_post munin-cgi-html.service
%if 0%{?suse_version} > 1510
%service_add_post munin-cron.timer
%service_add_post munin-cron.service
# update from cron based release
if [ -f %{_sysconfdir}/cron.d/munin ]; then
systemctl enable munin-cron.timer || :
systemctl start munin-cron.timer || :
fi
%endif
%preun
%service_del_preun munin-cgi-graph.service
%service_del_preun munin-cgi-html.service
%if 0%{?suse_version} > 1510
%service_del_preun munin-cron.timer
%service_del_preun munin-cron.service
%endif
%postun
%service_del_postun munin-cgi-graph.service
%service_del_postun munin-cgi-html.service
%if 0%{?suse_version} > 1510
%service_del_postun munin-cron.timer
%service_del_postun munin-cron.service
%endif
## Node
%pre node
getent group munin >/dev/null || %{_sbindir}/groupadd -r munin
getent passwd munin > /dev/null || %{_sbindir}/useradd -r -c "munin monitoring" -d %{dbdir} -g munin munin
%service_add_pre munin-node.service
%post node
if [ $1 = 1 ]; then
%{_sbindir}/munin-node-configure --shell | sh
fi
%tmpfiles_create munin-node.conf
%service_add_post munin-node.service
%firewalld_reload
%preun node
%service_del_preun munin-node.service
%postun node
%service_del_postun munin-node.service
%files
%license COPYING
%doc ChangeLog README UPGRADING
%{_bindir}/munin-check
%{_bindir}/munin-cron
%{_bindir}/munindoc
%dir %{_prefix}/lib/munin
%{_prefix}/lib/munin/munin-graph
%{_prefix}/lib/munin/munin-html
%{_prefix}/lib/munin/munin-datafile2storable
%{_prefix}/lib/munin/munin-storable2datafile
%{_prefix}/lib/munin/munin-limits
%{_prefix}/lib/munin/munin-update
%{_prefix}/lib/munin/DejaVuSans.ttf
%{_prefix}/lib/munin/DejaVuSansMono.ttf
%{cgidir}/munin-cgi-graph
%{cgidir}/munin-cgi-html
%{_prefix}/lib/tmpfiles.d/munin.conf
%{_unitdir}/munin-cgi-graph.service
%{_unitdir}/munin-cgi-html.service
%{_sbindir}/rcmunin-cgi-graph
%{_sbindir}/rcmunin-cgi-html
%if 0%{?suse_version} > 1510
%{_unitdir}/munin-cron.*
%else
%dir %{_sysconfdir}/cron.d
%config %{_sysconfdir}/cron.d/munin
%endif
%attr(0755, munin, munin) %dir %{htmldir}
%attr(0444, munin, munin) %{htmldir}/.htaccess
%dir %{_sysconfdir}/munin
%dir %{_sysconfdir}/munin/munin-conf.d
%dir %{_sysconfdir}/munin/templates
%dir %{_sysconfdir}/munin/static
%config %{_sysconfdir}/munin/templates/*
%config %{_sysconfdir}/munin/static/*
%config(noreplace) %{_sysconfdir}/munin/munin.conf
%config %{_sysconfdir}/logrotate.d/munin
%dir %{perl_vendorlib}/Munin
%dir %{perl_vendorlib}/Munin/Master
%{perl_vendorlib}/Munin/Master/Config.pm
%{perl_vendorlib}/Munin/Master/GraphOld.pm
%{perl_vendorlib}/Munin/Master/Group.pm
%{perl_vendorlib}/Munin/Master/GroupRepository.pm
%{perl_vendorlib}/Munin/Master/HTMLConfig.pm
%{perl_vendorlib}/Munin/Master/HTMLOld.pm
%{perl_vendorlib}/Munin/Master/Host.pm
%{perl_vendorlib}/Munin/Master/LimitsOld.pm
%{perl_vendorlib}/Munin/Master/Logger.pm
%{perl_vendorlib}/Munin/Master/Node.pm
%{perl_vendorlib}/Munin/Master/ProcessManager.pm
%{perl_vendorlib}/Munin/Master/Update.pm
%{perl_vendorlib}/Munin/Master/UpdateWorker.pm
%{perl_vendorlib}/Munin/Master/Utils.pm
%{perl_vendorlib}/Munin/Master/Worker.pm
%{_mandir}/man3/Munin::Master::Config.3pm.gz
%{_mandir}/man3/Munin::Master::Group.3pm.gz
%{_mandir}/man3/Munin::Master::GroupRepository.3pm.gz
%{_mandir}/man3/Munin::Master::HTMLOld.3pm.gz
%{_mandir}/man3/Munin::Master::Host.3pm.gz
%{_mandir}/man3/Munin::Master::LimitsOld.3pm.gz
%{_mandir}/man3/Munin::Master::Logger.3pm.gz
%{_mandir}/man3/Munin::Master::Node.3pm.gz
%{_mandir}/man3/Munin::Master::ProcessManager.3pm.gz
%{_mandir}/man3/Munin::Master::Update.3pm.gz
%{_mandir}/man3/Munin::Master::UpdateWorker.3pm.gz
%{_mandir}/man3/Munin::Master::Utils.3pm.gz
%{_mandir}/man3/Munin::Master::Worker.3pm.gz
%{_mandir}/man5/munin-node.conf.5%{?ext_man}
%{_mandir}/man5/munin.conf.5%{?ext_man}
%{_mandir}/man8/munin-check.8%{?ext_man}
%{_mandir}/man8/munin-cron.8%{?ext_man}
%{_mandir}/man8/munin-graph.8%{?ext_man}
%{_mandir}/man8/munin-html.8%{?ext_man}
%{_mandir}/man8/munin-limits.8%{?ext_man}
%{_mandir}/man8/munin-update.8%{?ext_man}
%{_mandir}/man8/munin.8%{?ext_man}
%attr(0750, munin, munin) %dir %{logdir}
%attr(0755, munin, munin) %dir %{dbdir}
%ghost %attr(0644, munin, munin) %{logdir}/munin-graph.log
%ghost %attr(0644, munin, munin) %{logdir}/munin-html.log
%ghost %attr(0644, munin, munin) %{logdir}/munin-nagios.log
%ghost %attr(0644, munin, munin) %{logdir}/munin-limits.log
%ghost %attr(0644, munin, munin) %{logdir}/munin-update.log
%ghost /run/munin
%files node
%doc README.nginx README.gsa
%{_sbindir}/munin-run
%{_sbindir}/munin-node
%{_sbindir}/munin-node-configure
%{_bindir}/munin-get
%{_prefix}/lib/tmpfiles.d/munin-node.conf
%{_unitdir}/munin-node.service
%dir %{_prefix}/lib/munin
%{_prefix}/lib/munin/munin-async
%{_prefix}/lib/munin/munin-asyncd
%{_prefix}/lib/munin/plugins/
%{_sbindir}/rcmunin-node
%dir %{_sysconfdir}/munin/plugin-conf.d
%dir %{_sysconfdir}/munin/plugins
%config(noreplace) %{_sysconfdir}/munin/plugin-conf.d/munin-node
%config(noreplace) %{_sysconfdir}/munin/munin-node.conf
%config %{_sysconfdir}/logrotate.d/munin-node
%dir %{perl_vendorlib}/Munin/Common
%{perl_vendorlib}/Munin/Common/Config.pm
%{perl_vendorlib}/Munin/Common/Daemon.pm
%{perl_vendorlib}/Munin/Common/Defaults.pm
%{perl_vendorlib}/Munin/Common/TLS.pm
%{perl_vendorlib}/Munin/Common/TLSClient.pm
%{perl_vendorlib}/Munin/Common/TLSServer.pm
%{perl_vendorlib}/Munin/Common/Timeout.pm
%{perl_vendorlib}/Munin/Common/DictFile.pm
%{perl_vendorlib}/Munin/Common/SyncDictFile.pm
%dir %{perl_vendorlib}/Munin/Node
%{perl_vendorlib}/Munin/Node/Config.pm
%dir %{perl_vendorlib}/Munin/Node/Configure
%{perl_vendorlib}/Munin/Node/Configure/Debug.pm
%{perl_vendorlib}/Munin/Node/Configure/History.pm
%{perl_vendorlib}/Munin/Node/Configure/HostEnumeration.pm
%{perl_vendorlib}/Munin/Node/Configure/Plugin.pm
%{perl_vendorlib}/Munin/Node/Configure/PluginList.pm
%{perl_vendorlib}/Munin/Node/Logger.pm
%{perl_vendorlib}/Munin/Node/OS.pm
%{perl_vendorlib}/Munin/Node/SNMPConfig.pm
%{perl_vendorlib}/Munin/Node/Server.pm
%{perl_vendorlib}/Munin/Node/Service.pm
%{perl_vendorlib}/Munin/Node/Session.pm
%{perl_vendorlib}/Munin/Node/Utils.pm
%{perl_vendorlib}/Munin/Node/SpoolReader.pm
%{perl_vendorlib}/Munin/Node/SpoolWriter.pm
%{perl_vendorlib}/Munin/Plugin.pm
%dir %{perl_vendorlib}/Munin/Plugin
%{perl_vendorlib}/Munin/Plugin/Pgsql.pm
%{perl_vendorlib}/Munin/Plugin/SNMP.pm
%{_mandir}/man1/munin-node-configure.1%{?ext_man}
%{_mandir}/man1/munin-node.1%{?ext_man}
%{_mandir}/man1/munin-run.1%{?ext_man}
%{_mandir}/man1/munindoc.1%{?ext_man}
%{_mandir}/man1/munin-get.1%{?ext_man}
%{_mandir}/man3/Munin::Common::Config.3pm.gz
%{_mandir}/man3/Munin::Common::Daemon.3pm.gz
%{_mandir}/man3/Munin::Common::Defaults.3pm.gz
%{_mandir}/man3/Munin::Common::TLS.3pm.gz
%{_mandir}/man3/Munin::Common::TLSClient.3pm.gz
%{_mandir}/man3/Munin::Common::TLSServer.3pm.gz
%{_mandir}/man3/Munin::Common::Timeout.3pm.gz
%{_mandir}/man3/Munin::Node::Config.3pm.gz
%{_mandir}/man3/Munin::Node::Configure::Debug.3pm.gz
%{_mandir}/man3/Munin::Node::Configure::History.3pm.gz
%{_mandir}/man3/Munin::Node::Configure::HostEnumeration.3pm.gz
%{_mandir}/man3/Munin::Node::Configure::Plugin.3pm.gz
%{_mandir}/man3/Munin::Node::Configure::PluginList.3pm.gz
%{_mandir}/man3/Munin::Node::Logger.3pm.gz
%{_mandir}/man3/Munin::Node::OS.3pm.gz
%{_mandir}/man3/Munin::Node::SpoolReader.3pm.gz
%{_mandir}/man3/Munin::Node::SpoolWriter.3pm.gz
%{_mandir}/man3/Munin::Node::SNMPConfig.3pm.gz
%{_mandir}/man3/Munin::Node::Server.3pm.gz
%{_mandir}/man3/Munin::Node::Service.3pm.gz
%{_mandir}/man3/Munin::Node::Session.3pm.gz
%{_mandir}/man3/Munin::Node::Utils.3pm.gz
%{_mandir}/man3/Munin::Plugin.3pm.gz
%{_mandir}/man3/Munin::Plugin::Pgsql.3pm.gz
%{_mandir}/man3/Munin::Plugin::SNMP.3pm.gz
%attr(0750, munin, munin) %dir %{logdir}
%attr(0755, munin, munin) %dir %{dbdir}
%attr(0775, nobody, nobody) %dir %{dbdir}/plugin-state
%ghost %{logdir}/munin-node.log
%ghost /run/munin
%dir %{_prefix}/lib/firewalld
%dir %{_prefix}/lib/firewalld/services
%{_prefix}/lib/firewalld/services/munin-node.xml
%changelog

3
nginx-munin.zip Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9ae0ef1144621c2507634adc20afc90c94ae90fa601284556d2168d10f2bb65d
size 9786

27
perl526.patch Normal file
View File

@ -0,0 +1,27 @@
Index: munin-2.0.32/master/Build.PL
===================================================================
--- munin-2.0.32.orig/master/Build.PL
+++ munin-2.0.32/master/Build.PL
@@ -1,3 +1,4 @@
+use lib '.';
use MasterBuilder;
use warnings;
Index: munin-2.0.32/node/Build.PL
===================================================================
--- munin-2.0.32.orig/node/Build.PL
+++ munin-2.0.32/node/Build.PL
@@ -1,3 +1,4 @@
+use lib '.';
use NodeBuilder;
use warnings;
Index: munin-2.0.32/plugins/Build.PL
===================================================================
--- munin-2.0.32.orig/plugins/Build.PL
+++ munin-2.0.32/plugins/Build.PL
@@ -1,3 +1,4 @@
+use lib '.';
use PluginsBuilder;
use warnings;

55
plugins.conf Normal file
View File

@ -0,0 +1,55 @@
#
# This file contains configuration options for the plugins. Three
# options are understood by munin-node itself:
#
# user <user> # Set the user to run the plugin as
# group <group> # Set the group to run the plugin as
# command <command> # Run <command> instead of the plugin. %c
# expands to what would normally be run.
# env.<variable> # Sets <variable> in the plugin's environment, see the
# individual plugins to find out which variables they
# care about.
#
#
[mysql*]
#env.mysqladmin /usr/bin/mysqladmin
#env.mysqluser <someuser>
#env.mysqlpassword <password>
#env.mysqlopts -u <someuser> -p<password>
[exim*]
group mail
[cps*]
user root
[apt]
user root
[vlan*]
user root
[postfix*]
user root
env.logfile mail
[dhcpd]
env.leasefile /var/lib/dhcp/db/dhcpd.leases
[fail2ban]
user root
[amavis]
user root
env.amavislog /var/log/mail
[courier*]
env.logtail /usr/bin/logtail
[perdition]
env.logtail /usr/bin/logtail
[mailscanner]
env.logtail /usr/bin/logtail