
From sickmind@lavabit.com  Fri Jul  5 16:13:38 2013
Return-Path: <sickmind@lavabit.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 12C6D21F97C7 for <dtn-users@ietfa.amsl.com>; Fri,  5 Jul 2013 16:13:38 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 2.079
X-Spam-Level: **
X-Spam-Status: No, score=2.079 tagged_above=-999 required=5 tests=[BAYES_20=-0.74, GB_I_LETTER=-2, J_CHICKENPOX_15=0.6, J_CHICKENPOX_24=0.6, J_CHICKENPOX_45=0.6, J_CHICKENPOX_54=0.6, J_CHICKENPOX_66=0.6, J_CHICKENPOX_83=0.6, J_CHICKENPOX_92=0.6, RCVD_IN_SORBS_WEB=0.619]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HZh5c0JyHcJK for <dtn-users@ietfa.amsl.com>; Fri,  5 Jul 2013 16:13:34 -0700 (PDT)
Received: from karen.lavabit.com (karen.lavabit.com [72.249.41.33]) by ietfa.amsl.com (Postfix) with ESMTP id 7980F21F962D for <dtn-users@irtf.org>; Fri,  5 Jul 2013 16:13:33 -0700 (PDT)
Received: from b.earth.lavabit.com (b.earth.lavabit.com [192.168.111.11]) by karen.lavabit.com (Postfix) with ESMTP id 047E011BB2D for <dtn-users@irtf.org>; Fri,  5 Jul 2013 18:13:22 -0500 (CDT)
Received: from localhost (nat168-252-205-109.tvoe.tv [109.205.252.168]) by lavabit.com with ESMTP id S4ZMTWWYXZ0V for <dtn-users@irtf.org>; Fri, 05 Jul 2013 18:13:21 -0500
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=6q2Oi1r7vG9aLhZWmcY6g9kXQhoFPh14HsIVMLtdp1keWdRXatZpTSuZ4Uhje4fBcIEylgHXs1BILlbtSeOyxTSTzLGapXV1HCE2N7k2jGR3Mg3fhO8sOtaUrrsnt7TwqimYkayR72gPN63nUAjyc/E1SO5gG8UaaJ5X5z1V/pw=; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type:Content-Disposition:User-Agent;
Date: Fri, 5 Jul 2013 23:13:12 +0000
From: Lana Black <sickmind@lavabit.com>
To: dtn-users maillist <dtn-users@irtf.org>
Message-ID: <20130705231312.GA29745@glow>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="4Ckj6UjgE2iN1+kY"
Content-Disposition: inline
User-Agent: Mutt/1.5.21 (2010-09-15)
Subject: [dtn-users] C++11 compliance patches
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Fri, 05 Jul 2013 23:13:38 -0000

--4Ckj6UjgE2iN1+kY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi,

The attachment contains patches for DTN2 and oasys improving C++11
compliance. Build with libc++ and clang works fine, which may allow to
run DTN on other than GNU systems. Few things should be considered
however. First, this breaks gcc-2.95 compatibility. Second, xerces code
is still 'broken' and thus cannot be built on non-gnu systems, therefore
no external convergence layer and external decision plane support.

The other patch fixes the overlooked part of the long fixed namespace
error in BPQ code.

With best regards.

--4Ckj6UjgE2iN1+kY
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="DTN2-Fix-C-11-related-issues.patch"

>From da0e7de2c2ab9c6334adf81f6d99bf8b42c110eb Mon Sep 17 00:00:00 2001
From: Lana Black <sickmind@lavabit.com>
Date: Fri, 5 Jul 2013 22:44:43 +0000
Subject: [PATCH] Fix C++11 related issues.

---
 aclocal.m4                                 |  73 +++++-----
 configure                                  | 226 +++++++++++++++--------------
 servlib/bundling/BlockInfo.h               |   9 ++
 servlib/conv_layers/EthConvergenceLayer.cc |   4 +-
 servlib/discovery/EthDiscovery.cc          |   2 +-
 servlib/prophet/BundleCore.h               |   7 +-
 servlib/prophet/Encounter.h                |   5 +-
 servlib/routing/RouteTable.h               |   2 +-
 servlib/session/SessionTable.cc            |   2 +-
 9 files changed, 182 insertions(+), 148 deletions(-)

diff --git a/aclocal.m4 b/aclocal.m4
index 41270c6..c278a82 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1601,6 +1601,13 @@ AC_DEFUN(AC_OASYS_CONFIG_GCC_OPTS, [
                        EXTRA_CFLAGS=$withval)
     AC_SUBST(EXTRA_CFLAGS)
 
+    EXTRA_CXXFLAGS=""
+    AC_ARG_WITH(extra-cxxflags,
+        AC_HELP_STRING([--with-extra-cxxflags=?],
+                [additional options to pass to the compiler]),
+                        EXTRA_CXXFLAGS=$withval)
+    AC_SUBST(EXTRA_CXXFLAGS)
+
     EXTRA_LDFLAGS=""
     AC_ARG_WITH(extra-ldflags,
         AC_HELP_STRING([--with-extra-ldflags=?],
@@ -2018,39 +2025,6 @@ AC_DEFUN(AC_OASYS_FIND_MYSQL, [
         AC_MSG_ERROR([can't find usable mysql library])
     fi
 ])
-
-dnl
-dnl Check if oasys has support for the given feature. Returns result
-dnl in ac_oasys_supports_result.
-dnl
-AC_DEFUN(AC_OASYS_SUPPORTS, [
-    AC_MSG_CHECKING(whether oasys is configured with $1)
-
-    if test x$cv_oasys_supports_$1 != x ; then
-        ac_oasys_supports_result=$cv_oasys_supports_$1
-        AC_MSG_RESULT($ac_oasys_supports_result (cached))
-    else
-
-    ac_save_CPPFLAGS="$CPPFLAGS"
-    CPPFLAGS="$CPPFLAGS -I$OASYS_INCDIR"
-    AC_LINK_IFELSE(
-      AC_LANG_PROGRAM(
-        [
-            #include <oasys/oasys-config.h>
-            #ifndef $1
-            #error $1 not configured
-            #endif
-        ], [] ),
-      ac_oasys_supports_result=yes,
-      ac_oasys_supports_result=no)
-
-    cv_oasys_supports_$1=$ac_oasys_supports_result
-    
-    AC_MSG_RESULT([$ac_oasys_supports_result])
-    CPPFLAGS=$ac_save_CPPFLAGS
-
-    fi
-])
 dnl
 dnl    Copyright 2007 Intel Corporation
 dnl 
@@ -2248,6 +2222,39 @@ AC_DEFUN(AC_OASYS_SUBST_CONFIG, [
     AC_SUBST(SYS_EXTLIB_CFLAGS)
     AC_SUBST(SYS_EXTLIB_LDFLAGS)
 ])
+
+dnl
+dnl Check if oasys has support for the given feature. Returns result
+dnl in ac_oasys_supports_result.
+dnl
+AC_DEFUN(AC_OASYS_SUPPORTS, [
+    AC_MSG_CHECKING(whether oasys is configured with $1)
+
+    if test x$cv_oasys_supports_$1 != x ; then
+        ac_oasys_supports_result=$cv_oasys_supports_$1
+        AC_MSG_RESULT($ac_oasys_supports_result (cached))
+    else
+
+    ac_save_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS -I$OASYS_INCDIR"
+    AC_LINK_IFELSE(
+      AC_LANG_PROGRAM(
+        [
+            #include <oasys/oasys-config.h>
+            #ifndef $1
+            #error $1 not configured
+            #endif
+        ], [] ),
+      ac_oasys_supports_result=yes,
+      ac_oasys_supports_result=no)
+
+    cv_oasys_supports_$1=$ac_oasys_supports_result
+    
+    AC_MSG_RESULT([$ac_oasys_supports_result])
+    CPPFLAGS=$ac_save_CPPFLAGS
+
+    fi
+])
 dnl
 dnl    Copyright 2011 Alex McMahon, alex.mcmahon@cs.tcd.ie
 dnl    Copyright 2011 Elwyn Davies, davieseb@scss.tcd.ie
diff --git a/configure b/configure
index 27e033f..315e858 100755
--- a/configure
+++ b/configure
@@ -1,12 +1,10 @@
 #! /bin/sh
 # From configure.ac -- DO NOT EDIT THIS FILE!  See the instructions in configure.ac --.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.69.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -152,6 +150,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -185,7 +208,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -230,21 +254,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -346,6 +374,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -467,6 +503,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -501,16 +541,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -522,28 +562,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -625,6 +645,7 @@ INCFLAGS
 BBN_IPND_ENABLED
 BUILD_SYSTEM
 EXTRA_LDFLAGS
+EXTRA_CXXFLAGS
 EXTRA_CFLAGS
 LDFLAGS_SHLIB
 RPATH
@@ -732,6 +753,7 @@ enable_static
 enable_static_external_libs
 enable_shlibs
 with_extra_cflags
+with_extra_cxxflags
 with_extra_ldflags
 with_bbn_ipnd
 '
@@ -1203,8 +1225,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1388,6 +1408,7 @@ Optional Packages:
   --with-cc=CC            name (or path) of the C compiler to use
   --with-cxx=CXX          name (or path) of the C++ compiler to use
   --with-extra-cflags=?   additional options to pass to the compiler
+  --with-extra-cxxflags=? additional options to pass to the compiler
   --with-extra-ldflags=?  additional options to pass to the linker
   --with-bbn-ipnd         enable BBN IPND discovery protocol (EXPERIMENTAL)
 
@@ -1471,9 +1492,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.68
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 
@@ -1566,7 +1587,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1847,7 +1868,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1994,7 +2015,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2473,7 +2494,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2513,7 +2534,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2566,7 +2587,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2607,7 +2628,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -2665,7 +2686,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2709,7 +2730,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3155,8 +3176,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3745,7 +3765,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -3811,7 +3831,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4328,7 +4348,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4372,7 +4392,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5447,7 +5467,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5491,7 +5511,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5685,8 +5705,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -5804,7 +5823,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5848,7 +5867,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6292,7 +6311,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="${ac_tool_prefix}ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6332,7 +6351,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6384,7 +6403,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6424,7 +6443,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6731,6 +6750,15 @@ fi
 
 
 
+    EXTRA_CXXFLAGS=""
+
+# Check whether --with-extra-cxxflags was given.
+if test "${with_extra_cxxflags+set}" = set; then :
+  withval=$with_extra_cxxflags; EXTRA_CXXFLAGS=$withval
+fi
+
+
+
     EXTRA_LDFLAGS=""
 
 # Check whether --with-extra-ldflags was given.
@@ -7207,16 +7235,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -7276,28 +7304,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -7319,7 +7335,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -7381,10 +7397,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.68,
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -7472,7 +7488,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
diff --git a/servlib/bundling/BlockInfo.h b/servlib/bundling/BlockInfo.h
index c0966fe..c21d92b 100644
--- a/servlib/bundling/BlockInfo.h
+++ b/servlib/bundling/BlockInfo.h
@@ -54,6 +54,15 @@ public:
 
     /// Copy constructor to increment refcount for locals_
     BlockInfo(const BlockInfo& bi);
+
+    BlockInfo operator=(const BlockInfo &bi)
+    {
+        if(this == &bi) {
+            return *this;
+        } else {
+            return BlockInfo(bi);
+        }
+    }
     
     /**
      * Virtual destructor.
diff --git a/servlib/conv_layers/EthConvergenceLayer.cc b/servlib/conv_layers/EthConvergenceLayer.cc
index fe781b6..19adc66 100644
--- a/servlib/conv_layers/EthConvergenceLayer.cc
+++ b/servlib/conv_layers/EthConvergenceLayer.cc
@@ -424,7 +424,7 @@ EthConvergenceLayer::Receiver::run()
     iface.sll_protocol=htons(ETHERTYPE_DTN);
     iface.sll_ifindex=req.ifr_ifindex;
    
-    if (bind(sock, (struct sockaddr *) &iface, sizeof(iface)) == -1) {
+    if (::bind(sock, (struct sockaddr *) &iface, sizeof(iface)) == -1) {
         perror("bind");
         exit(1);
     }
@@ -515,7 +515,7 @@ EthConvergenceLayer::Sender::Sender(const char* if_name,
     } 
     memcpy(src_hw_addr_.octet,req.ifr_hwaddr.sa_data,6);    
 
-    if (bind(sock_, (struct sockaddr *) &iface, sizeof(iface)) == -1) {
+    if (::bind(sock_, (struct sockaddr *) &iface, sizeof(iface)) == -1) {
         perror("bind");
         exit(1);
     }
diff --git a/servlib/discovery/EthDiscovery.cc b/servlib/discovery/EthDiscovery.cc
index 60a7a88..e250aa3 100644
--- a/servlib/discovery/EthDiscovery.cc
+++ b/servlib/discovery/EthDiscovery.cc
@@ -120,7 +120,7 @@ void EthDiscovery::run()
     ifaddr.sll_protocol = htons(ETHERTYPE_DTN_BEACON);
     ifaddr.sll_ifindex = req.ifr_ifindex;
 
-    if(bind(sock_, (struct sockaddr*) &ifaddr, sizeof(ifaddr)) == -1) {
+    if(::bind(sock_, (struct sockaddr*) &ifaddr, sizeof(ifaddr)) == -1) {
         log_err("bind() failed: %s", strerror(errno));
         return;
     }
diff --git a/servlib/prophet/BundleCore.h b/servlib/prophet/BundleCore.h
index 3ef3128..724c354 100644
--- a/servlib/prophet/BundleCore.h
+++ b/servlib/prophet/BundleCore.h
@@ -23,9 +23,10 @@
 #include "BundleImpl.h"
 #include "BundleList.h"
 #include "Link.h"
-#include <stdio.h>
-#include <stdarg.h>
+#include <cstdio>
+#include <cstdarg>
 #include <string>
+#include <utility>
 #include <list>
 
 #if defined(__GNUC__)
@@ -266,7 +267,7 @@ public:
     bool write_bundle(const Bundle* b,const u_char* buf,size_t len)
     { 
         BundleBuffer bunbuf((char*)buf,len);
-        written_.push_back(std::make_pair<const Bundle*,BundleBuffer>(b,bunbuf));
+        written_.push_back(std::make_pair(b,bunbuf));
         return written_.back().second.size() <= len;
     }
     bool read_bundle(const Bundle* b,u_char* buf,size_t& len) const
diff --git a/servlib/prophet/Encounter.h b/servlib/prophet/Encounter.h
index 5e80b9b..54f6faf 100644
--- a/servlib/prophet/Encounter.h
+++ b/servlib/prophet/Encounter.h
@@ -26,6 +26,7 @@
 #include "Dictionary.h"
 #include "BundleTLVEntryList.h"
 #include "Alarm.h"
+#include <ctime>
 
 namespace prophet
 {
@@ -186,8 +187,8 @@ protected:
     BundleResponseList local_response_; ///< Bundle requests sent to peer
     Table remote_nodes_; ///< in-memory representation of remote's RIB
     u_int hello_rate_; ///< simple flow control for Hello messages (ACK, etc)
-    u_int32_t data_sent_; ///< timestamp of last TLV sent
-    u_int32_t data_rcvd_; ///< timestamp of last TLV received
+    time_t data_sent_; ///< timestamp of last TLV sent
+    time_t data_rcvd_; ///< timestamp of last TLV received
     Alarm* alarm_; ///< callback registration for timeout handler
 }; // class Encounter
 
diff --git a/servlib/routing/RouteTable.h b/servlib/routing/RouteTable.h
index 3c13780..de99f5d 100644
--- a/servlib/routing/RouteTable.h
+++ b/servlib/routing/RouteTable.h
@@ -168,7 +168,7 @@ RouteTable::del_matching_entries(Predicate pred)
     // entries are at the end, then cleans them out with erase()
     RouteEntryVec::iterator new_end =
         std::remove_if(route_table_.begin(), route_table_.end(),
-                       std::bind2nd(std::equal_to<RouteEntry*>(), 0));
+                       std::bind2nd(std::equal_to<RouteEntry*>(), static_cast<RouteEntry*>(NULL)));
     route_table_.erase(new_end, route_table_.end());
     
     return old_size - route_table_.size();
diff --git a/servlib/session/SessionTable.cc b/servlib/session/SessionTable.cc
index 1c594fe..1a980e8 100644
--- a/servlib/session/SessionTable.cc
+++ b/servlib/session/SessionTable.cc
@@ -20,9 +20,9 @@
 
 #include <oasys/util/StringBuffer.h>
 
+#include "naming/EndpointID.h"
 #include "SessionTable.h"
 #include "Session.h"
-#include "naming/EndpointID.h"
 
 namespace dtn {
 
-- 
1.8.2.1


--4Ckj6UjgE2iN1+kY
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="DTN2-Fix-overlooked-namespace-error.patch"

>From afceb1fee861059d1f7e29645e6ca7dcd0f42a04 Mon Sep 17 00:00:00 2001
From: Lana Black <sickmind@lavabit.com>
Date: Fri, 5 Jul 2013 23:06:35 +0000
Subject: [PATCH] Fix overlooked namespace error.

---
 servlib/bundling/BPQBlockProcessor.cc | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/servlib/bundling/BPQBlockProcessor.cc b/servlib/bundling/BPQBlockProcessor.cc
index 6de641a..f18712d 100644
--- a/servlib/bundling/BPQBlockProcessor.cc
+++ b/servlib/bundling/BPQBlockProcessor.cc
@@ -25,15 +25,14 @@
 #include "BPQBlockProcessor.h"
 #include "SDNV.h"
 
+template <> dtn::BPQBlockProcessor*
+oasys::Singleton<dtn::BPQBlockProcessor>::instance_ = NULL;
+
 namespace dtn {
 
 // Setup our logging information
 static const char* LOG = "/dtn/bundle/extblock/bpq";
 
-template <> BPQBlockProcessor*
-oasys::Singleton<BPQBlockProcessor>::instance_ = NULL;
-
-
 
 //----------------------------------------------------------------------
 BPQBlockProcessor::BPQBlockProcessor() :
-- 
1.8.2.1


--4Ckj6UjgE2iN1+kY
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="oasys-Fix-C-11-related-issues.-Add-with-extra-cxxflags-arg.patch"

>From 81c52a82ced6ee40332ba499a69246bd9933831c Mon Sep 17 00:00:00 2001
From: Lana Black <sickmind@lavabit.com>
Date: Fri, 5 Jul 2013 22:39:12 +0000
Subject: [PATCH] Fix C++11 related issues. Add --with-extra-cxxflags argument
 to configure script.

NOTE: This commit breaks compatibility with gcc 2.95
---
 Rules.make.in                |   6 +-
 aclocal.m4                   |  73 ++++++------
 aclocal/gcc.ac               |   7 ++
 configure                    | 274 +++++++++++++++++++++++--------------------
 configure.ac                 |   2 +
 serialize/StreamSerialize.cc |   2 -
 util/Cache.h                 |  16 ---
 util/StringUtils.h           |  51 ++++----
 8 files changed, 230 insertions(+), 201 deletions(-)

diff --git a/Rules.make.in b/Rules.make.in
index c6381d5..5d47e18 100644
--- a/Rules.make.in
+++ b/Rules.make.in
@@ -55,6 +55,7 @@ LDFLAGS_SHLIB   = @LDFLAGS_SHLIB@
 EXTLIB_CFLAGS   = @EXTLIB_CFLAGS@ $(SYS_EXTLIB_CFLAGS)
 EXTLIB_LDFLAGS  = @EXTLIB_LDFLAGS@ $(SYS_EXTLIB_LDFLAGS)
 EXTRA_CFLAGS	= @EXTRA_CFLAGS@
+EXTRA_CXXFLAGS  = @EXTRA_CXXFLAGS@
 EXTRA_LDFLAGS	= @EXTRA_LDFLAGS@
 INCFLAGS	= -I$(BUILDDIR) -I$(SRCDIR) -I$(OASYS_INCDIR) @INCFLAGS@
 WARN		= -Wall -W -Wcast-align @OPTIMIZE_WARN@
@@ -64,8 +65,8 @@ CFLAGS_NOWARN	= $(DEBUG) $(OPTIMIZE) $(PICFLAGS) $(DEPFLAGS) $(PROFILE) \
 CFLAGS    	= $(DEBUG) $(OPTIMIZE) $(PICFLAGS) $(DEPFLAGS) $(PROFILE) \
 	          $(DEFS) $(SYS_CFLAGS) $(INCFLAGS) $(EXTLIB_CFLAGS) \
 		  $(EXTRA_CFLAGS) $(WARN)
-CXXFLAGS_NOWARN	= $(CFLAGS_NOWARN)
-CXXFLAGS        = $(CFLAGS)
+CXXFLAGS_NOWARN	= $(CFLAGS_NOWARN) $(EXTRA_CXXFLAGS)
+CXXFLAGS        = $(CFLAGS) $(EXTRA_CXXFLAGS)
 LDFLAGS         = -L. $(EXTRA_LDFLAGS)
 
 OASYS_LDFLAGS        = @OASYS_LDFLAGS@
@@ -99,6 +100,7 @@ buildopts:
 	@echo "  SYS_CFLAGS: $(SYS_CFLAGS)"
 	@echo "  INCFLAGS: $(INCFLAGS)"
 	@echo "  EXTRA_CFLAGS: $(EXTRA_CFLAGS)"
+    @echo "  EXTRA_CXXFLAGS: $(EXTRA_CXXFLAGS)"
 	@echo "  LDFLAGS: $(LDFLAGS)"
 	@echo " "
 	@echo ""
diff --git a/aclocal.m4 b/aclocal.m4
index 72fdcd5..60c6f4d 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1126,6 +1126,13 @@ AC_DEFUN(AC_OASYS_CONFIG_GCC_OPTS, [
                        EXTRA_CFLAGS=$withval)
     AC_SUBST(EXTRA_CFLAGS)
 
+    EXTRA_CXXFLAGS=""
+    AC_ARG_WITH(extra-cxxflags,
+        AC_HELP_STRING([--with-extra-cxxflags=?],
+                [additional options to pass to the compiler]),
+                        EXTRA_CXXFLAGS=$withval)
+    AC_SUBST(EXTRA_CXXFLAGS)
+
     EXTRA_LDFLAGS=""
     AC_ARG_WITH(extra-ldflags,
         AC_HELP_STRING([--with-extra-ldflags=?],
@@ -1543,39 +1550,6 @@ AC_DEFUN(AC_OASYS_FIND_MYSQL, [
         AC_MSG_ERROR([can't find usable mysql library])
     fi
 ])
-
-dnl
-dnl Check if oasys has support for the given feature. Returns result
-dnl in ac_oasys_supports_result.
-dnl
-AC_DEFUN(AC_OASYS_SUPPORTS, [
-    AC_MSG_CHECKING(whether oasys is configured with $1)
-
-    if test x$cv_oasys_supports_$1 != x ; then
-        ac_oasys_supports_result=$cv_oasys_supports_$1
-        AC_MSG_RESULT($ac_oasys_supports_result (cached))
-    else
-
-    ac_save_CPPFLAGS="$CPPFLAGS"
-    CPPFLAGS="$CPPFLAGS -I$OASYS_INCDIR"
-    AC_LINK_IFELSE(
-      AC_LANG_PROGRAM(
-        [
-            #include <oasys/oasys-config.h>
-            #ifndef $1
-            #error $1 not configured
-            #endif
-        ], [] ),
-      ac_oasys_supports_result=yes,
-      ac_oasys_supports_result=no)
-
-    cv_oasys_supports_$1=$ac_oasys_supports_result
-    
-    AC_MSG_RESULT([$ac_oasys_supports_result])
-    CPPFLAGS=$ac_save_CPPFLAGS
-
-    fi
-])
 dnl
 dnl    Copyright 2007 Intel Corporation
 dnl 
@@ -1773,6 +1747,39 @@ AC_DEFUN(AC_OASYS_SUBST_CONFIG, [
     AC_SUBST(SYS_EXTLIB_CFLAGS)
     AC_SUBST(SYS_EXTLIB_LDFLAGS)
 ])
+
+dnl
+dnl Check if oasys has support for the given feature. Returns result
+dnl in ac_oasys_supports_result.
+dnl
+AC_DEFUN(AC_OASYS_SUPPORTS, [
+    AC_MSG_CHECKING(whether oasys is configured with $1)
+
+    if test x$cv_oasys_supports_$1 != x ; then
+        ac_oasys_supports_result=$cv_oasys_supports_$1
+        AC_MSG_RESULT($ac_oasys_supports_result (cached))
+    else
+
+    ac_save_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS -I$OASYS_INCDIR"
+    AC_LINK_IFELSE(
+      AC_LANG_PROGRAM(
+        [
+            #include <oasys/oasys-config.h>
+            #ifndef $1
+            #error $1 not configured
+            #endif
+        ], [] ),
+      ac_oasys_supports_result=yes,
+      ac_oasys_supports_result=no)
+
+    cv_oasys_supports_$1=$ac_oasys_supports_result
+    
+    AC_MSG_RESULT([$ac_oasys_supports_result])
+    CPPFLAGS=$ac_save_CPPFLAGS
+
+    fi
+])
 dnl
 dnl    Copyright 2011 Alex McMahon, alex.mcmahon@cs.tcd.ie
 dnl    Copyright 2011 Elwyn Davies, davieseb@scss.tcd.ie
diff --git a/aclocal/gcc.ac b/aclocal/gcc.ac
index 55bfe43..d51dc35 100644
--- a/aclocal/gcc.ac
+++ b/aclocal/gcc.ac
@@ -365,6 +365,13 @@ AC_DEFUN(AC_OASYS_CONFIG_GCC_OPTS, [
                        EXTRA_CFLAGS=$withval)
     AC_SUBST(EXTRA_CFLAGS)
 
+    EXTRA_CXXFLAGS=""
+    AC_ARG_WITH(extra-cxxflags,
+        AC_HELP_STRING([--with-extra-cxxflags=?],
+                [additional options to pass to the compiler]),
+                        EXTRA_CXXFLAGS=$withval)
+    AC_SUBST(EXTRA_CXXFLAGS)
+
     EXTRA_LDFLAGS=""
     AC_ARG_WITH(extra-ldflags,
         AC_HELP_STRING([--with-extra-ldflags=?],
diff --git a/configure b/configure
index 778fa75..67d2065 100755
--- a/configure
+++ b/configure
@@ -1,12 +1,10 @@
 #! /bin/sh
 # From configure.ac -- DO NOT EDIT THIS FILE!  See the instructions in configure.ac --.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.69.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -152,6 +150,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -185,7 +208,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -230,21 +254,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -346,6 +374,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -467,6 +503,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -501,16 +541,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -522,28 +562,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -642,6 +662,7 @@ INSTALL_PROGRAM
 AWK
 BUILD_SYSTEM
 EXTRA_LDFLAGS
+EXTRA_CXXFLAGS
 EXTRA_CFLAGS
 LDFLAGS_SHLIB
 RPATH
@@ -750,6 +771,7 @@ enable_static
 enable_static_external_libs
 enable_shlibs
 with_extra_cflags
+with_extra_cxxflags
 with_extra_ldflags
 with_file_offset_bits
 enable_atomic_nonatomic
@@ -1224,8 +1246,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1423,6 +1443,7 @@ Optional Packages:
   --with-cc=CC            name (or path) of the C compiler to use
   --with-cxx=CXX          name (or path) of the C++ compiler to use
   --with-extra-cflags=?   additional options to pass to the compiler
+  --with-extra-cxxflags=? additional options to pass to the compiler
   --with-extra-ldflags=?  additional options to pass to the linker
   --with-file-offset-bits=N
                           value for _FILE_OFFSET_BITS (default 64)
@@ -1508,9 +1529,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.68
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 
@@ -1603,7 +1624,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1687,7 +1708,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -2171,7 +2192,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2187,7 +2209,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2213,7 +2236,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2229,7 +2253,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2263,7 +2288,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2403,7 +2429,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2935,7 +2961,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3034,7 +3060,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3074,7 +3100,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3127,7 +3153,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3168,7 +3194,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3226,7 +3252,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3270,7 +3296,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3716,8 +3742,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -4223,7 +4248,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4267,7 +4292,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4813,7 +4838,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4879,7 +4904,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -6050,7 +6075,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_XSD_TOOL="${ac_tool_prefix}$ac_with_xsd_tool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6090,7 +6115,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_XSD_TOOL="$ac_with_xsd_tool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7426,7 +7451,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7470,7 +7495,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7664,8 +7689,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -7783,7 +7807,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7827,7 +7851,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8271,7 +8295,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="${ac_tool_prefix}ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8311,7 +8335,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8363,7 +8387,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8403,7 +8427,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8710,6 +8734,15 @@ fi
 
 
 
+    EXTRA_CXXFLAGS=""
+
+# Check whether --with-extra-cxxflags was given.
+if test "${with_extra_cxxflags+set}" = set; then :
+  withval=$with_extra_cxxflags; EXTRA_CXXFLAGS=$withval
+fi
+
+
+
     EXTRA_LDFLAGS=""
 
 # Check whether --with-extra-ldflags was given.
@@ -8789,7 +8822,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 	  if test $ac_prog = install &&
 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
@@ -8865,7 +8898,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8938,7 +8971,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8978,7 +9011,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9908,11 +9941,11 @@ else
 int
 main ()
 {
-/* FIXME: Include the comments suggested by Paul. */
+
 #ifndef __cplusplus
-  /* Ultrix mips cc rejects this.  */
+  /* Ultrix mips cc rejects this sort of thing.  */
   typedef int charset[2];
-  const charset cs;
+  const charset cs = { 0, 0 };
   /* SunOS 4.1.1 cc rejects this.  */
   char const *const *pcpcc;
   char **ppc;
@@ -9929,8 +9962,9 @@ main ()
   ++pcpcc;
   ppc = (char**) pcpcc;
   pcpcc = (char const *const *) ppc;
-  { /* SCO 3.2v4 cc rejects this.  */
-    char *t;
+  { /* SCO 3.2v4 cc rejects this sort of thing.  */
+    char tx;
+    char *t = &tx;
     char const *s = 0 ? (char *) 0 : (char const *) 0;
 
     *t++ = 0;
@@ -9946,10 +9980,10 @@ main ()
     iptr p = 0;
     ++p;
   }
-  { /* AIX XL C 1.02.0.0 rejects this saying
+  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; };
-    struct s *b; b->j = 5;
+    struct s { int j; const int *ap[3]; } bx;
+    struct s *b = &bx; b->j = 5;
   }
   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
     const int foo = 10;
@@ -10266,8 +10300,10 @@ _ACEOF
 # -------------------------------------------------------------------------
 
 SYS_EXTLIB_CFLAGS=$EXTLIB_CFLAGS
+SYS_EXTLIB_CXXFLAGS=$EXTLIB_CXXFLAGS
 SYS_EXTLIB_LDFLAGS=$EXTLIB_LDFLAGS
 EXTLIB_CFLAGS=
+EXTLIB_CXXFLAGS=
 EXTLIB_LDFLAGS=
 
 OASYS_INCDIR=$SRCDIR
@@ -10751,16 +10787,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -10820,28 +10856,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -10863,7 +10887,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -10925,10 +10949,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.68,
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -11018,7 +11042,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
diff --git a/configure.ac b/configure.ac
index e3e5f9a..168a44d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -117,8 +117,10 @@ dnl That way other projects that use oasys' Rules.make can
 dnl use EXTLIB_CFLAGS and EXTLIB_LDFLAGS for their own dependencies.
 dnl
 SYS_EXTLIB_CFLAGS=$EXTLIB_CFLAGS
+SYS_EXTLIB_CXXFLAGS=$EXTLIB_CXXFLAGS
 SYS_EXTLIB_LDFLAGS=$EXTLIB_LDFLAGS
 EXTLIB_CFLAGS=
+EXTLIB_CXXFLAGS=
 EXTLIB_LDFLAGS=
 
 dnl
diff --git a/serialize/StreamSerialize.cc b/serialize/StreamSerialize.cc
index 21bc8e0..2db78f6 100644
--- a/serialize/StreamSerialize.cc
+++ b/serialize/StreamSerialize.cc
@@ -2,8 +2,6 @@
 #  include <oasys-config.h>
 #endif
 
-#include <ext/rope>
-
 #include "StreamSerialize.h"
 
 #include "../util/Pointers.h"
diff --git a/util/Cache.h b/util/Cache.h
index bb77bf8..e282f6a 100644
--- a/util/Cache.h
+++ b/util/Cache.h
@@ -19,22 +19,6 @@
 
 #include <map>
 
-/* Note that these classes are now deprecated, we'll need to rewrite */
-/* the code at some point to use the new standard classes. In the */
-/* meantime, quiet the warnings. */
-/* undefine __DEPRECATED and remember it was set*/
-#ifdef __DEPRECATED
-# define __DEPRECATED_save
-# undef __DEPRECATED
-#endif
-
-#include <ext/hash_map>
-
-/* re-define __DEPRECATED if it was set */
-#ifdef __DEPRECATED_save
-# define __DEPRECATED
-#endif
-
 #include "../debug/InlineFormatter.h"
 #include "../debug/Logger.h"
 #include "../thread/Atomic.h"
diff --git a/util/StringUtils.h b/util/StringUtils.h
index 6e652e8..064c6f2 100644
--- a/util/StringUtils.h
+++ b/util/StringUtils.h
@@ -27,35 +27,33 @@
 #include <climits>
 #include <vector>
 #include <set>
+#include <string>
 #include <map>
 #include <sys/types.h>
 
-// Though hash_set was part of std:: in the 2.9x gcc series, it's been
-// moved to ext/__gnu_cxx:: in 3.x
-#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-#include <hash_set>
-#include <hash_map>
-#define _std std
-#else
-/* Note that these classes are now deprecated, we'll need to rewrite */
-/* the code at some point to use the new standard classes. In the */
-/* meantime, quiet the warnings. */
-
-/* undefine __DEPRECATED and remember it was set*/
-#ifdef __DEPRECATED
-# define __DEPRECATED_save
-# undef __DEPRECATED
-#endif
+#if __cplusplus < 201103L
+/* No C++11 support detected. Use deprecated classes instead.
+ * NOTE: The headers below probably contain #warning directives.
+ */
 
 #include <ext/hash_set>
 #include <ext/hash_map>
 
-/* re-define __DEPRECATED if it was set */
-#ifdef __DEPRECATED_save
-# define __DEPRECATED
-#endif
-
 #define _std __gnu_cxx
+#define unordered_set hash_set
+#define unordered_map hash_map
+
+#else
+/* We have C++11 support, use the standard classes instead
+ */
+#include <unordered_set>
+#include <unordered_map>
+
+#define _std std
+
+// For std::hash 
+#include <functional>
+
 #endif
 
 namespace oasys {
@@ -64,12 +62,19 @@ namespace oasys {
 /**
  * Hashing function class for std::strings.
  */
+#if __cplusplus < 201103L
 struct StringHash {
     size_t operator()(const std::string& str) const
     {
         return _std::__stl_hash_string(str.c_str());
     }
 };
+#else
+// C++11 provides us with std::hash class which implements hashing
+// so just inherit from it.
+struct StringHash : public std::hash<std::string> {};
+
+#endif
 
 //----------------------------------------------------------------------------
 /**
@@ -134,7 +139,7 @@ template <class _Type> class StringMultiMap :
  * A StringHashSet is a hash set with std::string members.
  */
 class StringHashSet :
-        public _std::hash_set<std::string, StringHash, StringEquals> {
+        public _std::unordered_set<std::string, StringHash, StringEquals> {
 public:
     void dump(const char* log) const;
 };
@@ -144,7 +149,7 @@ public:
  * A StringHashMap is a hash map with std::string keys.
  */
 template <class _Type> class StringHashMap :
-    public _std::hash_map<std::string, _Type, StringHash, StringEquals> {
+    public _std::unordered_map<std::string, _Type, StringHash, StringEquals> {
 };
 
 //----------------------------------------------------------------------------
-- 
1.8.2.1


--4Ckj6UjgE2iN1+kY--


From tom_a_sparks@yahoo.com.au  Sun Jul  7 20:19:22 2013
Return-Path: <tom_a_sparks@yahoo.com.au>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 836C521F99AA for <dtn-users@ietfa.amsl.com>; Sun,  7 Jul 2013 20:19:22 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.002
X-Spam-Level: 
X-Spam-Status: No, score=0.002 tagged_above=-999 required=5 tests=[BAYES_50=0.001, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 62sW5LekEDqz for <dtn-users@ietfa.amsl.com>; Sun,  7 Jul 2013 20:19:17 -0700 (PDT)
Received: from nm43-vm7.bullet.mail.bf1.yahoo.com (nm43-vm7.bullet.mail.bf1.yahoo.com [216.109.114.238]) by ietfa.amsl.com (Postfix) with ESMTP id 8075121F8D0D for <dtn-users@irtf.org>; Sun,  7 Jul 2013 20:19:17 -0700 (PDT)
Received: from [98.139.212.144] by nm43.bullet.mail.bf1.yahoo.com with NNFMP; 08 Jul 2013 03:19:16 -0000
Received: from [98.139.212.219] by tm1.bullet.mail.bf1.yahoo.com with NNFMP; 08 Jul 2013 03:19:16 -0000
Received: from [127.0.0.1] by omp1028.mail.bf1.yahoo.com with NNFMP; 08 Jul 2013 03:19:16 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 100988.18966.bm@omp1028.mail.bf1.yahoo.com
Received: (qmail 93330 invoked by uid 60001); 8 Jul 2013 03:19:16 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1373253556; bh=SpRM2IGL9DrSSRW1oX69oZxgM3NsDv7HSym+ZMBp71U=; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-Mailer:Message-ID:Date:From:Reply-To:Subject:To:MIME-Version:Content-Type; b=GJOj7FBzZFLrbtosa00nAlWbQeqT5oAPY6HF9FiiWza8+MKW6QXeYCZdPlvxHUUWeuzeV5L/nR1nV9vko+HtBnguqvUQDpNMGzrCoq1UToTSVaJ53elPkqmg7ANc1p30z4oQci16zG5U1Z8tW+pYEs+zelPdU/2CZDwUtK/R/8U=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com.au; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-Mailer:Message-ID:Date:From:Reply-To:Subject:To:MIME-Version:Content-Type; b=Kvrj/TtTWeUsOJXcnFDAC/0w7r/xOthh7/VhujMMBGIWEOXetiap2t2JKp7+g1YQl9xk+I4lybYuey/khiZvaPtOS+YFoV/uJMAgWJAI3aWKoyNl7LlrMF4S+/FPq2NWNpBULMqDz/hA4ySQ6+ylu/ioac9JWxnla9nPmcDjDZA= ; 
X-YMail-OSG: bZbh6rgVM1kcY3P6oHuh7fFteECiobOs7AiOdGsteXnLvsV yPimM.MNYGPhK_LWLyl_UQ8H1i8Gggz1yi3IFoiKINWKT4PO031zeQPxV2LA HWMjdHZ15Rvk5_CMO0PhRo9V1NbdW07asuAN6ixGAUpTqsWlQhytbrbRs6YI M.japzehmXyRG2oUI.gh1iK.F3ZWpUtN.SAG6Rm2HFM1fFVBAlgE7E_fuX3M jruNwkSJ5ZXl43vxXnotm.S8uo0X1xd_Q6312oB6UwyIDSvdWFauuLNtHhro t290fOcbwd3D.e2FJ3UGtesFW030Rq4XvphZ.2.O2UMBtNqsn2_AxnxHgay9 ujxB4LyVCO98IvDGqKsYuLYrhDBvEOVVKpP7eopFvn6tPZAm18SYn_ODcOJH SlxAiOOQ_l_BFDXNQLraVSZQvsYVwsG4ryZa3h5Es8DEW4IvsRFDYt0mH9fG MtTYZzyaxMdPa8DGzAVw.sRFpi4BfnjhCRNM5sEH1W4YHjF2u0oR0IjMfZ2s McxXavjqDGIpCZ6hI6i6DucAYDkTo98A2S4XegDSXnKKJZVPRwG46tFeqGot vnQ2Vm64D0UwRKf0kPGtPfJc60R2R2GkR3xUDZwr11zRN.0iPmAW5sWhUBLP J0xXsy0zO7sYlzedkm_DuZ1nHbvEpEmbXcbmTxTWVitiZMOV5j3kZ8Ts8UQw yeLxFUwxzNAtMiLMNzrf8dy5pxzGqsn7Hx2q8AV5yu_XPJGknw5AF6AAk9xv y
Received: from [58.164.1.122] by web142503.mail.bf1.yahoo.com via HTTP; Sun, 07 Jul 2013 20:19:15 PDT
X-Rocket-MIMEInfo: 002.001, SSBoYXZlIGp1c3QgZ290IGFyb3VuZCB0byBjb25uZWN0aW5nIHR3byBjb21wdXRpbmcKSSBhbSB1c2luZyBQcm9waGV0Um91dGVyCgpJIGFtIGdldHRpbmcgdGhlc2UgZXJyb3IgbWVzc2FnZXM6CiIKWzEzNzMyNTIwMDcuMTQ3MzAwIC9kdG4vc3RvcmFnZS9idW5kbGVzIGVycm9yXSB1cGRhdGUoOTgpOiBidW5kbGUgZG9lc24ndCBleGlzdCBpbiB0YWJsZQpbMTM3MzI1MjAwNy4xNDczMTkgL2R0bi9idW5kbGUvYWN0aW9ucyBjcml0aWNhbF0gZXJyb3IgdXBkYXRpbmcgYnVuZGxlIDk4IGluIGRhdGEgc3RvcmUBMAEBAQE-
X-Mailer: YahooMailWebService/0.8.148.557
Message-ID: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com>
Date: Sun, 7 Jul 2013 20:19:15 -0700 (PDT)
From: Tom Sparks <tom_a_sparks@yahoo.com.au>
To: "dtn-users@irtf.org" <dtn-users@irtf.org>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="-127571234-112079440-1373253555=:93124"
Subject: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: Tom Sparks <tom_a_sparks@yahoo.com.au>
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Mon, 08 Jul 2013 03:19:22 -0000

---127571234-112079440-1373253555=:93124
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

I have just got around to connecting two computing=0AI am using ProphetRout=
er=0A=0AI am getting these error messages:=0A"=0A[1373252007.147300 /dtn/st=
orage/bundles error] update(98): bundle doesn't exist in table=0A[137325200=
7.147319 /dtn/bundle/actions critical] error updating bundle 98 in data sto=
re!!=0A"=0AI am running the bleeding edge version=0A=0A---=0Atom_a_sparks "=
It's a nerdy thing I like to do"=0AChild of the Internet born 1983=0APGP ID=
: A7EF6006=0APlease use ISO approved file formats excluding Office Open XML=
 - http://www.gnu.org/philosophy/no-word-attachments.html=0AUbuntu wiki pag=
e https://wiki.ubuntu.com/tomsparks=0A
---127571234-112079440-1373253555=:93124
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><body><div style=3D"color:#000; background-color:#fff; font-family:ti=
mes new roman, new york, times, serif;font-size:10pt">I have just got aroun=
d to connecting two computing<br>I am using ProphetRouter<br><br>I am getti=
ng these error messages:<br>"<br>[1373252007.147300 /dtn/storage/bundles er=
ror] update(98): bundle doesn't exist in table<br>[1373252007.147319 /dtn/b=
undle/actions critical] error updating bundle 98 in data store!!<br>"<br>I =
am running the bleeding edge version<br><div>---<br>tom_a_sparks "It's a ne=
rdy thing I like to do"<br>Child of the Internet born 1983<br>PGP ID: A7EF6=
006<br>Please use ISO approved file formats excluding Office Open XML - htt=
p://www.gnu.org/philosophy/no-word-attachments.html<br>Ubuntu wiki page htt=
ps://wiki.ubuntu.com/tomsparks<br></div></div></body></html>
---127571234-112079440-1373253555=:93124--

From sickmind@lavabit.com  Mon Jul  8 12:56:46 2013
Return-Path: <sickmind@lavabit.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3961A21F9DA8 for <dtn-users@ietfa.amsl.com>; Mon,  8 Jul 2013 12:56:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level: 
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ACEheN+rpDQf for <dtn-users@ietfa.amsl.com>; Mon,  8 Jul 2013 12:56:42 -0700 (PDT)
Received: from karen.lavabit.com (karen.lavabit.com [72.249.41.33]) by ietfa.amsl.com (Postfix) with ESMTP id 7A8F021F9D91 for <dtn-users@irtf.org>; Mon,  8 Jul 2013 12:56:39 -0700 (PDT)
Received: from d.earth.lavabit.com (d.earth.lavabit.com [192.168.111.13]) by karen.lavabit.com (Postfix) with ESMTP id 6FEF911BC09; Mon,  8 Jul 2013 14:56:37 -0500 (CDT)
Received: from localhost (pppoe.178-66-165-173.dynamic.avangarddsl.ru [178.66.165.173]) by lavabit.com with ESMTP id BBKKU4OEP0MX; Mon, 08 Jul 2013 14:56:37 -0500
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=P8Td+l0JUe4px789S/LIXUKJBd6BBqz8ZdI7ngrIdDRYhVByKahCxJyk2XWkh5w2u2P5NK1KTrbeXVYhEPIreGTfr/iov/lwxGNn4e6drwK0Q8JmHvp0WxlOcEmrjHhnHVfQoC+AwQ0wOm1y7TVb+fvbjLJycdd2+1XvpZhk4Pk=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:Content-Disposition:In-Reply-To:User-Agent;
Date: Mon, 8 Jul 2013 19:56:37 +0000
From: Lana Black <sickmind@lavabit.com>
To: Tom Sparks <tom_a_sparks@yahoo.com.au>
Message-ID: <20130708195637.GA1743@glow>
References: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
Cc: "dtn-users@irtf.org" <dtn-users@irtf.org>
Subject: Re: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Mon, 08 Jul 2013 19:56:46 -0000

On 20:19 Sun 07 Jul     , Tom Sparks wrote:
> I have just got around to connecting two computing
> I am using ProphetRouter
> 
> I am getting these error messages:
> "
> [1373252007.147300 /dtn/storage/bundles error] update(98): bundle doesn't exist in table
> [1373252007.147319 /dtn/bundle/actions critical] error updating bundle 98 in data store!!
> "
> I am running the bleeding edge version
> 
> ---
> tom_a_sparks "It's a nerdy thing I like to do"
> Child of the Internet born 1983
> PGP ID: A7EF6006
> Please use ISO approved file formats excluding Office Open XML - http://www.gnu.org/philosophy/no-word-attachments.html
> Ubuntu wiki page https://wiki.ubuntu.com/tomsparks

> _______________________________________________
> dtn-users mailing list
> dtn-users@irtf.org
> https://www.irtf.org/mailman/listinfo/dtn-users

Hi Tom,

Could you send me dtn.conf example to reproduce this error?


From tom_a_sparks@yahoo.com.au  Mon Jul  8 13:34:29 2013
Return-Path: <tom_a_sparks@yahoo.com.au>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 873B021F9D7C for <dtn-users@ietfa.amsl.com>; Mon,  8 Jul 2013 13:34:29 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.222
X-Spam-Level: 
X-Spam-Status: No, score=-0.222 tagged_above=-999 required=5 tests=[AWL=0.224,  BAYES_00=-2.599, FRT_BELOW2=2.154]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ra4nCmVLcX53 for <dtn-users@ietfa.amsl.com>; Mon,  8 Jul 2013 13:34:25 -0700 (PDT)
Received: from nm22-vm1.bullet.mail.bf1.yahoo.com (nm22-vm1.bullet.mail.bf1.yahoo.com [98.139.212.127]) by ietfa.amsl.com (Postfix) with ESMTP id C07DA21F9DF0 for <dtn-users@irtf.org>; Mon,  8 Jul 2013 13:34:24 -0700 (PDT)
Received: from [98.139.212.150] by nm22.bullet.mail.bf1.yahoo.com with NNFMP; 08 Jul 2013 20:34:23 -0000
Received: from [98.139.212.192] by tm7.bullet.mail.bf1.yahoo.com with NNFMP; 08 Jul 2013 20:34:22 -0000
Received: from [127.0.0.1] by omp1001.mail.bf1.yahoo.com with NNFMP; 08 Jul 2013 20:34:22 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 934368.94277.bm@omp1001.mail.bf1.yahoo.com
Received: (qmail 94635 invoked by uid 60001); 8 Jul 2013 20:34:22 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1373315662; bh=NVFjYqm64lXjmK6qxPkIvGUxc3+u5v2b7CNKU5jD0aU=; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=QpoT9SvCU07nEmf/5aYVVD1K0m6mv28HC2j1fr3vXsfZadXeH7YVDqxcOQvsCKp0hNt7HMDyJOPGP5ZwLkIEgzSMwXrplYPzho24XfCEflxu0mj19bDErFk2/uJVB6ncZk7f9D5qUo/50KyKwiQA2YPaoodHuJtmsVpqYf+qOwg=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com.au; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=ZDkx+965YM6fbu3iZh69Qsb1ZbGsK4gRzUHfbgvGV05APu7HvHnXxeqZNK1BQL6uSgHQsqlQWpKndMUYNBeSCRs1/jJn/eqe2qZEiNgecSPCFsPuFpqtjCdHt0gBFkRB9D1KRFxDvENMIAs10pyfA6E9KjRYHODQB/kQI1ZCBa4= ; 
X-YMail-OSG: 9S2ex_sVM1mSagR.JyY2tyQqRg_VdV2BCrEhP43c6iBXvoE uqRm20I1GAQ0qIfGAbin4on6vs9TbjLiYJThPNOeLsm8S18qbjSEwt3ylGMK OyPoHtO2eeZiVK71m6Wy.hIW2XTpKeaqiRtjsHmvcfRHJCogwt7EPpwLXZel 5N3FCelAMpmmn8qxlKqJ1SVMhD970DtHtm1H3qopzsvGZ3iNw8_WN1Pa491J 8cnMVJOQkWlWd.w.76gGBTQd8NWsxY2tRwO0d_2rrckzzJysyVU4niPtqM72 0Elpu1oAzSNeF3tfsPoJR_77jZi..4BHZsutNCZn8yuFpHxSTIxPxVwyIFYS 46LZRIAZC7SKK8N0K1uZKMXKVKW55Ly1mogbu4zQ4O2HA9BP9Q1pmfjzUHGo L.pWMyzLH5nuJ5hCATk0JrV69NUqtVkm7.ma1cB_I.FLyn6uQYmxXBvXlYrl w2ZTO3Wmk.egUNKaGGC.ny4dHFgz.zsZdkPU0eFa9K0cZvvmTI2cpEgVT6IH osnb.Zn96cNzfug7QKx_4N2gk2suYA6W8QGOQA2qw5W_BSQTf33Ka0g4DYzW q3txH_kYir7rmXXCy3QFM9Ufz7ruHmxjeqvOjyNjff7WzZu7ZnN5Wmav3rWm dMg47B3w8S_wgtL6OjAnTcWoP9RykwqCGctSmK9nyEPalu6plxzHnhVMyGdP 0_vg70PvWyxbkQD1RLyrvoXE.BYxSeoH7ZCRIyvqCnx7195s4N3Q.3yv99T7 0aYrxglI2UmFJZlKDNHgEpy25OI_jUVyk1XJOrR7FoaVHFYet_bIl8Z1RaXD gPScx7QHcVRzjtzK7v2tDuycwe5ZPouTLAoN7Xis0bXHYtDuQoiYg5lqSvqf XBitPpL4N_2w-
Received: from [58.164.1.122] by web142504.mail.bf1.yahoo.com via HTTP; Mon, 08 Jul 2013 13:34:22 PDT
X-Rocket-MIMEInfo: 002.001, Pl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gRnJvbTogTGFuYSBCbGFjayA8c2lja21pbmRAbGF2YWJpdC5jb20.Cj5UbzogVG9tIFNwYXJrcyA8dG9tX2Ffc3BhcmtzQHlhaG9vLmNvbS5hdT4gCj5DYzogImR0bi11c2Vyc0BpcnRmLm9yZyIgPGR0bi11c2Vyc0BpcnRmLm9yZz4gCj5TZW50OiBUdWVzZGF5LCA5IEp1bHkgMjAxMyA1OjU2IEFNCj5TdWJqZWN0OiBSZTogW2R0bi11c2Vyc10gW1Byb3BoZXRdIGJ1bmRsZS9kYXRhYmFzZSBlcnJvcnMKPiAKPgo.T24gMjA6MTkgU3VuIDA3IEp1bAEwAQEBAQ--
X-Mailer: YahooMailWebService/0.8.148.557
References: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com> <20130708195637.GA1743@glow>
Message-ID: <1373315662.87252.YahooMailNeo@web142504.mail.bf1.yahoo.com>
Date: Mon, 8 Jul 2013 13:34:22 -0700 (PDT)
From: Tom Sparks <tom_a_sparks@yahoo.com.au>
To: Lana Black <sickmind@lavabit.com>
In-Reply-To: <20130708195637.GA1743@glow>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Cc: "dtn-users@irtf.org" <dtn-users@irtf.org>
Subject: Re: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: Tom Sparks <tom_a_sparks@yahoo.com.au>
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Mon, 08 Jul 2013 20:34:29 -0000

>________________________________=0A> From: Lana Black <sickmind@lavabit.co=
m>=0A>To: Tom Sparks <tom_a_sparks@yahoo.com.au> =0A>Cc: "dtn-users@irtf.or=
g" <dtn-users@irtf.org> =0A>Sent: Tuesday, 9 July 2013 5:56 AM=0A>Subject: =
Re: [dtn-users] [Prophet] bundle/database errors=0A> =0A>=0A>On 20:19 Sun 0=
7 Jul=A0 =A0=A0=A0, Tom Sparks wrote:=0A>> I have just got around to connec=
ting two computing=0A>> I am using ProphetRouter=0A>> =0A>> I am getting th=
ese error messages:=0A>> "=0A>> [1373252007.147300 /dtn/storage/bundles err=
or] update(98): bundle doesn't exist in table=0A>> [1373252007.147319 /dtn/=
bundle/actions critical] error updating bundle 98 in data store!!=0A>> "=0A=
>> I am running the bleeding edge version=0A>> =0A>> ---=0A>> tom_a_sparks =
"It's a nerdy thing I like to do"=0A>> Child of the Internet born 1983=0A>>=
 PGP ID: A7EF6006=0A>> Please use ISO approved file formats excluding Offic=
e Open XML - http://www.gnu.org/philosophy/no-word-attachments.html=0A>> Ub=
untu wiki page https://wiki.ubuntu.com/tomsparks=0A>=0A>> _________________=
______________________________=0A>> dtn-users mailing list=0A>> dtn-users@i=
rtf.org=0A>> https://www.irtf.org/mailman/listinfo/dtn-users=0A>=0A>Hi Tom,=
=0A>=0A>Could you send me dtn.conf example to reproduce this error? =0A=0As=
ee bellow=0A=0Abased on earlier thread <http://www.ietf.org/mail-archive/we=
b/dtn-interest/current/msg04745.html>=0AI have installed IBR-DTN=0A>=0A----=
------ cut here----------=0A=0Aconsole set addr 127.0.0.1=0Aconsole set por=
t 5050=0Aset shorthostname [lindex [split [info hostname] .] 0]=0Aconsole s=
et prompt "$shorthostname dtn% "=0Astorage set type berkeleydb=0Astorage se=
t server_port 62345=0Astorage set schema /etc/DS.xsd=0Aset dbdir "./db"=0As=
torage set payloaddir "./db/bundles"=0Astorage set dbname=A0=A0=A0=A0 DTN=
=0Astorage set dbdir=A0=A0=A0=A0=A0 $dbdir=0Aroute set type prophet=0Aroute=
 local_eid "dtn://[info hostname].dtn"=0Ainterface add tcp0 tcp=0Adiscovery=
 add bonjourd bonjour=0A=0Alog /logs/ info ""=0A# Rotate the log every 3600=
 seconds (1 hour)=0A# the initial call to rotate (after the proc) is requir=
ed to=0A# start the proc running every hour.=0A#proc rotate {} {=0A#=A0=A0=
=A0 set date [ clock format [ clock seconds ] -format "%Y-%m-%d-%H" ]=0A#=
=A0=A0=A0 set new "./db/logs/[info hostname]/dtnd.$date.log"=0A#=A0=A0=A0 f=
ile rename "./db/logs/dtnd.log" $new=0A#=A0=A0=A0 log rotate=0A#=A0=A0=A0 a=
fter 3600000 rotate=0A#}=0A#rotate=0A-------cut here----------------=0A

From dimigiotas@gmail.com  Tue Jul  9 16:10:05 2013
Return-Path: <dimigiotas@gmail.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5E76F11E819C for <dtn-users@ietfa.amsl.com>; Tue,  9 Jul 2013 16:10:05 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.597
X-Spam-Level: 
X-Spam-Status: No, score=-2.597 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HTML_MESSAGE=0.001, NORMAL_HTTP_TO_IP=0.001, NO_RELAYS=-0.001, WEIRD_PORT=0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id j9POlFkASNoU for <dtn-users@ietfa.amsl.com>; Tue,  9 Jul 2013 16:10:04 -0700 (PDT)
Received: from mail-ea0-x22a.google.com (mail-ea0-x22a.google.com [IPv6:2a00:1450:4013:c01::22a]) by ietfa.amsl.com (Postfix) with ESMTP id 3517811E8193 for <dtn-users@irtf.org>; Tue,  9 Jul 2013 16:10:04 -0700 (PDT)
Received: by mail-ea0-f170.google.com with SMTP id h10so4453610eaj.1 for <dtn-users@irtf.org>; Tue, 09 Jul 2013 16:10:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=IspoWQjbQLHF551OH/Mw06eMTe0Wd0ZDeVH0Z69u4ic=; b=wz0URPJDtA0Tu+chP1B2Y6RW15NOH0jaK33OlhTi+JhAFekm31dU5SzjCFERgLShj1 6/QoevN+Q9JxnLycR6k3llxbboPNthVgi9y8T7AIw2FPZ6VOkaQ3AL4uC9of4OUZWyIQ lQ3f20lrQX1yvwel/BrwXVCtIXfCawxEPuIcLzP7TjH9H5HcOi0DH7xpMlVZfC58DsKH KgX+ktqfZquqeTHXvUnAUbm5SmtLRDP4wS37JHKLcxMn8uPA9Gwdbbq+MV3y6Fz8HSVs RhXEwIwf6hrg7mWdLxLp5sGgP0PdU3cvvnuwUsmOlOWRrcWm6Ydkal53DBjypRUrgw7S 9E4g==
MIME-Version: 1.0
X-Received: by 10.15.63.204 with SMTP id m52mr33201610eex.59.1373411403329; Tue, 09 Jul 2013 16:10:03 -0700 (PDT)
Received: by 10.223.177.137 with HTTP; Tue, 9 Jul 2013 16:10:03 -0700 (PDT)
Date: Wed, 10 Jul 2013 02:10:03 +0300
Message-ID: <CAEd7QsouoGmbUP=o_MVeuZ7rdtSi8LL2BU7KU+WiEu7Xt-6u1w@mail.gmail.com>
From: Dimitrios Giotas <dimigiotas@gmail.com>
To: dtn-users@irtf.org
Content-Type: multipart/alternative; boundary=001a1132f848d39bc804e11c42a3
Subject: [dtn-users] ibr-dtn and dtn2 data exchange
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 09 Jul 2013 23:13:16 -0000

--001a1132f848d39bc804e11c42a3
Content-Type: text/plain; charset=ISO-8859-1

Hello,

I am tryng to use dtnsend/recv between a laptop that runs ibrdtn and
another that runs dtn2.

When I use the following commads

On IBR : dtnsend dtn://hp/filetransfer /home/ibrdtn/...

On Dtn2 : dtnrecv dtn://dell/filetransfer

I get the following error in the dtn2 daemon :

[1373409728.490016 /dtn/bundle/extblock/aeb info] consume() begin
[1373409728.490091 /dtn/bundle/extblock/aeb info] oasys::Time now():
3315161066
[1373409728.490128 /dtn/bundle/extblock/aeb info] Bundle Age: 2576
[1373409728.490157 /dtn/bundle/extblock/aeb info] consume() end
[1373409728.490493 /dtn/bundle/protocol info] handle_bundle_received: begin
[1373409728.490562 /S10 info] 2013-07-09
22:42:08,1373409728.490538,dtn://dell,RX,4,dtn://hp/routing,426717728.4,dtn://dell/routing,60,,
10.0.0.228:4556,,,0.000000,,0,link
[1373409728.490699 /dtn/bundle/daemon info] BUNDLE_RECEIVED bundle id 36
[dtn://hp/routing -> dtn://dell/routing 4 byte payload] prevhop dtn://hp
(74 bytes recvd)
[1373409728.490745 /dtn/bundle/daemon info] handle_bundle_received:
validating bundle: calling BlockProcessors?
[1373409728.490771 /dtn/bundle/protocol info] BundleProtocol::validate begin
[1373409728.490794 /dtn/bundle/protocol info] validating each individual
blocks
[1373409728.490824 /dtn/bundle/protocol info] BundleProtocol::validate end
[1373409728.490854 /dtn/bundle/expiration info] adding bundle to pending
list
[1373409728.505117 /dtn/bundle/expiration info] [AEB]: AgeBlock exists.
[1373409728.505217 /dtn/bundle/expiration info] [AEB]: expiring in
4294964780 seconds
[1373409728.505266 /dtn/bundle/expiration warning] scheduling IMMEDIATE
expiration for bundle id 36: [expiration 60, creation time 426717728.4,
offset 946684800, now 1373409728.505098]
[1373409728.505458 /dtn/bundle/daemon info] BUNDLE_EXPIRED bundle id 36
[dtn://hp/routing -> dtn://dell/routing 4 byte payload]

Basically it immediately deletes the bundle, because of faulty timestamp if
I get this right.
Any ideas on what might be causing that and how to fix it?
Thank you.

Regards
Dimitris Giotas

--001a1132f848d39bc804e11c42a3
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><div><div><div><div><div><div><div><div><div>Hello,<b=
r><br></div>I am tryng to use dtnsend/recv between a laptop that runs ibrdt=
n and another that runs dtn2.<br></div><br>When I use the following commads=
<br>
</div>
<br>On IBR : dtnsend dtn://hp/filetransfer /home/ibrdtn/...<br></div><br>On=
 Dtn2 : dtnrecv dtn://dell/filetransfer<br><br></div>I get the following er=
ror in the dtn2 daemon : <br><br>[1373409728.490016 /dtn/bundle/extblock/ae=
b info] consume() begin<br>

[1373409728.490091 /dtn/bundle/extblock/aeb info] oasys::Time now(): <a hre=
f=3D"tel:3315161066" value=3D"+13315161066" target=3D"_blank">3315161066</a=
><br>[1373409728.490128 /dtn/bundle/extblock/aeb info] Bundle Age: 2576<br>=
[1373409728.490157 /dtn/bundle/extblock/aeb info] consume() end<br>
[1373409728.490493 /dtn/bundle/protocol info] handle_bundle_received: begin=
<br>
[1373409728.490562 /S10 info] 2013-07-09 22:42:08,1373409728.490538,dtn://d=
ell,RX,4,dtn://hp/routing,426717728.4,dtn://dell/routing,60,,<a href=3D"htt=
p://10.0.0.228:4556" target=3D"_blank">10.0.0.228:4556</a>,,,0.000000,,0,li=
nk<br>
[1373409728.490699
 /dtn/bundle/daemon info] BUNDLE_RECEIVED bundle id 36 [dtn://hp/routing
 -&gt; dtn://dell/routing 4 byte payload] prevhop dtn://hp (74 bytes=20
recvd)<br>
[1373409728.490745 /dtn/bundle/daemon info] handle_bundle_received: validat=
ing bundle: calling BlockProcessors?<br>[1373409728.490771 /dtn/bundle/prot=
ocol info] BundleProtocol::validate begin<br>[1373409728.490794 /dtn/bundle=
/protocol info] validating each individual blocks<br>

[1373409728.490824 /dtn/bundle/protocol info] BundleProtocol::validate end<=
br>[1373409728.490854 /dtn/bundle/expiration info] adding bundle to pending=
 list<br>[1373409728.505117 /dtn/bundle/expiration info] [AEB]: AgeBlock ex=
ists.<br>

[1373409728.505217 /dtn/bundle/expiration info] [AEB]: expiring in 42949647=
80 seconds<br>[1373409728.505266
 /dtn/bundle/expiration warning] scheduling IMMEDIATE expiration for=20
bundle id 36: [expiration 60, creation time 426717728.4, offset=20
946684800, now 1373409728.505098]<br>
[1373409728.505458 /dtn/bundle/daemon info] BUNDLE_EXPIRED bundle id 36=20
[dtn://hp/routing -&gt; dtn://dell/routing 4 byte payload]<br><br></div>Bas=
ically it immediately deletes the bundle, because of faulty timestamp if I =
get this right.<br></div>Any ideas on what might be causing that and how to=
 fix it?<br>
</div>Thank you.<br><br></div>Regards<br></div>Dimitris Giotas<br></div>

--001a1132f848d39bc804e11c42a3--

From sickmind@lavabit.com  Tue Jul  9 16:42:01 2013
Return-Path: <sickmind@lavabit.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 14B6D21F9C84 for <dtn-users@ietfa.amsl.com>; Tue,  9 Jul 2013 16:42:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.522
X-Spam-Level: 
X-Spam-Status: No, score=-1.522 tagged_above=-999 required=5 tests=[AWL=-1.077, BAYES_00=-2.599, FRT_BELOW2=2.154]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VF5XMAlGYj9q for <dtn-users@ietfa.amsl.com>; Tue,  9 Jul 2013 16:41:57 -0700 (PDT)
Received: from karen.lavabit.com (karen.lavabit.com [72.249.41.33]) by ietfa.amsl.com (Postfix) with ESMTP id 1E89A21F9BF9 for <dtn-users@irtf.org>; Tue,  9 Jul 2013 16:41:49 -0700 (PDT)
Received: from d.earth.lavabit.com (d.earth.lavabit.com [192.168.111.13]) by karen.lavabit.com (Postfix) with ESMTP id C01C511C1B0; Tue,  9 Jul 2013 18:41:48 -0500 (CDT)
Received: from localhost (pppoe.178-66-164-210.dynamic.avangarddsl.ru [178.66.164.210]) by lavabit.com with ESMTP id 71RGG0HCPHGK; Tue, 09 Jul 2013 18:41:48 -0500
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=tdN9fY088CYmZGWHugwRtNKgq85qj+PMMGPZWH/Pgd9D1zJGOdAHO1lepBtoWFyBPQiSNCqlRwPMXpZSU1fdFYNS8yCfdlrx/HhVy28p30BfNAzCmBNSFg0Amuu9Sl+9IYzt2IkmYXLMKj07lICq9wc9z1bGFvUA2S+PA35c6+Q=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:Content-Disposition:Content-Transfer-Encoding:In-Reply-To:User-Agent;
Date: Tue, 9 Jul 2013 23:42:26 +0000
From: Lana Black <sickmind@lavabit.com>
To: Tom Sparks <tom_a_sparks@yahoo.com.au>
Message-ID: <20130709234226.GA19065@glow>
References: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com> <20130708195637.GA1743@glow> <1373315662.87252.YahooMailNeo@web142504.mail.bf1.yahoo.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <1373315662.87252.YahooMailNeo@web142504.mail.bf1.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
Cc: "dtn-users@irtf.org" <dtn-users@irtf.org>
Subject: Re: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 09 Jul 2013 23:42:01 -0000

On 13:34 Mon 08 Jul     , Tom Sparks wrote:
> >________________________________
> > From: Lana Black <sickmind@lavabit.com>
> >To: Tom Sparks <tom_a_sparks@yahoo.com.au> 
> >Cc: "dtn-users@irtf.org" <dtn-users@irtf.org> 
> >Sent: Tuesday, 9 July 2013 5:56 AM
> >Subject: Re: [dtn-users] [Prophet] bundle/database errors
> > 
> >
> >On 20:19 Sun 07 Jul     , Tom Sparks wrote:
> >> I have just got around to connecting two computing
> >> I am using ProphetRouter
> >> 
> >> I am getting these error messages:
> >> "
> >> [1373252007.147300 /dtn/storage/bundles error] update(98): bundle doesn't exist in table
> >> [1373252007.147319 /dtn/bundle/actions critical] error updating bundle 98 in data store!!
> >> "
> >> I am running the bleeding edge version
> >> 
> >> ---
> >> tom_a_sparks "It's a nerdy thing I like to do"
> >> Child of the Internet born 1983
> >> PGP ID: A7EF6006
> >> Please use ISO approved file formats excluding Office Open XML - http://www.gnu.org/philosophy/no-word-attachments.html
> >> Ubuntu wiki page https://wiki.ubuntu.com/tomsparks
> >
> >> _______________________________________________
> >> dtn-users mailing list
> >> dtn-users@irtf.org
> >> https://www.irtf.org/mailman/listinfo/dtn-users
> >
> >Hi Tom,
> >
> >Could you send me dtn.conf example to reproduce this error? 
> 
> see bellow
> 
> based on earlier thread <http://www.ietf.org/mail-archive/web/dtn-interest/current/msg04745.html>
> I have installed IBR-DTN
> >
> ---------- cut here----------
> 
> console set addr 127.0.0.1
> console set port 5050
> set shorthostname [lindex [split [info hostname] .] 0]
> console set prompt "$shorthostname dtn% "
> storage set type berkeleydb
> storage set server_port 62345
> storage set schema /etc/DS.xsd
> set dbdir "./db"
> storage set payloaddir "./db/bundles"
> storage set dbname     DTN
> storage set dbdir      $dbdir
> route set type prophet
> route local_eid "dtn://[info hostname].dtn"
> interface add tcp0 tcp
> discovery add bonjourd bonjour
> 
> log /logs/ info ""
> # Rotate the log every 3600 seconds (1 hour)
> # the initial call to rotate (after the proc) is required to
> # start the proc running every hour.
> #proc rotate {} {
> #    set date [ clock format [ clock seconds ] -format "%Y-%m-%d-%H" ]
> #    set new "./db/logs/[info hostname]/dtnd.$date.log"
> #    file rename "./db/logs/dtnd.log" $new
> #    log rotate
> #    after 3600000 rotate
> #}
> #rotate
> -------cut here----------------
> 

It looks like the PrOPHET code is written to handle bundles itself and
not through BundleDaemon. It doesn't call BundleActions::store_add() in
any way, which results in this problem.

I suppose the PrOPHET code should be rewritten to send bundles through
BundleDaemon, but I'd like a comment from somebody with better knowledge
of overall architecture.


From sickmind@lavabit.com  Tue Jul  9 16:54:35 2013
Return-Path: <sickmind@lavabit.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3545321F9CC1 for <dtn-users@ietfa.amsl.com>; Tue,  9 Jul 2013 16:54:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.061
X-Spam-Level: 
X-Spam-Status: No, score=-2.061 tagged_above=-999 required=5 tests=[AWL=0.539,  BAYES_00=-2.599]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tqYRCensqQmQ for <dtn-users@ietfa.amsl.com>; Tue,  9 Jul 2013 16:54:30 -0700 (PDT)
Received: from karen.lavabit.com (karen.lavabit.com [72.249.41.33]) by ietfa.amsl.com (Postfix) with ESMTP id BC51D21F9C55 for <dtn-users@irtf.org>; Tue,  9 Jul 2013 16:54:30 -0700 (PDT)
Received: from d.earth.lavabit.com (d.earth.lavabit.com [192.168.111.13]) by karen.lavabit.com (Postfix) with ESMTP id 95CCA11C1DB; Tue,  9 Jul 2013 18:54:29 -0500 (CDT)
Received: from localhost (pppoe.178-66-164-210.dynamic.avangarddsl.ru [178.66.164.210]) by lavabit.com with ESMTP id 7EU95DOJHC3U; Tue, 09 Jul 2013 18:54:29 -0500
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=1WH3bPImWIcNDclPNpy5YVPweB6Cx8s2Gy2Bt75UNhvj0wGG3wqFjvZinFVbjrYWL/sBc7Tt4dYrOFeieHh/GjPRlSrD64dPeGQnaLgZLoT70wsx1oe6jasumL7FF8+Wr+asJokgVCeXdoJY9IZPTrllaewLPb8fVrNO1C1+Zz4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:Content-Disposition:In-Reply-To:User-Agent;
Date: Tue, 9 Jul 2013 23:55:07 +0000
From: Lana Black <sickmind@lavabit.com>
To: Dimitrios Giotas <dimigiotas@gmail.com>
Message-ID: <20130709235507.GB19065@glow>
References: <CAEd7QsouoGmbUP=o_MVeuZ7rdtSi8LL2BU7KU+WiEu7Xt-6u1w@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAEd7QsouoGmbUP=o_MVeuZ7rdtSi8LL2BU7KU+WiEu7Xt-6u1w@mail.gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
Cc: dtn-users@irtf.org
Subject: Re: [dtn-users] ibr-dtn and dtn2 data exchange
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 09 Jul 2013 23:54:35 -0000

On 02:10 Wed 10 Jul     , Dimitrios Giotas wrote:
> Hello,
> 
> I am tryng to use dtnsend/recv between a laptop that runs ibrdtn and
> another that runs dtn2.
> 
> When I use the following commads
> 
> On IBR : dtnsend dtn://hp/filetransfer /home/ibrdtn/...
> 
> On Dtn2 : dtnrecv dtn://dell/filetransfer
> 
> I get the following error in the dtn2 daemon :
> 
> [1373409728.490016 /dtn/bundle/extblock/aeb info] consume() begin
> [1373409728.490091 /dtn/bundle/extblock/aeb info] oasys::Time now():
> 3315161066
> [1373409728.490128 /dtn/bundle/extblock/aeb info] Bundle Age: 2576
> [1373409728.490157 /dtn/bundle/extblock/aeb info] consume() end
> [1373409728.490493 /dtn/bundle/protocol info] handle_bundle_received: begin
> [1373409728.490562 /S10 info] 2013-07-09
> 22:42:08,1373409728.490538,dtn://dell,RX,4,dtn://hp/routing,426717728.4,dtn://dell/routing,60,,
> 10.0.0.228:4556,,,0.000000,,0,link
> [1373409728.490699 /dtn/bundle/daemon info] BUNDLE_RECEIVED bundle id 36
> [dtn://hp/routing -> dtn://dell/routing 4 byte payload] prevhop dtn://hp
> (74 bytes recvd)
> [1373409728.490745 /dtn/bundle/daemon info] handle_bundle_received:
> validating bundle: calling BlockProcessors?
> [1373409728.490771 /dtn/bundle/protocol info] BundleProtocol::validate begin
> [1373409728.490794 /dtn/bundle/protocol info] validating each individual
> blocks
> [1373409728.490824 /dtn/bundle/protocol info] BundleProtocol::validate end
> [1373409728.490854 /dtn/bundle/expiration info] adding bundle to pending
> list
> [1373409728.505117 /dtn/bundle/expiration info] [AEB]: AgeBlock exists.
> [1373409728.505217 /dtn/bundle/expiration info] [AEB]: expiring in
> 4294964780 seconds
> [1373409728.505266 /dtn/bundle/expiration warning] scheduling IMMEDIATE
> expiration for bundle id 36: [expiration 60, creation time 426717728.4,
> offset 946684800, now 1373409728.505098]
> [1373409728.505458 /dtn/bundle/daemon info] BUNDLE_EXPIRED bundle id 36
> [dtn://hp/routing -> dtn://dell/routing 4 byte payload]
> 
> Basically it immediately deletes the bundle, because of faulty timestamp if
> I get this right.
> Any ideas on what might be causing that and how to fix it?
> Thank you.
> 
> Regards
> Dimitris Giotas

> _______________________________________________
> dtn-users mailing list
> dtn-users@irtf.org
> https://www.irtf.org/mailman/listinfo/dtn-users

Hi,

First check that clocks on both machines are synchronized. If that is
not an issue, check that the bundle sent really has an invalid timestamp
(wireshark may can handy at this point). If the timestamp is valid, then
it is DTN bug, otherwise check with IBR developers.

With best regards.



From sickmind@lavabit.com  Wed Jul 10 02:42:09 2013
Return-Path: <sickmind@lavabit.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0BA1021F9EFB for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 02:42:09 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level: 
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aKQjA8KtYCWI for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 02:42:04 -0700 (PDT)
Received: from karen.lavabit.com (karen.lavabit.com [72.249.41.33]) by ietfa.amsl.com (Postfix) with ESMTP id 3807F21F9EF2 for <dtn-users@irtf.org>; Wed, 10 Jul 2013 02:42:03 -0700 (PDT)
Received: from d.earth.lavabit.com (d.earth.lavabit.com [192.168.111.13]) by karen.lavabit.com (Postfix) with ESMTP id 4911D11C1B0; Wed, 10 Jul 2013 04:41:56 -0500 (CDT)
Received: from localhost (193.160.158.7) by lavabit.com with ESMTP id 927T33I36V6G; Wed, 10 Jul 2013 04:41:56 -0500
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=B9JROwMpG7o+hTv/9KkQVNh/aTE5qylXhodIqempcmn3DIjhXW7wuJbFmWhcMR9Hyw4I8en5wuGlyVSieW0GvI13p4PJHSTzOk+07IYgfHU+NcXBObnrHazlxo9oTaORVnqBYdDe+ScDS7BVged6dIEgemUFKcBYOvQ5fPKNhjo=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:Content-Disposition:In-Reply-To:User-Agent;
Date: Wed, 10 Jul 2013 09:42:15 +0000
From: Lana Black <sickmind@lavabit.com>
To: Dimitrios Giotas <dimigiotas@gmail.com>
Message-ID: <20130710094215.GA1491@loki>
References: <CAEd7QsouoGmbUP=o_MVeuZ7rdtSi8LL2BU7KU+WiEu7Xt-6u1w@mail.gmail.com> <20130709235507.GB19065@glow> <CAEd7QspWLXJP9abRfRVWTXZGBqgnmipQMLz87TgUgGurBbRpVA@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAEd7QspWLXJP9abRfRVWTXZGBqgnmipQMLz87TgUgGurBbRpVA@mail.gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
Cc: dtn-users maillist <dtn-users@irtf.org>
Subject: Re: [dtn-users] ibr-dtn and dtn2 data exchange
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Wed, 10 Jul 2013 09:42:09 -0000

On 03:05 Wed 10 Jul     , Dimitrios Giotas wrote:
> Well they are synchronized.
> 
> What troubles me is that when i run the ibr daemon with the timestamp
> option i get almost identical times in both daemons. I am currently getting
> 1373414296,... in both. However in both daemons i get that the bundle was
> created in 426819496 which plus the offset 946684800 is less than the
> current time. Therefore the bundle is dropped immediately.
> I guess that makes the bundles timestamp invalid right?
> 
> Do you know a way to make the dtn2 daemon disregard the timestamps?
> 
> Thank you for your fast reply.
> 
> Regards
> Dimitris

Actually, 426819496 corresponds to Jul 12, 1983, which plus the offset
will be Jul 11, 2013, which is tomorrow. Disregarding the age block can
be done with 'block set age_inbound_processing false' command,
although I strongly suggest you to check the actual bundle contents
transmitted on the network to be sure this is not a DTN2 bug.



From elwynd@folly.org.uk  Wed Jul 10 05:29:36 2013
Return-Path: <elwynd@folly.org.uk>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 97E0B11E8119 for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 05:29:36 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.222
X-Spam-Level: 
X-Spam-Status: No, score=-1.222 tagged_above=-999 required=5 tests=[AWL=-0.776, BAYES_00=-2.599, FRT_BELOW2=2.154]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dX61Of2ir5pM for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 05:29:33 -0700 (PDT)
Received: from a.painless.aa.net.uk (a.painless.aa.net.uk [IPv6:2001:8b0:0:30::51bb:1e33]) by ietfa.amsl.com (Postfix) with ESMTP id 21C1321FA000 for <dtn-users@irtf.org>; Wed, 10 Jul 2013 05:29:28 -0700 (PDT)
Received: from mightyatom.folly.org.uk ([81.187.254.250]) by a.painless.aa.net.uk with esmtp (Exim 4.77) (envelope-from <elwynd@folly.org.uk>) id 1UwtWH-0001iN-F6; Wed, 10 Jul 2013 13:29:17 +0100
From: Elwyn Davies <elwynd@folly.org.uk>
To: Lana Black <sickmind@lavabit.com>
In-Reply-To: <20130709234226.GA19065@glow>
References: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com> <20130708195637.GA1743@glow> <1373315662.87252.YahooMailNeo@web142504.mail.bf1.yahoo.com> <20130709234226.GA19065@glow>
Content-Type: text/plain
Organization: Folly Consulting
Date: Wed, 10 Jul 2013 13:24:43 +0100
Message-Id: <1373459083.4524.47070.camel@mightyatom>
Mime-Version: 1.0
X-Mailer: Evolution 2.26.3 
Content-Transfer-Encoding: 7bit
Cc: "dtn-users@irtf.org" <dtn-users@irtf.org>, Tom Sparks <tom_a_sparks@yahoo.com.au>
Subject: Re: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Wed, 10 Jul 2013 12:29:36 -0000

Hi, Tom.

I regret to say that the PRoPHET code in DTN2 is not maintained and (as
Lana mentioned) not fully integrated into the DTN2 'ethos'.

I worked a fair bit with it some years ago but it had a number of
problems which made it essentially unusable (not helped by hardware
issues around the dreadful buggy implementations of ad hoc wi-fi on most
devices).

In principle, one of those problems is now fixed, but I haven't looked
to see what would be needed to allow PRoPHET to function correctly.  The
problem was that PRoPHET is much more dependent on the forwarding
history of bundles than some of the other routing protocols.  Up until
the end of 2011 the forwarding history was not saved to persistent
storage; this was in turn because there was no persistent storage of
link information.  I fixed this back in 2011.  Now after a restart of
the daemon, links that are recreated (whether static or opportunistic)
will be consistently named which makes the forwarding history usable.

However in order to get PRoPHET working at all across restarts before
2011 I put in some (extra) fudges which meant that bundles that hadn't
been forwarded by PRoPHET before the restart were effectively ignored
and never got forwarded.  This was never satisfactory but there was no
good way to fix the problem before 2011. [Table based routing made the
opposite decision and just decided that anything in the persistent store
should be treated as newly received.]

The structural problems of the code (partly due to an over-zealous usage
of a particular design pattern IMHO) and the fact that it implements
PRoPHET v1 rather than the current v2 indicated that a wholesale rewrite
was needed.  The original intention was that this should be done as part
of the N4C project, but for various reasons this never happened.  It is
still on my list of jobs to do and might actually happen sometime before
2020 ;-)

One final consideration was that the author of the code was originally
interested only in Bluetooth and, while using TCP shouldn't be a
problem, I have no idea if there are lurking gotchas around this area.

All this being said, I thought the system should work if you don't
restart the daemon or there are no bundles pending when the daemon is
restarted. 

Lana:
I don't think the analysis below is correct.  store_add is called via
add_to_pending in BundleDaemon:handle_bundle_received whatever router is
in use.  But clearly the bundle has disappeared when the forwarding log
is updated or some such.

Tom:
If you want more assistance on this one can you turn on debug level
logging on dtnd and send us the resulting log when you get this problem.
Life is a bit busy at the moment and I don't have time to set up the
relevant scenario. 

Regards,
Elwyn

On Tue, 2013-07-09 at 23:42 +0000, Lana Black wrote:
> On 13:34 Mon 08 Jul     , Tom Sparks wrote:
> > >________________________________
> > > From: Lana Black <sickmind@lavabit.com>
> > >To: Tom Sparks <tom_a_sparks@yahoo.com.au> 
> > >Cc: "dtn-users@irtf.org" <dtn-users@irtf.org> 
> > >Sent: Tuesday, 9 July 2013 5:56 AM
> > >Subject: Re: [dtn-users] [Prophet] bundle/database errors
> > > 
> > >
> > >On 20:19 Sun 07 Jul     , Tom Sparks wrote:
> > >> I have just got around to connecting two computing
> > >> I am using ProphetRouter
> > >> 
> > >> I am getting these error messages:
> > >> "
> > >> [1373252007.147300 /dtn/storage/bundles error] update(98): bundle doesn't exist in table
> > >> [1373252007.147319 /dtn/bundle/actions critical] error updating bundle 98 in data store!!
> > >> "
> > >> I am running the bleeding edge version
> > >> 
> > >> ---
> > >> tom_a_sparks "It's a nerdy thing I like to do"
> > >> Child of the Internet born 1983
> > >> PGP ID: A7EF6006
> > >> Please use ISO approved file formats excluding Office Open XML - http://www.gnu.org/philosophy/no-word-attachments.html
> > >> Ubuntu wiki page https://wiki.ubuntu.com/tomsparks
> > >
> > >> _______________________________________________
> > >> dtn-users mailing list
> > >> dtn-users@irtf.org
> > >> https://www.irtf.org/mailman/listinfo/dtn-users
> > >
> > >Hi Tom,
> > >
> > >Could you send me dtn.conf example to reproduce this error? 
> > 
> > see bellow
> > 
> > based on earlier thread <http://www.ietf.org/mail-archive/web/dtn-interest/current/msg04745.html>
> > I have installed IBR-DTN
> > >
> > ---------- cut here----------
> > 
> > console set addr 127.0.0.1
> > console set port 5050
> > set shorthostname [lindex [split [info hostname] .] 0]
> > console set prompt "$shorthostname dtn% "
> > storage set type berkeleydb
> > storage set server_port 62345
> > storage set schema /etc/DS.xsd
> > set dbdir "./db"
> > storage set payloaddir "./db/bundles"
> > storage set dbname     DTN
> > storage set dbdir      $dbdir
> > route set type prophet
> > route local_eid "dtn://[info hostname].dtn"
> > interface add tcp0 tcp
> > discovery add bonjourd bonjour
> > 
> > log /logs/ info ""
> > # Rotate the log every 3600 seconds (1 hour)
> > # the initial call to rotate (after the proc) is required to
> > # start the proc running every hour.
> > #proc rotate {} {
> > #    set date [ clock format [ clock seconds ] -format "%Y-%m-%d-%H" ]
> > #    set new "./db/logs/[info hostname]/dtnd.$date.log"
> > #    file rename "./db/logs/dtnd.log" $new
> > #    log rotate
> > #    after 3600000 rotate
> > #}
> > #rotate
> > -------cut here----------------
> > 
> 
> It looks like the PrOPHET code is written to handle bundles itself and
> not through BundleDaemon. It doesn't call BundleActions::store_add() in
> any way, which results in this problem.
> 
> I suppose the PrOPHET code should be rewritten to send bundles through
> BundleDaemon, but I'd like a comment from somebody with better knowledge
> of overall architecture.
> 
> _______________________________________________
> dtn-users mailing list
> dtn-users@irtf.org
> https://www.irtf.org/mailman/listinfo/dtn-users


From sickmind@lavabit.com  Wed Jul 10 05:59:16 2013
Return-Path: <sickmind@lavabit.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3116011E811F for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 05:59:16 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level: 
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[AWL=-0.001, BAYES_00=-2.599, WEIRD_PORT=0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Nt0nfA-0fFbk for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 05:59:12 -0700 (PDT)
Received: from karen.lavabit.com (karen.lavabit.com [72.249.41.33]) by ietfa.amsl.com (Postfix) with ESMTP id 4499B11E8123 for <dtn-users@irtf.org>; Wed, 10 Jul 2013 05:59:12 -0700 (PDT)
Received: from d.earth.lavabit.com (d.earth.lavabit.com [192.168.111.13]) by karen.lavabit.com (Postfix) with ESMTP id 465BF11C239; Wed, 10 Jul 2013 07:58:38 -0500 (CDT)
Received: from localhost (193.160.158.7) by lavabit.com with ESMTP id IV15RD8UADX7; Wed, 10 Jul 2013 07:58:38 -0500
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=vE21AqKIqU3ZFXX9qQVvcPy339zEDtR4Gs9gEfelAnTh/r10Zy7M6fqNTAhDtCTvCwzS4Ex6AMEgkRGq2FiZLMkRazKtfq/Sq7PpRHvI3i3UGIvkUMoi1G5QjZEhmD97MDUkr4QguqLsyb23p+AGqDEJTZbD0YVwo/Uj6rF/8sI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:Content-Disposition:In-Reply-To:User-Agent;
Date: Wed, 10 Jul 2013 12:58:57 +0000
From: Lana Black <sickmind@lavabit.com>
To: Elwyn Davies <elwynd@folly.org.uk>
Message-ID: <20130710125857.GA2307@loki>
References: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com> <20130708195637.GA1743@glow> <1373315662.87252.YahooMailNeo@web142504.mail.bf1.yahoo.com> <20130709234226.GA19065@glow> <1373459083.4524.47070.camel@mightyatom>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <1373459083.4524.47070.camel@mightyatom>
User-Agent: Mutt/1.5.21 (2010-09-15)
Cc: "dtn-users@irtf.org" <dtn-users@irtf.org>, Tom Sparks <tom_a_sparks@yahoo.com.au>
Subject: Re: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Wed, 10 Jul 2013 12:59:16 -0000

On 13:24 Wed 10 Jul     , Elwyn Davies wrote:
> Lana:
> I don't think the analysis below is correct.  store_add is called via
> add_to_pending in BundleDaemon:handle_bundle_received whatever router is
> in use.  But clearly the bundle has disappeared when the forwarding log
> is updated or some such.

I have just checked again by setting breakpoints on store_add and
store_update, and my point seems to be correct. The error in question
arises when sending prophet hello bundles. See the stacktrace below.
Store_add() doesn't seem to be called at all.

(gdb) bt
#0  dtn::BundleActions::store_update (this=0x9c65d0, bundle=0x7fffe40163c0)
    at bundling/BundleActions.cc:314                                       
#1  0x00000000004a4994 in dtn::ForwardingLog::add_entry (this=0x7fffe4016ba8,
    link=..., action=dtn::ForwardingInfo::COPY_ACTION,                       
    state=dtn::ForwardingInfo::QUEUED, custody_timer=...)
    at bundling/ForwardingLog.cc:225                     
#2  0x000000000058d4b3 in dtn::BundleActions::queue_bundle (this=0x9c65d0,
    bundle=0x7fffe40163c0, link=..., action=dtn::ForwardingInfo::COPY_ACTION,
    custody_timer=...) at bundling/BundleActions.cc:204                      
#3  0x0000000000601ff8 in dtn::ProphetBundleCore::send_bundle (
    this=0x7fffe4000a50, bundle=0x7fffe4016e20, link=0x7fffe4000df0)
    at routing/ProphetBundleCore.cc:228                             
#4  0x00000000005be920 in prophet::Encounter::send_tlv (this=0x7fffe4016130,
    tlv=0x7fffe4016350) at prophet/Encounter.cc:1046                        
#5  0x00000000005b15f1 in prophet::Encounter::send_hello (this=0x7fffe4016130,
    hf=prophet::HelloTLV::SYN, hr=prophet::ProphetTLV::NoSuccessAck, tid=0)   
    at prophet/Encounter.cc:864                                            
#6  0x00000000005b09b7 in prophet::Encounter::Encounter (this=0x7fffe4016130,
    nexthop=0x7fffe4000df0, oracle=0x7fffe4000b90, instance=1)               
    at prophet/Encounter.cc:104                               
#7  0x00000000005ac3cc in prophet::Controller::new_neighbor (
    this=0x7fffe4000b90, link=0x7fffe4000df0) at prophet/Controller.cc:123
#8  0x0000000000542d6b in dtn::ProphetRouter::handle_contact_up (
    this=0x7fffe4000910, e=0x7fffe4002e10) at routing/ProphetRouter.cc:278
#9  0x00000000004846cc in dtn::BundleEventHandler::dispatch_event (
    this=0x7fffe4000910, e=0x7fffe4002e10)                         
    at bundling/BundleEventHandler.cc:145 
#10 0x0000000000541248 in dtn::ProphetRouter::handle_event (
    this=0x7fffe4000910, e=0x7fffe4002e10) at routing/ProphetRouter.cc:89
#11 0x000000000045fedd in dtn::BundleDaemon::handle_event (this=0x9b4cd0,
    event=0x7fffe4002e10, closeTransaction=true)                         
    at bundling/BundleDaemon.cc:2946            
#12 0x000000000045fe72 in dtn::BundleDaemon::handle_event (this=0x9b4cd0,
    event=0x7fffe4002e10) at bundling/BundleDaemon.cc:2935               
#13 0x0000000000461bd2 in dtn::BundleDaemon::run (this=0x9b4cd0)
    at bundling/BundleDaemon.cc:3255                            
#14 0x0000000000461fac in non-virtual thunk to dtn::BundleDaemon::run() (
    this=0x9b4d30) at bundling/BundleDaemon.cc:3305                      
---Type <return> to continue, or q <return> to quit---
#15 0x000000000066a0aa in oasys::Thread::thread_run (this=0x9b4d30,
    thread_name=0x9b4d4c "BundleDaemon", thread_id=140737281959680)
    at thread/Thread.cc:363                                        
#16 0x0000000000669cb3 in oasys::Thread::pre_thread_run (t=0x9b4d30)
    at thread/Thread.cc:308                                         
#17 0x00007ffff60a7f3b in start_thread () from /lib64/libpthread.so.0
#18 0x00007ffff5bcc65d in clone () from /lib64/libc.so.6



From elwynd@folly.org.uk  Wed Jul 10 08:01:49 2013
Return-Path: <elwynd@folly.org.uk>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6292E11E8113 for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 08:01:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.91
X-Spam-Level: 
X-Spam-Status: No, score=-1.91 tagged_above=-999 required=5 tests=[AWL=0.688,  BAYES_00=-2.599, WEIRD_PORT=0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iYZUe1hGlOrX for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 08:01:31 -0700 (PDT)
Received: from b.painless.aa.net.uk (b.painless.aa.net.uk [IPv6:2001:8b0:0:30::51bb:1e34]) by ietfa.amsl.com (Postfix) with ESMTP id 25D1821F9B91 for <dtn-users@irtf.org>; Wed, 10 Jul 2013 08:00:50 -0700 (PDT)
Received: from mightyatom.folly.org.uk ([81.187.254.250]) by b.painless.aa.net.uk with esmtp (Exim 4.72) (envelope-from <elwynd@folly.org.uk>) id 1Uwvsn-0000n4-8O; Wed, 10 Jul 2013 16:00:41 +0100
From: Elwyn Davies <elwynd@folly.org.uk>
To: Lana Black <sickmind@lavabit.com>
In-Reply-To: <20130710125857.GA2307@loki>
References: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com> <20130708195637.GA1743@glow> <1373315662.87252.YahooMailNeo@web142504.mail.bf1.yahoo.com> <20130709234226.GA19065@glow> <1373459083.4524.47070.camel@mightyatom> <20130710125857.GA2307@loki>
Content-Type: text/plain
Organization: Folly Consulting
Date: Wed, 10 Jul 2013 15:56:05 +0100
Message-Id: <1373468165.4524.47130.camel@mightyatom>
Mime-Version: 1.0
X-Mailer: Evolution 2.26.3 
Content-Transfer-Encoding: 7bit
Cc: "dtn-users@irtf.org" <dtn-users@irtf.org>, Tom Sparks <tom_a_sparks@yahoo.com.au>
Subject: Re: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Wed, 10 Jul 2013 15:01:49 -0000

Hi, Lana.

Ah, yes.  I was forgetting that the choice was made to send hellos in
bundles with the DTN2 implementation (it can be done otherwise).

And yes the code should call (more accurately post an event on)
BundleDaemon::handle_bundle_received 
cf. PingRegistration::deliver_bundle which also creates bundles to send.


I am intrigued that I never hit this problem when I was using PRoPHET...
but thinking about it this is an artefact of the previous non-storing of
the forwarding log. Yes...

> diff -r 0400f64a34e4 -r c1c472ab77af servlib/bundling/BundleActions.cc
> --- a/servlib/bundling/BundleActions.cc Fri Apr 29 17:56:38 2011 +0100
> +++ b/servlib/bundling/BundleActions.cc Mon Aug 29 16:16:29 2011 +0100
> @@ -165,6 +165,8 @@
>      
>      bundle->fwdlog()->add_entry(link, action, ForwardingInfo::QUEUED,
>                                  custody_timer);
> +    BundleDaemon *daemon = BundleDaemon::instance();
> +    daemon->actions()->store_update(bundle);
>  
>      log_debug("adding *%p to link %s's queue (length %u)",
>                bundle, link->name(), link->bundles_queued());

Back when I was playing with PRoPHET the forwarding log wasn't being
updated, so this problem wouldn't have raised its ugly head.

Looking at this code, you are right that all the stuff in
ProphetBundleCore::send_bundle is an ugly hack to create a 'transient'
bundle that is sent immediately and never appears in the pending queue
etc. Yuck. Yes indeed. The PRoPHET implementation did not play by the
rules.  And after the bundle has been sent it gets deleted and that will
log an error but the return value is ignored - see
ProphetBundleCore::drop_bundle last statement - so the process will keep
running if it ever gets there - at the moment it will barf again when
the forwarding log gets updated.

A quick and dirty fix would probably be to build a BundleReceivedEvent
and add 
    BundleDaemon::post_and_wait(new BundleReceivedEvent(bundle,
EVENTSRC_ADMIN));
to ProphetBundleCore::send_bundle before all the link manipulation
starts, but with daemon_only_ set to True in the event so it doesn't get
fed to the router.

Regards,
Elwyn




On Wed, 2013-07-10 at 12:58 +0000, Lana Black wrote:
> On 13:24 Wed 10 Jul     , Elwyn Davies wrote:
> > Lana:
> > I don't think the analysis below is correct.  store_add is called via
> > add_to_pending in BundleDaemon:handle_bundle_received whatever router is
> > in use.  But clearly the bundle has disappeared when the forwarding log
> > is updated or some such.
> 
> I have just checked again by setting breakpoints on store_add and
> store_update, and my point seems to be correct. The error in question
> arises when sending prophet hello bundles. See the stacktrace below.
> Store_add() doesn't seem to be called at all.
> 
> (gdb) bt
> #0  dtn::BundleActions::store_update (this=0x9c65d0, bundle=0x7fffe40163c0)
>     at bundling/BundleActions.cc:314                                       
> #1  0x00000000004a4994 in dtn::ForwardingLog::add_entry (this=0x7fffe4016ba8,
>     link=..., action=dtn::ForwardingInfo::COPY_ACTION,                       
>     state=dtn::ForwardingInfo::QUEUED, custody_timer=...)
>     at bundling/ForwardingLog.cc:225                     
> #2  0x000000000058d4b3 in dtn::BundleActions::queue_bundle (this=0x9c65d0,
>     bundle=0x7fffe40163c0, link=..., action=dtn::ForwardingInfo::COPY_ACTION,
>     custody_timer=...) at bundling/BundleActions.cc:204                      
> #3  0x0000000000601ff8 in dtn::ProphetBundleCore::send_bundle (
>     this=0x7fffe4000a50, bundle=0x7fffe4016e20, link=0x7fffe4000df0)
>     at routing/ProphetBundleCore.cc:228                             
> #4  0x00000000005be920 in prophet::Encounter::send_tlv (this=0x7fffe4016130,
>     tlv=0x7fffe4016350) at prophet/Encounter.cc:1046                        
> #5  0x00000000005b15f1 in prophet::Encounter::send_hello (this=0x7fffe4016130,
>     hf=prophet::HelloTLV::SYN, hr=prophet::ProphetTLV::NoSuccessAck, tid=0)   
>     at prophet/Encounter.cc:864                                            
> #6  0x00000000005b09b7 in prophet::Encounter::Encounter (this=0x7fffe4016130,
>     nexthop=0x7fffe4000df0, oracle=0x7fffe4000b90, instance=1)               
>     at prophet/Encounter.cc:104                               
> #7  0x00000000005ac3cc in prophet::Controller::new_neighbor (
>     this=0x7fffe4000b90, link=0x7fffe4000df0) at prophet/Controller.cc:123
> #8  0x0000000000542d6b in dtn::ProphetRouter::handle_contact_up (
>     this=0x7fffe4000910, e=0x7fffe4002e10) at routing/ProphetRouter.cc:278
> #9  0x00000000004846cc in dtn::BundleEventHandler::dispatch_event (
>     this=0x7fffe4000910, e=0x7fffe4002e10)                         
>     at bundling/BundleEventHandler.cc:145 
> #10 0x0000000000541248 in dtn::ProphetRouter::handle_event (
>     this=0x7fffe4000910, e=0x7fffe4002e10) at routing/ProphetRouter.cc:89
> #11 0x000000000045fedd in dtn::BundleDaemon::handle_event (this=0x9b4cd0,
>     event=0x7fffe4002e10, closeTransaction=true)                         
>     at bundling/BundleDaemon.cc:2946            
> #12 0x000000000045fe72 in dtn::BundleDaemon::handle_event (this=0x9b4cd0,
>     event=0x7fffe4002e10) at bundling/BundleDaemon.cc:2935               
> #13 0x0000000000461bd2 in dtn::BundleDaemon::run (this=0x9b4cd0)
>     at bundling/BundleDaemon.cc:3255                            
> #14 0x0000000000461fac in non-virtual thunk to dtn::BundleDaemon::run() (
>     this=0x9b4d30) at bundling/BundleDaemon.cc:3305                      
> ---Type <return> to continue, or q <return> to quit---
> #15 0x000000000066a0aa in oasys::Thread::thread_run (this=0x9b4d30,
>     thread_name=0x9b4d4c "BundleDaemon", thread_id=140737281959680)
>     at thread/Thread.cc:363                                        
> #16 0x0000000000669cb3 in oasys::Thread::pre_thread_run (t=0x9b4d30)
>     at thread/Thread.cc:308                                         
> #17 0x00007ffff60a7f3b in start_thread () from /lib64/libpthread.so.0
> #18 0x00007ffff5bcc65d in clone () from /lib64/libc.so.6
> 
> 


From tom_a_sparks@yahoo.com.au  Wed Jul 10 17:14:01 2013
Return-Path: <tom_a_sparks@yahoo.com.au>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 19A7E21F9C20 for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 17:14:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.41
X-Spam-Level: 
X-Spam-Status: No, score=-1.41 tagged_above=-999 required=5 tests=[AWL=1.189,  BAYES_00=-2.599]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QwkwokJi6IB0 for <dtn-users@ietfa.amsl.com>; Wed, 10 Jul 2013 17:13:55 -0700 (PDT)
Received: from nm12-vm0.bullet.mail.bf1.yahoo.com (nm12-vm0.bullet.mail.bf1.yahoo.com [98.139.213.140]) by ietfa.amsl.com (Postfix) with ESMTP id 70B2C21F9C0D for <dtn-users@irtf.org>; Wed, 10 Jul 2013 17:13:55 -0700 (PDT)
Received: from [98.139.212.144] by nm12.bullet.mail.bf1.yahoo.com with NNFMP; 11 Jul 2013 00:13:54 -0000
Received: from [98.139.212.236] by tm1.bullet.mail.bf1.yahoo.com with NNFMP; 11 Jul 2013 00:13:54 -0000
Received: from [127.0.0.1] by omp1045.mail.bf1.yahoo.com with NNFMP; 11 Jul 2013 00:13:54 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 756104.2932.bm@omp1045.mail.bf1.yahoo.com
Received: (qmail 42333 invoked by uid 60001); 11 Jul 2013 00:13:54 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1373501634; bh=+QYa2C27m4mS2/nLymD+yeyJ1dIiDTWJSUz7bkEnwjU=; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=25bR2zPM2ErYP0gAJ2+FdMVO1dB4tRX5n9JfKGfSQfyddGrzPb1RlH/dAfuXLC2QcxAu33OVupO7dsF/NJ2EjHxRvXpfIofAr0LMz04zWfH2Ips3a+ZkvW5tiQ5OxkGTg3vkB2pEkdo6CrQLnPSpdQMpE5H3LmIXi1ffsiwpnwk=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com.au; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=aHpHz0UQTwLdBs/FlumssDM18PwWUMainigGFBwWS51tRHKrXBhQH/mduVULFHS/SbYW458aS9fXFHrNcIf8T0d1vzL8QfH8oRr5nr0AV9a7b+CIKB7VLq7ebSIbJo42Ivf3Ozrl4RtN8XS2w5SFDoq37mQDOWxSPIRbQbuOzCY= ; 
X-YMail-OSG: ._OUYdIVM1loCO1yRl9KusBf9OBG5yVIpUeXgkdAy.XoYHJ 3qsLzjANfGabWCnRRHj5A7eo_J2t9LqcnCQzUZAgwL1w_9KWJzL56H927kK1 3xidiwCB7KEHqqWXb4dJa7TVKsSGrxr9O4Kd90YXzMzhQ2gNNr6klqaPY3y2 vbhUNUQ1LhzJVbtBZbqupO7ti92XsBda_rS_Bn1CHWrJRHUi0ID79fzjFqv. dCMbRqIryHk.qv5zJnG2w3hT0Zk2zHLM9Tl4yi8nqP9AbYrfZiurHTgk5Ajw 8yVhbV4BmHHR3TjsM1YUxn8KDEKDkDf8w8v67c82DItQEBbeQiIxSMpSp8hu e7Lqcza2yFHjWBSRZiJf46vqctaoUKLCIfEKLqNbjiQCrKyYbrYkwK5tWvLk FkdIpAfi7w9PvLd8DTfL7yXDDrJ.xBQpNn8.33ooJ8S0ivE2xWL8FGGhpFZ7 lw_1hjD3DDnqLouBH0RSK2A8jLJhhAKqLu5UX9aSGdkHXB_OnV6BSRY.zY6v sdMVJnO9kEu7cYB0QQBitEWdgQMPitlins0ID3u36dt0Eq_sR.xeARQiM.fW RTMd4I1jUKPBzl.QuvHnV00IpaaDNy8BNS3xCIWiPo.8mzdZyPzw-
Received: from [58.164.1.122] by web142501.mail.bf1.yahoo.com via HTTP; Wed, 10 Jul 2013 17:13:54 PDT
X-Rocket-MIMEInfo: 002.001, CgoKCgo.X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBGcm9tOiBFbHd5biBEYXZpZXMgPGVsd3luZEBmb2xseS5vcmcudWs.Cj5UbzogTGFuYSBCbGFjayA8c2lja21pbmRAbGF2YWJpdC5jb20.IAo.Q2M6IFRvbSBTcGFya3MgPHRvbV9hX3NwYXJrc0B5YWhvby5jb20uYXU.OyAiZHRuLXVzZXJzQGlydGYub3JnIiA8ZHRuLXVzZXJzQGlydGYub3JnPiAKPlNlbnQ6IFdlZG5lc2RheSwgMTAgSnVseSAyMDEzIDEwOjI0IFBNCj5TdWJqZWN0OiBSZTogW2R0bi11c2Vyc10gW1Byb3BoZXRdIGJ1bmQBMAEBAQE-
X-Mailer: YahooMailWebService/0.8.148.557
References: <1373253555.93124.YahooMailNeo@web142503.mail.bf1.yahoo.com> <20130708195637.GA1743@glow> <1373315662.87252.YahooMailNeo@web142504.mail.bf1.yahoo.com> <20130709234226.GA19065@glow> <1373459083.4524.47070.camel@mightyatom>
Message-ID: <1373501634.10257.YahooMailNeo@web142501.mail.bf1.yahoo.com>
Date: Wed, 10 Jul 2013 17:13:54 -0700 (PDT)
From: Tom Sparks <tom_a_sparks@yahoo.com.au>
To: Elwyn Davies <elwynd@folly.org.uk>, Lana Black <sickmind@lavabit.com>
In-Reply-To: <1373459083.4524.47070.camel@mightyatom>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Cc: "dtn-users@irtf.org" <dtn-users@irtf.org>
Subject: Re: [dtn-users] [Prophet] bundle/database errors
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: Tom Sparks <tom_a_sparks@yahoo.com.au>
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Thu, 11 Jul 2013 00:14:01 -0000

=0A=0A=0A=0A=0A>________________________________=0A> From: Elwyn Davies <el=
wynd@folly.org.uk>=0A>To: Lana Black <sickmind@lavabit.com> =0A>Cc: Tom Spa=
rks <tom_a_sparks@yahoo.com.au>; "dtn-users@irtf.org" <dtn-users@irtf.org> =
=0A>Sent: Wednesday, 10 July 2013 10:24 PM=0A>Subject: Re: [dtn-users] [Pro=
phet] bundle/database errors=0A> =0A>=0A>Hi, Tom.=0A>=0A>I regret to say th=
at the PRoPHET code in DTN2 is not maintained and (as=0A>Lana mentioned) no=
t fully integrated into the DTN2 'ethos'.=0A>=0Aok, I am using IBR-DTN=0A=
=0A<snip>=0A=0A>Tom:=0A>If you want more assistance on this one can you tur=
n on debug level=0A>logging on dtnd and send us the resulting log when you =
get this problem.=0A>Life is a bit busy at the moment and I don't have time=
 to set up the=0A>relevant scenario. =0A>=0A=0AI'll let someone else do tha=
t=0A=0A=0A>Regards,=0A>Elwyn=0A>=0Atom=0A

From c-akshay@zn.jp.nec.com  Mon Jul 15 23:09:51 2013
Return-Path: <c-akshay@zn.jp.nec.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id AC6E621E81BD for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:09:51 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.09
X-Spam-Level: 
X-Spam-Status: No, score=-4.09 tagged_above=-999 required=5 tests=[AWL=-0.000,  BAYES_00=-2.599, HELO_EQ_JP=1.244, HOST_EQ_JP=1.265, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S3WvXKBaGys4 for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:09:46 -0700 (PDT)
Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [210.143.35.51]) by ietfa.amsl.com (Postfix) with ESMTP id BCFAE21E81A8 for <dtn-users@irtf.org>; Mon, 15 Jul 2013 23:09:42 -0700 (PDT)
Received: from mailgate3.nec.co.jp ([10.7.69.160]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id r6G69e3I000589 for <dtn-users@irtf.org>; Tue, 16 Jul 2013 15:09:40 +0900 (JST)
Received: from mailsv4.nec.co.jp (imss61.nec.co.jp [10.7.69.156]) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) with ESMTP id r6G69e928862 for <dtn-users@irtf.org>; Tue, 16 Jul 2013 15:09:40 +0900 (JST)
Received: from mail02.kamome.nec.co.jp (mail02.kamome.nec.co.jp [10.25.43.5]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id r6G69esp027137 for <dtn-users@irtf.org>; Tue, 16 Jul 2013 15:09:40 +0900 (JST)
Received: from shintaro.jp.nec.com ([10.26.220.11] [10.26.220.11]) by mail03.kamome.nec.co.jp with ESMTP id BT-MMP-660237; Tue, 16 Jul 2013 15:09:10 +0900
Received: from akshayPC ([10.56.52.197] [10.56.52.197]) by mail.jp.nec.com with ESMTPA id BT-MMP-41170; Tue, 16 Jul 2013 15:09:10 +0900
From: "akshay choudhary" <c-akshay@zn.jp.nec.com>
To: <dtn-users@irtf.org>
Date: Tue, 16 Jul 2013 15:11:42 +0900
Message-ID: <003801ce81eb$5749b8f0$05dd2ad0$@zn.jp.nec.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_000_0039_01CE8236.C73160F0"
X-Mailer: Microsoft Outlook 14.0
Thread-Index: Ac6B6tFGrL3jXwoLRzOUNgUnNjPhEA==
Content-Language: en-us
Subject: [dtn-users] DTN 2.9.0 installation error
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Jul 2013 06:11:28 -0000

This is a multipart message in MIME format.

------=_NextPart_000_0039_01CE8236.C73160F0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_003A_01CE8236.C73160F0"


------=_NextPart_001_003A_01CE8236.C73160F0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Dear All,

I have been trying to install dtn2 for the past few days

The following is the detail of DTN and its necessary software.

Berkley db 6.0.19

Dtn 2.9.0

Oasys 1.6.0

Xerces c 3.1.1

Tcl 8.6.0

Later I changed berkely db to 5.3.21

But whatever I do I have an error executing dtnd.

I am attaching my conf file and error file

 

Kindly help

Regards

ak


------=_NextPart_001_003A_01CE8236.C73160F0
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40"><head><META =
HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii"><meta name=3DGenerator content=3D"Microsoft Word 14 =
(filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"\FF2D\FF33 \660E\671D";
	panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
	{font-family:"\FF2D\FF33 \660E\671D";
	panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:"\@\FF2D\FF33 \660E\671D";
	panose-1:2 2 6 9 4 2 5 8 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
	{mso-style-priority:99;
	mso-style-link:"Plain Text Char";
	margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
span.PlainTextChar
	{mso-style-name:"Plain Text Char";
	mso-style-priority:99;
	mso-style-link:"Plain Text";
	font-family:"Calibri","sans-serif";}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";}
@page WordSection1
	{size:8.5in 11.0in;
	margin:99.25pt 85.05pt 85.05pt 85.05pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue =
vlink=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal>Dear =
All,<o:p></o:p></p><p class=3DMsoNormal>I have been trying to install =
dtn2 for the past few days<o:p></o:p></p><p class=3DMsoPlainText>The =
following is the detail of DTN and its necessary =
software.<o:p></o:p></p><p class=3DMsoPlainText>Berkley db =
6.0.19<o:p></o:p></p><p class=3DMsoPlainText>Dtn 2.9.0<o:p></o:p></p><p =
class=3DMsoPlainText>Oasys 1.6.0<o:p></o:p></p><p =
class=3DMsoPlainText>Xerces c 3.1.1<o:p></o:p></p><p =
class=3DMsoPlainText>Tcl 8.6.0<o:p></o:p></p><p class=3DMsoNormal>Later =
I changed berkely db to 5.3.21<o:p></o:p></p><p class=3DMsoNormal>But =
whatever I do I have an error executing dtnd.<o:p></o:p></p><p =
class=3DMsoNormal>I am attaching my conf file and error =
file<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>Kindly help<o:p></o:p></p><p =
class=3DMsoNormal>Regards<o:p></o:p></p><p =
class=3DMsoNormal>ak<o:p></o:p></p></div></body></html>
------=_NextPart_001_003A_01CE8236.C73160F0--

------=_NextPart_000_0039_01CE8236.C73160F0
Content-Type: application/octet-stream;
	name="error"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="error"

akshay@akshay-VirtualBox:~/dtn-2.9.0$ daemon/dtnd -c =
/home/akshay/Documents/dtn.conf=0A=
[1373939380.039132 /dtnd notice] random seed is 39127=0A=
[1373939380.039210 /dtnd notice] DTN daemon starting up... (pid 2487)=0A=
[1373939380.126724 /dtn/storage critical] configured storage type =
'berkleydb' not implemented, exiting...=0A=
=0A=

------=_NextPart_000_0039_01CE8236.C73160F0
Content-Type: application/octet-stream;
	name="dtn.conf"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="dtn.conf"

#=0A=
# dtn.conf=0A=
#=0A=
# Default configuration file for Internet-connected DTN nodes. The=0A=
# daemon uses a tcl interpreter to parse this file, thus any standard=0A=
# tcl commands are valid, and all settings are get/set using a single=0A=
# 'set' functions as: <module> set <var> <val?>=0A=
#=0A=
=0A=
log /dtnd info "dtnd parsing configuration..."=0A=
=0A=
########################################=0A=
#=0A=
# Daemon Console Configuration=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# console set stdio [ true | false ]=0A=
#=0A=
# If set to false, disable the interactive console on stdin/stdout.=0A=
# The default is set to true (unless the dtnd process is run as a=0A=
# daemon).=0A=
#=0A=
# console set stdio false=0A=
=0A=
#=0A=
# console set addr <port>=0A=
# console set port <port>=0A=
#=0A=
# Settings for the socket based console protocol.=0A=
# (this interprets user commands)=0A=
#=0A=
console set addr 127.0.0.1=0A=
console set port 5050=0A=
=0A=
#=0A=
# console set prompt <prompt>=0A=
#=0A=
# Set the prompt string.  Helps if running multiple dtnd's=0A=
#=0A=
set shorthostname [lindex [split [info hostname] .] 0]=0A=
console set prompt "$shorthostname dtn% "=0A=
=0A=
########################################=0A=
#=0A=
# Storage Configuration=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# storage set type [ berkeleydb | external | memorydb ]=0A=
#=0A=
# Set the storage system to be used=0A=
#=0A=
storage set type berkleydb=0A=
=0A=
# the following are for use with external data stores=0A=
#=0A=
# The server port to connect to (on localhost)=0A=
# Note that 62345 has no special significance -- chosen randomly=0A=
storage set server_port 62345=0A=
=0A=
# The external data store schema location, which can be=0A=
# found in dtn2/oasys/storage/DS.xsd.=0A=
storage set schema /etc/DS.xsd=0A=
=0A=
=0A=
#=0A=
# Do a runtime check for the standard locations for the persistent=0A=
# storage directory=0A=
#=0A=
set dbdir ""=0A=
foreach dir {/var/dtn /var/tmp/dtn} {=0A=
    if {[file isdirectory $dir]} {=0A=
        set dbdir $dir=0A=
        break=0A=
    }=0A=
}=0A=
=0A=
if {$dbdir =3D=3D ""} {=0A=
    puts stderr "Must create /var/dtn or /var/tmp/dtn storage directory"=0A=
    exit 1=0A=
}=0A=
=0A=
#=0A=
# storage set payloaddir /home/akshay/documents/bundles=0A=
#=0A=
# Set the directory to be used for bundle payload files=0A=
#=0A=
storage set payloaddir /home/akshay/documents/bundles=0A=
=0A=
#=0A=
# storage set dbname <db>=0A=
#=0A=
# Set the database name (appended with .db as the filename in berkeley=0A=
# db, used as-is for SQL variants=0A=
#=0A=
storage set dbname     DTN=0A=
=0A=
#=0A=
# storage set dbdir  /home/akshay/documents/db=0A=
#=0A=
#=0A=
# When using berkeley db, set the directory to be used for the=0A=
# database files and the name of the files and error log.=0A=
#=0A=
storage set dbdir      /home/akshay/documents/db=0A=
=0A=
########################################=0A=
#=0A=
# Routing configuration=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# Set the algorithm used for dtn routing.=0A=
#=0A=
# route set type [static | flood | neighborhood | linkstate | external]=0A=
#=0A=
route set type static=0A=
=0A=
#=0A=
# route local_eid <eid>=0A=
#=0A=
# Set the local administrative id of this node. The default just uses=0A=
# the internet hostname plus the appended string ".dtn" to make it=0A=
# clear that the hostname isn't really used for DNS lookups.=0A=
#=0A=
route local_eid "dtn://[info hostname].dtn"=0A=
=0A=
#=0A=
# External router specific options=0A=
#=0A=
# route set server_port 8001=0A=
# route set hello_interval 30=0A=
# route set schema "/etc/router.xsd"=0A=
=0A=
########################################=0A=
#=0A=
# TCP convergence layer configuration=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# interface add [name] [CL]=0A=
#=0A=
# Add an input interface to listen on addr:port for incoming bundles=0A=
# from other tcp / udp convergence layers=0A=
#=0A=
# For IP-based interfaces, interfaces listen on INADDR_ANY port 4556=0A=
# by default. These can be overridden by using the local_addr and/or=0A=
# local_port arguments.=0A=
interface add tcp0 tcp=0A=
interface add udp0 udp=0A=
=0A=
#=0A=
# link add <name> <nexthop> <type> <clayer> <args...>=0A=
#=0A=
# Add a link to a peer node.=0A=
# =0A=
# For IP-based links (tcp or udp), the nexthop should contain a DNS=0A=
# hostname or IP address, followed optionally by a : and a port. If=0A=
# the port is not specified, the default of 4556 is used.=0A=
#=0A=
# e.g.  link add link1 dtn.dtnrg.org ONDEMAND tcp=0A=
#       link add link2 dtn2.dtnrg.org:10000 ONDEMAND tcp=0A=
=0A=
#=0A=
# route add <dest> <link|peer>=0A=
#=0A=
# Add a route to the given bundle endpoint id pattern <dest> using the=0A=
# specified link name or peer endpoint.=0A=
#=0A=
# e.g. route add dtn://host.domain/* tcp0=0A=
=0A=
########################################=0A=
#=0A=
# Service discovery=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# discovery add <name> <af> <opts...>=0A=
# discovery announce <cl_name> <discovery_name> <cl_type> <opts...>=0A=
#=0A=
# Add a local neighborhood discovery module=0A=
#=0A=
# e.g. discovery add discovery_bonjour bonjour=0A=
=0A=
########################################=0A=
#=0A=
# Parameter Tuning=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# Set the size threshold for the daemon so any bundles smaller than this=0A=
# size maintain a shadow copy in memory to minimize disk accesses. =0A=
#=0A=
# param set payload_mem_threshold 16384=0A=
=0A=
#=0A=
# Test option to keep all bundle files in the filesystem, even after the=0A=
# bundle is no longer present at the daemon.=0A=
#=0A=
# param set payload_test_no_remove true=0A=
=0A=
#=0A=
# Set the size for which the tcp convergence layer sends partial =
reception=0A=
# acknowledgements. Used with reactive fragmentation=0A=
#=0A=
# param set tcpcl_partial_ack_len 4096=0A=
=0A=
#=0A=
# Set if bundles are automatically deleted after transmission=0A=
#=0A=
# param set early_deletion true=0A=
=0A=
# (others exist but are not fully represented here)=0A=
=0A=
=0A=
########################################=0A=
#=0A=
# Extension Block Configuration=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# Attach an Age Extension Block to outgoing bundles=0A=
#=0A=
# block set age_outbound_enabled false=0A=
=0A=
#=0A=
# Process the Age Extension Block on incoming bundles=0A=
#=0A=
# block set age_inbound_processing true=0A=
=0A=
#=0A=
# Zero out the Creation Timestamp Time on bundles=0A=
#=0A=
# block set age_zero_creation_ts_time false=0A=
=0A=
########################################=0A=
#=0A=
# BPQ caching control=0A=
#=0A=
########################################=0A=
=0A=
#=0A=
# Turn on caching of passing bundles with BPQ blocks=0A=
#=0A=
# bpq enable=0A=
#=0A=
=0A=
=0A=
log /dtnd info "dtnd configuration parsing complete"=0A=
=0A=
## emacs settings to use tcl-mode by default=0A=
## Local Variables: ***=0A=
## mode:tcl ***=0A=
## End: ***=0A=

------=_NextPart_000_0039_01CE8236.C73160F0--


From sire@mail.ru  Mon Jul 15 23:20:39 2013
Return-Path: <sire@mail.ru>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 85E7421E81AB for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:20:39 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 1.08
X-Spam-Level: *
X-Spam-Status: No, score=1.08 tagged_above=-999 required=5 tests=[BAYES_50=0.001, FROM_EXCESS_BASE64=1.456, GB_I_LETTER=-2, HELO_EQ_RU=0.595, HOST_EQ_RU=0.875, HTML_MESSAGE=0.001, SARE_SUB_ENC_UTF8=0.152]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RV0F7y5kYayG for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:20:34 -0700 (PDT)
Received: from f159.i.mail.ru (f159.i.mail.ru [128.140.171.248]) by ietfa.amsl.com (Postfix) with ESMTP id 5E6AD21E81A8 for <dtn-users@irtf.org>; Mon, 15 Jul 2013 23:20:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail2;  h=References:In-Reply-To:Content-Type:Message-ID:Reply-To:Date:Mime-Version:Subject:Cc:To:From; bh=lVnqgqvxgC5+51svclNX/ooLX/qac28w6ejARW3NTuI=;  b=lXXdJkMYNVPmZux3Lh9TPnmuTQAwj0YTQpttkrO2a6zctgku6Yf0vrl+Pr+euUr4h56SLqThXtAYJizyjEcO9LInZfwpZmPY24MDvufF6F4bfMVipPRLnx3mzgjx26E43ohURnMilvzq4hisigOGiIPpHhEJICRyJF5pNTTnN4o=;
Received: from mail by f159.i.mail.ru with local (envelope-from <sire@mail.ru>) id 1Uyych-0007df-Br; Tue, 16 Jul 2013 10:20:31 +0400
Received: from [188.254.54.50] by e.mail.ru with HTTP; Tue, 16 Jul 2013 10:20:31 +0400
From: =?UTF-8?B?U2VyZ2V5IFNpcmVza2lu?= <sire@mail.ru>
To: =?UTF-8?B?YWtzaGF5IGNob3VkaGFyeQ==?= <c-akshay@zn.jp.nec.com>
Mime-Version: 1.0
X-Mailer: Mail.Ru Mailer 1.0
X-Originating-IP: [188.254.54.50]
Date: Tue, 16 Jul 2013 10:20:31 +0400
X-Priority: 3 (Normal)
Message-ID: <1373955631.787143727@f159.i.mail.ru>
Content-Type: multipart/alternative; boundary="--ALT--CZFgVYuu1373955631"
X-Mras: Ok
In-Reply-To: <003801ce81eb$5749b8f0$05dd2ad0$@zn.jp.nec.com>
References: <003801ce81eb$5749b8f0$05dd2ad0$@zn.jp.nec.com>
Cc: dtn-users@irtf.org
Subject: Re: [dtn-users] =?utf-8?q?DTN_2=2E9=2E0_installation_error?=
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: =?UTF-8?B?U2VyZ2V5IFNpcmVza2lu?= <sire@mail.ru>
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Jul 2013 06:20:39 -0000

----ALT--CZFgVYuu1373955631
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

IEhpIEFrc2hheSwKCllvdSBtaXNzZWQgbGV0dGVyICJlIiwgYmVya0VsZXlkYiwgbm90IGJlcmts
eWRiLgoKUmVnYXJkcywKU2VyZ2V5CgoKPkRlYXIgQWxsLAo+SSBoYXZlIGJlZW4gdHJ5aW5nIHRv
IGluc3RhbGwgZHRuMiBmb3IgdGhlIHBhc3QgZmV3IGRheXMKPlRoZSBmb2xsb3dpbmcgaXMgdGhl
IGRldGFpbCBvZiBEVE4gYW5kIGl0cyBuZWNlc3Nhcnkgc29mdHdhcmUuCj5CZXJrbGV5IGRiIDYu
MC4xOQo+RHRuIDIuOS4wCj5PYXN5cyAxLjYuMAo+WGVyY2VzIGMgMy4xLjEKPlRjbCA4LjYuMAo+
TGF0ZXIgSSBjaGFuZ2VkIGJlcmtlbHkgZGIgdG8gNS4zLjIxCj5CdXQgd2hhdGV2ZXIgSSBkbyBJ
IGhhdmUgYW4gZXJyb3IgZXhlY3V0aW5nIGR0bmQuCj5JIGFtIGF0dGFjaGluZyBteSBjb25mIGZp
bGUgYW5kIGVycm9yIGZpbGUKPsKgCj5LaW5kbHkgaGVscAo+UmVnYXJkcwo+YWsKPl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj5kdG4tdXNlcnMgbWFpbGlu
ZyBsaXN0Cj5kdG4tdXNlcnNAaXJ0Zi5vcmcKPmh0dHBzOi8vd3d3LmlydGYub3JnL21haWxtYW4v
bGlzdGluZm8vZHRuLXVzZXJzCj4KCg==

----ALT--CZFgVYuu1373955631
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

CjxIVE1MPjxCT0RZPkhpIEFrc2hheSw8YnI+PGJyPllvdSBtaXNzZWQgbGV0dGVyICJlIiwgYmVy
a0VsZXlkYiwgbm90IGJlcmtseWRiLjxicj48YnI+UmVnYXJkcyw8YnI+U2VyZ2V5PGJyPjxicj48
YnI+PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2OyBtYXJn
aW46MTBweDsgcGFkZGluZzowIDAgMCAxMHB4OyIgY2xhc3M9Im1haWxydS1ibG9ja3F1b3RlIj48
ZGl2IGlkPSIiPjxkaXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNnLW1zZyI+PGRpdiBpZD0i
c3R5bGVfMTM3Mzk1NTA5NzAwMDAwMDA2MzAiIGNsYXNzPSJtcl9yZWFkX19ib2R5Ij48ZGl2IGlk
PSJzdHlsZV8xMzczOTU1MDk3MDAwMDAwMDYzMF9CT0RZIj48ZGl2PjxwPkRlYXIgQWxsLDwvcD48
cD5JIGhhdmUgYmVlbiB0cnlpbmcgdG8gaW5zdGFsbCBkdG4yIGZvciB0aGUgcGFzdCBmZXcgZGF5
czwvcD48cD5UaGUgZm9sbG93aW5nIGlzIHRoZSBkZXRhaWwgb2YgRFROIGFuZCBpdHMgbmVjZXNz
YXJ5IHNvZnR3YXJlLjwvcD48cD5CZXJrbGV5IGRiIDYuMC4xOTwvcD48cD5EdG4gMi45LjA8L3A+
PHA+T2FzeXMgMS42LjA8L3A+PHA+WGVyY2VzIGMgMy4xLjE8L3A+PHA+VGNsIDguNi4wPC9wPjxw
PkxhdGVyIEkgY2hhbmdlZCBiZXJrZWx5IGRiIHRvIDUuMy4yMTwvcD48cD5CdXQgd2hhdGV2ZXIg
SSBkbyBJIGhhdmUgYW4gZXJyb3IgZXhlY3V0aW5nIGR0bmQuPC9wPjxwPkkgYW0gYXR0YWNoaW5n
IG15IGNvbmYgZmlsZSBhbmQgZXJyb3IgZmlsZTwvcD48cD4mbmJzcDs8L3A+PHA+S2luZGx5IGhl
bHA8L3A+PHA+UmVnYXJkczwvcD48cD5hazwvcD48L2Rpdj4KPC9kaXY+CgkJCTxkaXY+X19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+CmR0bi11c2VycyBt
YWlsaW5nIGxpc3Q8YnI+CjxhIGhyZWY9InNlbnRtc2c/Y29tcG9zZSZhbXA7VG89ZHRuJTJkdXNl
cnNAaXJ0Zi5vcmciPmR0bi11c2Vyc0BpcnRmLm9yZzwvYT48YnI+CjxhIGhyZWY9Imh0dHBzOi8v
d3d3LmlydGYub3JnL21haWxtYW4vbGlzdGluZm8vZHRuLXVzZXJzIiB0YXJnZXQ9Il9ibGFuayI+
aHR0cHM6Ly93d3cuaXJ0Zi5vcmcvbWFpbG1hbi9saXN0aW5mby9kdG4tdXNlcnM8L2E+PGJyPgo8
YnI+CjwvZGl2PgoJCQoJCTxiYXNlIHRhcmdldD0iX3NlbGYiIGhyZWY9Imh0dHBzOi8vZS5tYWls
LnJ1LyI+Cgk8L2Rpdj4KCgkKPC9kaXY+CgoKPC9kaXY+CjwvYmxvY2txdW90ZT4KPGJyPjwvQk9E
WT48L0hUTUw+Cg==

----ALT--CZFgVYuu1373955631--

From elwynd@folly.org.uk  Mon Jul 15 23:27:56 2013
Return-Path: <elwynd@folly.org.uk>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D2CD421F9BA2 for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:27:56 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.14
X-Spam-Level: 
X-Spam-Status: No, score=-2.14 tagged_above=-999 required=5 tests=[AWL=0.459,  BAYES_00=-2.599]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cI2smu2uq9Nl for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:27:52 -0700 (PDT)
Received: from b.painless.aa.net.uk (b.painless.aa.net.uk [IPv6:2001:8b0:0:30::51bb:1e34]) by ietfa.amsl.com (Postfix) with ESMTP id 9D78721F9B94 for <dtn-users@irtf.org>; Mon, 15 Jul 2013 23:27:52 -0700 (PDT)
Received: from mightyatom.folly.org.uk ([81.187.254.250]) by b.painless.aa.net.uk with esmtp (Exim 4.72) (envelope-from <elwynd@folly.org.uk>) id 1Uyyjl-0002k7-EL; Tue, 16 Jul 2013 07:27:49 +0100
From: Elwyn Davies <elwynd@folly.org.uk>
To: akshay choudhary <c-akshay@zn.jp.nec.com>
In-Reply-To: <003801ce81eb$5749b8f0$05dd2ad0$@zn.jp.nec.com>
References: <003801ce81eb$5749b8f0$05dd2ad0$@zn.jp.nec.com>
Content-Type: text/plain
Organization: Folly Consulting
Date: Tue, 16 Jul 2013 07:27:23 +0100
Message-Id: <1373956043.4524.48596.camel@mightyatom>
Mime-Version: 1.0
X-Mailer: Evolution 2.26.3 
Content-Transfer-Encoding: 7bit
Cc: dtn-users@irtf.org
Subject: Re: [dtn-users] DTN 2.9.0 installation error
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Jul 2013 06:27:56 -0000

Hi, Ashkay.

At least part of your problem is Xerces C 3.1.1.
DTN2/Oasys needs Xerces C 2.X.  If you download the most recent
development versions of Oasys and DTN2 (rather than the 2.9.0/1.6.0
snapshots) the configuration file will tell you about this.

Regards,
Elwyn

On Tue, 2013-07-16 at 15:11 +0900, akshay choudhary wrote:
> Dear All,
> 
> I have been trying to install dtn2 for the past few days
> 
> The following is the detail of DTN and its necessary software.
> 
> Berkley db 6.0.19
> 
> Dtn 2.9.0
> 
> Oasys 1.6.0
> 
> Xerces c 3.1.1
> 
> Tcl 8.6.0
> 
> Later I changed berkely db to 5.3.21
> 
> But whatever I do I have an error executing dtnd.
> 
> I am attaching my conf file and error file
> 
>  
> 
> Kindly help
> 
> Regards
> 
> ak
> 
> 
> _______________________________________________
> dtn-users mailing list
> dtn-users@irtf.org
> https://www.irtf.org/mailman/listinfo/dtn-users


From c-akshay@zn.jp.nec.com  Mon Jul 15 23:44:24 2013
Return-Path: <c-akshay@zn.jp.nec.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 88C2711E80E2 for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:44:24 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.681
X-Spam-Level: 
X-Spam-Status: No, score=-4.681 tagged_above=-999 required=5 tests=[AWL=1.408,  BAYES_00=-2.599, GB_I_LETTER=-2, HELO_EQ_JP=1.244, HOST_EQ_JP=1.265, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zjJ9-t0GFdgR for <dtn-users@ietfa.amsl.com>; Mon, 15 Jul 2013 23:44:20 -0700 (PDT)
Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [210.143.35.51]) by ietfa.amsl.com (Postfix) with ESMTP id 6EDB811E8222 for <dtn-users@irtf.org>; Mon, 15 Jul 2013 23:44:19 -0700 (PDT)
Received: from mailgate3.nec.co.jp ([10.7.69.195]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id r6G6iINe003594 for <dtn-users@irtf.org>; Tue, 16 Jul 2013 15:44:18 +0900 (JST)
Received: from mailsv4.nec.co.jp (imss61.nec.co.jp [10.7.69.156]) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) with ESMTP id r6G6iHq18105 for <dtn-users@irtf.org>; Tue, 16 Jul 2013 15:44:17 +0900 (JST)
Received: from mail02.kamome.nec.co.jp (mail02.kamome.nec.co.jp [10.25.43.5]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id r6G6iHin023562 for <dtn-users@irtf.org>; Tue, 16 Jul 2013 15:44:17 +0900 (JST)
Received: from shoin.jp.nec.com ([10.26.220.3] [10.26.220.3]) by mail02.kamome.nec.co.jp with ESMTP id BT-MMP-659023; Tue, 16 Jul 2013 15:43:55 +0900
Received: from akshayPC ([10.56.52.197] [10.56.52.197]) by mail.jp.nec.com with ESMTP; Tue, 16 Jul 2013 15:43:54 +0900
From: "akshay choudhary" <c-akshay@zn.jp.nec.com>
To: <dtn-users@irtf.org>
References: <003801ce81eb$5749b8f0$05dd2ad0$@zn.jp.nec.com> <1373955631.787143727@f159.i.mail.ru>
In-Reply-To: <1373955631.787143727@f159.i.mail.ru>
Date: Tue, 16 Jul 2013 15:46:26 +0900
Message-ID: <000301ce81f0$31892a10$949b7e30$@zn.jp.nec.com>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----=_NextPart_000_0004_01CE823B.A170D210"
X-Mailer: Microsoft Outlook 14.0
Thread-Index: AQLLHa5h8u2NxPSdg0Ce62DjYkCOcQD5RkeYl2XaRdA=
Content-Language: en-us
Subject: Re: [dtn-users] DTN 2.9.0 installation error
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Jul 2013 06:44:24 -0000

This is a multipart message in MIME format.

------=_NextPart_000_0004_01CE823B.A170D210
Content-Type: text/plain;
	charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Thank You for your help

There was problem with Xerces which has been resolved.

Dtn works fine

Regards

akshay

=20

From: Sergey Sireskin [mailto:sire@mail.ru]=20
Sent: Tuesday, July 16, 2013 3:21 PM
To: akshay choudhary
Cc: dtn-users@irtf.org
Subject: Re: [dtn-users] DTN 2.9.0 installation error

=20

Hi Akshay,

You missed letter "e", berkEleydb, not berklydb.

Regards,
Sergey



Dear All,

I have been trying to install dtn2 for the past few days

The following is the detail of DTN and its necessary software.

Berkley db 6.0.19

Dtn 2.9.0

Oasys 1.6.0

Xerces c 3.1.1

Tcl 8.6.0

Later I changed berkely db to 5.3.21

But whatever I do I have an error executing dtnd.

I am attaching my conf file and error file

=20

Kindly help

Regards

ak

_______________________________________________
dtn-users mailing list
dtn-users@irtf.org =
<https://e.mail.ru/sentmsg?compose&To=3Ddtn%2dusers@irtf.org>=20
https://www.irtf.org/mailman/listinfo/dtn-users

=20


------=_NextPart_000_0004_01CE823B.A170D210
Content-Type: text/html;
	charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta =
http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8"><meta =
name=3DGenerator content=3D"Microsoft Word 14 (filtered medium)"><base =
href=3D"https://e.mail.ru/" target=3D"_self"><style><!--
/* Font Definitions */
@font-face
	{font-family:"=EF=BC=AD=EF=BC=B3 =E6=98=8E=E6=9C=9D";
	panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
	{font-family:"=EF=BC=AD=EF=BC=B3 =E6=98=8E=E6=9C=9D";
	panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"\@=EF=BC=AD=EF=BC=B3 =E6=98=8E=E6=9C=9D";
	panose-1:2 2 6 9 4 2 5 8 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0in;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
span.EmailStyle18
	{mso-style-type:personal-reply;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:99.25pt 85.05pt 85.05pt 85.05pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue =
vlink=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497=
D'>Thank You for your help<o:p></o:p></span></p><p =
class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497=
D'>There was problem with </span>Xerces which has been =
resolved.<o:p></o:p></p><p class=3DMsoNormal>Dtn works =
fine<o:p></o:p></p><p class=3DMsoNormal>Regards<o:p></o:p></p><p =
class=3DMsoNormal>akshay<span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497=
D'><o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497=
D'><o:p>&nbsp;</o:p></span></p><div><div =
style=3D'border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in =
0in 0in'><p class=3DMsoNormal><b><span =
style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span>=
</b><span style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'> =
Sergey Sireskin [mailto:sire@mail.ru] <br><b>Sent:</b> Tuesday, July 16, =
2013 3:21 PM<br><b>To:</b> akshay choudhary<br><b>Cc:</b> =
dtn-users@irtf.org<br><b>Subject:</b> Re: [dtn-users] DTN 2.9.0 =
installation error<o:p></o:p></span></p></div></div><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal =
style=3D'margin-bottom:12.0pt'>Hi Akshay,<br><br>You missed letter =
&quot;e&quot;, berkEleydb, not =
berklydb.<br><br>Regards,<br>Sergey<br><br><o:p></o:p></p><div =
id=3D""><div><div id=3D"style_13739550970000000630"><div =
id=3D"style_13739550970000000630_BODY"><div><p>Dear =
All,<o:p></o:p></p><p>I have been trying to install dtn2 for the past =
few days<o:p></o:p></p><p>The following is the detail of DTN and its =
necessary software.<o:p></o:p></p><p>Berkley db =
6.0.19<o:p></o:p></p><p>Dtn 2.9.0<o:p></o:p></p><p>Oasys =
1.6.0<o:p></o:p></p><p>Xerces c 3.1.1<o:p></o:p></p><p>Tcl =
8.6.0<o:p></o:p></p><p>Later I changed berkely db to =
5.3.21<o:p></o:p></p><p>But whatever I do I have an error executing =
dtnd.<o:p></o:p></p><p>I am attaching my conf file and error =
file<o:p></o:p></p><p>&nbsp;<o:p></o:p></p><p>Kindly =
help<o:p></o:p></p><p>Regards<o:p></o:p></p><p>ak<o:p></o:p></p></div></d=
iv><div><p class=3DMsoNormal =
style=3D'margin-bottom:12.0pt'>__________________________________________=
_____<br>dtn-users mailing list<br><a =
href=3D"sentmsg?compose&amp;To=3Ddtn%2dusers@irtf.org">dtn-users@irtf.org=
</a><br><a href=3D"https://www.irtf.org/mailman/listinfo/dtn-users" =
target=3D"_blank">https://www.irtf.org/mailman/listinfo/dtn-users</a><o:p=
></o:p></p></div></div></div></div><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p></div></body></html>
------=_NextPart_000_0004_01CE823B.A170D210--


From ssireskin@gmail.com  Tue Jul 16 04:17:50 2013
Return-Path: <ssireskin@gmail.com>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id ED17721E8051 for <dtn-users@ietfa.amsl.com>; Tue, 16 Jul 2013 04:17:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level: 
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HTML_MESSAGE=0.001, NO_RELAYS=-0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id EFzgYptuOEc7 for <dtn-users@ietfa.amsl.com>; Tue, 16 Jul 2013 04:17:50 -0700 (PDT)
Received: from mail-vb0-x22e.google.com (mail-vb0-x22e.google.com [IPv6:2607:f8b0:400c:c02::22e]) by ietfa.amsl.com (Postfix) with ESMTP id CA52021E804B for <dtn-users@irtf.org>; Tue, 16 Jul 2013 04:17:49 -0700 (PDT)
Received: by mail-vb0-f46.google.com with SMTP id 10so352249vbe.5 for <dtn-users@irtf.org>; Tue, 16 Jul 2013 04:17:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=tLGNY+V+OLsoIvN35488hZpnKOB1l34P8hJsbWZGCwE=; b=H6+yPbJ+KbWl/KzBHXWv8MCuoxDlAvsDFuoCpN+m0IL3RILqQ4YDLhGBckbtOeulss CcYyCqEmya/jDd4wDnLwL6bwz/1qwyFtc4Gb/lAtZkh5T6BjFTqqxbO5LL7jFXtG30X8 3b25ID66aUya4zPvsFDVKxwk6iCYOcjJFq8WSv/DRYZpXqgE/X20un0y7kgE4km7x3cL 0i/Gc+IdvJXq+nZNsa29GFO+Ml9DNfxzODOo/5Z7gBpQdcOC8Bi7C8iBFkoiPqKFVJeU sVAc1+3R2AKAeH9nGr3bIrGWHDPFa2VSPrkbFX7uTSU6o6Sp5Rf287hzuL2nzDyr45Rh WHDw==
MIME-Version: 1.0
X-Received: by 10.220.143.140 with SMTP id v12mr265113vcu.95.1373973469171; Tue, 16 Jul 2013 04:17:49 -0700 (PDT)
Received: by 10.58.50.168 with HTTP; Tue, 16 Jul 2013 04:17:48 -0700 (PDT)
Date: Tue, 16 Jul 2013 15:17:48 +0400
Message-ID: <CAJR8z99q=umWYg7ef6YVW7Egvo8LCeZdaMygash5v5REnHpXbw@mail.gmail.com>
From: "ssireskin@gmail.com" <ssireskin@gmail.com>
To: "dtn-users@irtf.org" <dtn-users@irtf.org>
Content-Type: multipart/mixed; boundary=047d7b342f448f960a04e19f2020
Subject: [dtn-users] dtniptunnel
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Jul 2013 11:17:51 -0000

--047d7b342f448f960a04e19f2020
Content-Type: multipart/alternative; boundary=047d7b342f448f960604e19f201e

--047d7b342f448f960604e19f201e
Content-Type: text/plain; charset=ISO-8859-1

Hello,

I have written an application for dtn2 that makes possible transmitting IP
packets inside DTN bundles. It is much simpler than dtntunnel that works
with TCP and UDP packets.

dtniptunnel uses TUNTAP driver to create a virtual network interface and
then access it from user space through a file descriptor (FD). So
dtniptunnel just reads IP packets from a FD and wraps them in bundles. It
also writes IP packets received from DTN to the same FD.

Current implementation of dtniptunnel is Linux-only, it will not compile on
other platforms. However there are TUNTAP driver implementations for
Windows, BSD, MacOS X and Solaris, so it is possible to make code portable.

I have also compared performance of dtntunnel, dtniptunnel and
dtnsend/dtnrecv, see the attached performance.pdf.

Please, review dtniptunnel code and include it into dtn2 distribution if
possible.

-- 
Best regards,
Sergey Sireskin

--047d7b342f448f960604e19f201e
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Hello,<br><br></div>I have written an application for=
 dtn2 that makes possible transmitting IP packets inside DTN bundles. It is=
 much simpler than dtntunnel that works with TCP and UDP packets.<br><br>dt=
niptunnel uses TUNTAP driver to create a virtual network interface and then=
 access it from user space through a file descriptor (FD). So dtniptunnel j=
ust reads IP packets from a FD and wraps them in bundles. It also writes IP=
 packets received from DTN to the same FD.<br clear=3D"all">
<div><div><br></div><div>Current implementation of dtniptunnel is Linux-onl=
y, it will not compile on other platforms. However there are TUNTAP driver =
implementations for Windows, BSD, MacOS X and Solaris, so it is possible to=
 make code portable.<br>
<br></div><div>I have also compared performance of dtntunnel, dtniptunnel a=
nd dtnsend/dtnrecv, see the attached performance.pdf.<br><br></div><div>Ple=
ase, review dtniptunnel code and include it into dtn2 distribution if possi=
ble. <br>
</div><div><br></div><div>-- <br>Best regards,<br>Sergey Sireskin<br><br></=
div><div>
</div></div></div>

--047d7b342f448f960604e19f201e--
--047d7b342f448f960a04e19f2020
Content-Type: application/octet-stream; name="dtniptunnel.patch"
Content-Disposition: attachment; filename="dtniptunnel.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hj6z7zp00

ZGlmZiAtTnVyIERUTjIub3JpZy9hcHBzL2R0bmlwdHVubmVsL0RUTklQVHVubmVsLmNjIERUTjIv
YXBwcy9kdG5pcHR1bm5lbC9EVE5JUFR1bm5lbC5jYwotLS0gRFROMi5vcmlnL2FwcHMvZHRuaXB0
dW5uZWwvRFROSVBUdW5uZWwuY2MJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDAK
KysrIERUTjIvYXBwcy9kdG5pcHR1bm5lbC9EVE5JUFR1bm5lbC5jYwkyMDEzLTA3LTE2IDEzOjA5
OjAxLjAwMDAwMDAwMCArMDQwMApAQCAtMCwwICsxLDY5MyBAQAorLyoKKyAqICAgIENvcHlyaWdo
dCAyMDA0LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIAorICogICAgTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiAgICB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisgKiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
IAorICogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
ICogCisgKiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogICAgV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCisgKiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8ZHRuLWNvbmZpZy5o
PgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5
cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5o
PgorI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorI2luY2x1ZGUgPGxpbnV4L3JvdXRlLmg+CisK
KyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+ICAgICAgICAgLy8gZm9yIHN0cnVjdCBpcAorCisjaW5j
bHVkZSAiZHRuX2FwaS5oIgorI2luY2x1ZGUgIkFQSUVuZHBvaW50SURPcHQuaCIKKworI2luY2x1
ZGUgPG9hc3lzL2lvL05ldFV0aWxzLmg+CisjaW5jbHVkZSA8b2FzeXMvdXRpbC9HZXRvcHQuaD4K
KyNpbmNsdWRlIDxvYXN5cy91dGlsL1N0cmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPG9hc3lzL3V0
aWwvU3RyaW5nVXRpbHMuaD4KKworI2luY2x1ZGUgIkRUTklQVHVubmVsLmgiCisjaW5jbHVkZSAi
SVA0VHVubmVsLmgiCisKK25hbWVzcGFjZSBkdG5pcHR1bm5lbCB7CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQordGVtcGxhdGUgPD4KK0RUTklQVHVubmVsKiBvYXN5czo6U2luZ2xldG9uPERUTklQVHVubmVs
Pjo6aW5zdGFuY2VfID0gMDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEVE5JUFR1bm5lbDo6RFROSVBU
dW5uZWwoKQorICAgIDogQXBwKCJEVE5JUFR1bm5lbCIsICJkdG5pcHR1bm5lbCIpLAorICAgICAg
c2VuZF9sb2NrXygiL2R0bmlwdHVubmVsIiwgb2FzeXM6Ok11dGV4OjpUWVBFX1JFQ1VSU0lWRSwg
dHJ1ZSksCisgICAgICBjdXN0b2R5XyhmYWxzZSksCisgICAgICBleHBpcmF0aW9uXyg2MDApLAor
ICAgICAgdHVuX2ZkXygtMSksCisgICAgICB0dW5fbXR1XygxNTAwKSwKKyAgICAgIHR1bl9hZGRy
X2NvdW50XygwKSwKKyAgICAgIHR1bl9yb3V0ZV9jb3VudF8oMCksCisgICAgICBhcGlfYWRkcl8o
SU5BRERSX05PTkUpLAorICAgICAgYXBpX3BvcnRfKDUwMTApCit7CisgICAgLy8gb3ZlcnJpZGUg
ZGVmYXVsdCBsb2dnaW5nIHNldHRpbmcKKyAgICBsb2dsZXZlbF8gPSBvYXN5czo6TE9HX05PVElD
RTsKKyAgICAKKyAgICBtZW1zZXQoJmxvY2FsX2VpZF8sIDAsIHNpemVvZihsb2NhbF9laWRfKSk7
CisKKyAgICB0dW5fbmFtZV8gPSAoY2hhciopIG1hbGxvYyhJRk5BTVNJWik7CisgICAgdHVuX25h
bWVfWzBdID0gJ1wwJzsKKworICAgIGFwaV9JUF8gPSAoY2hhciopIG1hbGxvYygxNik7CisgICAg
bWVtc2V0KGFwaV9JUF8sIDAsIDE2KTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgCitEVE5J
UFR1bm5lbDo6Y3JlYXRlX3R1bl9pZmFjZShjaGFyKiBkZXYsIGludCBtdHUpIHsKKyAgICBzdHJ1
Y3QgaWZyZXEgaWZyOworICAgIGludCBmZCA9IC0xOworICAgIGludCBzb2NrID0gLTE7CisKKyAg
ICBpZiggKGZkID0gb3BlbigiL2Rldi9uZXQvdHVuIiwgT19SRFdSKSkgPCAwICkgeworCWZwcmlu
dGYoc3RkZXJyLCAiY2Fubm90IG9wZW4gL2Rldi9uZXQvdHVuOiAlc1xuIiwgc3RyZXJyb3IoZXJy
bm8pKTsKKwlnb3RvIGVycm9yOworICAgIH0KKworICAgIG1lbXNldCgmaWZyLCAwLCBzaXplb2Yo
aWZyKSk7CisKKyAgICAvLyBhbGxvY2F0ZSB0dW5uZWwgaW50ZXJmYWNlCisgICAgaWZyLmlmcl9m
bGFncyA9IElGRl9UVU4gfCBJRkZfTk9fUEk7CisgICAgaWYgKGlvY3RsKGZkLCBUVU5TRVRJRkYs
ICh2b2lkKikgJmlmcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5ub3QgYWxsb2Nh
dGUgdHVubmVsIGludGVyZmFjZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdv
dG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1
bCwgd3JpdGUgYmFjayB0aGUgbmFtZSBvZiB0aGUKKyAgICAvLyBpbnRlcmZhY2UgdG8gdGhlIHZh
cmlhYmxlICJkZXYiCisgICAgc3RyY3B5KGRldiwgaWZyLmlmcl9uYW1lKTsKKworICAgIHNvY2sg
PSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisKKyAgICAvLyBhY3RpdmF0ZSBpbnRl
cmZhY2UKKyAgICBpZnIuaWZyX2ZsYWdzID0gSUZGX1VQOworICAgIGlmIChpb2N0bChzb2NrLCBT
SU9DU0lGRkxBR1MsICZpZnIpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2Fubm90IGFj
dGl2YXRlIHR1bm5lbCBpbnRlcmZhY2UgJXM6ICVzXG4iLCBkZXYsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gc2V0IE1UVSBpZiBpdCBpcyBz
cGVjaWZpZWQKKyAgICBpZnIuaWZyX210dSA9IG10dTsKKyAgICBpZiAobXR1ID4gMCAmJiBpb2N0
bChzb2NrLCBTSU9DU0lGTVRVLCAmaWZyKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNh
bm5vdCBzZXQgTVRVIG9uIHR1bm5lbCBpbnRlcmZhY2UgJXM6ICVzXG4iLCBkZXYsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNvY2sgPj0g
MCkgeworCWNsb3NlKHNvY2spOworICAgIH0KKyAgICAvLyB0dW5uZWwgaW50ZXJmYWNlIGZpbGUg
ZGVzY3JpcHRvcgorICAgIHJldHVybiBmZDsKKworZXJyb3I6CisgICAgaWYgKGZkICE9IC0xKSB7
CisJY2xvc2UoZmQpOworICAgIH0KKyAgICBpZiAoc29jayA+PSAwKSB7CisJY2xvc2Uoc29jayk7
CisgICAgfQorICAgIGV4aXQoMSk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGlubGlu
ZSBpbl9hZGRyX3QgKmFzX2luX2FkZHIoc29ja2FkZHIgKnNhKSB7CisgICAgcmV0dXJuICYoKHNv
Y2thZGRyX2luICopc2EpLT5zaW5fYWRkci5zX2FkZHI7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
aW50CitEVE5JUFR1bm5lbDo6YWRkX3R1bl9hZGRyZXNzKGNvbnN0IGNoYXIgKmRldiwgY29uc3Qg
Y2hhciAqbG9jYWxfYWRkciwgY29uc3QgaW50IGJpdHMsIGNvbnN0IGNoYXIgKnBlZXJfYWRkcikK
K3sKKyAgICBpZnJlcSBpZnI7CisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKyAg
ICBzdHJuY3B5KGlmci5pZnJfbmFtZSwgZGV2LCBJRk5BTVNJWik7CisgICAgaWZyLmlmcl9hZGRy
LnNhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgaWZyLmlmcl9uZXRtYXNrLnNhX2ZhbWlseSA9IEFG
X0lORVQ7CisgICAgaWZyLmlmcl9kc3RhZGRyLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisKKyAgICBp
bnQgc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpbl9hZGRyX3Qg
bWFzazsKKworICAgIGlmICh0dW5fYWRkcl9jb3VudF8gPiAwKSB7CisgICAgICAgIHNwcmludGYo
aWZyLmlmcl9uYW1lLCAiJXM6JWQiLCBkZXYsIHR1bl9hZGRyX2NvdW50Xyk7CisgICAgfQorCisg
ICAgaWYgKGJpdHMgPCAwIHx8IGJpdHMgPiAzMikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
ImludmFsaWQgbmV0d29yayBtYXNrOiAlZFxuIiwgYml0cyk7CisgICAgICAgIGdvdG8gZXJyb3I7
CisgICAgfQorICAgIAorICAgIC8vIHNldCBsb2NhbCBhZGRyZXNzCisgICAgaWYgKGluZXRfcHRv
bihBRl9JTkVULCBsb2NhbF9hZGRyLCBhc19pbl9hZGRyKCZpZnIuaWZyX2FkZHIpKSAhPSAxKSB7
CisJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGxvY2FsIGFkZHJlc3Mgb24gdHVubmVsIGludGVy
ZmFjZSAlczogJXMvJWRcbiIsIAorCQlkZXYsIGxvY2FsX2FkZHIsIGJpdHMpOworCWdvdG8gZXJy
b3I7CisgICAgfQorICAgIGlmIChpb2N0bChzb2NrLCBTSU9DU0lGQUREUiwgJmlmcikpIHsKKwlm
cHJpbnRmKHN0ZGVyciwgImNhbm5vdCBzZXQgbG9jYWwgYWRkcmVzcyBvbiB0dW5uZWwgaW50ZXJm
YWNlICVzOiAlczogJXNcbiIsIAorCQlkZXYsIGxvY2FsX2FkZHIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gc2V0IHBlZXIgYWRkcmVzcwor
ICAgIGlmIChwZWVyX2FkZHIpIHsKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBwZWVy
X2FkZHIsIGFzX2luX2FkZHIoJmlmci5pZnJfZHN0YWRkcikpICE9IDEpIHsKKwkgICAgZnByaW50
ZihzdGRlcnIsICJpbnZhbGlkIHBlZXIgYWRkcmVzcyBvbiB0dW5uZWwgaW50ZXJmYWNlICVzOiAl
cy8lZFxuIiwgCisJCSAgICBkZXYsIHBlZXJfYWRkciwgYml0cyk7CisgICAgCSAgICBnb3RvIGVy
cm9yOworCSAgICB9CisJaWYgKGlvY3RsKHNvY2ssIFNJT0NTSUZEU1RBRERSLCAmaWZyKSkgewor
CSAgICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBzZXQgcGVlciBhZGRyZXNzIG9uIHR1bm5lbCBp
bnRlcmZhY2UgJXM6ICVzOiAlc1xuIiwgCisJCSAgICBkZXYsIHBlZXJfYWRkciwgc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICAJICAgIGdvdG8gZXJyb3I7CisJfQorICAgIH0KKworICAgIC8vIHNldCBu
ZXR3b3JrIG1hc2sKKyAgICBtYXNrID0gYml0cyA/ICh+MCA8PCAoMzIgLSBiaXRzKSkgOiAwOwor
ICAgICphc19pbl9hZGRyKCZpZnIuaWZyX25ldG1hc2spID0gaHRvbmwobWFzayk7CisgICAgaWYg
KGlvY3RsKHNvY2ssIFNJT0NTSUZORVRNQVNLLCAmaWZyKSkgeworCWZwcmludGYoc3RkZXJyLCAi
Y2Fubm90IHNldCBuZXR3b3JrIG1hc2sgb24gdHVubmVsIGludGVyZmFjZSAlczogJWQ6ICVzXG4i
LCAKKwkJZGV2LCBiaXRzLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGVycm9yOwor
ICAgIH0KKy8qCisgICAgZnByaW50ZihzdGRlcnIsICJERUJVRzogQWRkcmVzcyBhZGRlZCBvbiAl
czogbG9jYWwgJXMvJWQsIHBlZXIgJXMvJWRcbiIsIAorCSAgICBkZXYsIGxvY2FsX2FkZHIsIGJp
dHMsIHBlZXJfYWRkciwgYml0cyk7CisqLworICAgIHR1bl9hZGRyX2NvdW50XysrOworICAgIGlm
IChzb2NrID49IDApIHsKKwljbG9zZShzb2NrKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworCitl
cnJvcjoKKyAgICBpZiAoc29jayA+PSAwKSB7CisJY2xvc2Uoc29jayk7CisgICAgfQorICAgIGV4
aXQoMSk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IAorRFROSVBUdW5uZWw6OmFkZF90dW5f
cm91dGUoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuZXRfYWRkciwgY29uc3QgaW50IGJp
dHMsIGNvbnN0IGNoYXIgKmd3X2FkZHIpCit7CisgICAgcnRlbnRyeSBydDQ7CisgICAgbWVtc2V0
KCZydDQsIDAsIHNpemVvZihydDQpKTsKKyAgICBydDQucnRfZGV2ID0gKGNoYXIgKilkZXY7Cisg
ICAgcnQ0LnJ0X2ZsYWdzID0gUlRGX1VQIHwgUlRGX0dBVEVXQVk7CisgICAgcnQ0LnJ0X2RzdC5z
YV9mYW1pbHkgPSBBRl9JTkVUOworICAgIHJ0NC5ydF9nYXRld2F5LnNhX2ZhbWlseSA9IEFGX0lO
RVQ7CisgICAgcnQ0LnJ0X2dlbm1hc2suc2FfZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIGludCBz
b2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICAgIGluX2FkZHJfdCBtYXNr
OworCisgICAgaWYgKGJpdHMgPCAwIHx8IGJpdHMgPiAzMikgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgImludmFsaWQgbmV0d29yayBtYXNrOiAlZFxuIiwgYml0cyk7CisgICAgICAgIGdvdG8g
ZXJyb3I7CisgICAgfQorCisgICAgLy8gc2V0IGRlc3RpbmF0aW9uIG5ldHdvcmsgYWRkcmVzcwor
ICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgbmV0X2FkZHIsIGFzX2luX2FkZHIoJnJ0NC5ydF9k
c3QpKSAhPSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBuZXR3b3JrIGFk
ZHJlc3M6ICVzXG4iLCBuZXRfYWRkcik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisg
ICAgLy8gc2V0IGdhdGV3YXkgYWRkcmVzcworICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgZ3df
YWRkciwgYXNfaW5fYWRkcigmcnQ0LnJ0X2dhdGV3YXkpKSAhPSAxKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiaW52YWxpZCBnYXRld2F5IGFkZHJlc3M6ICVzXG4iLCBnd19hZGRyKTsKKyAg
ICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBzZXQgZGVzdGluYXRpb24gbmV0d29y
ayBtYXNrCisgICAgbWFzayA9IGJpdHMgPyAofjAgPDwgKDMyIC0gYml0cykpIDogMHg4MDAwMDAw
MDsKKyAgICAqYXNfaW5fYWRkcigmcnQ0LnJ0X2dlbm1hc2spID0gaHRvbmwobWFzayk7CisgICAg
aWYgKGlvY3RsKHNvY2ssIFNJT0NBRERSVCwgJnJ0NCkgJiYgZXJybm8gIT0gRUVYSVNUKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBuZXR3b3JrIG1hc2s6ICVkXG4iLCBiaXRz
KTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisvKgorICAgIGZwcmludGYoc3RkZXJyLCAi
REVCVUc6IFJvdXRlIGFkZGVkIG9uICVzOiAlcy8lZCB2aWEgJXNcbiIsIAorCSAgICBkZXYsIG5l
dF9hZGRyLCBiaXRzLCBnd19hZGRyKTsKKyovCisgICAgdHVuX3JvdXRlX2NvdW50XysrOworICAg
IGlmIChzb2NrID49IDApIHsKKyAgICAgICAgY2xvc2Uoc29jayk7CisgICAgfQorICAgIHJldHVy
bigwKTsKKworZXJyb3I6CisgICAgaWYgKHNvY2sgPj0gMCkgeworICAgICAgICBjbG9zZShzb2Nr
KTsKKyAgICB9CisgICAgZXhpdCgxKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkCitEVE5J
UFR1bm5lbDo6ZmlsbF9vcHRpb25zKCkKK3sKKyAgICBBcHA6OmZpbGxfZGVmYXVsdF9vcHRpb25z
KERBRU1PTklaRV9PUFQpOworICAgIEFwcDo6c2V0X2V4dHJhX3VzYWdlKCI8ZGVzdGluYXRpb24g
ZWlkIHRhYmxlIGZpbGUgbmFtZT4iKTsKKworCisgICAgb3B0c18uYWRkb3B0KAorICAgICAgICBu
ZXcgb2FzeXM6OkluQWRkck9wdCgnQScsICJhcGlfSVAiLCAmYXBpX2FkZHJfLCAiIiwKKwkJCSAg
ICAiRFROIGRhZW1vbiBBUEkgYWRkcmVzcyIpKTsKKworICAgIG9wdHNfLmFkZG9wdCgKKyAgICAg
ICAgbmV3IG9hc3lzOjpVSW50T3B0KCdCJywgImFwaV9wb3J0IiwgJmFwaV9wb3J0XywgIiIsCisJ
CSAgICAgICAgICAgIkRUTiBkYWVtb24gQVBJIHBvcnQgKGRlZmF1bHQgLSA1MDEwKSIpKTsKKwor
ICAgIG9wdHNfLmFkZG9wdCgKKyAgICAgICAgbmV3IG9hc3lzOjpCb29sT3B0KCdjJywgImN1c3Rv
ZHkiLCAmY3VzdG9keV8sIAorCQkgICAgICAgICAgICJ1c2UgY3VzdG9keSB0cmFuc2ZlciIpKTsK
KyAgICAKKyAgICBvcHRzXy5hZGRvcHQoCisgICAgICAgIG5ldyBvYXN5czo6VUludE9wdCgnZScs
ICJleHBpcmF0aW9uIiwgJmV4cGlyYXRpb25fLCAiPHNlY3M+IiwKKwkJCSAgICJleHBpcmF0aW9u
IHRpbWUiKSk7CisKKyAgICBvcHRzXy5hZGRvcHQoCisgICAgICAgIG5ldyBvYXN5czo6SW50T3B0
KCdtJywgIk1UVSIsICZ0dW5fbXR1XywgIjxieXRlcz4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAic2V0IHR1bm5lbCBpbnRlcmZhY2UgTVRVIChkZWZhdWx0IC0gMTUwMCkiKSk7CisKKyAg
ICBvcHRzXy5hZGRvcHQoCisgICAgICAgIG5ldyBkdG46OkFQSUVuZHBvaW50SURPcHQoImxvY2Fs
X2VpZCIsICZsb2NhbF9laWRfLCAiPGVpZD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJsb2NhbCBlbmRwb2ludCBpZCBvdmVycmlkZSIpKTsKK30KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCit2b2lkCitEVE5JUFR1bm5lbDo6dmFsaWRhdGVfb3B0aW9ucyhpbnQgYXJnYywgY2hhciog
Y29uc3QgYXJndltdLCBpbnQgcmVtYWluZGVyKQoreworICAgIC8vIGNvbnZlcnQgQVBJIElQIHRv
IGNoYXIqCisgICAgaWYgKGFwaV9hZGRyXyAhPSBJTkFERFJfTk9ORSkgeworICAgICAgICBzdHJj
cHkoYXBpX0lQXywgaW50b2EoYXBpX2FkZHJfKSk7CisgICAgfQorCisgICAgLy8gY3JlYXRlIHR1
bm5lbCBpbnRlcmZhY2UKKyAgICB0dW5fZmRfID0gY3JlYXRlX3R1bl9pZmFjZSh0dW5fbmFtZV8s
IHR1bl9tdHVfKTsKKworICAgIC8vIGxvYWQgZGVzdGluYXRpb24gZWlkIHRhYmxlIGFuZCBjb25m
aWd1cmUgdHVubmVsIGludGVyZmFjZQorICAgIGlmIChyZW1haW5kZXIgPT0gYXJnYyAtIDEpIHsK
Kwlsb2FkX2Rlc3RfZWlkX3RhYmxlKGFyZ3ZbYXJnYy0xXSk7CisgICAgfSBlbHNlIGlmIChyZW1h
aW5kZXIgIT0gYXJnYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgYXJndW1l
bnQgJyVzJ1xuIiwgYXJndltyZW1haW5kZXJdKTsKKyAgICAgICAgcHJpbnRfdXNhZ2VfYW5kX2V4
aXQoKTsKKyAgICB9IGVsc2UgeworCWZwcmludGYoc3RkZXJyLCAibXVzdCBzcGVjaWZ5IGRlc3Rp
bmF0aW9uIGVpZCB0YWJsZSBmaWxlIG5hbWVcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXG5laWQg
dGFibGUgZmlsZSBmb3JtYXQ6XG4iCisJCSI8ZHN0IG5ldHdvcms+IDxkc3QgZWlkPiA8bG9jYWwg
dHVuIGFkZHIvYml0cz4gPHBlZXIgdHVuIGFkZHI+XG4iCisJCSJleGFtcGxlOlxuIgorCQkiMTky
LjE2OC4xLjAvMjQgZHRuOi8vbm9kZTEuZHRuL2R0bmlwdHVubmVsIDEwLjEwLjEwLjEvMjQgMTAu
MTAuMTAuMlxuXG4iKTsKKwlwcmludF91c2FnZV9hbmRfZXhpdCgpOworICAgIH0KK30KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCit2b2lkCitEVE5JUFR1bm5lbDo6bG9hZF9kZXN0X2VpZF90YWJsZShjaGFy
KiBmaWxlbmFtZSkKK3sKKyAgICBkdG5fZW5kcG9pbnRfaWRfdCogZWlkID0gbmV3IGR0bl9lbmRw
b2ludF9pZF90KCk7CisgICAgRklMRSogaWZpbGU7CisgICAgY2hhciBsaW5lWzUxMl07CisKKyAg
ICBpZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworICAgIGlmIChpZmlsZSA9PSBOVUxMKSB7
CisJZnByaW50ZihzdGRlcnIsICJlcnJvciBvcGVuaW5nIGRlc3RpbmF0aW9uIGVpZCB0YWJsZSBm
aWxlICclcycgZm9yIHJlYWRpbmdcbiIsIGZpbGVuYW1lKTsKKyAgICAgICAgcHJpbnRfdXNhZ2Vf
YW5kX2V4aXQoKTsKKyAgICB9CisKKyAgICBpbnQgbG51bSA9IDA7CisgICAgd2hpbGUoIWZlb2Yo
aWZpbGUpKSB7CisJaWYgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaWZpbGUpICE9IE5VTEwp
IHsKKwkgICAgaW50IG5ldF9hLCBuZXRfYiwgbmV0X2MsIG5ldF9kLCBuZXRfYml0czsKKwkgICAg
aW50IGxvY2FsX2EsIGxvY2FsX2IsIGxvY2FsX2MsIGxvY2FsX2QsIGxvY2FsX2JpdHM7CisJICAg
IGludCBwZWVyX2EsIHBlZXJfYiwgcGVlcl9jLCBwZWVyX2Q7CisJICAgIGNoYXIqIGVpZF9zdHI7
CisJICAgIGNoYXIgbmV0X2FkZHJfc3RyWzE2XSwgbG9jYWxfYWRkcl9zdHJbMTZdLCBwZWVyX2Fk
ZHJfc3RyWzE2XTsKKwkgICAgdV9pbnQzMl90IG5ldF9hZGRyLCBsb2NhbF9hZGRyLCBwZWVyX2Fk
ZHI7CisKKwkgICAgbG51bSsrOworCSAgICAvLyBza2lwIGNvbW1lbnRlZCBsaW5lcworCSAgICBp
ZiAoc3Ryc3RyKGxpbmUsICIjIikgPiAwKSB7CisJCWNvbnRpbnVlOworCSAgICB9CisKKwkgICAg
ZWlkX3N0ciA9IChjaGFyKiljYWxsb2MoRFROX01BWF9FTkRQT0lOVF9JRCwgc2l6ZW9mKGNoYXIp
KTsKKwkgICAgaW50IG4gPSBzc2NhbmYobGluZSwgIiVkLiVkLiVkLiVkLyVkICVzICVkLiVkLiVk
LiVkLyVkICVkLiVkLiVkLiVkIiwgCisJCQkgICAgJm5ldF9hLCAmbmV0X2IsICZuZXRfYywgJm5l
dF9kLCAmbmV0X2JpdHMsIGVpZF9zdHIsCisJCQkgICAgJmxvY2FsX2EsICZsb2NhbF9iLCAmbG9j
YWxfYywgJmxvY2FsX2QsICZsb2NhbF9iaXRzLAorCQkJICAgICZwZWVyX2EsICZwZWVyX2IsICZw
ZWVyX2MsICZwZWVyX2QpOworCSAgICBpZiAobiAhPSAxNSkgeworICAgIAkJaWYgKGVycm5vICE9
IDApIHsKKwkJICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgcGFyc2luZyBkZXN0aW5hdGlvbiBl
aWQgdGFibGUgZmlsZSBhdCBsaW5lICVkOiAlc1xuIiwgCisJCQkgICAgbG51bSwgc3RyZXJyb3Io
ZXJybm8pKTsKKwkJICAgIGV4aXQoMSk7CisJCX0gZWxzZSB7CisJCSAgICBmcHJpbnRmKHN0ZGVy
ciwgImVycm9yIHBhcnNpbmcgZGVzdGluYXRpb24gZWlkIHRhYmxlIGZpbGUgYXQgbGluZSAlZFxu
IiwgbG51bSk7CisJCSAgICBleGl0KDEpOworCSAgICAJfQorCSAgICB9CisvKgorICAgIAkgICAg
ZnByaW50ZihzdGRlcnIsICJERUJVRzogRUlEIHRhYmxlIGxpbmU6ICVkLiVkLiVkLiVkLyVkICVz
ICVkLiVkLiVkLiVkLyVkICVkLiVkLiVkLiVkXG4iLCAKKwkJCSAgICBuZXRfYSwgbmV0X2IsIG5l
dF9jLCBuZXRfZCwgbmV0X2JpdHMsIGVpZF9zdHIsCisJCQkgICAgbG9jYWxfYSwgbG9jYWxfYiwg
bG9jYWxfYywgbG9jYWxfZCwgbG9jYWxfYml0cywKKwkJCSAgICBwZWVyX2EsIHBlZXJfYiwgcGVl
cl9jLCBwZWVyX2QpOworKi8KKwkgICAgc3ByaW50ZihuZXRfYWRkcl9zdHIsICIlZC4lZC4lZC4l
ZCIsIG5ldF9hLCBuZXRfYiwgbmV0X2MsIG5ldF9kKTsKKwkgICAgbmV0X2FkZHIgPSBpbmV0X2Fk
ZHIobmV0X2FkZHJfc3RyKTsKKwkgICAgaWYgKG5ldF9hZGRyID09IElOQUREUl9OT05FKSB7CisJ
CWZwcmludGYoc3RkZXJyLCAiZXJyb3IgcGFyc2luZyBuZXR3b3JrIGFkZHJlc3MgaW4gZGVzdGlu
YXRpb24gZWlkIHRhYmxlIGF0IGxpbmUgJWRcbiIsIGxudW0pOworCQlleGl0KDEpOworCSAgICB9
CisJICAgIGlmICgobmV0X2JpdHMgPCAwKSB8fCAobmV0X2JpdHMgPiAzMikpIHsKKwkJZnByaW50
ZihzdGRlcnIsICJlcnJvciBwYXJzaW5nIG5ldHdvcmsgbWFzayBpbiBkZXN0aW5hdGlvbiBlaWQg
dGFibGUgYXQgbGluZSAlZFxuIiwgbG51bSk7CisJCWV4aXQoMSk7CisJICAgIH0KKworICAgIAkg
ICAgaWYgKGR0bl9wYXJzZV9laWRfc3RyaW5nKGVpZCwgZWlkX3N0cikgPT0gLTEpIHsKKwkJZnBy
aW50ZihzdGRlcnIsICJpbnZhbGlkIGVuZHBvaW50IGlkIGluIGRlc3RpbmF0aW9uIGVpZCB0YWJs
ZSAnJXMnIGF0IGxpbmUgJWRcbiIsIAorCQkJZWlkX3N0ciwgbG51bSk7CisgICAgCQlleGl0KDEp
OworICAgIAkgICAgfQorCisJICAgIHNwcmludGYobG9jYWxfYWRkcl9zdHIsICIlZC4lZC4lZC4l
ZCIsIGxvY2FsX2EsIGxvY2FsX2IsIGxvY2FsX2MsIGxvY2FsX2QpOworCSAgICBsb2NhbF9hZGRy
ID0gaW5ldF9hZGRyKGxvY2FsX2FkZHJfc3RyKTsKKwkgICAgaWYgKGxvY2FsX2FkZHIgPT0gSU5B
RERSX05PTkUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvciBwYXJzaW5nIGxvY2FsIGFkZHJl
c3MgaW4gZGVzdGluYXRpb24gZWlkIHRhYmxlIGF0IGxpbmUgJWRcbiIsIGxudW0pOworCQlleGl0
KDEpOworCSAgICB9CisJICAgIGlmICgobG9jYWxfYml0cyA8IDApIHx8IChsb2NhbF9iaXRzID4g
MzIpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgcGFyc2luZyBsb2NhbCBtYXNrIGluIGRl
c3RpbmF0aW9uIGVpZCB0YWJsZSBhdCBsaW5lICVkXG4iLCBsbnVtKTsKKwkJZXhpdCgxKTsKKwkg
ICAgfQorCisJICAgIHNwcmludGYocGVlcl9hZGRyX3N0ciwgIiVkLiVkLiVkLiVkIiwgcGVlcl9h
LCBwZWVyX2IsIHBlZXJfYywgcGVlcl9kKTsKKwkgICAgcGVlcl9hZGRyID0gaW5ldF9hZGRyKHBl
ZXJfYWRkcl9zdHIpOworCSAgICBpZiAocGVlcl9hZGRyID09IElOQUREUl9OT05FKSB7CisJCWZw
cmludGYoc3RkZXJyLCAiZXJyb3IgcGFyc2luZyBwZWVyIGFkZHJlc3MgaW4gZGVzdGluYXRpb24g
ZWlkIHRhYmxlIGF0IGxpbmUgJWRcbiIsIGxudW0pOworCQlleGl0KDEpOworCSAgICB9CisKKwkg
ICAgLy8gYWRkIG5ldHdvcmsgYmVoaW5kIHRoZSByZW1vdGUgcm91dGVyIHRvIEVJRCB0YWJsZQor
ICAgICAgICAgICAgQ0lEUiBrZXkobmV0X2FkZHIsIG5ldF9iaXRzKTsKKyAgICAgICAgICAgIE5l
dHdvcmtFaWRUYWJsZTo6aXRlcmF0b3IgaSA9IGRlc3RfZWlkX3RhYmxlXy5maW5kKGtleSk7CisJ
ICAgIGlmIChpICE9IGRlc3RfZWlkX3RhYmxlXy5lbmQoKSkgeworICAgIAkgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiZHVwbGljYXRlIG5ldHdvcmsgYWRkcmVzcyBpbiBkZXN0aW5hdGlvbiBlaWQg
dGFibGUgJXMvJWQgYXQgbGluZSAlZFxuIiwgCisJCQluZXRfYWRkcl9zdHIsIG5ldF9iaXRzLCBs
bnVtKTsKKyAgICAJCWV4aXQoMSk7CisgICAgCSAgICB9CisgICAgICAgICAgICBkZXN0X2VpZF90
YWJsZV9ba2V5XSA9IGVpZF9zdHI7CisKKwkgICAgLy8gYWRkIHJvdXRlciBuZXR3b3JrIHRvIEVJ
RCB0YWJsZQorICAgICAgICAgICAgQ0lEUiBrZXkyKHBlZXJfYWRkciwgbG9jYWxfYml0cyk7Cisg
ICAgICAgICAgICBpID0gZGVzdF9laWRfdGFibGVfLmZpbmQoa2V5Mik7CisJICAgIGlmIChpID09
IGRlc3RfZWlkX3RhYmxlXy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGRlc3RfZWlkX3RhYmxl
X1trZXkyXSA9IGVpZF9zdHI7CisgICAgCSAgICB9CisKKwkgICAgLy8gYWRkIGxvY2FsIGFuZCBw
ZWVyIGFkZHJlc3NlcyB0byB0aGUgdHVubmVsIGludGVyZmFjZQorCSAgICBhZGRfdHVuX2FkZHJl
c3ModHVuX25hbWVfLCBsb2NhbF9hZGRyX3N0ciwgbG9jYWxfYml0cywgcGVlcl9hZGRyX3N0cik7
CisKKwkgICAgLy8gYWRkIG5ldHdvcmsgcm91dGUgdG8gdGhlIHR1bm5lbCBpbnRlcmZhY2UKKwkg
ICAgYWRkX3R1bl9yb3V0ZSh0dW5fbmFtZV8sIG5ldF9hZGRyX3N0ciwgbmV0X2JpdHMsIHBlZXJf
YWRkcl9zdHIpOworCX0KKyAgICB9CisgICAgZmNsb3NlKGlmaWxlKTsKK30KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCit2b2lkCitEVE5JUFR1bm5lbDo6Z2V0X2Rlc3RfZWlkKGluX2FkZHJfdCByZW1vdGVf
YWRkciwgZHRuX2VuZHBvaW50X2lkX3QqIGRlc3RfZWlkKQoreworICAgIC8vIGlmIHdlIGRvbid0
IGhhdmUgZGVzdF9laWRfdGFibGUsIHJldHVybgorICAgIGlmIChkZXN0X2VpZF90YWJsZV8uZW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtc2V0KGRlc3RfZWlkLT51cmksIDAsIHNp
emVvZihkZXN0X2VpZC0+dXJpKSk7CisgICAgZm9yIChOZXR3b3JrRWlkVGFibGU6Oml0ZXJhdG9y
IGkgPSBkZXN0X2VpZF90YWJsZV8uYmVnaW4oKTsKKyAgICAgICAgIGkgIT0gZGVzdF9laWRfdGFi
bGVfLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBDSURSIG5ldCA9IGktPmZpcnN0OworICAg
ICAgICB1X2ludDMyX3QgbWFzayA9IH4ofnVfaW50MzJfdCgwKSA8PCBuZXQuYml0c18pOworICAg
ICAgICAvL2xvZ19kZWJ1ZygicmVtb3RlX2FkZHI9JXMsIGFkZHI9JXMsIGJpdHM9JWQsIG1hc2s9
JXMiLAorICAgICAgICAvLyAgICAgICAgaW50b2EocmVtb3RlX2FkZHIpLCBpbnRvYShuZXQuYWRk
cl8pLCBuZXQuYml0c18sIGludG9hKG1hc2spKTsKKyAgICAgICAgaWYgKChyZW1vdGVfYWRkciAm
IG1hc2spID09IChuZXQuYWRkcl8gJiBtYXNrKSkgeworCSAgICBtZW1jcHkoZGVzdF9laWQtPnVy
aSwgZGVzdF9laWRfdGFibGVfW2ktPmZpcnN0XSwgRFROX01BWF9FTkRQT0lOVF9JRCk7CisgICAg
ICAgICAgICBsb2dfZGVidWcoImZvdW5kIGRlc3RfZWlkICVzIGZvciBhZGRyZXNzICVzIiwgCisJ
CSAgICAgIGRlc3RfZWlkLT51cmksIGludG9hKHJlbW90ZV9hZGRyKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkCitEVE5J
UFR1bm5lbDo6aW5pdF90dW5uZWwoKQoreworICAgIGlwNHR1bm5lbF8gPSBuZXcgSVA0VHVubmVs
KCk7CisgICAgaXA0dHVubmVsXy0+YWRkX2xpc3RlbmVyKCk7Cit9CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQordm9pZAorRFROSVBUdW5uZWw6OmluaXRfcmVnaXN0cmF0aW9uKCkKK3sKKyAgICAvLyBvcGVu
IHRoZSBpcGMgcmVjdiBoYW5kbGUKKyAgICBpbnQgZXJyID0gMDsKKyAgICBpZiAoYXBpX0lQX1sw
XSAhPSAnXDAnKSB7CisJZXJyID0gZHRuX29wZW5fd2l0aF9JUChhcGlfSVBfLCBhcGlfcG9ydF8s
ICZyZWN2X2hhbmRsZV8pOworICAgIH0gZWxzZSB7CisJZXJyID0gZHRuX29wZW4oJnJlY3ZfaGFu
ZGxlXyk7CisgICAgfQorICAgIGlmIChlcnIgIT0gRFROX1NVQ0NFU1MpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJjYW4ndCBvcGVuIHJlY3YgaGFuZGxlIHRvIGRhZW1vbjogJXNcbiIsCisg
ICAgICAgICAgICAgICAgZHRuX3N0cmVycm9yKGVycikpOworCW5vdGlmeV9hbmRfZXhpdCgxKTsK
KyAgICB9CisKKyAgICAvLyBvcGVuIHRoZSBpcGMgc2VuZCBoYW5kbGUKKyAgICBpZiAoYXBpX0lQ
X1swXSAhPSAnXDAnKSB7CisJZXJyID0gZHRuX29wZW5fd2l0aF9JUChhcGlfSVBfLCBhcGlfcG9y
dF8sICZzZW5kX2hhbmRsZV8pOworICAgIH0gZWxzZSB7CisJZXJyID0gZHRuX29wZW4oJnNlbmRf
aGFuZGxlXyk7CisgICAgfQorICAgIGlmIChlcnIgIT0gRFROX1NVQ0NFU1MpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJjYW4ndCBvcGVuIHNlbmQgaGFuZGxlIHRvIGRhZW1vbjogJXNcbiIs
CisgICAgICAgICAgICAgICAgZHRuX3N0cmVycm9yKGVycikpOworCW5vdGlmeV9hbmRfZXhpdCgx
KTsKKyAgICB9CisKKyAgICBvYXN5czo6U3RhdGljU3RyaW5nQnVmZmVyPDEyOD4gZGVtdXg7Cisg
ICAgZGVtdXguYXBwZW5kZigiZHRuaXB0dW5uZWwiKTsKKyAgICAKKyAgICBpZiAobG9jYWxfZWlk
Xy51cmlbMF0gPT0gJ1wwJykgeworICAgICAgICBlcnIgPSBkdG5fYnVpbGRfbG9jYWxfZWlkKHJl
Y3ZfaGFuZGxlXywgJmxvY2FsX2VpZF8sIGRlbXV4LmNfc3RyKCkpOworICAgICAgICBpZiAoZXJy
ICE9IERUTl9TVUNDRVNTKSB7CisgICAgICAgICAgICBsb2dfY3JpdCgiY2FuJ3QgYnVpbGQgbG9j
YWwgZWlkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBkdG5fc3RyZXJyb3IoZHRuX2Vycm5v
KHJlY3ZfaGFuZGxlXykpKTsKKyAgICAgICAgICAgIG5vdGlmeV9hbmRfZXhpdCgxKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGxvZ19ub3RpY2UoImxvY2FsIGVuZHBvaW50IGlkICVzIiwgbG9j
YWxfZWlkXy51cmkpOworCisgICAgdV9pbnQzMl90IHJlZ2lkOworICAgIGVyciA9IGR0bl9maW5k
X3JlZ2lzdHJhdGlvbihyZWN2X2hhbmRsZV8sICZsb2NhbF9laWRfLCAmcmVnaWQpOworICAgIGlm
IChlcnIgPT0gMCkgeworICAgICAgICBsb2dfbm90aWNlKCJmb3VuZCBleGlzdGluZyByZWdpc3Ry
YXRpb24gaWQgJWQsIGNhbGxpbmcgZHRuX2JpbmQiLAorICAgICAgICAgICAgICAgICAgIHJlZ2lk
KTsKKyAgICAgICAgCisgICAgICAgIGVyciA9IGR0bl9iaW5kKHJlY3ZfaGFuZGxlXywgcmVnaWQp
OworICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgIGxvZ19jcml0KCJlcnJvciBp
biBkdG5fYmluZDogJXMiLCAKKyAgICAgICAgICAgICAgICAgICAgIGR0bl9zdHJlcnJvcihkdG5f
ZXJybm8ocmVjdl9oYW5kbGVfKSkpOworICAgICAgICAgICAgbm90aWZ5X2FuZF9leGl0KDEpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChkdG5fZXJybm8ocmVjdl9oYW5kbGVfKSA9PSBEVE5f
RU5PVEZPVU5EKSB7CisgICAgICAgIGR0bl9yZWdfaW5mb190IHJlZ2luZm87CisgICAgICAgIG1l
bXNldCgmcmVnaW5mbywgMCwgc2l6ZW9mKHJlZ2luZm8pKTsKKyAgICAgICAgZHRuX2NvcHlfZWlk
KCZyZWdpbmZvLmVuZHBvaW50LCAmbG9jYWxfZWlkXyk7CisgICAgICAgIHJlZ2luZm8uZmxhZ3Mg
PSBEVE5fUkVHX0RFRkVSOworICAgICAgICByZWdpbmZvLmV4cGlyYXRpb24gPSA2MCAqIDYwICog
MjQ7IC8vIDEgZGF5CisKKyAgICAgICAgZXJyID0gZHRuX3JlZ2lzdGVyKHJlY3ZfaGFuZGxlXywg
JnJlZ2luZm8sICZyZWdpZCk7CisgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAg
bG9nX2NyaXQoImVycm9yIGluIGR0bl9yZWdpc3RlcjogJXMiLAorICAgICAgICAgICAgICAgICAg
ICAgZHRuX3N0cmVycm9yKGR0bl9lcnJubyhyZWN2X2hhbmRsZV8pKSk7CisgICAgICAgICAgICBu
b3RpZnlfYW5kX2V4aXQoMSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBsb2df
Y3JpdCgiZXJyb3IgaW4gZHRuX2ZpbmRfcmVnaXN0cmF0aW9uOiAlcyIsCisgICAgICAgICAgICAg
ICAgIGR0bl9zdHJlcnJvcihkdG5fZXJybm8ocmVjdl9oYW5kbGVfKSkpOworICAgICAgICBub3Rp
ZnlfYW5kX2V4aXQoMSk7CisgICAgfQorfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludAorRFROSVBU
dW5uZWw6OnNlbmRfYnVuZGxlKGR0bjo6QVBJQnVuZGxlKiBidW5kbGUsIGR0bl9lbmRwb2ludF9p
ZF90KiBkZXN0X2VpZCkKK3sKKyAgICAvLyBsb2NrIHRvIGNvb3JkaW5hdGUgYWNjZXNzIHRvIHRo
ZSBzZW5kX2hhbmRsZV8gZnJvbSBtdWx0aXBsZQorICAgIC8vIGNsaWVudCB0aHJlYWRzCisgICAg
b2FzeXM6OlNjb3BlTG9jayBsKCZzZW5kX2xvY2tfLCAiRFROSVBUdW5uZWw6OnNlbmRfYnVuZGxl
Iik7CisgICAgCisgICAgZHRuX2J1bmRsZV9zcGVjX3Qgc3BlYzsKKyAgICBtZW1zZXQoJnNwZWMs
IDAsIHNpemVvZihzcGVjKSk7CisgICAgZHRuX2NvcHlfZWlkKCZzcGVjLnNvdXJjZSwgJmxvY2Fs
X2VpZF8pOworICAgIGR0bl9jb3B5X2VpZCgmc3BlYy5kZXN0LCAgIGRlc3RfZWlkKTsKKyAgICBz
cGVjLnByaW9yaXR5ICAgPSBDT1NfTk9STUFMOworICAgIHNwZWMuZG9wdHMgICAgICA9IERPUFRT
X05PTkU7CisgICAgaWYgKGN1c3RvZHlfKSB7CisgICAgICAgIHNwZWMuZG9wdHMgfD0gRE9QVFNf
Q1VTVE9EWTsKKyAgICB9CisgICAgc3BlYy5leHBpcmF0aW9uID0gZXhwaXJhdGlvbl87CisKKyAg
ICBkdG5fYnVuZGxlX3BheWxvYWRfdCBwYXlsb2FkOworICAgIG1lbXNldCgmcGF5bG9hZCwgMCwg
c2l6ZW9mKHBheWxvYWQpKTsKKworICAgIGludCBlcnIgPSBkdG5fc2V0X3BheWxvYWQoJnBheWxv
YWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVE5fUEFZTE9BRF9NRU0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGUtPnBheWxvYWRfLmJ1ZigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlLT5wYXlsb2FkXy5sZW4oKSk7CisgICAgaWYg
KGVyciAhPSAwKSB7CisgICAgICAgIGxvZ19lcnIoImVycm9yIHNldHRpbmcgcGF5bG9hZDogJXMi
LAorICAgICAgICAgICAgICAgIGR0bl9zdHJlcnJvcihkdG5fZXJybm8ocmVjdl9oYW5kbGVfKSkp
OworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICAKKyAgICBkdG5fYnVuZGxlX2lkX3Qg
YnVuZGxlX2lkOworICAgIG1lbXNldCgmYnVuZGxlX2lkLCAwLCBzaXplb2YoYnVuZGxlX2lkKSk7
CisKKyAgICBlcnIgPSBkdG5fc2VuZChzZW5kX2hhbmRsZV8sIERUTl9SRUdfREVGRVIsICZzcGVj
LCAmcGF5bG9hZCwgJmJ1bmRsZV9pZCk7CisKKyAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAg
cmV0dXJuIGR0bl9lcnJubyhzZW5kX2hhbmRsZV8pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
RFROX1NVQ0NFU1M7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50CitEVE5JUFR1bm5lbDo6aGFu
ZGxlX2J1bmRsZShkdG5fYnVuZGxlX3NwZWNfdCogc3BlYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGR0bl9idW5kbGVfcGF5bG9hZF90KiBwYXlsb2FkKQoreworICAgIGR0bjo6QVBJQnVu
ZGxlKiBiID0gbmV3IGR0bjo6QVBJQnVuZGxlKCk7CisgICAgYi0+c3BlY18gPSAqc3BlYzsKKyAg
ICBBU1NFUlQocGF5bG9hZC0+bG9jYXRpb24gPT0gRFROX1BBWUxPQURfTUVNKTsKKworICAgIGlu
dCBsZW4gPSBwYXlsb2FkLT5idWYuYnVmX2xlbjsKKworICAgIGlmIChsZW4gPCAoaW50KXNpemVv
ZihpcGhkcikpIHsKKyAgICAgICAgbG9nX2VycigidG9vIHNob3J0IGJ1bmRsZTogbGVuICVkIDwg
c2l6ZW9mIGlwIGhlYWRlciIsIGxlbik7CisgICAgICAgIGRlbGV0ZSBiOworICAgICAgICByZXR1
cm4gLTE7CisgICAgfQorICAgIAorICAgIGNoYXIqIGRzdCA9IGItPnBheWxvYWRfLmJ1ZihsZW4p
OworICAgIG1lbWNweShkc3QsIHBheWxvYWQtPmJ1Zi5idWZfdmFsLCBsZW4pOworICAgIGItPnBh
eWxvYWRfLnNldF9sZW4obGVuKTsKKyAgICAKKyAgICBzdHJ1Y3QgaXBoZHIqIGlwNCA9IChzdHJ1
Y3QgaXBoZHIqKWRzdDsKKyAgICAKKyAgICBzd2l0Y2ggKGlwNC0+dmVyc2lvbikgeworCWNhc2Ug
NDogaXA0dHVubmVsXy0+aGFuZGxlX2J1bmRsZShiKTsgYnJlYWs7CisJZGVmYXVsdDoKKyAgICAJ
ICAgIGxvZ19lcnIoInVuc3VwcG9ydGVkIElQIHByb3RvY29sIHZlcnNpb24gJWQgaW4gJWQgYnl0
ZSB0dW5uZWwgYnVuZGxlIiwKKyAgICAgICAgICAgIAkgICAgaXA0LT52ZXJzaW9uLCBsZW4pOwor
ICAgIAkgICAgZGVsZXRlIGI7CisgICAgCSAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50CitEVE5JUFR1bm5lbDo6bWFpbihpbnQg
YXJnYywgY2hhciogYXJndltdKQoreworICAgIGluaXRfYXBwKGFyZ2MsIGFyZ3YpOworCisgICAg
bG9nX25vdGljZSgiRFROSVBUdW5uZWwgc3RhcnRpbmcgdXAuLi4iKTsKKworICAgIGluaXRfdHVu
bmVsKCk7CisgICAgaW5pdF9yZWdpc3RyYXRpb24oKTsKKworICAgIC8vIGlmIHdlJ3ZlIGRhZW1v
bml6ZWQsIG5vdyBpcyB0aGUgdGltZSB0byBub3RpZnkgb3VyIHBhcmVudAorICAgIC8vIHByb2Nl
c3MgdGhhdCB3ZSd2ZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQKKyAgICBpZiAoZGFlbW9uaXpl
XykgeworICAgICAgICBkYWVtb25pemVyXy5ub3RpZnlfcGFyZW50KDApOworICAgIH0KKworICAg
IGxvZ19kZWJ1ZygiQ3JlYXRlZCB0dW5uZWwgbmV0d29yayBpbnRlcmZhY2UgJXMsIGZkICVkIiwg
dHVuX25hbWVfLCB0dW5fZmRfKTsKKworICAgIGxvZ19kZWJ1ZygiRFROVHVubmVsIHN0YXJ0aW5n
IHJlY2VpdmUgbG9vcC4uLiIpOworICAgIAorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGR0bl9i
dW5kbGVfc3BlY190ICAgIHNwZWM7CisgICAgICAgIGR0bl9idW5kbGVfcGF5bG9hZF90IHBheWxv
YWQ7CisKKyAgICAgICAgbWVtc2V0KCZzcGVjLCAgICAwLCBzaXplb2Yoc3BlYykpOworICAgICAg
ICBtZW1zZXQoJnBheWxvYWQsIDAsIHNpemVvZihwYXlsb2FkKSk7CisgICAgCisgICAgICAgIGxv
Z19kZWJ1ZygiY2FsbGluZyBkdG5fcmVjdi4uLiIpOworICAgICAgICBpbnQgZXJyID0gZHRuX3Jl
Y3YocmVjdl9oYW5kbGVfLCAmc3BlYywgRFROX1BBWUxPQURfTUVNLCAmcGF5bG9hZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERUTl9USU1FT1VUX0lORik7CisgICAgICAgIGlmIChlcnIg
IT0gMCkgeworICAgICAgICAgICAgbG9nX2VycigiZXJyb3IgaW4gZHRuX3JlY3Y6ICVzIiwKKyAg
ICAgICAgICAgICAgICAgICAgZHRuX3N0cmVycm9yKGR0bl9lcnJubyhyZWN2X2hhbmRsZV8pKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGxvZ19pbmZvKCJnb3Qg
JWQgYnl0ZSBidW5kbGUiLCBwYXlsb2FkLmJ1Zi5idWZfbGVuKTsKKworICAgICAgICBoYW5kbGVf
YnVuZGxlKCZzcGVjLCAmcGF5bG9hZCk7CisKKyAgICAgICAgZHRuX2ZyZWVfcGF5bG9hZCgmcGF5
bG9hZCk7CisgICAgfQorCisgICAgZHRuX2Nsb3NlKHJlY3ZfaGFuZGxlXyk7CisgICAgZHRuX2Ns
b3NlKHNlbmRfaGFuZGxlXyk7CisKKyAgICBpZiAodHVuX2ZkXyAhPSAtMSkgeworCWNsb3NlKHR1
bl9mZF8pOworCWxvZ19kZWJ1ZygiY2xvc2luZyB0dW5uZWwgaW50ZXJmYWNlIGZkICVkOiAlcyIs
IHR1bl9mZF8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiAwOwor
fQorCit9IC8vIG5hbWVzcGFjZSBkdG5pcHR1bm5lbAorCitpbnQKK21haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQoreworICAgIGR0bmlwdHVubmVsOjpEVE5JUFR1bm5lbDo6Y3JlYXRlKCk7Cisg
ICAgZHRuaXB0dW5uZWw6OkRUTklQVHVubmVsOjppbnN0YW5jZSgpLT5tYWluKGFyZ2MsIGFyZ3Yp
OworfQpkaWZmIC1OdXIgRFROMi5vcmlnL2FwcHMvZHRuaXB0dW5uZWwvRFROSVBUdW5uZWwuaCBE
VE4yL2FwcHMvZHRuaXB0dW5uZWwvRFROSVBUdW5uZWwuaAotLS0gRFROMi5vcmlnL2FwcHMvZHRu
aXB0dW5uZWwvRFROSVBUdW5uZWwuaAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMw
MAorKysgRFROMi9hcHBzL2R0bmlwdHVubmVsL0RUTklQVHVubmVsLmgJMjAxMy0wNy0xNiAxMjow
NDowNS4wMDAwMDAwMDAgKzA0MDAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiAgICBDb3B5cmln
aHQgMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorICogCisgKiAgICBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqICAgIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisg
KiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAK
KyAqICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKKyAqICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgICBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
KyAqICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKKyAqICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
ICovCisKKyNpZm5kZWYgX0RUTklQVFVOTkVMX0hfCisjZGVmaW5lIF9EVE5JUFRVTk5FTF9IXwor
CisjaW5jbHVkZSA8bWFwPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKKyNpbmNsdWRlIDxkdG5fYXBpLmg+Cisj
aW5jbHVkZSA8QVBJQnVuZGxlUXVldWUuaD4KKyNpbmNsdWRlIDxvYXN5cy9kZWJ1Zy9Mb2cuaD4K
KyNpbmNsdWRlIDxvYXN5cy90aHJlYWQvTXV0ZXguaD4KKyNpbmNsdWRlIDxvYXN5cy91dGlsL0Fw
cC5oPgorI2luY2x1ZGUgPG9hc3lzL3V0aWwvU2luZ2xldG9uLmg+CisKK25hbWVzcGFjZSBkdG5p
cHR1bm5lbCB7CisKK2NsYXNzIElQNFR1bm5lbDsKKworLyoqCisgKiBNYWluIHdyYXBwZXIgY2xh
c3MgZm9yIHRoZSBEVE4gVHVubmVsLgorICovCitjbGFzcyBEVE5JUFR1bm5lbCA6IHB1YmxpYyBv
YXN5czo6QXBwLAorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgb2FzeXM6OlNpbmdsZXRvbjxE
VE5JUFR1bm5lbD4KK3sKK3B1YmxpYzoKKyAgICAvLy8gQ29uc3RydWN0b3IKKyAgICBEVE5JUFR1
bm5lbCgpOworCisgICAgLy8vIEhvb2sgZm9yIHZhcmlvdXMgdHVubmVsIGNsYXNzZXMgdG8gc2Vu
ZCBhIGJ1bmRsZS4gQXNzdW1lcworICAgIC8vLyBvd25lcnNoaXAgb2YgdGhlIHBhc3NlZC1pbiBi
dW5kbGUKKyAgICAvLy8KKyAgICAvLy8gQHJldHVybiBEVE5fU1VDQ0VTUyBvbiBzdWNjZXNzLCBh
IERUTl9FUlJOTyB2YWx1ZSBvbiBlcnJvcgorICAgIGludCBzZW5kX2J1bmRsZShkdG46OkFQSUJ1
bmRsZSogYnVuZGxlLCBkdG5fZW5kcG9pbnRfaWRfdCogZGVzdF9laWQpOworCisgICAgLy8vIENh
bGxlZCBmb3IgYXJyaXZpbmcgYnVuZGxlcworICAgIGludCBoYW5kbGVfYnVuZGxlKGR0bl9idW5k
bGVfc3BlY190KiBzcGVjLCBkdG5fYnVuZGxlX3BheWxvYWRfdCogcGF5bG9hZCk7CisKKyAgICAv
Ly8gTWFpbiBhcHBsaWNhdGlvbiBsb29wCisgICAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy
Z3ZbXSk7CisKKyAgICAvLy8gVmlydHVhbCBmcm9tIG9hc3lzOjpBcHAKKyAgICB2b2lkIGZpbGxf
b3B0aW9ucygpOworICAgIHZvaWQgdmFsaWRhdGVfb3B0aW9ucyhpbnQgYXJnYywgY2hhciogY29u
c3QgYXJndltdLCBpbnQgcmVtYWluZGVyKTsKKworICAgIC8vLyBHZXQgZGVzdGluYXRpb24gZWlk
IGZyb20gdGhlIGRlc3RfZWlkX3RhYmxlCisgICAgdm9pZCBnZXRfZGVzdF9laWQoaW5fYWRkcl90
IHJlbW90ZV9hZGRyLCBkdG5fZW5kcG9pbnRfaWRfdCogZGVzdF9laWQpOworCisgICAgLy8vIENy
ZWF0ZSB0dW5uZWwgaW50ZXJmYWNlLiBSZXR1cm5zIG9wZW5lZCBmZCwgc3RvcmVzIGludGVyZmFj
ZSBuYW1lIGluIHRoZSBmaXJzdCBhcmcKKyAgICBpbnQgY3JlYXRlX3R1bl9pZmFjZShjaGFyKiBk
ZXYsIGludCBtdHUpOworCisgICAgLy8vIEFkZCBsb2NhbCBhbiBwZWVyIGlwIGFkZHJlc3NlcyB0
byB0aGUgdHVubmVsIGludGVyZmFjZQorICAgIGludCBhZGRfdHVuX2FkZHJlc3MoY29uc3QgY2hh
ciAqZGV2LCBjb25zdCBjaGFyICpsb2NhbF9hZGRyLCBjb25zdCBpbnQgYml0cywgY29uc3QgY2hh
ciAqcGVlcl9hZGRyKTsKKworICAgIC8vLyBBZGQgbmV0d29yayByb3V0ZSB0byB0aGUgdHVubmVs
IGludGVyZmFjZQorICAgIGludCBhZGRfdHVuX3JvdXRlKGNvbnN0IGNoYXIgKmRldiwgY29uc3Qg
Y2hhciAqbmV0X2FkZHIsIGNvbnN0IGludCBiaXRzLCBjb25zdCBjaGFyICpnd19hZGRyKTsKKwor
ICAgIC8vLyBBY2Nlc3NvcnMKKyAgICBjaGFyKiB0dW5fbmFtZSgpCXsgcmV0dXJuIHR1bl9uYW1l
XzsgfQorICAgIGludCB0dW5fZmQoKQl7IHJldHVybiB0dW5fZmRfOyB9CisgICAgaW50IHR1bl9t
dHUoKQl7IHJldHVybiB0dW5fbXR1XzsgfQorCitwcm90ZWN0ZWQ6CisgICAgSVA0VHVubmVsKiAg
ICAgICAgICBpcDR0dW5uZWxfOworCisgICAgZHRuX2hhbmRsZV90IAlyZWN2X2hhbmRsZV87Cisg
ICAgZHRuX2hhbmRsZV90IAlzZW5kX2hhbmRsZV87CisgICAgb2FzeXM6Ok11dGV4CXNlbmRfbG9j
a187CisgICAgZHRuX2VuZHBvaW50X2lkX3QgCWxvY2FsX2VpZF87CisgICAgYm9vbAkJY3VzdG9k
eV87CisgICAgdV9pbnQJCWV4cGlyYXRpb25fOworICAgIGNoYXIqICAgICAgICAgICAgICAgdHVu
X25hbWVfOworICAgIGludAkJCXR1bl9mZF87CisgICAgaW50CQkJdHVuX210dV87CisgICAgaW50
CQkJdHVuX2FkZHJfY291bnRfOworICAgIGludAkJCXR1bl9yb3V0ZV9jb3VudF87CisgICAgaW5f
YWRkcl90CQlhcGlfYWRkcl87CisgICAgY2hhcioJCWFwaV9JUF87CisgICAgdV9pbnQJCWFwaV9w
b3J0XzsKKworICAgIC8vLyBIZWxwZXIgc3RydWN0IGZvciBuZXR3b3JrIElQIGFkZHJlc3MgaW4g
Q0lEUiBub3RhdGlvbgorICAgIHN0cnVjdCBDSURSIHsKKwlDSURSKCkKKwkgICAgOiBhZGRyXygw
KSwKKwkgICAgICBiaXRzXygwKSB7fQorCQorCUNJRFIodV9pbnQzMl90IGFkZHIsIHVfaW50MTZf
dCBiaXRzKQorCSAgICA6IGFkZHJfKGFkZHIpLAorCSAgICAgIGJpdHNfKGJpdHMpIHt9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ0lEUiYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgICNkZWZpbmUgQ09NUEFSRShfeCkgaWYgKF94ICE9IG90aGVyLl94KSByZXR1
cm4gX3ggPCBvdGhlci5feDsKKyAgICAgICAgICAgIENPTVBBUkUoYWRkcl8pOworICAgICAgICAg
ICAgI3VuZGVmIENPTVBBUkUKKworCSAgICByZXR1cm4gYml0c18gPCBvdGhlci5iaXRzXzsKKyAg
ICAgICAgfQorCisJdV9pbnQzMl90IGFkZHJfOworCXVfaW50MTZfdCBiaXRzXzsKKyAgICB9Owor
CisgICAgLy8vIFRhYmxlIGZvciBJUCBuZXR3b3JrIGFkZHJlc3MgPC0+IEVJRCBtYXBwaW5nCisg
ICAgdHlwZWRlZiBzdGQ6Om1hcDxEVE5JUFR1bm5lbDo6Q0lEUiwgY2hhcio+IE5ldHdvcmtFaWRU
YWJsZTsKKyAgICBOZXR3b3JrRWlkVGFibGUgZGVzdF9laWRfdGFibGVfOworCisgICAgdm9pZCBp
bml0X3R1bm5lbCgpOworICAgIHZvaWQgaW5pdF9yZWdpc3RyYXRpb24oKTsKKyAgICB2b2lkIGxv
YWRfZGVzdF9laWRfdGFibGUoY2hhciogZmlsZW5hbWUpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
ZHRuaXB0dW5uZWwKKworI2VuZGlmIC8qIF9EVE5JUFRVTk5FTF9IXyAqLwpkaWZmIC1OdXIgRFRO
Mi5vcmlnL2FwcHMvZHRuaXB0dW5uZWwvSVA0VHVubmVsLmNjIERUTjIvYXBwcy9kdG5pcHR1bm5l
bC9JUDRUdW5uZWwuY2MKLS0tIERUTjIub3JpZy9hcHBzL2R0bmlwdHVubmVsL0lQNFR1bm5lbC5j
YwkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMAorKysgRFROMi9hcHBzL2R0bmlw
dHVubmVsL0lQNFR1bm5lbC5jYwkyMDEzLTA3LTEyIDExOjAwOjM1LjAwMDAwMDAwMCArMDQwMApA
QCAtMCwwICsxLDE1NSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAyMDA2IEludGVsIENvcnBvcmF0
aW9uCisgKiAKKyAqICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv
biAyLjAgKHRoZSAiTGljZW5zZSIpOworICogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogICAgWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgICAgICBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogICAgVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICog
ICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKKyAqICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogICAgU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
ICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmZGVmIEhBVkVfQ09O
RklHX0gKKyMgIGluY2x1ZGUgPGR0bi1jb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0
aW5ldC9pcC5oPgkJLy8gZm9yIHN0cnVjdCBpcAorCisjaW5jbHVkZSA8b2FzeXMvaW8vTmV0VXRp
bHMuaD4KKyNpbmNsdWRlICJEVE5JUFR1bm5lbC5oIgorI2luY2x1ZGUgIklQNFR1bm5lbC5oIgor
CituYW1lc3BhY2UgZHRuaXB0dW5uZWwgeworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lQNFR1bm5lbDo6
SVA0VHVubmVsKCkKKyAgICA6IElQVHVubmVsKCJJUDRUdW5uZWwiLCAiL2R0bmlwdHVubmVsL2lw
NCIpLAorICAgICAgbGlzdGVuZXJfKE5VTEwpCit7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9p
ZAorSVA0VHVubmVsOjphZGRfbGlzdGVuZXIoKQoreworICAgIGlmIChOVUxMICE9IGxpc3RlbmVy
XykgeworICAgICAgICBsb2dfY3JpdCgiYXR0ZW1wdCB3YXMgbWFkZSB0byBhZGQgbGlzdGVuZXIg
YWZ0ZXIgYWxyZWFkeSBpbnN0YW50aWF0ZWQiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaXN0
ZW5lcl8gPSBuZXcgTGlzdGVuZXIodGhpcyk7CisgICAgfQorfQorCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K3ZvaWQKK0lQNFR1bm5lbDo6aGFuZGxlX2J1bmRsZShkdG46OkFQSUJ1bmRsZSogYnVuZGxlKQor
eworICAgIGxpc3RlbmVyXy0+aGFuZGxlX2J1bmRsZShidW5kbGUpOworICAgIHJldHVybjsKK30K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCitJUDRUdW5uZWw6Okxpc3RlbmVyOjpMaXN0ZW5lcihJUDRUdW5u
ZWwqIHQpCisgICAgOiBUaHJlYWQoIklQNFR1bm5lbDo6TGlzdGVuZXIiLCBERUxFVEVfT05fRVhJ
VCksCisgICAgICBMb2dnZXIoIklQNFR1bm5lbDo6TGlzdGVuZXIiLCAiL2R0bmlwdHVubmVsL2lw
NC9saXN0ZW5lciIpLCAKKyAgICAgIHR1bl9pZmFjZV8oRFROSVBUdW5uZWw6Omluc3RhbmNlKCkt
PnR1bl9mZCgpLCBOVUxMLCAiL2R0bmlwdHVubmVsL2lwNC9saXN0ZW5lci90dW4iKSwKKyAgICAg
IGlwNHR1bl8odCkKK3sKKyAgICBzdGFydCgpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQK
K0lQNFR1bm5lbDo6TGlzdGVuZXI6OnJ1bigpCit7CisgICAgRFROSVBUdW5uZWwqIHR1bm5lbCA9
IERUTklQVHVubmVsOjppbnN0YW5jZSgpOworICAgIGR0bl9lbmRwb2ludF9pZF90IGRlc3RfZWlk
OworCisgICAgd2hpbGUgKDEpIHsKKwkvLyByZWFkIHBhY2tldCBmcm9tIHRoZSB0dW5uZWwgbmV0
d29yayBpbnRlcmZhY2UKKyAgICAgICAgaW50IGxlbiA9IHR1bl9pZmFjZV8ucmVhZChyZWN2X2J1
Zl8sIHNpemVvZihyZWN2X2J1Zl8pKTsKKyAgICAgICAgaWYgKGxlbiA8PSAwKSB7CisgICAgICAg
ICAgICBsb2dfZXJyKCJlcnJvciByZWFkaW5nIGZyb20gdHVubmVsIG5ldHdvcmsgaW50ZXJmYWNl
OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm47IC8vIGRpZQorICAg
ICAgICB9CisKKwlzdHJ1Y3QgaXBoZHIqIGlwNCA9IChzdHJ1Y3QgaXBoZHIqKXJlY3ZfYnVmXzsK
KyAgICAgICAgbG9nX2RlYnVnKCJnb3QgJWQgYnl0ZSBwYWNrZXQ6ICVzIC0+ICVzIiwgCisJCSAg
bGVuLCBpbnRvYShpcDQtPnNhZGRyKSwgaW50b2EoaXA0LT5kYWRkcikpOworCisgICAgICAgIGR0
bjo6QVBJQnVuZGxlKiBiID0gbmV3IGR0bjo6QVBJQnVuZGxlKCk7CisgICAgICAgIGNoYXIqIGJw
ID0gYi0+cGF5bG9hZF8uYnVmKGxlbik7CisgICAgICAgIG1lbWNweShicCwgcmVjdl9idWZfLCBs
ZW4pOworICAgICAgICBiLT5wYXlsb2FkXy5zZXRfbGVuKGxlbik7CisKKyAgICAgICAgdHVubmVs
LT5nZXRfZGVzdF9laWQoaXA0LT5kYWRkciwgJmRlc3RfZWlkKTsKKyAgICAgICAgaWYgKGRlc3Rf
ZWlkLnVyaVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgICBsb2dfd2FybigiY2Fubm90IGZpbmQg
ZGVzdGluYXRpb24gZWlkIGZvciBhZGRyZXNzICVzLCBpZ25vcmluZyB0aGlzIHBhY2tldCIsCisJ
CSAgICBpbnRvYShpcDQtPmRhZGRyKSk7CisJICAgIGNvbnRpbnVlOworCX0KKyAgICAgICAgCisg
ICAgICAgIGlmICh0dW5uZWwtPnNlbmRfYnVuZGxlKGIsICZkZXN0X2VpZCkgIT0gRFROX1NVQ0NF
U1MpIHsKKwkgICAgbG9nX2VycigiZXJyb3Igc2VuZGluZyAlenUgYnl0ZSBidW5kbGUgdG8gJXMg
Zm9yICVzIC0+ICVzIiwKKyAgICAgICAgCSAgICBiLT5wYXlsb2FkXy5sZW4oKSwKKwkgICAgICAg
ICAgICBkZXN0X2VpZC51cmksCisJCSAgICBpbnRvYShpcDQtPnNhZGRyKSwKKyAgICAJCSAgICBp
bnRvYShpcDQtPmRhZGRyKSk7CisgICAgCSAgICBleGl0KDEpOworCX0gZWxzZSB7CisJICAgIGxv
Z19kZWJ1Zygic2VudCAlenUgYnl0ZSBidW5kbGUgdG8gJXMgZm9yICVzIC0+ICVzIiwKKyAgICAg
ICAgCSAgICAgIGItPnBheWxvYWRfLmxlbigpLAorCSAgICAgICAgICAgICAgZGVzdF9laWQudXJp
LAorCQkgICAgICBpbnRvYShpcDQtPnNhZGRyKSwKKyAgICAJCSAgICAgIGludG9hKGlwNC0+ZGFk
ZHIpKTsKKwl9CisKKyAgICAgICAgZGVsZXRlIGI7CisgICAgfQorfQorCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KK3ZvaWQKK0lQNFR1bm5lbDo6TGlzdGVuZXI6OmhhbmRsZV9idW5kbGUoZHRuOjpBUElCdW5k
bGUqIGJ1bmRsZSkKK3sKKyAgICBpbnQgbGVuID0gYnVuZGxlLT5wYXlsb2FkXy5sZW4oKTsKKyAg
ICBpZiAobGVuIDwgKGludClzaXplb2YoaXBoZHIpKSB7CisgICAgICAgIGxvZ19lcnIoInRvbyBz
aG9ydCBidW5kbGU6IGxlbiAlZCA8IHNpemVvZiBpcCBoZWFkZXIiLCBsZW4pOworCWRlbGV0ZSBi
dW5kbGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJ1Y3QgaXBoZHIgaXA0Owor
ICAgIG1lbWNweSgmaXA0LCBidW5kbGUtPnBheWxvYWRfLmJ1ZigpLCBzaXplb2YoaXBoZHIpKTsK
KworICAgIGxvZ19kZWJ1ZygiZ290ICV6dSBieXRlIGJ1bmRsZSBmcm9tICVzIGZvciAlcyAtPiAl
cyIsCisgICAgICAgICAgICAgIGJ1bmRsZS0+cGF5bG9hZF8ubGVuKCksCisgICAgICAgICAgICAg
IGJ1bmRsZS0+c3BlY18uc291cmNlLnVyaSwKKyAgICAgICAgICAgICAgaW50b2EoaXA0LnNhZGRy
KSwKKyAgICAgICAgICAgICAgaW50b2EoaXA0LmRhZGRyKSk7CisKKyAgICAvLyB0cmFuc21pdCBw
YWNrZXQgdG8gdGhlIHR1bm5lbCBuZXR3b3JrIGludGVyZmFjZQorICAgIGludCBjYyA9IHR1bl9p
ZmFjZV8ud3JpdGUoYnVuZGxlLT5wYXlsb2FkXy5idWYoKSwgbGVuKTsKKworICAgIGlmIChjYyAh
PSBsZW4pIHsKKwlsb2dfZXJyKCJlcnJvciBzZW5kaW5nICV1IGJ5dGUgcGFja2V0OiAlcyAtPiAl
czogJXMiLAorCQlsZW4sCisgICAgCQlpbnRvYShpcDQuc2FkZHIpLCAKKyAgICAJCWludG9hKGlw
NC5kYWRkciksIAorCQlzdHJlcnJvcihlcnJubykpOworICAgIH0gZWxzZSB7CisJbG9nX2RlYnVn
KCJzZW50ICV1IGJ5dGUgcGFja2V0OiAlcyAtPiAlcyIsCisgICAgCQlsZW4sCisgICAgCQlpbnRv
YShpcDQuc2FkZHIpLCAKKyAgICAJCWludG9hKGlwNC5kYWRkcikpOworICAgIH0KKworICAgIGRl
bGV0ZSBidW5kbGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIGR0bmlwdHVubmVsCisKZGlmZiAtTnVy
IERUTjIub3JpZy9hcHBzL2R0bmlwdHVubmVsL0lQNFR1bm5lbC5oIERUTjIvYXBwcy9kdG5pcHR1
bm5lbC9JUDRUdW5uZWwuaAotLS0gRFROMi5vcmlnL2FwcHMvZHRuaXB0dW5uZWwvSVA0VHVubmVs
LmgJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDAKKysrIERUTjIvYXBwcy9kdG5p
cHR1bm5lbC9JUDRUdW5uZWwuaAkyMDEzLTA3LTExIDE4OjExOjA5LjAwMDAwMDAwMCArMDQwMApA
QCAtMCwwICsxLDc1IEBACisvKgorICogICAgQ29weXJpZ2h0IDIwMDYgSW50ZWwgQ29ycG9yYXRp
b24KKyAqIAorICogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7CisgKiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgICBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICAgICAgIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiAgICBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAg
ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorICogICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgICBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAg
ICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9JUDRUVU5O
RUxfSF8KKyNkZWZpbmUgX0lQNFRVTk5FTF9IXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUg
PGR0bl9hcGkuaD4KKworI2luY2x1ZGUgPG9hc3lzL2RlYnVnL0xvZy5oPgorI2luY2x1ZGUgPG9h
c3lzL2lvL0ZkSU9DbGllbnQuaD4KKyNpbmNsdWRlIDxvYXN5cy90aHJlYWQvTXNnUXVldWUuaD4K
KyNpbmNsdWRlIDxvYXN5cy90aHJlYWQvVGhyZWFkLmg+CisKKyNpbmNsdWRlICJJUFR1bm5lbC5o
IgorCituYW1lc3BhY2UgZHRuaXB0dW5uZWwgeworCisvKioKKyAqIENsYXNzIHRvIG1hbmFnZSBJ
UHY0IDwtPiBEVE4gdHVubmVsCisgKi8KK2NsYXNzIElQNFR1bm5lbCA6IHB1YmxpYyBJUFR1bm5l
bCB7CitwdWJsaWM6CisgICAgLy8vIENvbnN0cnVjdG9yCisgICAgSVA0VHVubmVsKCk7CisgICAg
CisgICAgLy8vIEFkZCBhIG5ldyBsaXN0ZW5pbmcKKyAgICB2b2lkIGFkZF9saXN0ZW5lcigpOwor
ICAgIAorICAgIC8vLyBIYW5kbGUgYSBuZXdseSBhcnJpdmluZyBidW5kbGUKKyAgICB2b2lkIGhh
bmRsZV9idW5kbGUoZHRuOjpBUElCdW5kbGUqIGJ1bmRsZSk7CisKK3Byb3RlY3RlZDoKKyAgICAv
Ly8gSGVscGVyIGNsYXNzIHRvIGhhbmRsZSBJUCBwYWNrZXRzIGNvbWluZyBmcm9tIHR1bm5lbCBp
bnRlcmZhY2UKKyAgICBjbGFzcyBMaXN0ZW5lciA6IHB1YmxpYyBvYXN5czo6VGhyZWFkLCBwdWJs
aWMgb2FzeXM6OkxvZ2dlciB7CisgICAgcHVibGljOgorICAgICAgICAvLy8gQ29uc3RydWN0b3IK
KyAgICAgICAgTGlzdGVuZXIoSVA0VHVubmVsKiB0KTsKKyAgICAgICAgCisgICAgICAgIC8vLyBo
YW5kbGUgb3V0Z29pbmcgYnVuZGxlcworICAgICAgICB2b2lkIGhhbmRsZV9idW5kbGUoZHRuOjpB
UElCdW5kbGUqIGJ1bmRsZSk7CisgCisgICAgcHJvdGVjdGVkOgorICAgICAgICAvLy8gTWFpbiBs
aXN0ZW4gbG9vcAorICAgICAgICB2b2lkIHJ1bigpOworCisgICAgICAgIC8vLyBGaWxlIGRlc2Ny
aXB0b3IgZm9yIHR1bm5lbCBpbnRlcmZhY2UgCisgICAgICAgIG9hc3lzOjpGZElPQ2xpZW50IHR1
bl9pZmFjZV87CisgICAgICAgIAorICAgICAgICAvLy8gU3RhdGljIHJlY2VpdmluZyBidWZmZXIK
KyAgICAgICAgY2hhciByZWN2X2J1Zl9bNjU1MzZdOworICAgICAgICAKKyAgICAgICAgSVA0VHVu
bmVsKiBpcDR0dW5fOworICAgIH07CisKKyAgICAvLy8gVGhlIGxpc3RlbmVyIGZvciB0aGUgZnJv
bnQgZW5kIG9mIHRoZSB0dW5uZWwKKyAgICBMaXN0ZW5lciogbGlzdGVuZXJfOworfTsKKworfSAv
LyBuYW1lc3BhY2UgZHRuaXB0dW5uZWwKKworI2VuZGlmIC8qIF9JUDRUVU5ORUxfSF8gKi8KZGlm
ZiAtTnVyIERUTjIub3JpZy9hcHBzL2R0bmlwdHVubmVsL0lQVHVubmVsLmggRFROMi9hcHBzL2R0
bmlwdHVubmVsL0lQVHVubmVsLmgKLS0tIERUTjIub3JpZy9hcHBzL2R0bmlwdHVubmVsL0lQVHVu
bmVsLmgJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDAKKysrIERUTjIvYXBwcy9k
dG5pcHR1bm5lbC9JUFR1bm5lbC5oCTIwMTMtMDctMTEgMTg6MTE6MjcuMDAwMDAwMDAwICswNDAw
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgMjAwNiBJbnRlbCBDb3Jwb3Jh
dGlvbgorICogCisgKiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICAgIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgICAgICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqICAgIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
ICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICAgIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAq
ICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0lQVFVO
TkVMX0hfCisjZGVmaW5lIF9JUFRVTk5FTF9IXworCisjaW5jbHVkZSA8b2FzeXMvZGVidWcvTG9n
Lmg+CisKKyNpbmNsdWRlIDxkdG5fYXBpLmg+CisjaW5jbHVkZSA8QVBJQnVuZGxlUXVldWUuaD4K
KworbmFtZXNwYWNlIGR0bmlwdHVubmVsIHsKKworLyoqCisgKiBQdXJlIHZpcnR1YWwgYmFzZSBj
bGFzcyBmb3IgdHVubmVsaW5nIG9mIElQIHByb3RvY29scworICovCitjbGFzcyBJUFR1bm5lbCA6
IHB1YmxpYyBvYXN5czo6TG9nZ2VyIHsKK3B1YmxpYzoKKyAgICAvLy8gQ29uc3RydWN0b3IKKyAg
ICBJUFR1bm5lbChjb25zdCBjaGFyKiBjbGFzc25hbWUsIGNvbnN0IGNoYXIqIGxvZ3BhdGgpCisg
ICAgICAgIDogTG9nZ2VyKGNsYXNzbmFtZSwgIiVzIiwgbG9ncGF0aCkge30KKyAgICAKKyAgICAv
Ly8gRGVzdHJ1Y3RvcgorICAgIHZpcnR1YWwgfklQVHVubmVsKCkge30KKyAgICAKKyAgICAvLy8g
QWRkIGEgbmV3IGxpc3RlbmVyCisgICAgdmlydHVhbCB2b2lkIGFkZF9saXN0ZW5lcigpID0gMDsK
KyAgICAKKyAgICAvLy8gSGFuZGxlIGEgbmV3bHkgYXJyaXZpbmcgYnVuZGxlLiBUaGUgdHVubmVs
IHNob3VsZCB0YWtlCisgICAgLy8vIG93bmVyc2hpcCBvZiB0aGUgYnVuZGxlIHN0cnVjdHVyZSBh
bmQgaGFuZGxlIGNsZWFudXAuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZV9idW5kbGUoZHRuOjpB
UElCdW5kbGUqIGRhdGEpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIGR0bmlwdHVubmVsCisK
KyNlbmRpZiAvKiBfSVBUVU5ORUxfSF8gKi8KZGlmZiAtTnVyIERUTjIub3JpZy9hcHBzL01ha2Vm
aWxlIERUTjIvYXBwcy9NYWtlZmlsZQotLS0gRFROMi5vcmlnL2FwcHMvTWFrZWZpbGUJMjAxMy0w
Ny0xNiAxMzo1MDowNS4wMDAwMDAwMDAgKzA0MDAKKysrIERUTjIvYXBwcy9NYWtlZmlsZQkyMDEz
LTA3LTE2IDE0OjIxOjIzLjExMDQ5NzYxNyArMDQwMApAQCAtNDMsNiArNDMsNyBAQAogCWR0bm1v
dGVwcm94eS9kdG5tb3RlcHJveHkJXAogCWR0bnRlc3QvZHRudGVzdAkJCVwKIAlkdG50dW5uZWwv
ZHRudHVubmVsCQlcCisJZHRuaXB0dW5uZWwvZHRuaXB0dW5uZWwJCVwKIAlkdG5wZXJmL2R0bnBl
cmYtY2xpZW50CQlcCiAJdGNhX2FkbWluL3RjYV9hZG1pbgkJXAogCWR0bnNlbmQvZHRuc2VuZAkJ
CVwKQEAgLTExOSw2ICsxMjAsMTMgQEAKIAkJICAgICAkKERUTl9MSUJTX1NUQVRJQykKIAkkKENY
WCkgJChDWFhGTEFHUykgJF4gLW8gJEAgJChMREZMQUdTKSAkKERUTl9MSUJTKyspCiAKKyMKKyMg
UnVsZXMgZm9yIGR0bmlwdHVubmVsCisjCitkdG5pcHR1bm5lbC9kdG5pcHR1bm5lbDogZHRuaXB0
dW5uZWwvRFROSVBUdW5uZWwubyBcCisJCSAgICBkdG5pcHR1bm5lbC9JUDRUdW5uZWwubyBcCisJ
CSAgICAkKERUTl9MSUJTX1NUQVRJQykKKwkkKENYWCkgJChDWFhGTEFHUykgJF4gLW8gJEAgJChM
REZMQUdTKSAkKERUTl9MSUJTKyspCiAKICMKICMgUnVsZXMgZm9yIGR0bnBlcmYtY2xpZW50CmRp
ZmYgLU51ciBEVE4yLm9yaWcvTWFrZWZpbGUgRFROMi9NYWtlZmlsZQotLS0gRFROMi5vcmlnL01h
a2VmaWxlCTIwMTMtMDctMTYgMTM6NTA6MDUuMDAwMDAwMDAwICswNDAwCisrKyBEVE4yL01ha2Vm
aWxlCTIwMTMtMDctMTYgMTQ6MjA6MjguMjM1NDkxOTg3ICswNDAwCkBAIC0xMTQsNiArMTE0LDcg
QEAKIAkJICAgIGFwcHMvZHRucmVjdi9kdG5yZWN2IFwKIAkJICAgIGFwcHMvZHRuc2VuZC9kdG5z
ZW5kIFwKIAkJICAgIGFwcHMvZHRudHVubmVsL2R0bnR1bm5lbCBcCisJCSAgICBhcHBzL2R0bmlw
dHVubmVsL2R0bmlwdHVubmVsIFwKIAkJICAgIGFwcHMvbnVtMnNkbnYvbnVtMnNkbnYgXAogCQkg
ICAgYXBwcy9udW0yc2Rudi9zZG52Mm51bSA7IGRvIFwKIAkgICAgKCQoSU5TVEFMTF9QUk9HUkFN
KSAkJHByb2cgJChERVNURElSKSQoYmluZGlyKSkgOyBcCg==
--047d7b342f448f960a04e19f2020
Content-Type: application/pdf; name="performance.pdf"
Content-Disposition: attachment; filename="performance.pdf"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hj704p911

JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURl
Y29kZT4+CnN0cmVhbQp4nLVYS2/bMAy++1foPCCuSEm2BQQGmiYZMGCHbgF2KHbbAxj2QLtD//4o
UraV2FaeQ1HDdEh+5MeHnOgS1GvxrDT9VYCq9qhevhaf3qjfxaN6Vq4qa1UjlKisb0qnwJJFpyF2
Wr18L1a7Ar0mhRotKe++qLstKPK4+/a01NCapcYWl9q0sNS2Xdildu3n3btisyseByi+HEeqq9Ir
58vmEKiKvmvdBCAfIBn3vl1US3m4GnD33Rr0BDlyGyLd/egCFYMPb9n2lf7f0f8PBep9IWRx3L8K
U+nSROmn+hjBJgwq78uqNxApb9C4BEGkvEGtUwSW8gZ0xcGApbyBBbr2BizlDcBQiXsDlrIGzvte
PdznlRubeBcpb1DrQZ3u88rOJXSKlDcgPoaCiXQSnUlDnQSQUDunD9iUtgeIUrbnRKeDiFKmAtAg
DVCPIFIegXV6BJEyCGgD5R1ClLIIotMhRCmDYDTSgum7WqQsguj0lRYph5BMymnLIu2eucEZdhkI
K43vljEq0HEZd5t4Zg2iQ94rOdOFCVvchNWI4XE1u1MpJz/trG4X5/lCQMq2qi1xxr6M+ArnS7eg
Dw8KDCycYWGMPkvfNWHkqBij9PpsMJw7C5xij2U/ly84m7o+MRYqfH08lvtw684PZ/B+NBxpQdc0
dL2oBfOmZ7bgpLMLW9DVYVDPacFzLEILnqPPZXfOj9O7TQsmrk+Mxbou+P/Qgon34y3Y6HCCajMe
CQZa6QeGXgfojd6CZlHi20B4baXLXDDe8tvYxGrbkkd63wRsQS8FAzhJQL2d8yfjO+ye3h0EZsBx
UCFSqCjWlQQtoR5rWzAmbOHRXmMeQsYmucZBCLdcLRkSAZqvDI0XTmyrJ371NuGtO1w7upnfy9HQ
hVPwKJrgbC/HMZrfj+ZxzIATe+cy9jxMrNanmAe14E2yiaxN4XA2MYN1nM5rWZvFidfrWWsoG5rt
0a45ZbYxP9aTx8XlY53s85uP9fisuOFYeyynToCDQbsCAR3nMIGw1/ZXLAsD4eeLYwjXNaLlLzCH
B1M3wDF6yQSv5moKZ3tTriYQ9riCyxF4HCydyyOAMLUyTuIpjpblezd86OVRVKrafgjr+HHT7kck
ip517g98JnqwSj5jX2ITP33Yiy0NYT3YpVjap7rAVQGukwTtBzPUCBQHYsKxWN0nmHVyvx0yTmNF
0/amCSl92tmiVA1110FRxviBMEnm9FA2w2POHW1CHJPRHJSR6E74mczlWAnHofvoM/Ej7TrWTUv0
QAenlGkUtjwInUslrCThLMeuHh2KV7CDSYPt9xC/uu7Hteio8vlsLm856Y16pq+je85lnVTSHzY9
ck2uSyRbBFvRl7jbNjpVoodMfiK+27z96NT3v+pu92LV+o96LP4BhEH2eAplbmRzdHJlYW0KZW5k
b2JqCgozIDAgb2JqCjEwNTUKZW5kb2JqCgo0IDAgb2JqCjw8L1R5cGUvWE9iamVjdAovU3VidHlw
ZS9Gb3JtCi9CQm94WyAxNyAzOTUgNTk0IDM5NS4xIF0KL0dyb3VwPDwvUy9UcmFuc3BhcmVuY3kv
Q1MvRGV2aWNlUkdCL0sgdHJ1ZT4+Ci9MZW5ndGggOAovRmlsdGVyL0ZsYXRlRGVjb2RlCj4+CnN0
cmVhbQp4nAMAAAAAAQplbmRzdHJlYW0KZW5kb2JqCgo1IDAgb2JqCjw8L0NBIDAuNQogICAvY2Eg
MC41Cj4+CmVuZG9iagoKNyAwIG9iago8PC9MZW5ndGggOCAwIFIvRmlsdGVyL0ZsYXRlRGVjb2Rl
L0xlbmd0aDEgMjM4NjQ+PgpzdHJlYW0KeJztfHlcW8e18Jl7rxYQQhKrDFi6khCLBYjVLCZGmMUG
bINtbIMTYgQIkA0IJIFDmgTS7DiJ/Zo0abrETlInaZzUMl6K7bRx8trmS9LWSZv2pf3S2vniLmnL
e36pky6J0Tsz97LZbl7f+94f3+/3WZczc2bmzMyZs82MhBT0D3sgCsaBB1dnv3sw3ZCSCAA/ACAx
nSNB8ZmfNsUgfg5A9d3uwZ7+B5689V2AiK8DKAI9faPdH17YVg+gMyI82Otxd3UWb9ACmJ7FMZb3
YsWWmVEVlrE/pPb2B2/axv9yJYBZwLKrz9fpPm/6ylIsV2PZ2u++afBV/XIFlnuxLA64+z3Xv657
G8v3AuQMD/oCwS5IDQOsB9o+6PcM/jm9+yMsixIPQPChryhElbTM8QqlKkKjjdbB/5cvxYMIa8GM
kMI/DMkA4fcQziP8bqY+/KliJ9hmdoTP8bFI/IIMAHZ4BPZBKlwgefAKnIZ6eBoqoQkehtVwBg5B
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
x6oaFs1139xcVWNXGWyMDlZF53q64SrNDbT5aTpXA52rgc71tOtpNlfDxlWkoanlsBpWtVbdIOVH
OE0k+kN7sqV1VYJ+cCVzjhUW423JJwXAbUvjaA1F2VaFtAi0Kbsyu5I2oXfSpmj6E4Jyk/G2FZbk
k+RZuUmP1QbbKnCAscZbPfcXCASCFIaHHZgGh42sLohOa9nUEKqlP3hWHiqvCbnaq1vZz2cMy6+q
Fpf+pfIz5ZyvfKx8T/m+8kPliuHhVqyOecl6xsptt/qsY9Y91n3WQ1Ylbbih5birfJ/136z8MFoT
CeKrpprNOYw5/tFicDhAX4ATBBCk6RzDjqqWSit04qmX4Ak9G2IRbAgFCJsQFPDPmP4E4X2EPyEI
cAemDyE8hXCE1vDZfHaN0VtNZ2x10KBj5POP5Bbll0xh7u6W8k3bpLxmvZSXV+YbMZ+sKIis1OEB
nMBJTF9H+AXC7xH+hqDg8/l8NviwZLWtAQg4CLJPf2YhSJOAI0gc9EdIqLiDAYcDKFADRw3QnyYh
i+0eSGAYUBSoEMyQiNUGaLdhms++/gOjD+iOCmVuZHN0cmVhbQplbmRvYmoKCjggMCBvYmoKMTE3
NDUKZW5kb2JqCgo5IDAgb2JqCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUvQkFBQUFB
K1RpbWVzTmV3Um9tYW5QU01UCi9GbGFncyA0Ci9Gb250QkJveFstNTY4IC0zMDYgMjAyNyAxMDA2
XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgODkxCi9EZXNjZW50IC0yMTYKL0NhcEhlaWdodCAxMDA2
Ci9TdGVtViA4MAovRm9udEZpbGUyIDcgMCBSCj4+CmVuZG9iagoKMTAgMCBvYmoKPDwvTGVuZ3Ro
IDI3NS9GaWx0ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJxdkU1rxCAQhu/+Co/bw6Im6XYLIbAf
LOTQD5r2ByQ6SYVGxZhD/n11krbQg/KM877DzMgu9bU2OrBXb2UDgfbaKA+Tnb0E2sGgDREZVVqG
LcJbjq0jLHqbZQow1qa3ZUnYW8xNwS90d1K2gzvCXrwCr81Adx+XJsbN7NwXjGAC5aSqqII+1nlq
3XM7AkPXvlYxrcOyj5Y/wfvigGYYi7UVaRVMrpXgWzMAKTmvaHm7VQSM+pcTm6Xr5Wfro1REKS/E
uYqcIefHxDlyIRIXK2eJ7xPzHN8P+J4hP6wanvi41kF+XPma+LRqDonPWCfj2OTWTWo37fNnDVTO
3scV4NJx9jS1NvD7L8665MLzDTeXhN0KZW5kc3RyZWFtCmVuZG9iagoKMTEgMCBvYmoKPDwvVHlw
ZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvQkFBQUFBK1RpbWVzTmV3Um9tYW5QU01U
Ci9GaXJzdENoYXIgMAovTGFzdENoYXIgMTEKL1dpZHRoc1s3NzcgNjc4IDUzNSA0NDMgNDM3IDUw
MCA2NjYgNTAwIDQ0MyA1MzUgNTM1IDI1MCBdCi9Gb250RGVzY3JpcHRvciA5IDAgUgovVG9Vbmlj
b2RlIDEwIDAgUgo+PgplbmRvYmoKCjEyIDAgb2JqCjw8L0xlbmd0aCAxMyAwIFIvRmlsdGVyL0Zs
YXRlRGVjb2RlL0xlbmd0aDEgMjYzMzY+PgpzdHJlYW0KeJztfHl8W8W18Mzce3W1L7asxUt0ZcWr
vEeO42Di68Q2CSaJkzipHTCxbCuxihfFkhNC2ySsAbOFLaxtDC2QAiWKHMAh5GGWltKWkhbaAoXX
fC00QMlHXh9bIZa+M6PrjQRe+973x/f7fUiZmTMz55w525yZK8WKDA4FkB7tRBySu/r8obVnL1iK
EPoVQjila0tE+vvNR+cCfAwhccHG0Ka+oeOoCSGNAyHhnE292zb6j9b+AyFjB0L2WE/A31289h4z
QrlW4DG/BwY2xi8ToX8e9Of29EUu9pjmr4d+CPoX9A50+S11OVXQh/VQWZ//4tAvzIdV0D8Ffanf
3xdoc568HaG8TIRKq0ID4cgfUGECoXUtdD40GAjl32m8E/oRhMy9MIbhTV96AFW0TzheUIlqjVan
NxhNZktKqjXNhv7/eQlPokxWHkSZfC4COybenizxYOJtOkdb8j4YKytZlFcMPYL+gPOxhEbx58iO
PsNOXI6WIR59CtGyH02g25AVtaA9OAXNRTa0Fi3DPOB40XX47sSWxHvobHQzui/xBL4s8RDM34h+
hj4DCf6dx6gKrQD8tSiA3uPeQW2Ju5Aa7UI6dBZajW3Ij34P749BhlvQrejf8HcTn8GqVnQZ8KtB
dagu8UziFCpE1/G7hdc0j6Gb0GGsSnQlgmgOykbDxJv4feJPKBe1oR+iR0AmLx7nlyI3ughdie7A
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
WOEaZuwjkw5JjodREjk56R2aJBpSSNjkECMB8P8AEZWDqgplbmRzdHJlYW0KZW5kb2JqCgoxMyAw
IG9iagoxMzMzOQplbmRvYmoKCjE0IDAgb2JqCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5h
bWUvQ0FBQUFBK0FyaWFsLUJvbGRNVAovRmxhZ3MgNAovRm9udEJCb3hbLTYyNyAtMzc2IDIwMzIg
MTA0N10vSXRhbGljQW5nbGUgMAovQXNjZW50IDkwNQovRGVzY2VudCAtMjExCi9DYXBIZWlnaHQg
MTA0NwovU3RlbVYgODAKL0ZvbnRGaWxlMiAxMiAwIFIKPj4KZW5kb2JqCgoxNSAwIG9iago8PC9M
ZW5ndGggMzI0L0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nF2STW6DMBCF95zCy3QRgUlw
EgkhpSRILPqj0h6A2EOKVIxlyILb1zOTtlIXWJ/t98ZPM8RlfaptP8evftQNzKLrrfEwjTevQVzg
2ttIpsL0er7vaNVD66I4eJtlmmGobTfmeRS/hbtp9otYHc14gYcofvEGfG+vYvVRNmHf3Jz7ggHs
LJKoKISBLtR5at1zO0BMrnVtwnU/L+tg+RO8Lw5ESnvJUfRoYHKtBt/aK0R5khQir6oiAmv+3aUp
Wy6d/mx9kMogTZJsWwROibcb5A2fJ8hb4vSEnLGG9Ir5jLxjPiDvWU/eA5+XyEeumSE/Eu+IS2Z6
98RM9c/EqkKumPFcJqzBtyTnVwqZ8yvMIzm/wvqS82c7ZM6vyMv51Z4ade8Itgxn+jMKoW/ehzHQ
4Kn/2Pnewu+/4UaHLvq+AXZXnqcKZW5kc3RyZWFtCmVuZG9iagoKMTYgMCBvYmoKPDwvVHlwZS9G
b250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQvQ0FBQUFBK0FyaWFsLUJvbGRNVAovRmlyc3RD
aGFyIDAKL0xhc3RDaGFyIDIyCi9XaWR0aHNbNzUwIDYxMCA3MjIgNjY2IDMzMyA3MjIgNzIyIDI3
NyAyNzcgNjEwIDcyMiA2MTAgNTU2IDMzMyA2MTAgNjEwCjU1NiAzMzMgNjEwIDU1NiA5NDMgMjc3
IDYxMCBdCi9Gb250RGVzY3JpcHRvciAxNCAwIFIKL1RvVW5pY29kZSAxNSAwIFIKPj4KZW5kb2Jq
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
Y0FuZ2xlIDAKL0FzY2VudCA5MDUKL0Rlc2NlbnQgLTIxMQovQ2FwSGVpZ2h0IDEwMzcKL1N0ZW1W
IDgwCi9Gb250RmlsZTIgMTcgMCBSCj4+CmVuZG9iagoKMjAgMCBvYmoKPDwvTGVuZ3RoIDQwMi9G
aWx0ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJxdkstuwjAQRff5Ci/pAiU2iQNSFIkCkVj0odJ+
QEgGGqk4kRMW/H09c2krdQE6fsz1GZh4s9/uXTfFr75vDjSpU+daT2N/9Q2pI507F2mj2q6Z7iv5
bi71EMWh9nAbJ7rs3akviih+C2fj5G9qtm77Iz1E8YtvyXfurGYfm0NYH67D8EUXcpNKorJULZ1C
zlM9PNcXiqVqvm/DcTfd5qHk78L7bSBlZK2h0vQtjUPdkK/dmaIiSUpVVFUZkWv/naUJSo6n5rP2
4aoOV5PEbMvARnixYF6AE+ZUOJU7mbA1zBa8Ys6F85R5icyKeYV9yVwjUzM/giVnA5acLWo3zDvs
58wV2AbWCZjf0vBfZMzwT2Uf/pbf0vA33IuGf86ZGv45O2j42x0z/C33q+FvJR/+VvLhb5fM8Lfc
o4a/5d41/HN5F/455xj4Z5xj4J9yrYF/xvfN3Z9/BwN/y72bu78w/FN2NvA3wvBPVzIA93+aR4Fn
9WfEVHP1PoyXDLTMFU9U5+h35od+4Cr5fAMo/8ikCmVuZHN0cmVhbQplbmRvYmoKCjIxIDAgb2Jq
Cjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0RBQUFBQStBcmlhbE1UCi9G
aXJzdENoYXIgMAovTGFzdENoYXIgNDAKL1dpZHRoc1s3NTAgMzMzIDU1NiA1NTYgODMzIDU1NiAy
MjIgMjc3IDI3NyA1MDAgNTU2IDU1NiA1NTYgMjc3IDU1NiA1NTYKNTU2IDU1NiA3MjIgNTU2IDI3
NyA3MjIgMzMzIDU1NiA4MzMgNTU2IDU1NiA1NTYgNTAwIDU1NiA1NTYgNTU2CjYxMCA3MjIgNjY2
IDIyMiAyNzcgNTAwIDcyMiAyNzcgMjc3IF0KL0ZvbnREZXNjcmlwdG9yIDE5IDAgUgovVG9Vbmlj
b2RlIDIwIDAgUgo+PgplbmRvYmoKCjIyIDAgb2JqCjw8L0YxIDExIDAgUi9GMiAxNiAwIFIvRjMg
MjEgMCBSCj4+CmVuZG9iagoKMjMgMCBvYmoKPDwvRm9udCAyMiAwIFIKL1hPYmplY3Q8PC9UcjQg
NCAwIFI+PgovRXh0R1N0YXRlPDwvRUdTNSA1IDAgUj4+Ci9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFn
ZUMvSW1hZ2VJL0ltYWdlQl0KPj4KZW5kb2JqCgoxIDAgb2JqCjw8L1R5cGUvUGFnZS9QYXJlbnQg
NiAwIFIvUmVzb3VyY2VzIDIzIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vR3JvdXA8PC9TL1Ry
YW5zcGFyZW5jeS9DUy9EZXZpY2VSR0IvSSB0cnVlPj4vQ29udGVudHMgMiAwIFI+PgplbmRvYmoK
CjI0IDAgb2JqCjw8L0NvdW50IDEvRmlyc3QgMjUgMCBSL0xhc3QgMjUgMCBSCj4+CmVuZG9iagoK
MjUgMCBvYmoKPDwvQ291bnQgMC9UaXRsZTxGRUZGMDQxQjA0MzgwNDQxMDQ0MjAwMzE+Ci9EZXN0
WzEgMCBSL1hZWiAwIDc5MiAwXS9QYXJlbnQgMjQgMCBSPj4KZW5kb2JqCgo2IDAgb2JqCjw8L1R5
cGUvUGFnZXMKL1Jlc291cmNlcyAyMyAwIFIKL01lZGlhQm94WyAwIDAgNjEyIDc5MiBdCi9LaWRz
WyAxIDAgUiBdCi9Db3VudCAxPj4KZW5kb2JqCgoyNiAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFn
ZXMgNiAwIFIKL09wZW5BY3Rpb25bMSAwIFIgL1hZWiBudWxsIG51bGwgMF0KL091dGxpbmVzIDI0
IDAgUgo+PgplbmRvYmoKCjI3IDAgb2JqCjw8L0F1dGhvcjxGRUZGMDA3MzAwNjUwMDcyMDA2NzAw
NjUwMDIwPgovQ3JlYXRvcjxGRUZGMDA0MzAwNjEwMDZDMDA2Mz4KL1Byb2R1Y2VyPEZFRkYwMDRD
MDA2OTAwNjIwMDcyMDA2NTAwNEYwMDY2MDA2NjAwNjkwMDYzMDA2NTAwMjAwMDM0MDAyRTAwMzA+
Ci9DcmVhdGlvbkRhdGUoRDoyMDEzMDcxNjE1MTE0OCswNCcwMCcpPj4KZW5kb2JqCgp4cmVmCjAg
MjgKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDQ1NzQzIDAwMDAwIG4gCjAwMDAwMDAwMTkgMDAw
MDAgbiAKMDAwMDAwMTE0NSAwMDAwMCBuIAowMDAwMDAxMTY2IDAwMDAwIG4gCjAwMDAwMDEzNDMg
MDAwMDAgbiAKMDAwMDA0NjA0MyAwMDAwMCBuIAowMDAwMDAxMzgzIDAwMDAwIG4gCjAwMDAwMTMy
MTMgMDAwMDAgbiAKMDAwMDAxMzIzNSAwMDAwMCBuIAowMDAwMDEzNDM0IDAwMDAwIG4gCjAwMDAw
MTM3NzkgMDAwMDAgbiAKMDAwMDAxMzk4NyAwMDAwMCBuIAowMDAwMDI3NDEzIDAwMDAwIG4gCjAw
MDAwMjc0MzYgMDAwMDAgbiAKMDAwMDAyNzYzMiAwMDAwMCBuIAowMDAwMDI4MDI2IDAwMDAwIG4g
CjAwMDAwMjgyNzQgMDAwMDAgbiAKMDAwMDA0NDU2NCAwMDAwMCBuIAowMDAwMDQ0NTg3IDAwMDAw
IG4gCjAwMDAwNDQ3NzggMDAwMDAgbiAKMDAwMDA0NTI1MCAwMDAwMCBuIAowMDAwMDQ1NTY1IDAw
MDAwIG4gCjAwMDAwNDU2MTggMDAwMDAgbiAKMDAwMDA0NTg4NiAwMDAwMCBuIAowMDAwMDQ1OTQy
IDAwMDAwIG4gCjAwMDAwNDYxNDIgMDAwMDAgbiAKMDAwMDA0NjI0MyAwMDAwMCBuIAp0cmFpbGVy
Cjw8L1NpemUgMjgvUm9vdCAyNiAwIFIKL0luZm8gMjcgMCBSCi9JRCBbIDw0MTNDM0Y2RTJFODEy
NjA4QkM0MjBCOEFDQjEyOTRENT4KPDQxM0MzRjZFMkU4MTI2MDhCQzQyMEI4QUNCMTI5NEQ1PiBd
Ci9Eb2NDaGVja3N1bSAvQTgwREUyQUUxOTk5NkJEQTVGMjVEOTQ4OTc4MEM0QkYKPj4Kc3RhcnR4
cmVmCjQ2NDQ4CiUlRU9GCg==
--047d7b342f448f960a04e19f2020--

From morgenroth@ibr.cs.tu-bs.de  Thu Jul 25 00:22:20 2013
Return-Path: <morgenroth@ibr.cs.tu-bs.de>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C563921F9A18 for <dtn-users@ietfa.amsl.com>; Thu, 25 Jul 2013 00:22:20 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.6
X-Spam-Level: 
X-Spam-Status: No, score=-2.6 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, NO_RELAYS=-0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1bszcm3uu6BM for <dtn-users@ietfa.amsl.com>; Thu, 25 Jul 2013 00:22:20 -0700 (PDT)
Received: from salvator.ibr.cs.tu-bs.de (salvator.ibr.cs.tu-bs.de [IPv6:2001:638:602:1181:21a:64ff:fed3:6c8c]) by ietfa.amsl.com (Postfix) with ESMTP id E4CE721F99FB for <dtn-users@irtf.org>; Thu, 25 Jul 2013 00:22:15 -0700 (PDT)
Received: from [IPv6:2001:638:602:1181:958:4136:bebe:7bda] (unknown [IPv6:2001:638:602:1181:958:4136:bebe:7bda]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: morgenro@ibr.cs.tu-bs.de) by salvator.ibr.cs.tu-bs.de (Postfix) with ESMTPSA id E740F13EFB for <dtn-users@irtf.org>; Thu, 25 Jul 2013 09:22:07 +0200 (CEST)
Message-ID: <51F0CD3C.6010702@ibr.cs.tu-bs.de>
Date: Thu, 25 Jul 2013 09:01:16 +0200
From: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7
MIME-Version: 1.0
To: dtn-users@irtf.org
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit
X-Virus-Scanned: clamav-milter 0.97.3 at salvator
X-Virus-Status: Clean
Subject: [dtn-users] IBR-DTN release 0.10.0
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Thu, 25 Jul 2013 07:22:20 -0000

New Release 0.10.0 available!

More than one year of development and testing have born a new release of 
IBR-DTN. With more stability, more features, complete fragmentation and 
IPv6 support this release has been natively ported to the Android platform.

For a full list of features and changes watch the official changelog:
http://www.ibr.cs.tu-bs.de/trac/ibr-dtn/wiki/changelog

The packages for Debian, Raspbian and OpenWrt are currently in our build 
queue and should be available very soon.

Kind regards,
Johannes Morgenroth


From morgenroth@ibr.cs.tu-bs.de  Mon Jul 22 07:13:07 2013
Return-Path: <morgenroth@ibr.cs.tu-bs.de>
X-Original-To: dtn-users@ietfa.amsl.com
Delivered-To: dtn-users@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8E25411E8110 for <dtn-users@ietfa.amsl.com>; Mon, 22 Jul 2013 07:13:07 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.249
X-Spam-Level: 
X-Spam-Status: No, score=-6.249 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HELO_EQ_DE=0.35, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pZ3dZQcveHMd for <dtn-users@ietfa.amsl.com>; Mon, 22 Jul 2013 07:13:07 -0700 (PDT)
Received: from salvator.ibr.cs.tu-bs.de (salvator.ibr.cs.tu-bs.de [134.169.34.11]) by ietfa.amsl.com (Postfix) with ESMTP id B5F4211E80D9 for <dtn-users@irtf.org>; Mon, 22 Jul 2013 07:13:02 -0700 (PDT)
Received: from [IPv6:2001:638:602:1181:fd8f:b40b:60ed:b45d] (unknown [IPv6:2001:638:602:1181:fd8f:b40b:60ed:b45d]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: morgenro@ibr.cs.tu-bs.de) by salvator.ibr.cs.tu-bs.de (Postfix) with ESMTPSA id EEE6C13F02; Mon, 22 Jul 2013 16:12:07 +0200 (CEST)
Message-ID: <51ED3D86.2030604@ibr.cs.tu-bs.de>
Date: Mon, 22 Jul 2013 16:11:18 +0200
From: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7
MIME-Version: 1.0
To: "ibr-dtn@ibr.cs.tu-bs.de" <ibr-dtn@ibr.cs.tu-bs.de>,  dtn-users@irtf.org
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit
X-Virus-Scanned: clamav-milter 0.97.3 at salvator
X-Virus-Status: Clean
X-Mailman-Approved-At: Fri, 26 Jul 2013 08:03:11 -0700
Subject: [dtn-users] IBR-DTN release 0.10.0
X-BeenThere: dtn-users@irtf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: "The Delay-Tolerant Networking Research Group \(DTNRG\) - Users." <dtn-users.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/dtn-users>
List-Post: <mailto:dtn-users@irtf.org>
List-Help: <mailto:dtn-users-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/dtn-users>, <mailto:dtn-users-request@irtf.org?subject=subscribe>
X-List-Received-Date: Tue, 23 Jul 2013 06:57:42 -0000

New Release 0.10.0 available!

More than one year of development and testing have born a new release of 
IBR-DTN. With more stability, more features, complete fragmentation and 
IPv6 support this release has been natively ported to the Android platform.

For a full list of features and changes watch the official changelog:
http://www.ibr.cs.tu-bs.de/trac/ibr-dtn/wiki/changelog

The packages for Debian, Raspbian and OpenWrt are currently in our build 
queue and should be available very soon.

Kind regards,
Johannes Morgenroth

