From william88@gmail.com  Wed Mar  6 14:55:41 2013
Return-Path: <william88@gmail.com>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1])
	by hub.freebsd.org (Postfix) with ESMTP id 109D8374
	for <FreeBSD-gnats-submit@freebsd.org>; Wed,  6 Mar 2013 14:55:41 +0000 (UTC)
	(envelope-from william88@gmail.com)
Received: from mail-gg0-x234.google.com (mail-gg0-x234.google.com [IPv6:2607:f8b0:4002:c02::234])
	by mx1.freebsd.org (Postfix) with ESMTP id CD797F23
	for <FreeBSD-gnats-submit@freebsd.org>; Wed,  6 Mar 2013 14:55:40 +0000 (UTC)
Received: by mail-gg0-f180.google.com with SMTP id e5so1221648ggk.11
        for <FreeBSD-gnats-submit@freebsd.org>; Wed, 06 Mar 2013 06:55:40 -0800 (PST)
Received: from localhost ([177.132.17.226])
        by mx.google.com with ESMTPS id u3sm12821785yhd.14.2013.03.06.06.55.37
        (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
        Wed, 06 Mar 2013 06:55:39 -0800 (PST)
Message-Id: <513758eb.0349ec0a.5e49.3feb@mx.google.com>
Date: Wed, 06 Mar 2013 06:55:39 -0800 (PST)
From: William Grzybowski <william88@gmail.com>
Reply-To: William Grzybowski <william88@gmail.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [PATCH] net-mgmt/collectd5: update to 5.2.1
X-Send-Pr-Version: 3.113
X-GNATS-Notify: ports@bsdserwis.com

>Number:         176691
>Category:       ports
>Synopsis:       [PATCH] net-mgmt/collectd5: update to 5.2.1
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    beech
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar 06 15:00:02 UTC 2013
>Closed-Date:    Tue Mar 12 18:30:09 UTC 2013
>Last-Modified:  Tue Mar 12 18:40:00 UTC 2013
>Originator:     William Grzybowski
>Release:        FreeBSD 9.1-RELEASE amd64
>Organization:
>Environment:
>Description:

	Update to 5.2.1
	Redo zfs arc patch, make it work with clang

	Redports: https://redports.org/buildarchive/20130306142100-1314/

>How-To-Repeat:
>Fix:

	See attached patch


--- collectd5.patch begins here ---
Index: Makefile
===================================================================
--- Makefile	(revision 313459)
+++ Makefile	(working copy)
@@ -1,14 +1,14 @@
 # Created by: Matt Peterson <matt@peterson.org>
 # $FreeBSD$
 PORTNAME=	collectd
-PORTVERSION=	5.1.0
-PORTREVISION=	5
+PORTVERSION=	5.2.1
 CATEGORIES=	net-mgmt
 MASTER_SITES=	http://collectd.org/files/
 
 MAINTAINER=	ports@bsdserwis.com
 COMMENT=	Systems & network statistics collection daemon
 
+USE_BZIP2=	yes
 USE_GMAKE=	yes
 GNU_CONFIGURE=	yes
 USE_AUTOTOOLS=	autoconf autoheader automake libltdl
@@ -64,7 +64,7 @@
 WRITE_GRAPHITE_DESC=	write_graphite
 WRITE_HTTP_DESC=	write_http
 
-MAN1=		collectd.1 collectd-nagios.1 collectdmon.1 collectdctl.1
+MAN1=		collectd.1 collectd-nagios.1 collectd-tg.1 collectdmon.1 collectdctl.1
 MAN5=		collectd.conf.5 collectd-email.5 collectd-exec.5 \
 		collectd-snmp.5 collectd-unixsock.5 collectd-perl.5 \
 		collectd-java.5 collectd-python.5 types.db.5 collectd-threshold.5
Index: distinfo
===================================================================
--- distinfo	(revision 313459)
+++ distinfo	(working copy)
@@ -1,2 +1,2 @@
-SHA256 (collectd-5.1.0.tar.gz) = 8e06c03c5467f3021565570fc86c931a43579aa6dad25ca5999d66850cd19927
-SIZE (collectd-5.1.0.tar.gz) = 1630323
+SHA256 (collectd-5.2.1.tar.bz2) = d82a5c302d2cfa0c3f7a3c7b7e37fb3faf42b17d2addae036cb819b6b25b9d98
+SIZE (collectd-5.2.1.tar.bz2) = 1395740
Index: files/patch-configure.in
===================================================================
--- files/patch-configure.in	(revision 313459)
+++ files/patch-configure.in	(working copy)
@@ -1,6 +1,8 @@
---- configure.in.orig	2012-04-02 08:04:58.000000000 +0000
-+++ configure.in	2012-11-23 22:00:22.424129087 +0000
-@@ -67,6 +67,9 @@
+diff --git configure.in configure.in
+index d50e802..4660787 100644
+--- configure.in
++++ configure.in
+@@ -67,6 +67,9 @@ case $host_os in
  	*openbsd*)
  	ac_system="OpenBSD"
  	;;
@@ -10,7 +12,7 @@
  	*aix*)
  	AC_DEFINE([KERNEL_AIX], 1, [True if program is to be compiled for a AIX kernel])
  	ac_system="AIX"
-@@ -98,7 +101,7 @@
+@@ -99,7 +102,7 @@ then
  fi
  
  # Where to install .pc files.
@@ -19,7 +21,7 @@
  AC_SUBST(pkgconfigdir)
  
  # Check for standards compliance mode
-@@ -1378,6 +1381,7 @@
+@@ -1386,6 +1389,7 @@ if test "x$with_kstat" = "xyes"
  then
  	AC_CHECK_LIB(kstat, kstat_open, [with_kstat="yes"], [with_kstat="no (libkstat not found)"], [])
  fi
@@ -27,7 +29,7 @@
  if test "x$with_kstat" = "xyes"
  then
  	AC_CHECK_LIB(devinfo, di_init, [with_devinfo="yes"], [with_devinfo="no (not found)"], [])
-@@ -1387,6 +1391,8 @@
+@@ -1395,6 +1399,8 @@ if test "x$with_kstat" = "xyes"
  then
  	AC_DEFINE(HAVE_LIBKSTAT, 1,
  		  [Define to 1 if you have the 'kstat' library (-lkstat)])
@@ -36,7 +38,7 @@
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBKSTAT, test "x$with_kstat" = "xyes")
  AM_CONDITIONAL(BUILD_WITH_LIBDEVINFO, test "x$with_devinfo" = "xyes")
-@@ -1807,9 +1813,6 @@
+@@ -1815,9 +1821,6 @@ then
  		[with_libgcrypt="yes"],
  		[with_libgcrypt="no (symbol gcry_md_hash_buffer not found)"])
  
@@ -46,7 +48,7 @@
  fi
  
  CPPFLAGS="$SAVE_CPPFLAGS"
-@@ -3297,7 +3300,7 @@
+@@ -3376,7 +3379,7 @@ fi
  if test "x$with_python" = "xyes"
  then
  	AC_MSG_CHECKING([for Python LIBS])
@@ -55,7 +57,7 @@
  	python_config_status=$?
  
  	if test "$python_config_status" -ne 0 || test "x$python_library_flags" = "x"
-@@ -3312,7 +3315,7 @@
+@@ -3391,7 +3394,7 @@ fi
  if test "x$with_python" = "xyes"
  then
  	LDFLAGS="-L$python_library_path $LDFLAGS"
@@ -64,18 +66,16 @@
  
  	AC_CHECK_FUNC(PyObject_CallFunction,
  		      [with_python="yes"],
---- configure.in.orig	2013-01-03 17:07:22.000000000 +0000
-+++ configure.in	2013-01-03 17:07:58.000000000 +0000
-@@ -4057,7 +4057,7 @@
+@@ -4136,7 +4139,7 @@ AC_ARG_WITH(libvarnish, [AS_HELP_STRING([--with-libvarnish@<:@=PREFIX@:>@], [Pat
  	then
  		AC_MSG_NOTICE([Not checking for libvarnish: Manually configured])
  		with_libvarnish_cflags="-I$withval/include"
--		with_libvarnish_libs="-L$withval/lib -lvarnish -lvarnishcompat -lvarnishapi"
-+		with_libvarnish_libs="-L$withval/lib/varnish -lvarnish -lvarnishcompat -lvarnishapi"
+-		with_libvarnish_libs="-L$withval/lib -lvarnishapi"
++		with_libvarnish_libs="-L$withval/lib/varnish -lvarnishapi"
  		with_libvarnish="yes"
  	fi; fi; fi
  ],
-@@ -4580,6 +4583,12 @@
+@@ -4661,6 +4664,12 @@ then
  	plugin_zfs_arc="yes"
  fi
  
Index: files/patch-src__dns.c
===================================================================
--- files/patch-src__dns.c	(revision 313459)
+++ files/patch-src__dns.c	(working copy)
@@ -1,6 +1,8 @@
---- src/dns.c.orig	2008-09-05 15:26:02.000000000 +0000
-+++ src/dns.c	2008-09-05 15:25:55.000000000 +0000
-@@ -210,6 +210,15 @@
+diff --git src/dns.c src/dns.c
+index fe3b672..0c43985 100644
+--- src/dns.c
++++ src/dns.c
+@@ -223,6 +223,15 @@ static void *dns_child_loop (__attribute__((unused)) void *dummy)
  		pthread_sigmask (SIG_SETMASK, &sigmask, NULL);
  	}
  
@@ -8,11 +10,11 @@
 +#ifdef __sparc64__
 +	if (pcap_device == NULL)
 +	{
-+	    ERROR ("dns plugin: Interface required");
-+	    return (NULL);
++		ERROR ("dns plugin: Interface required");
++		return (NULL);
 +	}
 +#endif
 +
  	/* Passing `pcap_device == NULL' is okay and the same as passign "any" */
- 	DEBUG ("Creating PCAP object..");
- 	pcap_obj = pcap_open_live (pcap_device,
+ 	DEBUG ("dns plugin: Creating PCAP object..");
+ 	pcap_obj = pcap_open_live ((pcap_device != NULL) ? pcap_device : "any",
Index: files/patch-src__zfs_arc.c
===================================================================
--- files/patch-src__zfs_arc.c	(revision 313459)
+++ files/patch-src__zfs_arc.c	(working copy)
@@ -1,232 +1,237 @@
---- src/zfs_arc.c.orig	2012-04-02 08:04:58.000000000 +0000
-+++ src/zfs_arc.c	2012-11-24 17:54:21.715129054 +0000
-@@ -25,11 +25,57 @@
- #include "common.h"
- #include "plugin.h"
+diff --git configure.in configure.in
+index 4660787..54fd9d8 100644
+--- configure.in
++++ configure.in
+@@ -4843,6 +4843,12 @@ then
+ 	plugin_users="yes"
+ fi
  
-+#if !defined(HAVE_LIBKSTAT) && defined(HAVE_SYSCTLBYNAME)
-+#include <sys/sysctl.h>
-+#endif
++# FreeBSD
++if test "x$have_struct_kinfo_proc_freebsd" = "xyes"
++then
++	plugin_zfs_arc="yes"
++fi
 +
- /*
+ m4_divert_once([HELP_ENABLE], [
+ collectd plugins:])
+ 
+diff --git src/zfs_arc.c src/zfs_arc.c
+index aa90019..17e8513 100644
+--- src/zfs_arc.c
++++ src/zfs_arc.c
+@@ -19,6 +19,8 @@
+  * Authors:
+  *   Anthony Dewhurst <dewhurst at gmail>
+  *   Aurelien Rougemont <beorn at gandi.net>
++ *   Brad Davis <brd at FreeBSD.org>
++ *   William Grzybowski <william88 at gmail>
+  **/
+ 
+ #include "collectd.h"
+@@ -29,7 +31,14 @@
   * Global variables
   */
--static kstat_t *ksp;
+ 
 +#if defined(HAVE_LIBKSTAT)
++static kstat_t *ksp;
  extern kstat_ctl_t *kc;
-+#endif
++#elif defined(HAVE_SYSCTLBYNAME)
++  typedef void kstat_t;
++# include <sys/types.h>
++# include <sys/sysctl.h>
++#endif /* HAVE_SYSCTLBYNAME */
+ 
+ static void za_submit (const char* type, const char* type_instance, value_t* values, int values_len)
+ {
+@@ -57,37 +66,56 @@ static void za_submit_gauge (const char* type, const char* type_instance, gauge_
+ static int za_read_derive (kstat_t *ksp, const char *kstat_value,
+     const char *type, const char *type_instance)
+ {
+-  long long tmp;
+-  value_t v;
+-
+-  tmp = get_kstat_value (ksp, (char *)kstat_value);
+-  if (tmp == -1LL)
+-  {
+-    ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
+-    return (-1);
+-  }
+-
+-  v.derive = (derive_t) tmp;
+-  za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
+-  return (0);
++	long long tmp;
++	value_t v;
 +
-+/*
-+ * Context
-+ */
-+struct za_context {
 +#if defined(HAVE_LIBKSTAT)
-+    kstat_t *ksp;
-+#endif
-+};
-+
-+static int za_init_context(struct za_context *ctx)
-+{
-+#if defined(HAVE_LIBKSTAT)
-+	get_kstat (&ctx->ksp, "zfs", 0, "arcstats");
-+	if (ctx->ksp == NULL)
++	tmp = get_kstat_value (ksp, (char *)kstat_value);
++	if (tmp == -1LL)
 +	{
-+		ERROR ("zfs_arc plugin: Cannot find zfs:0:arcstats kstat.");
++		ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
 +		return (-1);
 +	}
-+#endif
-+	return 0;
-+}
-+
-+static long long za_get_value(struct za_context *ctx, const char* name)
-+{
-+#if defined(HAVE_LIBKSTAT)
-+	return get_kstat_value(ctx->ksp, name);
 +#elif defined(HAVE_SYSCTLBYNAME)
-+	// kstat values are available on FreeBSD through sysctl
-+	char fullname[512];
-+	long long result = 0;
-+	size_t size = sizeof(result);
-+	ssnprintf(fullname, sizeof(fullname), "kstat.zfs.misc.arcstats.%s", name);
-+	if (sysctlbyname(fullname, &result, &size, NULL, 0) != 0 || size != sizeof(result))
-+	{
-+		ERROR ("zfs_arc plugin: Cannot find stats using sysctl");
-+		result = 0;
++	size_t size;
++	size = sizeof(tmp);
++	if (sysctlbyname(kstat_value, &tmp, &size, NULL, 0) < 0) {
++		ERROR ("zfs_arc plugin: Reading sysctl \"%s\" failed.", kstat_value);
++		return (-1);
 +	}
-+	return result;
-+#endif
-+}
- 
- static void za_submit (const char* type, const char* type_instance, value_t* values, int values_len)
- {
-@@ -54,13 +100,13 @@
- 	za_submit (type, type_instance, &vv, 1);
++#endif /* HAVE_LIBKSTAT */
++
++	v.derive = (derive_t) tmp;
++	za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
++	return (0);
  }
  
--static int za_read_derive (kstat_t *ksp, const char *kstat_value,
-+static int za_read_derive (struct za_context *ctx, const char *kstat_value,
+ static int za_read_gauge (kstat_t *ksp, const char *kstat_value,
      const char *type, const char *type_instance)
  {
-   long long tmp;
-   value_t v;
- 
--  tmp = get_kstat_value (ksp, kstat_value);
-+  tmp = za_get_value (ctx, (char *)kstat_value);
-   if (tmp == -1LL)
-   {
-     ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
-@@ -69,15 +115,16 @@
- 
-   v.derive = (derive_t) tmp;
-   za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
-+  return (0);
+-  long long tmp;
+-  value_t v;
+-
+-  tmp = get_kstat_value (ksp, (char *)kstat_value);
+-  if (tmp == -1LL)
+-  {
+-    ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
+-    return (-1);
+-  }
+-
+-  v.gauge = (gauge_t) tmp;
+-  za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
+-  return (0);
++	long long tmp;
++	value_t v;
++
++#if defined(HAVE_LIBKSTAT)
++	tmp = get_kstat_value (ksp, (char *)kstat_value);
++	if (tmp == -1LL)
++	{
++		ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
++		return (-1);
++	}
++
++#elif defined(HAVE_SYSCTLBYNAME)
++	size_t size;
++	size = sizeof(tmp);
++	if (sysctlbyname(kstat_value, &tmp, &size, NULL, 0) < 0) {
++		ERROR ("zfs_arc plugin: Reading sysctl \"%s\" failed.", kstat_value);
++		return (-1);
++	}
++#endif /* HAVE_LIBKSTAT */
++
++	v.gauge = (gauge_t) tmp;
++	za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
++	return (0);
  }
  
--static int za_read_gauge (kstat_t *ksp, const char *kstat_value,
-+static int za_read_gauge (struct za_context *ctx, const char *kstat_value,
-     const char *type, const char *type_instance)
- {
-   long long tmp;
-   value_t v;
- 
--  tmp = get_kstat_value (ksp, kstat_value);
-+  tmp = za_get_value (ctx, (char *)kstat_value);
-   if (tmp == -1LL)
-   {
-     ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
-@@ -86,18 +133,14 @@
- 
-   v.gauge = (gauge_t) tmp;
-   za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
-+  return (0);
+ static void za_submit_ratio (const char* type_instance, gauge_t hits, gauge_t misses)
+@@ -105,11 +133,67 @@ static void za_submit_ratio (const char* type_instance, gauge_t hits, gauge_t mi
+ 	za_submit_gauge ("cache_ratio", type_instance, ratio);
  }
  
--static void za_submit_ratio (const char* type_instance, gauge_t hits, gauge_t misses)
-+static void za_submit_ratio (const char* type_instance, long long hits, long long misses)
- {
- 	gauge_t ratio = NAN;
- 
--	if (!isfinite (hits) || (hits < 0.0))
--		hits = 0.0;
--	if (!isfinite (misses) || (misses < 0.0))
--		misses = 0.0;
--
--	if ((hits != 0.0) || (misses != 0.0))
-+	if ((hits > 0) || (misses > 0))
- 		ratio = hits / (hits + misses);
- 
- 	za_submit_gauge ("cache_ratio", type_instance, ratio);
-@@ -105,56 +148,55 @@
- 
- static int za_read (void)
- {
--	gauge_t  arc_hits, arc_misses, l2_hits, l2_misses;
-+	long long  arc_hits, arc_misses, l2_hits, l2_misses;
- 	value_t  l2_io[2];
-+	struct za_context ctx;
- 
--	get_kstat (&ksp, "zfs", 0, "arcstats");
--	if (ksp == NULL)
-+	if (za_init_context (&ctx) < 0)
- 	{
--		ERROR ("zfs_arc plugin: Cannot find zfs:0:arcstats kstat.");
- 		return (-1);
- 	}
- 
- 	/* Sizes */
--	za_read_gauge (ksp, "size",    "cache_size", "arc");
--	za_read_gauge (ksp, "l2_size", "cache_size", "L2");
-+	za_read_gauge (&ctx, "size",    "cache_size", "arc");
-+	za_read_gauge (&ctx, "l2_size", "cache_size", "L2");
- 
--        /* Operations */
--	za_read_derive (ksp, "allocated","cache_operation", "allocated");
--	za_read_derive (ksp, "deleted",  "cache_operation", "deleted");
--	za_read_derive (ksp, "stolen",   "cache_operation", "stolen");
--
--        /* Issue indicators */
--        za_read_derive (ksp, "mutex_miss", "mutex_operation", "miss");
--	za_read_derive (ksp, "hash_collisions", "hash_collisions", "");
+-static int za_read (void)
++#if defined(HAVE_SYSCTLBYNAME)
++static int za_read_freebsd (void)
++{
++	// Sizes
++	za_read_gauge (NULL, "kstat.zfs.misc.arcstats.size", "cache_size", "arc");
++	za_read_gauge (NULL, "kstat.zfs.misc.arcstats.l2_size", "cache_size", "L2");
++
 +	/* Operations */
-+	za_read_derive (&ctx, "allocated","cache_operation", "allocated");
-+	za_read_derive (&ctx, "deleted",  "cache_operation", "deleted");
-+	za_read_derive (&ctx, "stolen",   "cache_operation", "stolen");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.allocated", "cache_operation", "allocated");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.deleted",   "cache_operation", "deleted");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.stolen",    "cache_operation", "stolen");
 +
 +	/* Issue indicators */
-+	za_read_derive (&ctx, "mutex_miss", "mutex_operation", "miss");
-+	za_read_derive (&ctx, "hash_collisions", "hash_collisions", "");
- 	
--        /* Evictions */
--	za_read_derive (ksp, "evict_l2_cached",     "cache_eviction", "cached");
--	za_read_derive (ksp, "evict_l2_eligible",   "cache_eviction", "eligible");
--	za_read_derive (ksp, "evict_l2_ineligible", "cache_eviction", "ineligible");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.mutex_miss",      "mutex_operation", "miss");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.hash_collisions", "hash_collisions", "");
++
 +	/* Evictions */
-+	za_read_derive (&ctx, "evict_l2_cached",     "cache_eviction", "cached");
-+	za_read_derive (&ctx, "evict_l2_eligible",   "cache_eviction", "eligible");
-+	za_read_derive (&ctx, "evict_l2_ineligible", "cache_eviction", "ineligible");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.evict_l2_cached",     "cache_eviction", "cached");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.evict_l2_eligible",   "cache_eviction", "eligible");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.evict_l2_ineligible", "cache_eviction", "ineligible");
++
++	/* Hits / misses */
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_data_hits",         "cache_result", "demand_data-hit");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_metadata_hits",     "cache_result", "demand_metadata-hit");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_data_hits",       "cache_result", "prefetch_data-hit");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_metadata_hits",   "cache_result", "prefetch_metadata-hit");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_data_misses",       "cache_result", "demand_data-miss");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_metadata_misses",   "cache_result", "demand_metadata-miss");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_data_misses",     "cache_result", "prefetch_data-miss");
++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_metadata_misses", "cache_result", "prefetch_metadata-miss");
++
++	/* Ratios */
++	gauge_t arc_hits;
++	gauge_t arc_misses;
++	gauge_t l2_hits;
++	gauge_t l2_misses;
++	value_t  l2_io[2];
++
++	size_t size;
++	size = sizeof(arc_hits);
++	sysctlbyname("kstat.zfs.misc.arcstats.hits", &arc_hits, &size, NULL, 0);
++	sysctlbyname("kstat.zfs.misc.arcstats.misses", &arc_misses, &size, NULL, 0);
++	sysctlbyname("kstat.zfs.misc.arcstats.l2_hits", &l2_hits, &size, NULL, 0);
++	sysctlbyname("kstat.zfs.misc.arcstats.l2_misses", &l2_misses, &size, NULL, 0);
++
++	za_submit_ratio ("arc", arc_hits, arc_misses);
++	za_submit_ratio ("L2", l2_hits, l2_misses);
++
++	/* I/O */
++	sysctlbyname("kstat.zfs.misc.arcstats.l2_read_bytes", &l2_io[0].derive, &size, NULL, 0);
++	sysctlbyname("kstat.zfs.misc.arcstats.l2_write_bytes", &l2_io[1].derive, &size, NULL, 0);
++
++	za_submit ("io_octets", "L2", l2_io, /* num values = */ 2);
++
++	return (0);
++}
++#elif defined(HAVE_LIBKSTAT)
++static int za_read_solaris (void)
+ {
+ 	gauge_t  arc_hits, arc_misses, l2_hits, l2_misses;
+ 	value_t  l2_io[2];
+-	kstat_t	 *ksp	= NULL;
  
- 	/* Hits / misses */
--	za_read_derive (ksp, "demand_data_hits",         "cache_result", "demand_data-hit");
--	za_read_derive (ksp, "demand_metadata_hits",     "cache_result", "demand_metadata-hit");
--	za_read_derive (ksp, "prefetch_data_hits",       "cache_result", "prefetch_data-hit");
--	za_read_derive (ksp, "prefetch_metadata_hits",   "cache_result", "prefetch_metadata-hit");
--	za_read_derive (ksp, "demand_data_misses",       "cache_result", "demand_data-miss");
--	za_read_derive (ksp, "demand_metadata_misses",   "cache_result", "demand_metadata-miss");
--	za_read_derive (ksp, "prefetch_data_misses",     "cache_result", "prefetch_data-miss");
--	za_read_derive (ksp, "prefetch_metadata_misses", "cache_result", "prefetch_metadata-miss");
-+	za_read_derive (&ctx, "demand_data_hits",         "cache_result", "demand_data-hit");
-+	za_read_derive (&ctx, "demand_metadata_hits",     "cache_result", "demand_metadata-hit");
-+	za_read_derive (&ctx, "prefetch_data_hits",       "cache_result", "prefetch_data-hit");
-+	za_read_derive (&ctx, "prefetch_metadata_hits",   "cache_result", "prefetch_metadata-hit");
-+	za_read_derive (&ctx, "demand_data_misses",       "cache_result", "demand_data-miss");
-+	za_read_derive (&ctx, "demand_metadata_misses",   "cache_result", "demand_metadata-miss");
-+	za_read_derive (&ctx, "prefetch_data_misses",     "cache_result", "prefetch_data-miss");
-+	za_read_derive (&ctx, "prefetch_metadata_misses", "cache_result", "prefetch_metadata-miss");
+ 	get_kstat (&ksp, "zfs", 0, "arcstats");
+ 	if (ksp == NULL)
+@@ -163,15 +247,20 @@ static int za_read (void)
  
- 	/* Ratios */
--	arc_hits   = (gauge_t) get_kstat_value(ksp, "hits");
--	arc_misses = (gauge_t) get_kstat_value(ksp, "misses");
--	l2_hits    = (gauge_t) get_kstat_value(ksp, "l2_hits");
--	l2_misses  = (gauge_t) get_kstat_value(ksp, "l2_misses");
-+	arc_hits   = za_get_value (&ctx, "hits");
-+	arc_misses = za_get_value (&ctx, "misses");
-+	l2_hits    = za_get_value (&ctx, "l2_hits");
-+	l2_misses  = za_get_value (&ctx, "l2_misses");
+ 	return (0);
+ } /* int za_read */
++#endif
  
- 	za_submit_ratio ("arc", arc_hits, arc_misses);
- 	za_submit_ratio ("L2", l2_hits, l2_misses);
- 
- 	/* I/O */
--	l2_io[0].derive = get_kstat_value(ksp, "l2_read_bytes");
--	l2_io[1].derive = get_kstat_value(ksp, "l2_write_bytes");
-+	l2_io[0].derive = za_get_value (&ctx, "l2_read_bytes");
-+	l2_io[1].derive = za_get_value (&ctx, "l2_write_bytes");
- 
- 	za_submit ("io_octets", "L2", l2_io, /* num values = */ 2);
- 
-@@ -163,14 +205,23 @@
- 
  static int za_init (void) /* {{{ */
  {
--	ksp = NULL;
--
 +#if defined(HAVE_LIBKSTAT)
++	ksp = NULL;
++
  	/* kstats chain already opened by update_kstat (using *kc), verify everything went fine. */
  	if (kc == NULL)
  	{
  		ERROR ("zfs_arc plugin: kstat chain control structure not available.");
  		return (-1);
  	}
-+#elif defined(HAVE_SYSCTLBYNAME)
-+	/* make sure ARC is available (arc_size is not null) */
-+	unsigned long long arc_size;
-+	size_t size = sizeof(arc_size);
-+	if (sysctlbyname("kstat.zfs.misc.arcstats.size", &arc_size, &size, NULL, 0) != 0 || arc_size == 0)
-+	{
-+		ERROR ("zfs_arc plugin: could not get ARC size using sysctl, is ARC enabled?");
-+		return (-1);
-+	}
-+#endif
++#endif /* HAVE_LIBKSTAT */
  
  	return (0);
  } /* }}} int za_init */
+@@ -179,7 +268,16 @@ static int za_init (void) /* {{{ */
+ void module_register (void)
+ {
+ 	plugin_register_init ("zfs_arc", za_init);
+-	plugin_register_read ("zfs_arc", za_read);
++
++#if defined(HAVE_LIBKSTAT)
++	plugin_register_read ("zfs_arc", za_read_solaris);
++#elif defined(HAVE_SYSCTLBYNAME)
++	plugin_register_read ("zfs_arc", za_read_freebsd);
++#else
++	ERROR ("Unable to determine which OS we are on");
++	return (-1);
++#endif /* HAVE_SYSCTLBYNAME */
++
+ } /* void module_register */
+ 
+ /* vmi: set sw=8 noexpandtab fdm=marker : */
Index: files/patch-version-gen.sh
===================================================================
--- files/patch-version-gen.sh	(revision 313459)
+++ files/patch-version-gen.sh	(working copy)
@@ -1,10 +1,12 @@
---- version-gen.sh.orig	2012-04-09 20:04:16.130293641 -0500
-+++ version-gen.sh	2012-04-09 20:05:04.927297496 -0500
-@@ -1,17 +1,3 @@
+diff --git version-gen.sh version-gen.sh
+index e344541..1ed7480 100755
+--- version-gen.sh
++++ version-gen.sh
+@@ -1,13 +1,3 @@
 -#!/usr/bin/env bash
 +#!/bin/sh
  
--DEFAULT_VERSION="5.1.0.git"
+-DEFAULT_VERSION="5.2.1.git"
 -
 -VERSION="`git describe 2> /dev/null | sed -e 's/^collectd-//'`"
 -
@@ -14,9 +16,5 @@
 -
 -VERSION="`echo \"$VERSION\" | sed -e 's/-/./g'`"
 -
--if test "x`uname -s`" = "xAIX" ; then
--	echo "$VERSION\c"
--else 
--	echo -n "$VERSION"
--fi
-+echo -n "5.1.0.git"
+-echo -n "$VERSION"
++echo -n "5.2.1.git"
Index: pkg-plist
===================================================================
--- pkg-plist	(revision 313459)
+++ pkg-plist	(working copy)
@@ -10,9 +10,14 @@
 %%CGI%%@exec if [ ! -f %B/collection.conf ] ; then cp -p %B/%f %B/collection.conf; fi
 %%CGI%%@dirrmtry %%WWWDIR%%
 bin/collectd-nagios
+bin/collectd-tg
 bin/collectdctl
 include/collectd/client.h
 include/collectd/lcc_features.h
+include/collectd/network.h
+include/collectd/network_buffer.h
+lib/collectd/aggregation.la
+lib/collectd/aggregation.so
 %%APACHE%%lib/collectd/apache.la
 %%APACHE%%lib/collectd/apache.so
 %%APCUPS%%lib/collectd/apcups.la
@@ -123,7 +128,7 @@
 lib/collectd/zfs_arc.so
 lib/libcollectdclient.la
 lib/libcollectdclient.so
-lib/libcollectdclient.so.0
+lib/libcollectdclient.so.1
 libdata/pkgconfig/libcollectdclient.pc
 %%WRITE_HTTP%%lib/collectd/write_http.la
 %%WRITE_HTTP%%lib/collectd/write_http.so
--- collectd5.patch ends here ---

>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->feedback 
State-Changed-By: edwin 
State-Changed-When: Wed Mar 6 15:00:19 UTC 2013 
State-Changed-Why:  
Awaiting maintainers feedback (via the GNATS Auto Assign Tool) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=176691 

From: Edwin Groothuis <edwin@FreeBSD.org>
To: ports@bsdserwis.com
Cc: bug-followup@FreeBSD.org
Subject: Re: ports/176691: [PATCH] net-mgmt/collectd5: update to 5.2.1
Date: Wed, 6 Mar 2013 15:00:18 UT

 Maintainer of net-mgmt/collectd5,
 
 Please note that PR ports/176691 has just been submitted.
 
 If it contains a patch for an upgrade, an enhancement or a bug fix
 you agree on, reply to this email stating that you approve the patch
 and a committer will take care of it.
 
 The full text of the PR can be found at:
     http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/176691
 
 -- 
 Edwin Groothuis via the GNATS Auto Assign Tool
 edwin@FreeBSD.org
Responsible-Changed-From-To: freebsd-ports-bugs->beech 
Responsible-Changed-By: beech 
Responsible-Changed-When: Thu Mar 7 05:36:22 UTC 2013 
Responsible-Changed-Why:  
I'll take it 

http://www.freebsd.org/cgi/query-pr.cgi?pr=176691 
State-Changed-From-To: feedback->open 
State-Changed-By: linimon 
State-Changed-When: Mon Mar 11 10:39:41 UTC 2013 
State-Changed-Why:  
Maintainer approved. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=176691 

From: Mark Linimon <linimon@lonesome.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/176691: [PATCH] net-mgmt/collectd5: update to 5.2.1
Date: Mon, 11 Mar 2013 05:40:21 -0500

 ----- Forwarded message from Krzysztof Stryjek <ports@bsdserwis.com> -----
 
 Date: Mon, 11 Mar 2013 11:15:31 +0100
 From: Krzysztof Stryjek <ports@bsdserwis.com>
 To: beech@FreeBSD.org
 Cc: freebsd-ports-bugs@FreeBSD.org
 Subject: Re: ports/176691: [PATCH] net-mgmt/collectd5: update to 5.2.1
 User-Agent: Mutt/1.5.21 (2010-09-15)
 
 Hello,
 
 I'm approving this patch.
 
 Greetings,
 -- 
 Krzysztof Stryjek
 UNIX administrator/Juniper Networks Specialist
 email: wtp (at) bsdserwis (dot) com
 http://www.linkedin.com/in/KrzysztofStryjek
 GPG fingerprint: 8BD7 40CE 8994 0BBE CE6C  91CD 1292 8959 DC61 0E76
 
 In theory, there is no difference between theory and practice.
 In practice, there is.
 _______________________________________________
 freebsd-ports-bugs@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/freebsd-ports-bugs
 To unsubscribe, send any mail to "freebsd-ports-bugs-unsubscribe@freebsd.org"
 
 
 ----- End forwarded message -----

From: Beech Rintoul <akbeech@gmail.com>
To: ports@bsdserwis.com
Cc: Bug Followup <bug-followup@freebsd.org>,
 Beech Rintoul <beech@freebsd.org>
Subject: Re: ports/176691: [PATCH] net-mgmt/collectd5: update to 5.2.1
Date: Mon, 11 Mar 2013 18:09:22 -0800

 One patch does not apply cleanly.
 
 http://www.freebsdnorth.com/tb/errors/9-FreeBSD/collectd-5.2.1.log
 
 Please fix.
 
 -- 
 --------------------------------------------------------------------------------------- 
 Beech Rintoul - Committer / Developer - beech@FreeBSD.org 
 /"\ ASCII Ribbon Campaign | FreeBSD Since 4.x 
 \ / - NO HTML/RTF in e-mail | http://www.freebsd.org 
  X  - NO Word docs in e-mail | Latest Release: 
 / \ - http://www.freebsd.org/releases/9.1R/announce.html
 --------------------------------------------------------------------------------------- 

From: William Grzybowski <william88@gmail.com>
To: bug-followup@FreeBSD.org, Beech Rintoul <akbeech@gmail.com>
Cc:  
Subject: Re: ports/176691: [PATCH] net-mgmt/collectd5: update to 5.2.1
Date: Tue, 12 Mar 2013 10:43:06 -0300

 --bcaec554e14c22945804d7ba78bf
 Content-Type: text/plain; charset=ISO-8859-1
 
 The patch that doesnt apply cfan be removed. Attached new patch.
 
 -- 
 William Grzybowski
 ------------------------------------------
 Curitiba/PR - Brasil
 
 --bcaec554e14c22945804d7ba78bf
 Content-Type: application/octet-stream; name="collectd5.patch"
 Content-Disposition: attachment; filename="collectd5.patch"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_he7415tg0
 
 SW5kZXg6IE1ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlCShyZXZpc2lvbiAzMTM5NzIp
 CisrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMSwxNCArMSwxNCBAQAogIyBDcmVhdGVk
 IGJ5OiBNYXR0IFBldGVyc29uIDxtYXR0QHBldGVyc29uLm9yZz4KICMgJEZyZWVCU0QkCiBQT1JU
 TkFNRT0JY29sbGVjdGQKLVBPUlRWRVJTSU9OPQk1LjEuMAotUE9SVFJFVklTSU9OPQk1CitQT1JU
 VkVSU0lPTj0JNS4yLjEKIENBVEVHT1JJRVM9CW5ldC1tZ210CiBNQVNURVJfU0lURVM9CWh0dHA6
 Ly9jb2xsZWN0ZC5vcmcvZmlsZXMvCiAKIE1BSU5UQUlORVI9CXBvcnRzQGJzZHNlcndpcy5jb20K
 IENPTU1FTlQ9CVN5c3RlbXMgJiBuZXR3b3JrIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBkYWVtb24K
 IAorVVNFX0JaSVAyPQl5ZXMKIFVTRV9HTUFLRT0JeWVzCiBHTlVfQ09ORklHVVJFPQl5ZXMKIFVT
 RV9BVVRPVE9PTFM9CWF1dG9jb25mIGF1dG9oZWFkZXIgYXV0b21ha2UgbGlibHRkbApAQCAtNjQs
 NyArNjQsNyBAQAogV1JJVEVfR1JBUEhJVEVfREVTQz0Jd3JpdGVfZ3JhcGhpdGUKIFdSSVRFX0hU
 VFBfREVTQz0Jd3JpdGVfaHR0cAogCi1NQU4xPQkJY29sbGVjdGQuMSBjb2xsZWN0ZC1uYWdpb3Mu
 MSBjb2xsZWN0ZG1vbi4xIGNvbGxlY3RkY3RsLjEKK01BTjE9CQljb2xsZWN0ZC4xIGNvbGxlY3Rk
 LW5hZ2lvcy4xIGNvbGxlY3RkLXRnLjEgY29sbGVjdGRtb24uMSBjb2xsZWN0ZGN0bC4xCiBNQU41
 PQkJY29sbGVjdGQuY29uZi41IGNvbGxlY3RkLWVtYWlsLjUgY29sbGVjdGQtZXhlYy41IFwKIAkJ
 Y29sbGVjdGQtc25tcC41IGNvbGxlY3RkLXVuaXhzb2NrLjUgY29sbGVjdGQtcGVybC41IFwKIAkJ
 Y29sbGVjdGQtamF2YS41IGNvbGxlY3RkLXB5dGhvbi41IHR5cGVzLmRiLjUgY29sbGVjdGQtdGhy
 ZXNob2xkLjUKSW5kZXg6IGRpc3RpbmZvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRpc3RpbmZvCShyZXZpc2lv
 biAzMTM5NzIpCisrKyBkaXN0aW5mbwkod29ya2luZyBjb3B5KQpAQCAtMSwyICsxLDIgQEAKLVNI
 QTI1NiAoY29sbGVjdGQtNS4xLjAudGFyLmd6KSA9IDhlMDZjMDNjNTQ2N2YzMDIxNTY1NTcwZmM4
 NmM5MzFhNDM1NzlhYTZkYWQyNWNhNTk5OWQ2Njg1MGNkMTk5MjcKLVNJWkUgKGNvbGxlY3RkLTUu
 MS4wLnRhci5neikgPSAxNjMwMzIzCitTSEEyNTYgKGNvbGxlY3RkLTUuMi4xLnRhci5iejIpID0g
 ZDgyYTVjMzAyZDJjZmEwYzNmN2EzYzdiN2UzN2ZiM2ZhZjQyYjE3ZDJhZGRhZTAzNmNiODE5YjZi
 MjViOWQ5OAorU0laRSAoY29sbGVjdGQtNS4yLjEudGFyLmJ6MikgPSAxMzk1NzQwCkluZGV4OiBm
 aWxlcy9wYXRjaC1jb25maWd1cmUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmlsZXMvcGF0Y2gtY29uZmln
 dXJlLmluCShyZXZpc2lvbiAzMTM5NzIpCisrKyBmaWxlcy9wYXRjaC1jb25maWd1cmUuaW4JKHdv
 cmtpbmcgY29weSkKQEAgLTEsNiArMSw4IEBACi0tLS0gY29uZmlndXJlLmluLm9yaWcJMjAxMi0w
 NC0wMiAwODowNDo1OC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBjb25maWd1cmUuaW4JMjAxMi0xMS0y
 MyAyMjowMDoyMi40MjQxMjkwODcgKzAwMDAKLUBAIC02Nyw2ICs2Nyw5IEBACitkaWZmIC0tZ2l0
 IGNvbmZpZ3VyZS5pbiBjb25maWd1cmUuaW4KK2luZGV4IGQ1MGU4MDIuLjQ2NjA3ODcgMTAwNjQ0
 CistLS0gY29uZmlndXJlLmluCisrKysgY29uZmlndXJlLmluCitAQCAtNjcsNiArNjcsOSBAQCBj
 YXNlICRob3N0X29zIGluCiAgCSpvcGVuYnNkKikKICAJYWNfc3lzdGVtPSJPcGVuQlNEIgogIAk7
 OwpAQCAtMTAsNyArMTIsNyBAQAogIAkqYWl4KikKICAJQUNfREVGSU5FKFtLRVJORUxfQUlYXSwg
 MSwgW1RydWUgaWYgcHJvZ3JhbSBpcyB0byBiZSBjb21waWxlZCBmb3IgYSBBSVgga2VybmVsXSkK
 ICAJYWNfc3lzdGVtPSJBSVgiCi1AQCAtOTgsNyArMTAxLDcgQEAKK0BAIC05OSw3ICsxMDIsNyBA
 QCB0aGVuCiAgZmkKICAKICAjIFdoZXJlIHRvIGluc3RhbGwgLnBjIGZpbGVzLgpAQCAtMTksNyAr
 MjEsNyBAQAogIEFDX1NVQlNUKHBrZ2NvbmZpZ2RpcikKICAKICAjIENoZWNrIGZvciBzdGFuZGFy
 ZHMgY29tcGxpYW5jZSBtb2RlCi1AQCAtMTM3OCw2ICsxMzgxLDcgQEAKK0BAIC0xMzg2LDYgKzEz
 ODksNyBAQCBpZiB0ZXN0ICJ4JHdpdGhfa3N0YXQiID0gInh5ZXMiCiAgdGhlbgogIAlBQ19DSEVD
 S19MSUIoa3N0YXQsIGtzdGF0X29wZW4sIFt3aXRoX2tzdGF0PSJ5ZXMiXSwgW3dpdGhfa3N0YXQ9
 Im5vIChsaWJrc3RhdCBub3QgZm91bmQpIl0sIFtdKQogIGZpCkBAIC0yNyw3ICsyOSw3IEBACiAg
 aWYgdGVzdCAieCR3aXRoX2tzdGF0IiA9ICJ4eWVzIgogIHRoZW4KICAJQUNfQ0hFQ0tfTElCKGRl
 dmluZm8sIGRpX2luaXQsIFt3aXRoX2RldmluZm89InllcyJdLCBbd2l0aF9kZXZpbmZvPSJubyAo
 bm90IGZvdW5kKSJdLCBbXSkKLUBAIC0xMzg3LDYgKzEzOTEsOCBAQAorQEAgLTEzOTUsNiArMTM5
 OSw4IEBAIGlmIHRlc3QgIngkd2l0aF9rc3RhdCIgPSAieHllcyIKICB0aGVuCiAgCUFDX0RFRklO
 RShIQVZFX0xJQktTVEFULCAxLAogIAkJICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlICdr
 c3RhdCcgbGlicmFyeSAoLWxrc3RhdCldKQpAQCAtMzYsNyArMzgsNyBAQAogIGZpCiAgQU1fQ09O
 RElUSU9OQUwoQlVJTERfV0lUSF9MSUJLU1RBVCwgdGVzdCAieCR3aXRoX2tzdGF0IiA9ICJ4eWVz
 IikKICBBTV9DT05ESVRJT05BTChCVUlMRF9XSVRIX0xJQkRFVklORk8sIHRlc3QgIngkd2l0aF9k
 ZXZpbmZvIiA9ICJ4eWVzIikKLUBAIC0xODA3LDkgKzE4MTMsNiBAQAorQEAgLTE4MTUsOSArMTgy
 MSw2IEBAIHRoZW4KICAJCVt3aXRoX2xpYmdjcnlwdD0ieWVzIl0sCiAgCQlbd2l0aF9saWJnY3J5
 cHQ9Im5vIChzeW1ib2wgZ2NyeV9tZF9oYXNoX2J1ZmZlciBub3QgZm91bmQpIl0pCiAgCkBAIC00
 Niw3ICs0OCw3IEBACiAgZmkKICAKICBDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiCi1AQCAtMzI5
 Nyw3ICszMzAwLDcgQEAKK0BAIC0zMzc2LDcgKzMzNzksNyBAQCBmaQogIGlmIHRlc3QgIngkd2l0
 aF9weXRob24iID0gInh5ZXMiCiAgdGhlbgogIAlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQeXRob24g
 TElCU10pCkBAIC01NSw3ICs1Nyw3IEBACiAgCXB5dGhvbl9jb25maWdfc3RhdHVzPSQ/CiAgCiAg
 CWlmIHRlc3QgIiRweXRob25fY29uZmlnX3N0YXR1cyIgLW5lIDAgfHwgdGVzdCAieCRweXRob25f
 bGlicmFyeV9mbGFncyIgPSAieCIKLUBAIC0zMzEyLDcgKzMzMTUsNyBAQAorQEAgLTMzOTEsNyAr
 MzM5NCw3IEBAIGZpCiAgaWYgdGVzdCAieCR3aXRoX3B5dGhvbiIgPSAieHllcyIKICB0aGVuCiAg
 CUxERkxBR1M9Ii1MJHB5dGhvbl9saWJyYXJ5X3BhdGggJExERkxBR1MiCkBAIC02NCwxOCArNjYs
 MTYgQEAKICAKICAJQUNfQ0hFQ0tfRlVOQyhQeU9iamVjdF9DYWxsRnVuY3Rpb24sCiAgCQkgICAg
 ICBbd2l0aF9weXRob249InllcyJdLAotLS0tIGNvbmZpZ3VyZS5pbi5vcmlnCTIwMTMtMDEtMDMg
 MTc6MDc6MjIuMDAwMDAwMDAwICswMDAwCi0rKysgY29uZmlndXJlLmluCTIwMTMtMDEtMDMgMTc6
 MDc6NTguMDAwMDAwMDAwICswMDAwCi1AQCAtNDA1Nyw3ICs0MDU3LDcgQEAKK0BAIC00MTM2LDcg
 KzQxMzksNyBAQCBBQ19BUkdfV0lUSChsaWJ2YXJuaXNoLCBbQVNfSEVMUF9TVFJJTkcoWy0td2l0
 aC1saWJ2YXJuaXNoQDw6QD1QUkVGSVhAOj5AXSwgW1BhdAogIAl0aGVuCiAgCQlBQ19NU0dfTk9U
 SUNFKFtOb3QgY2hlY2tpbmcgZm9yIGxpYnZhcm5pc2g6IE1hbnVhbGx5IGNvbmZpZ3VyZWRdKQog
 IAkJd2l0aF9saWJ2YXJuaXNoX2NmbGFncz0iLUkkd2l0aHZhbC9pbmNsdWRlIgotLQkJd2l0aF9s
 aWJ2YXJuaXNoX2xpYnM9Ii1MJHdpdGh2YWwvbGliIC1sdmFybmlzaCAtbHZhcm5pc2hjb21wYXQg
 LWx2YXJuaXNoYXBpIgotKwkJd2l0aF9saWJ2YXJuaXNoX2xpYnM9Ii1MJHdpdGh2YWwvbGliL3Zh
 cm5pc2ggLWx2YXJuaXNoIC1sdmFybmlzaGNvbXBhdCAtbHZhcm5pc2hhcGkiCistCQl3aXRoX2xp
 YnZhcm5pc2hfbGlicz0iLUwkd2l0aHZhbC9saWIgLWx2YXJuaXNoYXBpIgorKwkJd2l0aF9saWJ2
 YXJuaXNoX2xpYnM9Ii1MJHdpdGh2YWwvbGliL3Zhcm5pc2ggLWx2YXJuaXNoYXBpIgogIAkJd2l0
 aF9saWJ2YXJuaXNoPSJ5ZXMiCiAgCWZpOyBmaTsgZmkKICBdLAotQEAgLTQ1ODAsNiArNDU4Mywx
 MiBAQAorQEAgLTQ2NjEsNiArNDY2NCwxMiBAQCB0aGVuCiAgCXBsdWdpbl96ZnNfYXJjPSJ5ZXMi
 CiAgZmkKICAKSW5kZXg6IGZpbGVzL3BhdGNoLXNyY19fZG5zLmMKPT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmls
 ZXMvcGF0Y2gtc3JjX19kbnMuYwkocmV2aXNpb24gMzEzOTcyKQorKysgZmlsZXMvcGF0Y2gtc3Jj
 X19kbnMuYwkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDggQEAKLS0tLSBzcmMvZG5zLmMub3Jp
 ZwkyMDA4LTA5LTA1IDE1OjI2OjAyLjAwMDAwMDAwMCArMDAwMAotKysrIHNyYy9kbnMuYwkyMDA4
 LTA5LTA1IDE1OjI1OjU1LjAwMDAwMDAwMCArMDAwMAotQEAgLTIxMCw2ICsyMTAsMTUgQEAKK2Rp
 ZmYgLS1naXQgc3JjL2Rucy5jIHNyYy9kbnMuYworaW5kZXggZmUzYjY3Mi4uMGM0Mzk4NSAxMDA2
 NDQKKy0tLSBzcmMvZG5zLmMKKysrKyBzcmMvZG5zLmMKK0BAIC0yMjMsNiArMjIzLDE1IEBAIHN0
 YXRpYyB2b2lkICpkbnNfY2hpbGRfbG9vcCAoX19hdHRyaWJ1dGVfXygodW51c2VkKSkgdm9pZCAq
 ZHVtbXkpCiAgCQlwdGhyZWFkX3NpZ21hc2sgKFNJR19TRVRNQVNLLCAmc2lnbWFzaywgTlVMTCk7
 CiAgCX0KICAKQEAgLTgsMTEgKzEwLDExIEBACiArI2lmZGVmIF9fc3BhcmM2NF9fCiArCWlmIChw
 Y2FwX2RldmljZSA9PSBOVUxMKQogKwl7Ci0rCSAgICBFUlJPUiAoImRucyBwbHVnaW46IEludGVy
 ZmFjZSByZXF1aXJlZCIpOwotKwkgICAgcmV0dXJuIChOVUxMKTsKKysJCUVSUk9SICgiZG5zIHBs
 dWdpbjogSW50ZXJmYWNlIHJlcXVpcmVkIik7CisrCQlyZXR1cm4gKE5VTEwpOwogKwl9CiArI2Vu
 ZGlmCiArCiAgCS8qIFBhc3NpbmcgYHBjYXBfZGV2aWNlID09IE5VTEwnIGlzIG9rYXkgYW5kIHRo
 ZSBzYW1lIGFzIHBhc3NpZ24gImFueSIgKi8KLSAJREVCVUcgKCJDcmVhdGluZyBQQ0FQIG9iamVj
 dC4uIik7Ci0gCXBjYXBfb2JqID0gcGNhcF9vcGVuX2xpdmUgKHBjYXBfZGV2aWNlLAorIAlERUJV
 RyAoImRucyBwbHVnaW46IENyZWF0aW5nIFBDQVAgb2JqZWN0Li4iKTsKKyAJcGNhcF9vYmogPSBw
 Y2FwX29wZW5fbGl2ZSAoKHBjYXBfZGV2aWNlICE9IE5VTEwpID8gcGNhcF9kZXZpY2UgOiAiYW55
 IiwKSW5kZXg6IGZpbGVzL3BhdGNoLXNyY19fbmV0d29yay5jCj09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZpbGVz
 L3BhdGNoLXNyY19fbmV0d29yay5jCShyZXZpc2lvbiAzMTM5NzIpCisrKyBmaWxlcy9wYXRjaC1z
 cmNfX25ldHdvcmsuYwkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMCwwIEBACi0tLS0gc3JjL25l
 dHdvcmsuYy5vcmlnCTIwMTEtMDctMTQgMTU6NDE6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgc3Jj
 L25ldHdvcmsuYwkyMDExLTA3LTE0IDE1OjQxOjM3LjAwMDAwMDAwMCArMDIwMAotQEAgLTU4LDcg
 KzU4LDkgQEAKLSAjZW5kaWYKLSAKLSAjaWYgSEFWRV9MSUJHQ1JZUFQKLSsjcHJhZ21hIEdDQyBk
 aWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gIyBpbmNsdWRl
 IDxnY3J5cHQuaD4KLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHdhcm5pbmcgIi1XZGVwcmVjYXRl
 ZC1kZWNsYXJhdGlvbnMiCi0gR0NSWV9USFJFQURfT1BUSU9OX1BUSFJFQURfSU1QTDsKLSAjZW5k
 aWYKLSAKSW5kZXg6IGZpbGVzL3BhdGNoLXNyY19femZzX2FyYy5jCj09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZp
 bGVzL3BhdGNoLXNyY19femZzX2FyYy5jCShyZXZpc2lvbiAzMTM5NzIpCisrKyBmaWxlcy9wYXRj
 aC1zcmNfX3pmc19hcmMuYwkod29ya2luZyBjb3B5KQpAQCAtMSwyMzIgKzEsMjM3IEBACi0tLS0g
 c3JjL3pmc19hcmMuYy5vcmlnCTIwMTItMDQtMDIgMDg6MDQ6NTguMDAwMDAwMDAwICswMDAwCi0r
 Kysgc3JjL3pmc19hcmMuYwkyMDEyLTExLTI0IDE3OjU0OjIxLjcxNTEyOTA1NCArMDAwMAotQEAg
 LTI1LDExICsyNSw1NyBAQAotICNpbmNsdWRlICJjb21tb24uaCIKLSAjaW5jbHVkZSAicGx1Z2lu
 LmgiCitkaWZmIC0tZ2l0IGNvbmZpZ3VyZS5pbiBjb25maWd1cmUuaW4KK2luZGV4IDQ2NjA3ODcu
 LjU0ZmQ5ZDggMTAwNjQ0CistLS0gY29uZmlndXJlLmluCisrKysgY29uZmlndXJlLmluCitAQCAt
 NDg0Myw2ICs0ODQzLDEyIEBAIHRoZW4KKyAJcGx1Z2luX3VzZXJzPSJ5ZXMiCisgZmkKICAKLSsj
 aWYgIWRlZmluZWQoSEFWRV9MSUJLU1RBVCkgJiYgZGVmaW5lZChIQVZFX1NZU0NUTEJZTkFNRSkK
 LSsjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotKyNlbmRpZgorKyMgRnJlZUJTRAorK2lmIHRlc3Qg
 IngkaGF2ZV9zdHJ1Y3Rfa2luZm9fcHJvY19mcmVlYnNkIiA9ICJ4eWVzIgorK3RoZW4KKysJcGx1
 Z2luX3pmc19hcmM9InllcyIKKytmaQogKwotIC8qCisgbTRfZGl2ZXJ0X29uY2UoW0hFTFBfRU5B
 QkxFXSwgWworIGNvbGxlY3RkIHBsdWdpbnM6XSkKKyAKK2RpZmYgLS1naXQgc3JjL3pmc19hcmMu
 YyBzcmMvemZzX2FyYy5jCitpbmRleCBhYTkwMDE5Li4xN2U4NTEzIDEwMDY0NAorLS0tIHNyYy96
 ZnNfYXJjLmMKKysrKyBzcmMvemZzX2FyYy5jCitAQCAtMTksNiArMTksOCBAQAorICAqIEF1dGhv
 cnM6CisgICogICBBbnRob255IERld2h1cnN0IDxkZXdodXJzdCBhdCBnbWFpbD4KKyAgKiAgIEF1
 cmVsaWVuIFJvdWdlbW9udCA8YmVvcm4gYXQgZ2FuZGkubmV0PgorKyAqICAgQnJhZCBEYXZpcyA8
 YnJkIGF0IEZyZWVCU0Qub3JnPgorKyAqICAgV2lsbGlhbSBHcnp5Ym93c2tpIDx3aWxsaWFtODgg
 YXQgZ21haWw+CisgICoqLworIAorICNpbmNsdWRlICJjb2xsZWN0ZC5oIgorQEAgLTI5LDcgKzMx
 LDE0IEBACiAgICogR2xvYmFsIHZhcmlhYmxlcwogICAqLwotLXN0YXRpYyBrc3RhdF90ICprc3A7
 CisgCiArI2lmIGRlZmluZWQoSEFWRV9MSUJLU1RBVCkKKytzdGF0aWMga3N0YXRfdCAqa3NwOwog
 IGV4dGVybiBrc3RhdF9jdGxfdCAqa2M7Ci0rI2VuZGlmCisrI2VsaWYgZGVmaW5lZChIQVZFX1NZ
 U0NUTEJZTkFNRSkKKysgIHR5cGVkZWYgdm9pZCBrc3RhdF90OworKyMgaW5jbHVkZSA8c3lzL3R5
 cGVzLmg+CisrIyBpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisrI2VuZGlmIC8qIEhBVkVfU1lTQ1RM
 QllOQU1FICovCisgCisgc3RhdGljIHZvaWQgemFfc3VibWl0IChjb25zdCBjaGFyKiB0eXBlLCBj
 b25zdCBjaGFyKiB0eXBlX2luc3RhbmNlLCB2YWx1ZV90KiB2YWx1ZXMsIGludCB2YWx1ZXNfbGVu
 KQorIHsKK0BAIC01NywzNyArNjYsNTYgQEAgc3RhdGljIHZvaWQgemFfc3VibWl0X2dhdWdlIChj
 b25zdCBjaGFyKiB0eXBlLCBjb25zdCBjaGFyKiB0eXBlX2luc3RhbmNlLCBnYXVnZV8KKyBzdGF0
 aWMgaW50IHphX3JlYWRfZGVyaXZlIChrc3RhdF90ICprc3AsIGNvbnN0IGNoYXIgKmtzdGF0X3Zh
 bHVlLAorICAgICBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICp0eXBlX2luc3RhbmNlKQor
 IHsKKy0gIGxvbmcgbG9uZyB0bXA7CistICB2YWx1ZV90IHY7CistCistICB0bXAgPSBnZXRfa3N0
 YXRfdmFsdWUgKGtzcCwgKGNoYXIgKilrc3RhdF92YWx1ZSk7CistICBpZiAodG1wID09IC0xTEwp
 CistICB7CistICAgIEVSUk9SICgiemZzX2FyYyBwbHVnaW46IFJlYWRpbmcga3N0YXQgdmFsdWUg
 XCIlc1wiIGZhaWxlZC4iLCBrc3RhdF92YWx1ZSk7CistICAgIHJldHVybiAoLTEpOworLSAgfQor
 LQorLSAgdi5kZXJpdmUgPSAoZGVyaXZlX3QpIHRtcDsKKy0gIHphX3N1Ym1pdCAodHlwZSwgdHlw
 ZV9pbnN0YW5jZSwgLyogdmFsdWVzID0gKi8gJnYsIC8qIHZhbHVlc19udW0gPSAqLyAxKTsKKy0g
 IHJldHVybiAoMCk7CisrCWxvbmcgbG9uZyB0bXA7CisrCXZhbHVlX3QgdjsKICsKLSsvKgotKyAq
 IENvbnRleHQKLSsgKi8KLStzdHJ1Y3QgemFfY29udGV4dCB7CiArI2lmIGRlZmluZWQoSEFWRV9M
 SUJLU1RBVCkKLSsgICAga3N0YXRfdCAqa3NwOwotKyNlbmRpZgotK307Ci0rCi0rc3RhdGljIGlu
 dCB6YV9pbml0X2NvbnRleHQoc3RydWN0IHphX2NvbnRleHQgKmN0eCkKLSt7Ci0rI2lmIGRlZmlu
 ZWQoSEFWRV9MSUJLU1RBVCkKLSsJZ2V0X2tzdGF0ICgmY3R4LT5rc3AsICJ6ZnMiLCAwLCAiYXJj
 c3RhdHMiKTsKLSsJaWYgKGN0eC0+a3NwID09IE5VTEwpCisrCXRtcCA9IGdldF9rc3RhdF92YWx1
 ZSAoa3NwLCAoY2hhciAqKWtzdGF0X3ZhbHVlKTsKKysJaWYgKHRtcCA9PSAtMUxMKQogKwl7Ci0r
 CQlFUlJPUiAoInpmc19hcmMgcGx1Z2luOiBDYW5ub3QgZmluZCB6ZnM6MDphcmNzdGF0cyBrc3Rh
 dC4iKTsKKysJCUVSUk9SICgiemZzX2FyYyBwbHVnaW46IFJlYWRpbmcga3N0YXQgdmFsdWUgXCIl
 c1wiIGZhaWxlZC4iLCBrc3RhdF92YWx1ZSk7CiArCQlyZXR1cm4gKC0xKTsKICsJfQotKyNlbmRp
 ZgotKwlyZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGxvbmcgbG9uZyB6YV9nZXRfdmFsdWUoc3Ry
 dWN0IHphX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciogbmFtZSkKLSt7Ci0rI2lmIGRlZmluZWQo
 SEFWRV9MSUJLU1RBVCkKLSsJcmV0dXJuIGdldF9rc3RhdF92YWx1ZShjdHgtPmtzcCwgbmFtZSk7
 CiArI2VsaWYgZGVmaW5lZChIQVZFX1NZU0NUTEJZTkFNRSkKLSsJLy8ga3N0YXQgdmFsdWVzIGFy
 ZSBhdmFpbGFibGUgb24gRnJlZUJTRCB0aHJvdWdoIHN5c2N0bAotKwljaGFyIGZ1bGxuYW1lWzUx
 Ml07Ci0rCWxvbmcgbG9uZyByZXN1bHQgPSAwOwotKwlzaXplX3Qgc2l6ZSA9IHNpemVvZihyZXN1
 bHQpOwotKwlzc25wcmludGYoZnVsbG5hbWUsIHNpemVvZihmdWxsbmFtZSksICJrc3RhdC56ZnMu
 bWlzYy5hcmNzdGF0cy4lcyIsIG5hbWUpOwotKwlpZiAoc3lzY3RsYnluYW1lKGZ1bGxuYW1lLCAm
 cmVzdWx0LCAmc2l6ZSwgTlVMTCwgMCkgIT0gMCB8fCBzaXplICE9IHNpemVvZihyZXN1bHQpKQot
 Kwl7Ci0rCQlFUlJPUiAoInpmc19hcmMgcGx1Z2luOiBDYW5ub3QgZmluZCBzdGF0cyB1c2luZyBz
 eXNjdGwiKTsKLSsJCXJlc3VsdCA9IDA7CisrCXNpemVfdCBzaXplOworKwlzaXplID0gc2l6ZW9m
 KHRtcCk7CisrCWlmIChzeXNjdGxieW5hbWUoa3N0YXRfdmFsdWUsICZ0bXAsICZzaXplLCBOVUxM
 LCAwKSA8IDApIHsKKysJCUVSUk9SICgiemZzX2FyYyBwbHVnaW46IFJlYWRpbmcgc3lzY3RsIFwi
 JXNcIiBmYWlsZWQuIiwga3N0YXRfdmFsdWUpOworKwkJcmV0dXJuICgtMSk7CiArCX0KLSsJcmV0
 dXJuIHJlc3VsdDsKLSsjZW5kaWYKLSt9Ci0gCi0gc3RhdGljIHZvaWQgemFfc3VibWl0IChjb25z
 dCBjaGFyKiB0eXBlLCBjb25zdCBjaGFyKiB0eXBlX2luc3RhbmNlLCB2YWx1ZV90KiB2YWx1ZXMs
 IGludCB2YWx1ZXNfbGVuKQotIHsKLUBAIC01NCwxMyArMTAwLDEzIEBACi0gCXphX3N1Ym1pdCAo
 dHlwZSwgdHlwZV9pbnN0YW5jZSwgJnZ2LCAxKTsKKysjZW5kaWYgLyogSEFWRV9MSUJLU1RBVCAq
 LworKworKwl2LmRlcml2ZSA9IChkZXJpdmVfdCkgdG1wOworKwl6YV9zdWJtaXQgKHR5cGUsIHR5
 cGVfaW5zdGFuY2UsIC8qIHZhbHVlcyA9ICovICZ2LCAvKiB2YWx1ZXNfbnVtID0gKi8gMSk7Cisr
 CXJldHVybiAoMCk7CiAgfQogIAotLXN0YXRpYyBpbnQgemFfcmVhZF9kZXJpdmUgKGtzdGF0X3Qg
 KmtzcCwgY29uc3QgY2hhciAqa3N0YXRfdmFsdWUsCi0rc3RhdGljIGludCB6YV9yZWFkX2Rlcml2
 ZSAoc3RydWN0IHphX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqa3N0YXRfdmFsdWUsCisgc3Rh
 dGljIGludCB6YV9yZWFkX2dhdWdlIChrc3RhdF90ICprc3AsIGNvbnN0IGNoYXIgKmtzdGF0X3Zh
 bHVlLAogICAgICBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICp0eXBlX2luc3RhbmNlKQog
 IHsKLSAgIGxvbmcgbG9uZyB0bXA7Ci0gICB2YWx1ZV90IHY7Ci0gCi0tICB0bXAgPSBnZXRfa3N0
 YXRfdmFsdWUgKGtzcCwga3N0YXRfdmFsdWUpOwotKyAgdG1wID0gemFfZ2V0X3ZhbHVlIChjdHgs
 IChjaGFyICopa3N0YXRfdmFsdWUpOwotICAgaWYgKHRtcCA9PSAtMUxMKQotICAgewotICAgICBF
 UlJPUiAoInpmc19hcmMgcGx1Z2luOiBSZWFkaW5nIGtzdGF0IHZhbHVlIFwiJXNcIiBmYWlsZWQu
 Iiwga3N0YXRfdmFsdWUpOwotQEAgLTY5LDE1ICsxMTUsMTYgQEAKLSAKLSAgIHYuZGVyaXZlID0g
 KGRlcml2ZV90KSB0bXA7Ci0gICB6YV9zdWJtaXQgKHR5cGUsIHR5cGVfaW5zdGFuY2UsIC8qIHZh
 bHVlcyA9ICovICZ2LCAvKiB2YWx1ZXNfbnVtID0gKi8gMSk7Ci0rICByZXR1cm4gKDApOworLSAg
 bG9uZyBsb25nIHRtcDsKKy0gIHZhbHVlX3QgdjsKKy0KKy0gIHRtcCA9IGdldF9rc3RhdF92YWx1
 ZSAoa3NwLCAoY2hhciAqKWtzdGF0X3ZhbHVlKTsKKy0gIGlmICh0bXAgPT0gLTFMTCkKKy0gIHsK
 Ky0gICAgRVJST1IgKCJ6ZnNfYXJjIHBsdWdpbjogUmVhZGluZyBrc3RhdCB2YWx1ZSBcIiVzXCIg
 ZmFpbGVkLiIsIGtzdGF0X3ZhbHVlKTsKKy0gICAgcmV0dXJuICgtMSk7CistICB9CistCistICB2
 LmdhdWdlID0gKGdhdWdlX3QpIHRtcDsKKy0gIHphX3N1Ym1pdCAodHlwZSwgdHlwZV9pbnN0YW5j
 ZSwgLyogdmFsdWVzID0gKi8gJnYsIC8qIHZhbHVlc19udW0gPSAqLyAxKTsKKy0gIHJldHVybiAo
 MCk7CisrCWxvbmcgbG9uZyB0bXA7CisrCXZhbHVlX3QgdjsKKysKKysjaWYgZGVmaW5lZChIQVZF
 X0xJQktTVEFUKQorKwl0bXAgPSBnZXRfa3N0YXRfdmFsdWUgKGtzcCwgKGNoYXIgKilrc3RhdF92
 YWx1ZSk7CisrCWlmICh0bXAgPT0gLTFMTCkKKysJeworKwkJRVJST1IgKCJ6ZnNfYXJjIHBsdWdp
 bjogUmVhZGluZyBrc3RhdCB2YWx1ZSBcIiVzXCIgZmFpbGVkLiIsIGtzdGF0X3ZhbHVlKTsKKysJ
 CXJldHVybiAoLTEpOworKwl9CisrCisrI2VsaWYgZGVmaW5lZChIQVZFX1NZU0NUTEJZTkFNRSkK
 KysJc2l6ZV90IHNpemU7CisrCXNpemUgPSBzaXplb2YodG1wKTsKKysJaWYgKHN5c2N0bGJ5bmFt
 ZShrc3RhdF92YWx1ZSwgJnRtcCwgJnNpemUsIE5VTEwsIDApIDwgMCkgeworKwkJRVJST1IgKCJ6
 ZnNfYXJjIHBsdWdpbjogUmVhZGluZyBzeXNjdGwgXCIlc1wiIGZhaWxlZC4iLCBrc3RhdF92YWx1
 ZSk7CisrCQlyZXR1cm4gKC0xKTsKKysJfQorKyNlbmRpZiAvKiBIQVZFX0xJQktTVEFUICovCisr
 CisrCXYuZ2F1Z2UgPSAoZ2F1Z2VfdCkgdG1wOworKwl6YV9zdWJtaXQgKHR5cGUsIHR5cGVfaW5z
 dGFuY2UsIC8qIHZhbHVlcyA9ICovICZ2LCAvKiB2YWx1ZXNfbnVtID0gKi8gMSk7CisrCXJldHVy
 biAoMCk7CiAgfQogIAotLXN0YXRpYyBpbnQgemFfcmVhZF9nYXVnZSAoa3N0YXRfdCAqa3NwLCBj
 b25zdCBjaGFyICprc3RhdF92YWx1ZSwKLStzdGF0aWMgaW50IHphX3JlYWRfZ2F1Z2UgKHN0cnVj
 dCB6YV9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmtzdGF0X3ZhbHVlLAotICAgICBjb25zdCBj
 aGFyICp0eXBlLCBjb25zdCBjaGFyICp0eXBlX2luc3RhbmNlKQotIHsKLSAgIGxvbmcgbG9uZyB0
 bXA7Ci0gICB2YWx1ZV90IHY7Ci0gCi0tICB0bXAgPSBnZXRfa3N0YXRfdmFsdWUgKGtzcCwga3N0
 YXRfdmFsdWUpOwotKyAgdG1wID0gemFfZ2V0X3ZhbHVlIChjdHgsIChjaGFyICopa3N0YXRfdmFs
 dWUpOwotICAgaWYgKHRtcCA9PSAtMUxMKQotICAgewotICAgICBFUlJPUiAoInpmc19hcmMgcGx1
 Z2luOiBSZWFkaW5nIGtzdGF0IHZhbHVlIFwiJXNcIiBmYWlsZWQuIiwga3N0YXRfdmFsdWUpOwot
 QEAgLTg2LDE4ICsxMzMsMTQgQEAKLSAKLSAgIHYuZ2F1Z2UgPSAoZ2F1Z2VfdCkgdG1wOwotICAg
 emFfc3VibWl0ICh0eXBlLCB0eXBlX2luc3RhbmNlLCAvKiB2YWx1ZXMgPSAqLyAmdiwgLyogdmFs
 dWVzX251bSA9ICovIDEpOwotKyAgcmV0dXJuICgwKTsKKyBzdGF0aWMgdm9pZCB6YV9zdWJtaXRf
 cmF0aW8gKGNvbnN0IGNoYXIqIHR5cGVfaW5zdGFuY2UsIGdhdWdlX3QgaGl0cywgZ2F1Z2VfdCBt
 aXNzZXMpCitAQCAtMTA1LDExICsxMzMsNjcgQEAgc3RhdGljIHZvaWQgemFfc3VibWl0X3JhdGlv
 IChjb25zdCBjaGFyKiB0eXBlX2luc3RhbmNlLCBnYXVnZV90IGhpdHMsIGdhdWdlX3QgbWkKKyAJ
 emFfc3VibWl0X2dhdWdlICgiY2FjaGVfcmF0aW8iLCB0eXBlX2luc3RhbmNlLCByYXRpbyk7CiAg
 fQogIAotLXN0YXRpYyB2b2lkIHphX3N1Ym1pdF9yYXRpbyAoY29uc3QgY2hhciogdHlwZV9pbnN0
 YW5jZSwgZ2F1Z2VfdCBoaXRzLCBnYXVnZV90IG1pc3NlcykKLStzdGF0aWMgdm9pZCB6YV9zdWJt
 aXRfcmF0aW8gKGNvbnN0IGNoYXIqIHR5cGVfaW5zdGFuY2UsIGxvbmcgbG9uZyBoaXRzLCBsb25n
 IGxvbmcgbWlzc2VzKQotIHsKLSAJZ2F1Z2VfdCByYXRpbyA9IE5BTjsKLSAKLS0JaWYgKCFpc2Zp
 bml0ZSAoaGl0cykgfHwgKGhpdHMgPCAwLjApKQotLQkJaGl0cyA9IDAuMDsKLS0JaWYgKCFpc2Zp
 bml0ZSAobWlzc2VzKSB8fCAobWlzc2VzIDwgMC4wKSkKLS0JCW1pc3NlcyA9IDAuMDsKLS0KLS0J
 aWYgKChoaXRzICE9IDAuMCkgfHwgKG1pc3NlcyAhPSAwLjApKQotKwlpZiAoKGhpdHMgPiAwKSB8
 fCAobWlzc2VzID4gMCkpCi0gCQlyYXRpbyA9IGhpdHMgLyAoaGl0cyArIG1pc3Nlcyk7Ci0gCi0g
 CXphX3N1Ym1pdF9nYXVnZSAoImNhY2hlX3JhdGlvIiwgdHlwZV9pbnN0YW5jZSwgcmF0aW8pOwot
 QEAgLTEwNSw1NiArMTQ4LDU1IEBACi0gCi0gc3RhdGljIGludCB6YV9yZWFkICh2b2lkKQotIHsK
 LS0JZ2F1Z2VfdCAgYXJjX2hpdHMsIGFyY19taXNzZXMsIGwyX2hpdHMsIGwyX21pc3NlczsKLSsJ
 bG9uZyBsb25nICBhcmNfaGl0cywgYXJjX21pc3NlcywgbDJfaGl0cywgbDJfbWlzc2VzOwotIAl2
 YWx1ZV90ICBsMl9pb1syXTsKLSsJc3RydWN0IHphX2NvbnRleHQgY3R4OwotIAotLQlnZXRfa3N0
 YXQgKCZrc3AsICJ6ZnMiLCAwLCAiYXJjc3RhdHMiKTsKLS0JaWYgKGtzcCA9PSBOVUxMKQotKwlp
 ZiAoemFfaW5pdF9jb250ZXh0ICgmY3R4KSA8IDApCi0gCXsKLS0JCUVSUk9SICgiemZzX2FyYyBw
 bHVnaW46IENhbm5vdCBmaW5kIHpmczowOmFyY3N0YXRzIGtzdGF0LiIpOwotIAkJcmV0dXJuICgt
 MSk7Ci0gCX0KLSAKLSAJLyogU2l6ZXMgKi8KLS0JemFfcmVhZF9nYXVnZSAoa3NwLCAic2l6ZSIs
 ICAgICJjYWNoZV9zaXplIiwgImFyYyIpOwotLQl6YV9yZWFkX2dhdWdlIChrc3AsICJsMl9zaXpl
 IiwgImNhY2hlX3NpemUiLCAiTDIiKTsKLSsJemFfcmVhZF9nYXVnZSAoJmN0eCwgInNpemUiLCAg
 ICAiY2FjaGVfc2l6ZSIsICJhcmMiKTsKLSsJemFfcmVhZF9nYXVnZSAoJmN0eCwgImwyX3NpemUi
 LCAiY2FjaGVfc2l6ZSIsICJMMiIpOwotIAotLSAgICAgICAgLyogT3BlcmF0aW9ucyAqLwotLQl6
 YV9yZWFkX2Rlcml2ZSAoa3NwLCAiYWxsb2NhdGVkIiwiY2FjaGVfb3BlcmF0aW9uIiwgImFsbG9j
 YXRlZCIpOwotLQl6YV9yZWFkX2Rlcml2ZSAoa3NwLCAiZGVsZXRlZCIsICAiY2FjaGVfb3BlcmF0
 aW9uIiwgImRlbGV0ZWQiKTsKLS0JemFfcmVhZF9kZXJpdmUgKGtzcCwgInN0b2xlbiIsICAgImNh
 Y2hlX29wZXJhdGlvbiIsICJzdG9sZW4iKTsKLS0KLS0gICAgICAgIC8qIElzc3VlIGluZGljYXRv
 cnMgKi8KLS0gICAgICAgIHphX3JlYWRfZGVyaXZlIChrc3AsICJtdXRleF9taXNzIiwgIm11dGV4
 X29wZXJhdGlvbiIsICJtaXNzIik7Ci0tCXphX3JlYWRfZGVyaXZlIChrc3AsICJoYXNoX2NvbGxp
 c2lvbnMiLCAiaGFzaF9jb2xsaXNpb25zIiwgIiIpOworLXN0YXRpYyBpbnQgemFfcmVhZCAodm9p
 ZCkKKysjaWYgZGVmaW5lZChIQVZFX1NZU0NUTEJZTkFNRSkKKytzdGF0aWMgaW50IHphX3JlYWRf
 ZnJlZWJzZCAodm9pZCkKKyt7CisrCS8vIFNpemVzCisrCXphX3JlYWRfZ2F1Z2UgKE5VTEwsICJr
 c3RhdC56ZnMubWlzYy5hcmNzdGF0cy5zaXplIiwgImNhY2hlX3NpemUiLCAiYXJjIik7CisrCXph
 X3JlYWRfZ2F1Z2UgKE5VTEwsICJrc3RhdC56ZnMubWlzYy5hcmNzdGF0cy5sMl9zaXplIiwgImNh
 Y2hlX3NpemUiLCAiTDIiKTsKKysKICsJLyogT3BlcmF0aW9ucyAqLwotKwl6YV9yZWFkX2Rlcml2
 ZSAoJmN0eCwgImFsbG9jYXRlZCIsImNhY2hlX29wZXJhdGlvbiIsICJhbGxvY2F0ZWQiKTsKLSsJ
 emFfcmVhZF9kZXJpdmUgKCZjdHgsICJkZWxldGVkIiwgICJjYWNoZV9vcGVyYXRpb24iLCAiZGVs
 ZXRlZCIpOwotKwl6YV9yZWFkX2Rlcml2ZSAoJmN0eCwgInN0b2xlbiIsICAgImNhY2hlX29wZXJh
 dGlvbiIsICJzdG9sZW4iKTsKKysJemFfcmVhZF9kZXJpdmUgKE5VTEwsICJrc3RhdC56ZnMubWlz
 Yy5hcmNzdGF0cy5hbGxvY2F0ZWQiLCAiY2FjaGVfb3BlcmF0aW9uIiwgImFsbG9jYXRlZCIpOwor
 Kwl6YV9yZWFkX2Rlcml2ZSAoTlVMTCwgImtzdGF0Lnpmcy5taXNjLmFyY3N0YXRzLmRlbGV0ZWQi
 LCAgICJjYWNoZV9vcGVyYXRpb24iLCAiZGVsZXRlZCIpOworKwl6YV9yZWFkX2Rlcml2ZSAoTlVM
 TCwgImtzdGF0Lnpmcy5taXNjLmFyY3N0YXRzLnN0b2xlbiIsICAgICJjYWNoZV9vcGVyYXRpb24i
 LCAic3RvbGVuIik7CiArCiArCS8qIElzc3VlIGluZGljYXRvcnMgKi8KLSsJemFfcmVhZF9kZXJp
 dmUgKCZjdHgsICJtdXRleF9taXNzIiwgIm11dGV4X29wZXJhdGlvbiIsICJtaXNzIik7Ci0rCXph
 X3JlYWRfZGVyaXZlICgmY3R4LCAiaGFzaF9jb2xsaXNpb25zIiwgImhhc2hfY29sbGlzaW9ucyIs
 ICIiKTsKLSAJCi0tICAgICAgICAvKiBFdmljdGlvbnMgKi8KLS0JemFfcmVhZF9kZXJpdmUgKGtz
 cCwgImV2aWN0X2wyX2NhY2hlZCIsICAgICAiY2FjaGVfZXZpY3Rpb24iLCAiY2FjaGVkIik7Ci0t
 CXphX3JlYWRfZGVyaXZlIChrc3AsICJldmljdF9sMl9lbGlnaWJsZSIsICAgImNhY2hlX2V2aWN0
 aW9uIiwgImVsaWdpYmxlIik7Ci0tCXphX3JlYWRfZGVyaXZlIChrc3AsICJldmljdF9sMl9pbmVs
 aWdpYmxlIiwgImNhY2hlX2V2aWN0aW9uIiwgImluZWxpZ2libGUiKTsKKysJemFfcmVhZF9kZXJp
 dmUgKE5VTEwsICJrc3RhdC56ZnMubWlzYy5hcmNzdGF0cy5tdXRleF9taXNzIiwgICAgICAibXV0
 ZXhfb3BlcmF0aW9uIiwgIm1pc3MiKTsKKysJemFfcmVhZF9kZXJpdmUgKE5VTEwsICJrc3RhdC56
 ZnMubWlzYy5hcmNzdGF0cy5oYXNoX2NvbGxpc2lvbnMiLCAiaGFzaF9jb2xsaXNpb25zIiwgIiIp
 OworKwogKwkvKiBFdmljdGlvbnMgKi8KLSsJemFfcmVhZF9kZXJpdmUgKCZjdHgsICJldmljdF9s
 Ml9jYWNoZWQiLCAgICAgImNhY2hlX2V2aWN0aW9uIiwgImNhY2hlZCIpOwotKwl6YV9yZWFkX2Rl
 cml2ZSAoJmN0eCwgImV2aWN0X2wyX2VsaWdpYmxlIiwgICAiY2FjaGVfZXZpY3Rpb24iLCAiZWxp
 Z2libGUiKTsKLSsJemFfcmVhZF9kZXJpdmUgKCZjdHgsICJldmljdF9sMl9pbmVsaWdpYmxlIiwg
 ImNhY2hlX2V2aWN0aW9uIiwgImluZWxpZ2libGUiKTsKKysJemFfcmVhZF9kZXJpdmUgKE5VTEws
 ICJrc3RhdC56ZnMubWlzYy5hcmNzdGF0cy5ldmljdF9sMl9jYWNoZWQiLCAgICAgImNhY2hlX2V2
 aWN0aW9uIiwgImNhY2hlZCIpOworKwl6YV9yZWFkX2Rlcml2ZSAoTlVMTCwgImtzdGF0Lnpmcy5t
 aXNjLmFyY3N0YXRzLmV2aWN0X2wyX2VsaWdpYmxlIiwgICAiY2FjaGVfZXZpY3Rpb24iLCAiZWxp
 Z2libGUiKTsKKysJemFfcmVhZF9kZXJpdmUgKE5VTEwsICJrc3RhdC56ZnMubWlzYy5hcmNzdGF0
 cy5ldmljdF9sMl9pbmVsaWdpYmxlIiwgImNhY2hlX2V2aWN0aW9uIiwgImluZWxpZ2libGUiKTsK
 KysKKysJLyogSGl0cyAvIG1pc3NlcyAqLworKwl6YV9yZWFkX2Rlcml2ZSAoTlVMTCwgImtzdGF0
 Lnpmcy5taXNjLmFyY3N0YXRzLmRlbWFuZF9kYXRhX2hpdHMiLCAgICAgICAgICJjYWNoZV9yZXN1
 bHQiLCAiZGVtYW5kX2RhdGEtaGl0Iik7CisrCXphX3JlYWRfZGVyaXZlIChOVUxMLCAia3N0YXQu
 emZzLm1pc2MuYXJjc3RhdHMuZGVtYW5kX21ldGFkYXRhX2hpdHMiLCAgICAgImNhY2hlX3Jlc3Vs
 dCIsICJkZW1hbmRfbWV0YWRhdGEtaGl0Iik7CisrCXphX3JlYWRfZGVyaXZlIChOVUxMLCAia3N0
 YXQuemZzLm1pc2MuYXJjc3RhdHMucHJlZmV0Y2hfZGF0YV9oaXRzIiwgICAgICAgImNhY2hlX3Jl
 c3VsdCIsICJwcmVmZXRjaF9kYXRhLWhpdCIpOworKwl6YV9yZWFkX2Rlcml2ZSAoTlVMTCwgImtz
 dGF0Lnpmcy5taXNjLmFyY3N0YXRzLnByZWZldGNoX21ldGFkYXRhX2hpdHMiLCAgICJjYWNoZV9y
 ZXN1bHQiLCAicHJlZmV0Y2hfbWV0YWRhdGEtaGl0Iik7CisrCXphX3JlYWRfZGVyaXZlIChOVUxM
 LCAia3N0YXQuemZzLm1pc2MuYXJjc3RhdHMuZGVtYW5kX2RhdGFfbWlzc2VzIiwgICAgICAgImNh
 Y2hlX3Jlc3VsdCIsICJkZW1hbmRfZGF0YS1taXNzIik7CisrCXphX3JlYWRfZGVyaXZlIChOVUxM
 LCAia3N0YXQuemZzLm1pc2MuYXJjc3RhdHMuZGVtYW5kX21ldGFkYXRhX21pc3NlcyIsICAgImNh
 Y2hlX3Jlc3VsdCIsICJkZW1hbmRfbWV0YWRhdGEtbWlzcyIpOworKwl6YV9yZWFkX2Rlcml2ZSAo
 TlVMTCwgImtzdGF0Lnpmcy5taXNjLmFyY3N0YXRzLnByZWZldGNoX2RhdGFfbWlzc2VzIiwgICAg
 ICJjYWNoZV9yZXN1bHQiLCAicHJlZmV0Y2hfZGF0YS1taXNzIik7CisrCXphX3JlYWRfZGVyaXZl
 IChOVUxMLCAia3N0YXQuemZzLm1pc2MuYXJjc3RhdHMucHJlZmV0Y2hfbWV0YWRhdGFfbWlzc2Vz
 IiwgImNhY2hlX3Jlc3VsdCIsICJwcmVmZXRjaF9tZXRhZGF0YS1taXNzIik7CisrCisrCS8qIFJh
 dGlvcyAqLworKwlnYXVnZV90IGFyY19oaXRzOworKwlnYXVnZV90IGFyY19taXNzZXM7CisrCWdh
 dWdlX3QgbDJfaGl0czsKKysJZ2F1Z2VfdCBsMl9taXNzZXM7CisrCXZhbHVlX3QgIGwyX2lvWzJd
 OworKworKwlzaXplX3Qgc2l6ZTsKKysJc2l6ZSA9IHNpemVvZihhcmNfaGl0cyk7CisrCXN5c2N0
 bGJ5bmFtZSgia3N0YXQuemZzLm1pc2MuYXJjc3RhdHMuaGl0cyIsICZhcmNfaGl0cywgJnNpemUs
 IE5VTEwsIDApOworKwlzeXNjdGxieW5hbWUoImtzdGF0Lnpmcy5taXNjLmFyY3N0YXRzLm1pc3Nl
 cyIsICZhcmNfbWlzc2VzLCAmc2l6ZSwgTlVMTCwgMCk7CisrCXN5c2N0bGJ5bmFtZSgia3N0YXQu
 emZzLm1pc2MuYXJjc3RhdHMubDJfaGl0cyIsICZsMl9oaXRzLCAmc2l6ZSwgTlVMTCwgMCk7Cisr
 CXN5c2N0bGJ5bmFtZSgia3N0YXQuemZzLm1pc2MuYXJjc3RhdHMubDJfbWlzc2VzIiwgJmwyX21p
 c3NlcywgJnNpemUsIE5VTEwsIDApOworKworKwl6YV9zdWJtaXRfcmF0aW8gKCJhcmMiLCBhcmNf
 aGl0cywgYXJjX21pc3Nlcyk7CisrCXphX3N1Ym1pdF9yYXRpbyAoIkwyIiwgbDJfaGl0cywgbDJf
 bWlzc2VzKTsKKysKKysJLyogSS9PICovCisrCXN5c2N0bGJ5bmFtZSgia3N0YXQuemZzLm1pc2Mu
 YXJjc3RhdHMubDJfcmVhZF9ieXRlcyIsICZsMl9pb1swXS5kZXJpdmUsICZzaXplLCBOVUxMLCAw
 KTsKKysJc3lzY3RsYnluYW1lKCJrc3RhdC56ZnMubWlzYy5hcmNzdGF0cy5sMl93cml0ZV9ieXRl
 cyIsICZsMl9pb1sxXS5kZXJpdmUsICZzaXplLCBOVUxMLCAwKTsKKysKKysJemFfc3VibWl0ICgi
 aW9fb2N0ZXRzIiwgIkwyIiwgbDJfaW8sIC8qIG51bSB2YWx1ZXMgPSAqLyAyKTsKKysKKysJcmV0
 dXJuICgwKTsKKyt9CisrI2VsaWYgZGVmaW5lZChIQVZFX0xJQktTVEFUKQorK3N0YXRpYyBpbnQg
 emFfcmVhZF9zb2xhcmlzICh2b2lkKQorIHsKKyAJZ2F1Z2VfdCAgYXJjX2hpdHMsIGFyY19taXNz
 ZXMsIGwyX2hpdHMsIGwyX21pc3NlczsKKyAJdmFsdWVfdCAgbDJfaW9bMl07CistCWtzdGF0X3QJ
 ICprc3AJPSBOVUxMOwogIAotIAkvKiBIaXRzIC8gbWlzc2VzICovCi0tCXphX3JlYWRfZGVyaXZl
 IChrc3AsICJkZW1hbmRfZGF0YV9oaXRzIiwgICAgICAgICAiY2FjaGVfcmVzdWx0IiwgImRlbWFu
 ZF9kYXRhLWhpdCIpOwotLQl6YV9yZWFkX2Rlcml2ZSAoa3NwLCAiZGVtYW5kX21ldGFkYXRhX2hp
 dHMiLCAgICAgImNhY2hlX3Jlc3VsdCIsICJkZW1hbmRfbWV0YWRhdGEtaGl0Iik7Ci0tCXphX3Jl
 YWRfZGVyaXZlIChrc3AsICJwcmVmZXRjaF9kYXRhX2hpdHMiLCAgICAgICAiY2FjaGVfcmVzdWx0
 IiwgInByZWZldGNoX2RhdGEtaGl0Iik7Ci0tCXphX3JlYWRfZGVyaXZlIChrc3AsICJwcmVmZXRj
 aF9tZXRhZGF0YV9oaXRzIiwgICAiY2FjaGVfcmVzdWx0IiwgInByZWZldGNoX21ldGFkYXRhLWhp
 dCIpOwotLQl6YV9yZWFkX2Rlcml2ZSAoa3NwLCAiZGVtYW5kX2RhdGFfbWlzc2VzIiwgICAgICAg
 ImNhY2hlX3Jlc3VsdCIsICJkZW1hbmRfZGF0YS1taXNzIik7Ci0tCXphX3JlYWRfZGVyaXZlIChr
 c3AsICJkZW1hbmRfbWV0YWRhdGFfbWlzc2VzIiwgICAiY2FjaGVfcmVzdWx0IiwgImRlbWFuZF9t
 ZXRhZGF0YS1taXNzIik7Ci0tCXphX3JlYWRfZGVyaXZlIChrc3AsICJwcmVmZXRjaF9kYXRhX21p
 c3NlcyIsICAgICAiY2FjaGVfcmVzdWx0IiwgInByZWZldGNoX2RhdGEtbWlzcyIpOwotLQl6YV9y
 ZWFkX2Rlcml2ZSAoa3NwLCAicHJlZmV0Y2hfbWV0YWRhdGFfbWlzc2VzIiwgImNhY2hlX3Jlc3Vs
 dCIsICJwcmVmZXRjaF9tZXRhZGF0YS1taXNzIik7Ci0rCXphX3JlYWRfZGVyaXZlICgmY3R4LCAi
 ZGVtYW5kX2RhdGFfaGl0cyIsICAgICAgICAgImNhY2hlX3Jlc3VsdCIsICJkZW1hbmRfZGF0YS1o
 aXQiKTsKLSsJemFfcmVhZF9kZXJpdmUgKCZjdHgsICJkZW1hbmRfbWV0YWRhdGFfaGl0cyIsICAg
 ICAiY2FjaGVfcmVzdWx0IiwgImRlbWFuZF9tZXRhZGF0YS1oaXQiKTsKLSsJemFfcmVhZF9kZXJp
 dmUgKCZjdHgsICJwcmVmZXRjaF9kYXRhX2hpdHMiLCAgICAgICAiY2FjaGVfcmVzdWx0IiwgInBy
 ZWZldGNoX2RhdGEtaGl0Iik7Ci0rCXphX3JlYWRfZGVyaXZlICgmY3R4LCAicHJlZmV0Y2hfbWV0
 YWRhdGFfaGl0cyIsICAgImNhY2hlX3Jlc3VsdCIsICJwcmVmZXRjaF9tZXRhZGF0YS1oaXQiKTsK
 LSsJemFfcmVhZF9kZXJpdmUgKCZjdHgsICJkZW1hbmRfZGF0YV9taXNzZXMiLCAgICAgICAiY2Fj
 aGVfcmVzdWx0IiwgImRlbWFuZF9kYXRhLW1pc3MiKTsKLSsJemFfcmVhZF9kZXJpdmUgKCZjdHgs
 ICJkZW1hbmRfbWV0YWRhdGFfbWlzc2VzIiwgICAiY2FjaGVfcmVzdWx0IiwgImRlbWFuZF9tZXRh
 ZGF0YS1taXNzIik7Ci0rCXphX3JlYWRfZGVyaXZlICgmY3R4LCAicHJlZmV0Y2hfZGF0YV9taXNz
 ZXMiLCAgICAgImNhY2hlX3Jlc3VsdCIsICJwcmVmZXRjaF9kYXRhLW1pc3MiKTsKLSsJemFfcmVh
 ZF9kZXJpdmUgKCZjdHgsICJwcmVmZXRjaF9tZXRhZGF0YV9taXNzZXMiLCAiY2FjaGVfcmVzdWx0
 IiwgInByZWZldGNoX21ldGFkYXRhLW1pc3MiKTsKKyAJZ2V0X2tzdGF0ICgma3NwLCAiemZzIiwg
 MCwgImFyY3N0YXRzIik7CisgCWlmIChrc3AgPT0gTlVMTCkKK0BAIC0xNjMsMTUgKzI0NywyMCBA
 QCBzdGF0aWMgaW50IHphX3JlYWQgKHZvaWQpCiAgCi0gCS8qIFJhdGlvcyAqLwotLQlhcmNfaGl0
 cyAgID0gKGdhdWdlX3QpIGdldF9rc3RhdF92YWx1ZShrc3AsICJoaXRzIik7Ci0tCWFyY19taXNz
 ZXMgPSAoZ2F1Z2VfdCkgZ2V0X2tzdGF0X3ZhbHVlKGtzcCwgIm1pc3NlcyIpOwotLQlsMl9oaXRz
 ICAgID0gKGdhdWdlX3QpIGdldF9rc3RhdF92YWx1ZShrc3AsICJsMl9oaXRzIik7Ci0tCWwyX21p
 c3NlcyAgPSAoZ2F1Z2VfdCkgZ2V0X2tzdGF0X3ZhbHVlKGtzcCwgImwyX21pc3NlcyIpOwotKwlh
 cmNfaGl0cyAgID0gemFfZ2V0X3ZhbHVlICgmY3R4LCAiaGl0cyIpOwotKwlhcmNfbWlzc2VzID0g
 emFfZ2V0X3ZhbHVlICgmY3R4LCAibWlzc2VzIik7Ci0rCWwyX2hpdHMgICAgPSB6YV9nZXRfdmFs
 dWUgKCZjdHgsICJsMl9oaXRzIik7Ci0rCWwyX21pc3NlcyAgPSB6YV9nZXRfdmFsdWUgKCZjdHgs
 ICJsMl9taXNzZXMiKTsKKyAJcmV0dXJuICgwKTsKKyB9IC8qIGludCB6YV9yZWFkICovCisrI2Vu
 ZGlmCiAgCi0gCXphX3N1Ym1pdF9yYXRpbyAoImFyYyIsIGFyY19oaXRzLCBhcmNfbWlzc2VzKTsK
 LSAJemFfc3VibWl0X3JhdGlvICgiTDIiLCBsMl9oaXRzLCBsMl9taXNzZXMpOwotIAotIAkvKiBJ
 L08gKi8KLS0JbDJfaW9bMF0uZGVyaXZlID0gZ2V0X2tzdGF0X3ZhbHVlKGtzcCwgImwyX3JlYWRf
 Ynl0ZXMiKTsKLS0JbDJfaW9bMV0uZGVyaXZlID0gZ2V0X2tzdGF0X3ZhbHVlKGtzcCwgImwyX3dy
 aXRlX2J5dGVzIik7Ci0rCWwyX2lvWzBdLmRlcml2ZSA9IHphX2dldF92YWx1ZSAoJmN0eCwgImwy
 X3JlYWRfYnl0ZXMiKTsKLSsJbDJfaW9bMV0uZGVyaXZlID0gemFfZ2V0X3ZhbHVlICgmY3R4LCAi
 bDJfd3JpdGVfYnl0ZXMiKTsKLSAKLSAJemFfc3VibWl0ICgiaW9fb2N0ZXRzIiwgIkwyIiwgbDJf
 aW8sIC8qIG51bSB2YWx1ZXMgPSAqLyAyKTsKLSAKLUBAIC0xNjMsMTQgKzIwNSwyMyBAQAotIAog
 IHN0YXRpYyBpbnQgemFfaW5pdCAodm9pZCkgLyoge3t7ICovCiAgewotLQlrc3AgPSBOVUxMOwot
 LQogKyNpZiBkZWZpbmVkKEhBVkVfTElCS1NUQVQpCisrCWtzcCA9IE5VTEw7CisrCiAgCS8qIGtz
 dGF0cyBjaGFpbiBhbHJlYWR5IG9wZW5lZCBieSB1cGRhdGVfa3N0YXQgKHVzaW5nICprYyksIHZl
 cmlmeSBldmVyeXRoaW5nIHdlbnQgZmluZS4gKi8KICAJaWYgKGtjID09IE5VTEwpCiAgCXsKICAJ
 CUVSUk9SICgiemZzX2FyYyBwbHVnaW46IGtzdGF0IGNoYWluIGNvbnRyb2wgc3RydWN0dXJlIG5v
 dCBhdmFpbGFibGUuIik7CiAgCQlyZXR1cm4gKC0xKTsKICAJfQotKyNlbGlmIGRlZmluZWQoSEFW
 RV9TWVNDVExCWU5BTUUpCi0rCS8qIG1ha2Ugc3VyZSBBUkMgaXMgYXZhaWxhYmxlIChhcmNfc2l6
 ZSBpcyBub3QgbnVsbCkgKi8KLSsJdW5zaWduZWQgbG9uZyBsb25nIGFyY19zaXplOwotKwlzaXpl
 X3Qgc2l6ZSA9IHNpemVvZihhcmNfc2l6ZSk7Ci0rCWlmIChzeXNjdGxieW5hbWUoImtzdGF0Lnpm
 cy5taXNjLmFyY3N0YXRzLnNpemUiLCAmYXJjX3NpemUsICZzaXplLCBOVUxMLCAwKSAhPSAwIHx8
 IGFyY19zaXplID09IDApCi0rCXsKLSsJCUVSUk9SICgiemZzX2FyYyBwbHVnaW46IGNvdWxkIG5v
 dCBnZXQgQVJDIHNpemUgdXNpbmcgc3lzY3RsLCBpcyBBUkMgZW5hYmxlZD8iKTsKLSsJCXJldHVy
 biAoLTEpOwotKwl9Ci0rI2VuZGlmCisrI2VuZGlmIC8qIEhBVkVfTElCS1NUQVQgKi8KICAKICAJ
 cmV0dXJuICgwKTsKICB9IC8qIH19fSBpbnQgemFfaW5pdCAqLworQEAgLTE3OSw3ICsyNjgsMTYg
 QEAgc3RhdGljIGludCB6YV9pbml0ICh2b2lkKSAvKiB7e3sgKi8KKyB2b2lkIG1vZHVsZV9yZWdp
 c3RlciAodm9pZCkKKyB7CisgCXBsdWdpbl9yZWdpc3Rlcl9pbml0ICgiemZzX2FyYyIsIHphX2lu
 aXQpOworLQlwbHVnaW5fcmVnaXN0ZXJfcmVhZCAoInpmc19hcmMiLCB6YV9yZWFkKTsKKysKKysj
 aWYgZGVmaW5lZChIQVZFX0xJQktTVEFUKQorKwlwbHVnaW5fcmVnaXN0ZXJfcmVhZCAoInpmc19h
 cmMiLCB6YV9yZWFkX3NvbGFyaXMpOworKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNDVExCWU5BTUUp
 CisrCXBsdWdpbl9yZWdpc3Rlcl9yZWFkICgiemZzX2FyYyIsIHphX3JlYWRfZnJlZWJzZCk7Cisr
 I2Vsc2UKKysJRVJST1IgKCJVbmFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoIE9TIHdlIGFyZSBvbiIp
 OworKwlyZXR1cm4gKC0xKTsKKysjZW5kaWYgLyogSEFWRV9TWVNDVExCWU5BTUUgKi8KKysKKyB9
 IC8qIHZvaWQgbW9kdWxlX3JlZ2lzdGVyICovCisgCisgLyogdm1pOiBzZXQgc3c9OCBub2V4cGFu
 ZHRhYiBmZG09bWFya2VyIDogKi8KSW5kZXg6IGZpbGVzL3BhdGNoLXZlcnNpb24tZ2VuLnNoCj09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT0KLS0tIGZpbGVzL3BhdGNoLXZlcnNpb24tZ2VuLnNoCShyZXZpc2lvbiAzMTM5NzIp
 CisrKyBmaWxlcy9wYXRjaC12ZXJzaW9uLWdlbi5zaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCAr
 MSwxMiBAQAotLS0tIHZlcnNpb24tZ2VuLnNoLm9yaWcJMjAxMi0wNC0wOSAyMDowNDoxNi4xMzAy
 OTM2NDEgLTA1MDAKLSsrKyB2ZXJzaW9uLWdlbi5zaAkyMDEyLTA0LTA5IDIwOjA1OjA0LjkyNzI5
 NzQ5NiAtMDUwMAotQEAgLTEsMTcgKzEsMyBAQAorZGlmZiAtLWdpdCB2ZXJzaW9uLWdlbi5zaCB2
 ZXJzaW9uLWdlbi5zaAoraW5kZXggZTM0NDU0MS4uMWVkNzQ4MCAxMDA3NTUKKy0tLSB2ZXJzaW9u
 LWdlbi5zaAorKysrIHZlcnNpb24tZ2VuLnNoCitAQCAtMSwxMyArMSwzIEBACiAtIyEvdXNyL2Jp
 bi9lbnYgYmFzaAogKyMhL2Jpbi9zaAogIAotLURFRkFVTFRfVkVSU0lPTj0iNS4xLjAuZ2l0Igor
 LURFRkFVTFRfVkVSU0lPTj0iNS4yLjEuZ2l0IgogLQogLVZFUlNJT049ImBnaXQgZGVzY3JpYmUg
 Mj4gL2Rldi9udWxsIHwgc2VkIC1lICdzL15jb2xsZWN0ZC0vLydgIgogLQpAQCAtMTQsOSArMTYs
 NSBAQAogLQogLVZFUlNJT049ImBlY2hvIFwiJFZFUlNJT05cIiB8IHNlZCAtZSAncy8tLy4vZydg
 IgogLQotLWlmIHRlc3QgInhgdW5hbWUgLXNgIiA9ICJ4QUlYIiA7IHRoZW4KLS0JZWNobyAiJFZF
 UlNJT05cYyIKLS1lbHNlIAotLQllY2hvIC1uICIkVkVSU0lPTiIKLS1maQotK2VjaG8gLW4gIjUu
 MS4wLmdpdCIKKy1lY2hvIC1uICIkVkVSU0lPTiIKKytlY2hvIC1uICI1LjIuMS5naXQiCkluZGV4
 OiBwa2ctcGxpc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGtnLXBsaXN0CShyZXZpc2lvbiAzMTM5NzIpCisr
 KyBwa2ctcGxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTEwLDkgKzEwLDE0IEBACiAlJUNHSSUlQGV4
 ZWMgaWYgWyAhIC1mICVCL2NvbGxlY3Rpb24uY29uZiBdIDsgdGhlbiBjcCAtcCAlQi8lZiAlQi9j
 b2xsZWN0aW9uLmNvbmY7IGZpCiAlJUNHSSUlQGRpcnJtdHJ5ICUlV1dXRElSJSUKIGJpbi9jb2xs
 ZWN0ZC1uYWdpb3MKK2Jpbi9jb2xsZWN0ZC10ZwogYmluL2NvbGxlY3RkY3RsCiBpbmNsdWRlL2Nv
 bGxlY3RkL2NsaWVudC5oCiBpbmNsdWRlL2NvbGxlY3RkL2xjY19mZWF0dXJlcy5oCitpbmNsdWRl
 L2NvbGxlY3RkL25ldHdvcmsuaAoraW5jbHVkZS9jb2xsZWN0ZC9uZXR3b3JrX2J1ZmZlci5oCits
 aWIvY29sbGVjdGQvYWdncmVnYXRpb24ubGEKK2xpYi9jb2xsZWN0ZC9hZ2dyZWdhdGlvbi5zbwog
 JSVBUEFDSEUlJWxpYi9jb2xsZWN0ZC9hcGFjaGUubGEKICUlQVBBQ0hFJSVsaWIvY29sbGVjdGQv
 YXBhY2hlLnNvCiAlJUFQQ1VQUyUlbGliL2NvbGxlY3RkL2FwY3Vwcy5sYQpAQCAtMTIzLDcgKzEy
 OCw3IEBACiBsaWIvY29sbGVjdGQvemZzX2FyYy5zbwogbGliL2xpYmNvbGxlY3RkY2xpZW50Lmxh
 CiBsaWIvbGliY29sbGVjdGRjbGllbnQuc28KLWxpYi9saWJjb2xsZWN0ZGNsaWVudC5zby4wCits
 aWIvbGliY29sbGVjdGRjbGllbnQuc28uMQogbGliZGF0YS9wa2djb25maWcvbGliY29sbGVjdGRj
 bGllbnQucGMKICUlV1JJVEVfSFRUUCUlbGliL2NvbGxlY3RkL3dyaXRlX2h0dHAubGEKICUlV1JJ
 VEVfSFRUUCUlbGliL2NvbGxlY3RkL3dyaXRlX2h0dHAuc28K
 --bcaec554e14c22945804d7ba78bf--
State-Changed-From-To: open->closed 
State-Changed-By: beech 
State-Changed-When: Tue Mar 12 18:29:56 UTC 2013 
State-Changed-Why:  
Committed, Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=176691 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/176691: commit references a PR
Date: Tue, 12 Mar 2013 18:29:43 +0000 (UTC)

 Author: beech
 Date: Tue Mar 12 18:29:33 2013
 New Revision: 313994
 URL: http://svnweb.freebsd.org/changeset/ports/313994
 
 Log:
   - Update to 5.2.1
   - Fix build with clang
   
   PR:		ports/176691
   Submitted by:	William Grzybowski <william88@gmail.com>
   Approved by:	Krzysztof Stryjek <ports@bsdserwis.com> (maintainer)
 
 Deleted:
   head/net-mgmt/collectd5/files/patch-src__network.c
 Modified:
   head/net-mgmt/collectd5/Makefile
   head/net-mgmt/collectd5/distinfo   (contents, props changed)
   head/net-mgmt/collectd5/files/patch-configure.in
   head/net-mgmt/collectd5/files/patch-src__dns.c   (contents, props changed)
   head/net-mgmt/collectd5/files/patch-src__zfs_arc.c
   head/net-mgmt/collectd5/files/patch-version-gen.sh   (contents, props changed)
   head/net-mgmt/collectd5/pkg-plist
 
 Modified: head/net-mgmt/collectd5/Makefile
 ==============================================================================
 --- head/net-mgmt/collectd5/Makefile	Tue Mar 12 17:43:25 2013	(r313993)
 +++ head/net-mgmt/collectd5/Makefile	Tue Mar 12 18:29:33 2013	(r313994)
 @@ -1,14 +1,14 @@
  # Created by: Matt Peterson <matt@peterson.org>
  # $FreeBSD$
  PORTNAME=	collectd
 -PORTVERSION=	5.1.0
 -PORTREVISION=	5
 +PORTVERSION=	5.2.1
  CATEGORIES=	net-mgmt
  MASTER_SITES=	http://collectd.org/files/
  
  MAINTAINER=	ports@bsdserwis.com
  COMMENT=	Systems & network statistics collection daemon
  
 +USE_BZIP2=	yes
  USE_GMAKE=	yes
  GNU_CONFIGURE=	yes
  USE_AUTOTOOLS=	autoconf autoheader automake libltdl
 @@ -64,7 +64,7 @@ RRDCACHED_DESC=		RRDTool Cached (require
  WRITE_GRAPHITE_DESC=	write_graphite
  WRITE_HTTP_DESC=	write_http
  
 -MAN1=		collectd.1 collectd-nagios.1 collectdmon.1 collectdctl.1
 +MAN1=		collectd.1 collectd-nagios.1 collectd-tg.1 collectdmon.1 collectdctl.1
  MAN5=		collectd.conf.5 collectd-email.5 collectd-exec.5 \
  		collectd-snmp.5 collectd-unixsock.5 collectd-perl.5 \
  		collectd-java.5 collectd-python.5 types.db.5 collectd-threshold.5
 
 Modified: head/net-mgmt/collectd5/distinfo
 ==============================================================================
 --- head/net-mgmt/collectd5/distinfo	Tue Mar 12 17:43:25 2013	(r313993)
 +++ head/net-mgmt/collectd5/distinfo	Tue Mar 12 18:29:33 2013	(r313994)
 @@ -1,2 +1,2 @@
 -SHA256 (collectd-5.1.0.tar.gz) = 8e06c03c5467f3021565570fc86c931a43579aa6dad25ca5999d66850cd19927
 -SIZE (collectd-5.1.0.tar.gz) = 1630323
 +SHA256 (collectd-5.2.1.tar.bz2) = d82a5c302d2cfa0c3f7a3c7b7e37fb3faf42b17d2addae036cb819b6b25b9d98
 +SIZE (collectd-5.2.1.tar.bz2) = 1395740
 
 Modified: head/net-mgmt/collectd5/files/patch-configure.in
 ==============================================================================
 --- head/net-mgmt/collectd5/files/patch-configure.in	Tue Mar 12 17:43:25 2013	(r313993)
 +++ head/net-mgmt/collectd5/files/patch-configure.in	Tue Mar 12 18:29:33 2013	(r313994)
 @@ -1,6 +1,8 @@
 ---- configure.in.orig	2012-04-02 08:04:58.000000000 +0000
 -+++ configure.in	2012-11-23 22:00:22.424129087 +0000
 -@@ -67,6 +67,9 @@
 +diff --git configure.in configure.in
 +index d50e802..4660787 100644
 +--- configure.in
 ++++ configure.in
 +@@ -67,6 +67,9 @@ case $host_os in
   	*openbsd*)
   	ac_system="OpenBSD"
   	;;
 @@ -10,7 +12,7 @@
   	*aix*)
   	AC_DEFINE([KERNEL_AIX], 1, [True if program is to be compiled for a AIX kernel])
   	ac_system="AIX"
 -@@ -98,7 +101,7 @@
 +@@ -99,7 +102,7 @@ then
   fi
   
   # Where to install .pc files.
 @@ -19,7 +21,7 @@
   AC_SUBST(pkgconfigdir)
   
   # Check for standards compliance mode
 -@@ -1378,6 +1381,7 @@
 +@@ -1386,6 +1389,7 @@ if test "x$with_kstat" = "xyes"
   then
   	AC_CHECK_LIB(kstat, kstat_open, [with_kstat="yes"], [with_kstat="no (libkstat not found)"], [])
   fi
 @@ -27,7 +29,7 @@
   if test "x$with_kstat" = "xyes"
   then
   	AC_CHECK_LIB(devinfo, di_init, [with_devinfo="yes"], [with_devinfo="no (not found)"], [])
 -@@ -1387,6 +1391,8 @@
 +@@ -1395,6 +1399,8 @@ if test "x$with_kstat" = "xyes"
   then
   	AC_DEFINE(HAVE_LIBKSTAT, 1,
   		  [Define to 1 if you have the 'kstat' library (-lkstat)])
 @@ -36,7 +38,7 @@
   fi
   AM_CONDITIONAL(BUILD_WITH_LIBKSTAT, test "x$with_kstat" = "xyes")
   AM_CONDITIONAL(BUILD_WITH_LIBDEVINFO, test "x$with_devinfo" = "xyes")
 -@@ -1807,9 +1813,6 @@
 +@@ -1815,9 +1821,6 @@ then
   		[with_libgcrypt="yes"],
   		[with_libgcrypt="no (symbol gcry_md_hash_buffer not found)"])
   
 @@ -46,7 +48,7 @@
   fi
   
   CPPFLAGS="$SAVE_CPPFLAGS"
 -@@ -3297,7 +3300,7 @@
 +@@ -3376,7 +3379,7 @@ fi
   if test "x$with_python" = "xyes"
   then
   	AC_MSG_CHECKING([for Python LIBS])
 @@ -55,7 +57,7 @@
   	python_config_status=$?
   
   	if test "$python_config_status" -ne 0 || test "x$python_library_flags" = "x"
 -@@ -3312,7 +3315,7 @@
 +@@ -3391,7 +3394,7 @@ fi
   if test "x$with_python" = "xyes"
   then
   	LDFLAGS="-L$python_library_path $LDFLAGS"
 @@ -64,18 +66,16 @@
   
   	AC_CHECK_FUNC(PyObject_CallFunction,
   		      [with_python="yes"],
 ---- configure.in.orig	2013-01-03 17:07:22.000000000 +0000
 -+++ configure.in	2013-01-03 17:07:58.000000000 +0000
 -@@ -4057,7 +4057,7 @@
 +@@ -4136,7 +4139,7 @@ AC_ARG_WITH(libvarnish, [AS_HELP_STRING([--with-libvarnish@<:@=PREFIX@:>@], [Pat
   	then
   		AC_MSG_NOTICE([Not checking for libvarnish: Manually configured])
   		with_libvarnish_cflags="-I$withval/include"
 --		with_libvarnish_libs="-L$withval/lib -lvarnish -lvarnishcompat -lvarnishapi"
 -+		with_libvarnish_libs="-L$withval/lib/varnish -lvarnish -lvarnishcompat -lvarnishapi"
 +-		with_libvarnish_libs="-L$withval/lib -lvarnishapi"
 ++		with_libvarnish_libs="-L$withval/lib/varnish -lvarnishapi"
   		with_libvarnish="yes"
   	fi; fi; fi
   ],
 -@@ -4580,6 +4583,12 @@
 +@@ -4661,6 +4664,12 @@ then
   	plugin_zfs_arc="yes"
   fi
   
 
 Modified: head/net-mgmt/collectd5/files/patch-src__dns.c
 ==============================================================================
 --- head/net-mgmt/collectd5/files/patch-src__dns.c	Tue Mar 12 17:43:25 2013	(r313993)
 +++ head/net-mgmt/collectd5/files/patch-src__dns.c	Tue Mar 12 18:29:33 2013	(r313994)
 @@ -1,6 +1,8 @@
 ---- src/dns.c.orig	2008-09-05 15:26:02.000000000 +0000
 -+++ src/dns.c	2008-09-05 15:25:55.000000000 +0000
 -@@ -210,6 +210,15 @@
 +diff --git src/dns.c src/dns.c
 +index fe3b672..0c43985 100644
 +--- src/dns.c
 ++++ src/dns.c
 +@@ -223,6 +223,15 @@ static void *dns_child_loop (__attribute__((unused)) void *dummy)
   		pthread_sigmask (SIG_SETMASK, &sigmask, NULL);
   	}
   
 @@ -8,11 +10,11 @@
  +#ifdef __sparc64__
  +	if (pcap_device == NULL)
  +	{
 -+	    ERROR ("dns plugin: Interface required");
 -+	    return (NULL);
 ++		ERROR ("dns plugin: Interface required");
 ++		return (NULL);
  +	}
  +#endif
  +
   	/* Passing `pcap_device == NULL' is okay and the same as passign "any" */
 - 	DEBUG ("Creating PCAP object..");
 - 	pcap_obj = pcap_open_live (pcap_device,
 + 	DEBUG ("dns plugin: Creating PCAP object..");
 + 	pcap_obj = pcap_open_live ((pcap_device != NULL) ? pcap_device : "any",
 
 Modified: head/net-mgmt/collectd5/files/patch-src__zfs_arc.c
 ==============================================================================
 --- head/net-mgmt/collectd5/files/patch-src__zfs_arc.c	Tue Mar 12 17:43:25 2013	(r313993)
 +++ head/net-mgmt/collectd5/files/patch-src__zfs_arc.c	Tue Mar 12 18:29:33 2013	(r313994)
 @@ -1,232 +1,237 @@
 ---- src/zfs_arc.c.orig	2012-04-02 08:04:58.000000000 +0000
 -+++ src/zfs_arc.c	2012-11-24 17:54:21.715129054 +0000
 -@@ -25,11 +25,57 @@
 - #include "common.h"
 - #include "plugin.h"
 - 
 -+#if !defined(HAVE_LIBKSTAT) && defined(HAVE_SYSCTLBYNAME)
 -+#include <sys/sysctl.h>
 -+#endif
 +diff --git configure.in configure.in
 +index 4660787..54fd9d8 100644
 +--- configure.in
 ++++ configure.in
 +@@ -4843,6 +4843,12 @@ then
 + 	plugin_users="yes"
 + fi
 + 
 ++# FreeBSD
 ++if test "x$have_struct_kinfo_proc_freebsd" = "xyes"
 ++then
 ++	plugin_zfs_arc="yes"
 ++fi
  +
 - /*
 + m4_divert_once([HELP_ENABLE], [
 + collectd plugins:])
 + 
 +diff --git src/zfs_arc.c src/zfs_arc.c
 +index aa90019..17e8513 100644
 +--- src/zfs_arc.c
 ++++ src/zfs_arc.c
 +@@ -19,6 +19,8 @@
 +  * Authors:
 +  *   Anthony Dewhurst <dewhurst at gmail>
 +  *   Aurelien Rougemont <beorn at gandi.net>
 ++ *   Brad Davis <brd at FreeBSD.org>
 ++ *   William Grzybowski <william88 at gmail>
 +  **/
 + 
 + #include "collectd.h"
 +@@ -29,7 +31,14 @@
    * Global variables
    */
 --static kstat_t *ksp;
 + 
  +#if defined(HAVE_LIBKSTAT)
 ++static kstat_t *ksp;
   extern kstat_ctl_t *kc;
 -+#endif
 -+
 -+/*
 -+ * Context
 -+ */
 -+struct za_context {
 -+#if defined(HAVE_LIBKSTAT)
 -+    kstat_t *ksp;
 -+#endif
 -+};
 ++#elif defined(HAVE_SYSCTLBYNAME)
 ++  typedef void kstat_t;
 ++# include <sys/types.h>
 ++# include <sys/sysctl.h>
 ++#endif /* HAVE_SYSCTLBYNAME */
 + 
 + static void za_submit (const char* type, const char* type_instance, value_t* values, int values_len)
 + {
 +@@ -57,37 +66,56 @@ static void za_submit_gauge (const char* type, const char* type_instance, gauge_
 + static int za_read_derive (kstat_t *ksp, const char *kstat_value,
 +     const char *type, const char *type_instance)
 + {
 +-  long long tmp;
 +-  value_t v;
 +-
 +-  tmp = get_kstat_value (ksp, (char *)kstat_value);
 +-  if (tmp == -1LL)
 +-  {
 +-    ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
 +-    return (-1);
 +-  }
 +-
 +-  v.derive = (derive_t) tmp;
 +-  za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
 +-  return (0);
 ++	long long tmp;
 ++	value_t v;
  +
 -+static int za_init_context(struct za_context *ctx)
 -+{
  +#if defined(HAVE_LIBKSTAT)
 -+	get_kstat (&ctx->ksp, "zfs", 0, "arcstats");
 -+	if (ctx->ksp == NULL)
 ++	tmp = get_kstat_value (ksp, (char *)kstat_value);
 ++	if (tmp == -1LL)
  +	{
 -+		ERROR ("zfs_arc plugin: Cannot find zfs:0:arcstats kstat.");
 ++		ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
  +		return (-1);
  +	}
 -+#endif
 -+	return 0;
 -+}
 -+
 -+static long long za_get_value(struct za_context *ctx, const char* name)
 -+{
 -+#if defined(HAVE_LIBKSTAT)
 -+	return get_kstat_value(ctx->ksp, name);
  +#elif defined(HAVE_SYSCTLBYNAME)
 -+	// kstat values are available on FreeBSD through sysctl
 -+	char fullname[512];
 -+	long long result = 0;
 -+	size_t size = sizeof(result);
 -+	ssnprintf(fullname, sizeof(fullname), "kstat.zfs.misc.arcstats.%s", name);
 -+	if (sysctlbyname(fullname, &result, &size, NULL, 0) != 0 || size != sizeof(result))
 -+	{
 -+		ERROR ("zfs_arc plugin: Cannot find stats using sysctl");
 -+		result = 0;
 ++	size_t size;
 ++	size = sizeof(tmp);
 ++	if (sysctlbyname(kstat_value, &tmp, &size, NULL, 0) < 0) {
 ++		ERROR ("zfs_arc plugin: Reading sysctl \"%s\" failed.", kstat_value);
 ++		return (-1);
  +	}
 -+	return result;
 -+#endif
 -+}
 - 
 - static void za_submit (const char* type, const char* type_instance, value_t* values, int values_len)
 - {
 -@@ -54,13 +100,13 @@
 - 	za_submit (type, type_instance, &vv, 1);
 - }
 - 
 --static int za_read_derive (kstat_t *ksp, const char *kstat_value,
 -+static int za_read_derive (struct za_context *ctx, const char *kstat_value,
 -     const char *type, const char *type_instance)
 - {
 -   long long tmp;
 -   value_t v;
 - 
 --  tmp = get_kstat_value (ksp, kstat_value);
 -+  tmp = za_get_value (ctx, (char *)kstat_value);
 -   if (tmp == -1LL)
 -   {
 -     ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
 -@@ -69,15 +115,16 @@
 - 
 -   v.derive = (derive_t) tmp;
 -   za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
 -+  return (0);
 ++#endif /* HAVE_LIBKSTAT */
 ++
 ++	v.derive = (derive_t) tmp;
 ++	za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
 ++	return (0);
   }
   
 --static int za_read_gauge (kstat_t *ksp, const char *kstat_value,
 -+static int za_read_gauge (struct za_context *ctx, const char *kstat_value,
 + static int za_read_gauge (kstat_t *ksp, const char *kstat_value,
       const char *type, const char *type_instance)
   {
 -   long long tmp;
 -   value_t v;
 - 
 --  tmp = get_kstat_value (ksp, kstat_value);
 -+  tmp = za_get_value (ctx, (char *)kstat_value);
 -   if (tmp == -1LL)
 -   {
 -     ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
 -@@ -86,18 +133,14 @@
 - 
 -   v.gauge = (gauge_t) tmp;
 -   za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
 -+  return (0);
 - }
 - 
 --static void za_submit_ratio (const char* type_instance, gauge_t hits, gauge_t misses)
 -+static void za_submit_ratio (const char* type_instance, long long hits, long long misses)
 - {
 - 	gauge_t ratio = NAN;
 - 
 --	if (!isfinite (hits) || (hits < 0.0))
 --		hits = 0.0;
 --	if (!isfinite (misses) || (misses < 0.0))
 --		misses = 0.0;
 +-  long long tmp;
 +-  value_t v;
 +-
 +-  tmp = get_kstat_value (ksp, (char *)kstat_value);
 +-  if (tmp == -1LL)
 +-  {
 +-    ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
 +-    return (-1);
 +-  }
  -
 --	if ((hits != 0.0) || (misses != 0.0))
 -+	if ((hits > 0) || (misses > 0))
 - 		ratio = hits / (hits + misses);
 +-  v.gauge = (gauge_t) tmp;
 +-  za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
 +-  return (0);
 ++	long long tmp;
 ++	value_t v;
 ++
 ++#if defined(HAVE_LIBKSTAT)
 ++	tmp = get_kstat_value (ksp, (char *)kstat_value);
 ++	if (tmp == -1LL)
 ++	{
 ++		ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
 ++		return (-1);
 ++	}
 ++
 ++#elif defined(HAVE_SYSCTLBYNAME)
 ++	size_t size;
 ++	size = sizeof(tmp);
 ++	if (sysctlbyname(kstat_value, &tmp, &size, NULL, 0) < 0) {
 ++		ERROR ("zfs_arc plugin: Reading sysctl \"%s\" failed.", kstat_value);
 ++		return (-1);
 ++	}
 ++#endif /* HAVE_LIBKSTAT */
 ++
 ++	v.gauge = (gauge_t) tmp;
 ++	za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
 ++	return (0);
 + }
   
 + static void za_submit_ratio (const char* type_instance, gauge_t hits, gauge_t misses)
 +@@ -105,11 +133,67 @@ static void za_submit_ratio (const char* type_instance, gauge_t hits, gauge_t mi
   	za_submit_gauge ("cache_ratio", type_instance, ratio);
 -@@ -105,56 +148,55 @@
 - 
 - static int za_read (void)
 - {
 --	gauge_t  arc_hits, arc_misses, l2_hits, l2_misses;
 -+	long long  arc_hits, arc_misses, l2_hits, l2_misses;
 - 	value_t  l2_io[2];
 -+	struct za_context ctx;
 - 
 --	get_kstat (&ksp, "zfs", 0, "arcstats");
 --	if (ksp == NULL)
 -+	if (za_init_context (&ctx) < 0)
 - 	{
 --		ERROR ("zfs_arc plugin: Cannot find zfs:0:arcstats kstat.");
 - 		return (-1);
 - 	}
 + }
   
 - 	/* Sizes */
 --	za_read_gauge (ksp, "size",    "cache_size", "arc");
 --	za_read_gauge (ksp, "l2_size", "cache_size", "L2");
 -+	za_read_gauge (&ctx, "size",    "cache_size", "arc");
 -+	za_read_gauge (&ctx, "l2_size", "cache_size", "L2");
 - 
 --        /* Operations */
 --	za_read_derive (ksp, "allocated","cache_operation", "allocated");
 --	za_read_derive (ksp, "deleted",  "cache_operation", "deleted");
 --	za_read_derive (ksp, "stolen",   "cache_operation", "stolen");
 --
 --        /* Issue indicators */
 --        za_read_derive (ksp, "mutex_miss", "mutex_operation", "miss");
 --	za_read_derive (ksp, "hash_collisions", "hash_collisions", "");
 +-static int za_read (void)
 ++#if defined(HAVE_SYSCTLBYNAME)
 ++static int za_read_freebsd (void)
 ++{
 ++	// Sizes
 ++	za_read_gauge (NULL, "kstat.zfs.misc.arcstats.size", "cache_size", "arc");
 ++	za_read_gauge (NULL, "kstat.zfs.misc.arcstats.l2_size", "cache_size", "L2");
 ++
  +	/* Operations */
 -+	za_read_derive (&ctx, "allocated","cache_operation", "allocated");
 -+	za_read_derive (&ctx, "deleted",  "cache_operation", "deleted");
 -+	za_read_derive (&ctx, "stolen",   "cache_operation", "stolen");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.allocated", "cache_operation", "allocated");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.deleted",   "cache_operation", "deleted");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.stolen",    "cache_operation", "stolen");
  +
  +	/* Issue indicators */
 -+	za_read_derive (&ctx, "mutex_miss", "mutex_operation", "miss");
 -+	za_read_derive (&ctx, "hash_collisions", "hash_collisions", "");
 - 	
 --        /* Evictions */
 --	za_read_derive (ksp, "evict_l2_cached",     "cache_eviction", "cached");
 --	za_read_derive (ksp, "evict_l2_eligible",   "cache_eviction", "eligible");
 --	za_read_derive (ksp, "evict_l2_ineligible", "cache_eviction", "ineligible");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.mutex_miss",      "mutex_operation", "miss");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.hash_collisions", "hash_collisions", "");
 ++
  +	/* Evictions */
 -+	za_read_derive (&ctx, "evict_l2_cached",     "cache_eviction", "cached");
 -+	za_read_derive (&ctx, "evict_l2_eligible",   "cache_eviction", "eligible");
 -+	za_read_derive (&ctx, "evict_l2_ineligible", "cache_eviction", "ineligible");
 - 
 - 	/* Hits / misses */
 --	za_read_derive (ksp, "demand_data_hits",         "cache_result", "demand_data-hit");
 --	za_read_derive (ksp, "demand_metadata_hits",     "cache_result", "demand_metadata-hit");
 --	za_read_derive (ksp, "prefetch_data_hits",       "cache_result", "prefetch_data-hit");
 --	za_read_derive (ksp, "prefetch_metadata_hits",   "cache_result", "prefetch_metadata-hit");
 --	za_read_derive (ksp, "demand_data_misses",       "cache_result", "demand_data-miss");
 --	za_read_derive (ksp, "demand_metadata_misses",   "cache_result", "demand_metadata-miss");
 --	za_read_derive (ksp, "prefetch_data_misses",     "cache_result", "prefetch_data-miss");
 --	za_read_derive (ksp, "prefetch_metadata_misses", "cache_result", "prefetch_metadata-miss");
 -+	za_read_derive (&ctx, "demand_data_hits",         "cache_result", "demand_data-hit");
 -+	za_read_derive (&ctx, "demand_metadata_hits",     "cache_result", "demand_metadata-hit");
 -+	za_read_derive (&ctx, "prefetch_data_hits",       "cache_result", "prefetch_data-hit");
 -+	za_read_derive (&ctx, "prefetch_metadata_hits",   "cache_result", "prefetch_metadata-hit");
 -+	za_read_derive (&ctx, "demand_data_misses",       "cache_result", "demand_data-miss");
 -+	za_read_derive (&ctx, "demand_metadata_misses",   "cache_result", "demand_metadata-miss");
 -+	za_read_derive (&ctx, "prefetch_data_misses",     "cache_result", "prefetch_data-miss");
 -+	za_read_derive (&ctx, "prefetch_metadata_misses", "cache_result", "prefetch_metadata-miss");
 - 
 - 	/* Ratios */
 --	arc_hits   = (gauge_t) get_kstat_value(ksp, "hits");
 --	arc_misses = (gauge_t) get_kstat_value(ksp, "misses");
 --	l2_hits    = (gauge_t) get_kstat_value(ksp, "l2_hits");
 --	l2_misses  = (gauge_t) get_kstat_value(ksp, "l2_misses");
 -+	arc_hits   = za_get_value (&ctx, "hits");
 -+	arc_misses = za_get_value (&ctx, "misses");
 -+	l2_hits    = za_get_value (&ctx, "l2_hits");
 -+	l2_misses  = za_get_value (&ctx, "l2_misses");
 - 
 - 	za_submit_ratio ("arc", arc_hits, arc_misses);
 - 	za_submit_ratio ("L2", l2_hits, l2_misses);
 - 
 - 	/* I/O */
 --	l2_io[0].derive = get_kstat_value(ksp, "l2_read_bytes");
 --	l2_io[1].derive = get_kstat_value(ksp, "l2_write_bytes");
 -+	l2_io[0].derive = za_get_value (&ctx, "l2_read_bytes");
 -+	l2_io[1].derive = za_get_value (&ctx, "l2_write_bytes");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.evict_l2_cached",     "cache_eviction", "cached");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.evict_l2_eligible",   "cache_eviction", "eligible");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.evict_l2_ineligible", "cache_eviction", "ineligible");
 ++
 ++	/* Hits / misses */
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_data_hits",         "cache_result", "demand_data-hit");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_metadata_hits",     "cache_result", "demand_metadata-hit");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_data_hits",       "cache_result", "prefetch_data-hit");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_metadata_hits",   "cache_result", "prefetch_metadata-hit");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_data_misses",       "cache_result", "demand_data-miss");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.demand_metadata_misses",   "cache_result", "demand_metadata-miss");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_data_misses",     "cache_result", "prefetch_data-miss");
 ++	za_read_derive (NULL, "kstat.zfs.misc.arcstats.prefetch_metadata_misses", "cache_result", "prefetch_metadata-miss");
 ++
 ++	/* Ratios */
 ++	gauge_t arc_hits;
 ++	gauge_t arc_misses;
 ++	gauge_t l2_hits;
 ++	gauge_t l2_misses;
 ++	value_t  l2_io[2];
 ++
 ++	size_t size;
 ++	size = sizeof(arc_hits);
 ++	sysctlbyname("kstat.zfs.misc.arcstats.hits", &arc_hits, &size, NULL, 0);
 ++	sysctlbyname("kstat.zfs.misc.arcstats.misses", &arc_misses, &size, NULL, 0);
 ++	sysctlbyname("kstat.zfs.misc.arcstats.l2_hits", &l2_hits, &size, NULL, 0);
 ++	sysctlbyname("kstat.zfs.misc.arcstats.l2_misses", &l2_misses, &size, NULL, 0);
 ++
 ++	za_submit_ratio ("arc", arc_hits, arc_misses);
 ++	za_submit_ratio ("L2", l2_hits, l2_misses);
 ++
 ++	/* I/O */
 ++	sysctlbyname("kstat.zfs.misc.arcstats.l2_read_bytes", &l2_io[0].derive, &size, NULL, 0);
 ++	sysctlbyname("kstat.zfs.misc.arcstats.l2_write_bytes", &l2_io[1].derive, &size, NULL, 0);
 ++
 ++	za_submit ("io_octets", "L2", l2_io, /* num values = */ 2);
 ++
 ++	return (0);
 ++}
 ++#elif defined(HAVE_LIBKSTAT)
 ++static int za_read_solaris (void)
 + {
 + 	gauge_t  arc_hits, arc_misses, l2_hits, l2_misses;
 + 	value_t  l2_io[2];
 +-	kstat_t	 *ksp	= NULL;
   
 - 	za_submit ("io_octets", "L2", l2_io, /* num values = */ 2);
 + 	get_kstat (&ksp, "zfs", 0, "arcstats");
 + 	if (ksp == NULL)
 +@@ -163,15 +247,20 @@ static int za_read (void)
   
 -@@ -163,14 +205,23 @@
 + 	return (0);
 + } /* int za_read */
 ++#endif
   
   static int za_init (void) /* {{{ */
   {
 --	ksp = NULL;
 --
  +#if defined(HAVE_LIBKSTAT)
 ++	ksp = NULL;
 ++
   	/* kstats chain already opened by update_kstat (using *kc), verify everything went fine. */
   	if (kc == NULL)
   	{
   		ERROR ("zfs_arc plugin: kstat chain control structure not available.");
   		return (-1);
   	}
 -+#elif defined(HAVE_SYSCTLBYNAME)
 -+	/* make sure ARC is available (arc_size is not null) */
 -+	unsigned long long arc_size;
 -+	size_t size = sizeof(arc_size);
 -+	if (sysctlbyname("kstat.zfs.misc.arcstats.size", &arc_size, &size, NULL, 0) != 0 || arc_size == 0)
 -+	{
 -+		ERROR ("zfs_arc plugin: could not get ARC size using sysctl, is ARC enabled?");
 -+		return (-1);
 -+	}
 -+#endif
 ++#endif /* HAVE_LIBKSTAT */
   
   	return (0);
   } /* }}} int za_init */
 +@@ -179,7 +268,16 @@ static int za_init (void) /* {{{ */
 + void module_register (void)
 + {
 + 	plugin_register_init ("zfs_arc", za_init);
 +-	plugin_register_read ("zfs_arc", za_read);
 ++
 ++#if defined(HAVE_LIBKSTAT)
 ++	plugin_register_read ("zfs_arc", za_read_solaris);
 ++#elif defined(HAVE_SYSCTLBYNAME)
 ++	plugin_register_read ("zfs_arc", za_read_freebsd);
 ++#else
 ++	ERROR ("Unable to determine which OS we are on");
 ++	return (-1);
 ++#endif /* HAVE_SYSCTLBYNAME */
 ++
 + } /* void module_register */
 + 
 + /* vmi: set sw=8 noexpandtab fdm=marker : */
 
 Modified: head/net-mgmt/collectd5/files/patch-version-gen.sh
 ==============================================================================
 --- head/net-mgmt/collectd5/files/patch-version-gen.sh	Tue Mar 12 17:43:25 2013	(r313993)
 +++ head/net-mgmt/collectd5/files/patch-version-gen.sh	Tue Mar 12 18:29:33 2013	(r313994)
 @@ -1,10 +1,12 @@
 ---- version-gen.sh.orig	2012-04-09 20:04:16.130293641 -0500
 -+++ version-gen.sh	2012-04-09 20:05:04.927297496 -0500
 -@@ -1,17 +1,3 @@
 +diff --git version-gen.sh version-gen.sh
 +index e344541..1ed7480 100755
 +--- version-gen.sh
 ++++ version-gen.sh
 +@@ -1,13 +1,3 @@
  -#!/usr/bin/env bash
  +#!/bin/sh
   
 --DEFAULT_VERSION="5.1.0.git"
 +-DEFAULT_VERSION="5.2.1.git"
  -
  -VERSION="`git describe 2> /dev/null | sed -e 's/^collectd-//'`"
  -
 @@ -14,9 +16,5 @@
  -
  -VERSION="`echo \"$VERSION\" | sed -e 's/-/./g'`"
  -
 --if test "x`uname -s`" = "xAIX" ; then
 --	echo "$VERSION\c"
 --else 
 --	echo -n "$VERSION"
 --fi
 -+echo -n "5.1.0.git"
 +-echo -n "$VERSION"
 ++echo -n "5.2.1.git"
 
 Modified: head/net-mgmt/collectd5/pkg-plist
 ==============================================================================
 --- head/net-mgmt/collectd5/pkg-plist	Tue Mar 12 17:43:25 2013	(r313993)
 +++ head/net-mgmt/collectd5/pkg-plist	Tue Mar 12 18:29:33 2013	(r313994)
 @@ -10,9 +10,14 @@ etc/collectd.conf.sample
  %%CGI%%@exec if [ ! -f %B/collection.conf ] ; then cp -p %B/%f %B/collection.conf; fi
  %%CGI%%@dirrmtry %%WWWDIR%%
  bin/collectd-nagios
 +bin/collectd-tg
  bin/collectdctl
  include/collectd/client.h
  include/collectd/lcc_features.h
 +include/collectd/network.h
 +include/collectd/network_buffer.h
 +lib/collectd/aggregation.la
 +lib/collectd/aggregation.so
  %%APACHE%%lib/collectd/apache.la
  %%APACHE%%lib/collectd/apache.so
  %%APCUPS%%lib/collectd/apcups.la
 @@ -123,7 +128,7 @@ lib/collectd/zfs_arc.la
  lib/collectd/zfs_arc.so
  lib/libcollectdclient.la
  lib/libcollectdclient.so
 -lib/libcollectdclient.so.0
 +lib/libcollectdclient.so.1
  libdata/pkgconfig/libcollectdclient.pc
  %%WRITE_HTTP%%lib/collectd/write_http.la
  %%WRITE_HTTP%%lib/collectd/write_http.so
 _______________________________________________
 svn-ports-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-ports-all
 To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
 
>Unformatted:
