add wdm update in wdm

test instructions:
./boostrap
setup btvirt:
sudo ./build/x86_64-unknown-linux-gnu/third_party/bluez/repo/emulator/btvirt -L -l2
peripheral:
sudo ./output/x86_64-unknown-linux-gnu/bin/mock-device --enable-bluez-peripheral --peripheral-name N0003 --peripheral-address 00:AA:01:00:00:23 --wdm-resp-mutual-sub --test-case 11 --total-count 0 --wdm-update-timing NoSub
central:
weave-device-mgr > ble-adapter-select 00:AA:01:01:00:24
weave-device-mgr > ble-scan-connect -t 120 00:AA:01:00:00:23
weave-device-mgr > connect -b -p TEST
weave-device-mgr > update-trait 20 0 1 "{2: 1, 10: {1: 'en-US'}}"
weave-device-mgr > view-trait 20 0 1
weave-device-mgr > send-custom-command test blol
diff --git a/Makefile.in b/Makefile.in
index dab8519..3effa25 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -38,7 +38,17 @@
 #
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -103,26 +113,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = .
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/configure $(am__configure_deps) \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs \
-	$(dist_doc_DATA) \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/ar-lib \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/compile \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/config.sub \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/depcomp \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/install-sh \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/missing \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/py-compile \
-	third_party/nlbuild-autotools/repo/third_party/autoconf/ltmain.sh \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/compile \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/config.sub \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/install-sh \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/ltmain.sh \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/third_party/nlbuild-autotools/repo/autoconf/m4/ax_check_compiler.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/autoconf/m4/nl_enable_coverage.m4 \
@@ -141,18 +131,20 @@
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_cxx_compile_stdcxx_11.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_jni_include_dir.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_pthread.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/libtool.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltoptions.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltsugar.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltversion.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/pkg.m4 \
+	$(top_srcdir)/build/autoconf/m4/libtool.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltoptions.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltsugar.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltversion.m4 \
+	$(top_srcdir)/build/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_check_project_config_includes.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_enable_long_tests.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_with_lwip.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+	$(am__configure_deps) $(dist_doc_DATA) $(am__DIST_COMMON)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(SHELL) \
@@ -223,7 +215,7 @@
   $(RECURSIVE_CLEAN_TARGETS) \
   $(am__extra_recursive_targets)
 AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-	cscope distdir dist dist-all distcheck
+	cscope distdir distdir-am dist dist-all distcheck
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -245,6 +237,23 @@
 CTAGS = ctags
 CSCOPE = cscope
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/compile \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/config.sub \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/install-sh \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/ltmain.sh \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/missing \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/ar-lib \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/compile \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/config.sub \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/install-sh \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/ltmain.sh \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/missing \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs \
+	third_party/nlbuild-autotools/repo/third_party/autoconf/py-compile
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -375,6 +384,7 @@
 LNDIR = @LNDIR@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LWIP_CPPFLAGS = @LWIP_CPPFLAGS@
 LWIP_LDFLAGS = @LWIP_LDFLAGS@
 LWIP_LIBS = @LWIP_LIBS@
@@ -534,6 +544,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -680,15 +691,14 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
 	    echo ' $(SHELL) ./config.status'; \
 	    $(SHELL) ./config.status;; \
 	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
 	esac;
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -836,7 +846,10 @@
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
 	$(am__remove_distdir)
 	test -d "$(distdir)" || mkdir "$(distdir)"
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -904,7 +917,7 @@
 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
 	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
 	$(am__post_remove_distdir)
 
 dist-bzip2: distdir
@@ -920,17 +933,17 @@
 	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
-	@echo WARNING: "Support for shar distribution archives is" \
-	               "deprecated." >&2
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
 	$(am__post_remove_distdir)
 
 dist-shar: distdir
-	@echo WARNING: "Support for distribution archives compressed with" \
-		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
 	$(am__post_remove_distdir)
 
 dist-zip: distdir
@@ -948,7 +961,7 @@
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lz*) \
@@ -958,23 +971,23 @@
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
 	chmod -R a-w $(distdir)
 	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
+	mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
 	chmod a-w $(distdir)
 	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
 	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure \
+	  && $(am__cd) $(distdir)/_build/sub \
+	  && ../../configure \
 	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	    --srcdir=.. --prefix="$$dc_install_base" \
+	    --srcdir=../.. --prefix="$$dc_install_base" \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
 	  && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -1161,6 +1174,8 @@
 	ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-dist_docDATA
 
+.PRECIOUS: Makefile
+
 
 include $(abs_top_nlbuild_autotools_dir)/automake/pre.am
 
diff --git a/src/device-manager/DeviceManager.am b/src/device-manager/DeviceManager.am
index 2109338..9070c7e 100644
--- a/src/device-manager/DeviceManager.am
+++ b/src/device-manager/DeviceManager.am
@@ -34,6 +34,8 @@
 
 nl_DeviceManager_sources                                      += \
     @top_builddir@/src/device-manager/WeaveDeviceManager.cpp     \
+    @top_builddir@/src/device-manager/GenericTraitDataSink.cpp   \
+    @top_builddir@/src/device-manager/LocaleSettingsTrait.cpp     \
     $(NULL)
 
 if CONFIG_NETWORK_LAYER_BLE
diff --git a/src/device-manager/GenericTraitDataSink.cpp b/src/device-manager/GenericTraitDataSink.cpp
new file mode 100644
index 0000000..1d789e1
--- /dev/null
+++ b/src/device-manager/GenericTraitDataSink.cpp
@@ -0,0 +1,216 @@
+/*
+ *
+ *    Copyright (c) 2019 Google LLC.
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ *    @file
+ *      Generic trait data sinks.
+ */
+
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS
+#endif
+
+#include <stdint.h>
+#include <inttypes.h>
+
+// Note that the choice of namespace alias must be made up front for each and every compile unit
+// This is because many include paths could set the default alias to unintended target.
+
+#include <Weave/Profiles/data-management/Current/WdmManagedNamespace.h>
+#include <Weave/Support/CodeUtils.h>
+#include "GenericTraitDataSink.h"
+
+using namespace ::nl::Weave;
+using namespace ::nl::Weave::TLV;
+using namespace ::nl::Weave::Profiles::DataManagement;
+using namespace Schema::Weave::Common;
+
+GenericTraitDataSink::GenericTraitDataSink(const nl::Weave::Profiles::DataManagement::TraitSchemaEngine * aEngine)
+        : TraitUpdatableDataSink(aEngine)
+{
+}
+
+GenericTraitDataSink::~GenericTraitDataSink()
+{
+    for (auto itr = mpathLeafTlvMap.begin(); itr != mpathLeafTlvMap.end(); ++itr)
+    {
+        if (NULL != itr->second)
+        {
+            PacketBuffer::Free(itr->second);
+            mpathLeafTlvMap.erase(itr->first);
+        }
+    }
+}
+
+WEAVE_ERROR
+GenericTraitDataSink::SetLeaf(PropertyPathHandle aLeafHandle, char *buf)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    nl::Weave::TLV::TLVWriter writer;
+    nl::Weave::TLV::TLVReader reader;
+    PacketBuffer *msgBuf = PacketBuffer::New();
+    VerifyOrExit(NULL != msgBuf, err = WEAVE_ERROR_NO_MEMORY);
+    writer.Init(msgBuf);
+    WeaveLogDetail(DataManagement, "test1");
+    err = writer.PutString(AnonymousTag, buf);
+    SuccessOrExit(err);
+    err = writer.Finalize();
+    SuccessOrExit(err);
+
+    WeaveLogDetail(DataManagement, "test2: %s", buf);
+    mpathLeafTlvMap[aLeafHandle] = msgBuf;
+
+    SuccessOrExit(err);
+    WeaveLogDetail(DataManagement, "test3");
+
+    reader.Init(msgBuf);
+    err = reader.Next();
+    SuccessOrExit(err);
+    WeaveLogDetail(DataManagement, "test4");
+    DebugPrettyPrint(reader);
+
+    msgBuf = NULL;
+exit:
+    if (NULL != msgBuf)
+    {
+        PacketBuffer::Free(msgBuf);
+        msgBuf = NULL;
+    }
+
+    return err;
+}
+
+WEAVE_ERROR
+GenericTraitDataSink::SetLeafData(PropertyPathHandle aLeafHandle, TLVReader &aReader)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+    nl::Weave::TLV::TLVWriter writer;
+    PacketBuffer *msgBuf = PacketBuffer::New();
+    VerifyOrExit(NULL != msgBuf, err = WEAVE_ERROR_NO_MEMORY);
+    writer.Init(msgBuf);
+    err = writer.CopyElement(AnonymousTag, aReader);
+    SuccessOrExit(err);
+    err = writer.Finalize();
+    SuccessOrExit(err);
+    mpathLeafTlvMap[aLeafHandle] = msgBuf;
+    msgBuf = NULL;
+    SuccessOrExit(err);
+
+exit:
+    if (NULL != msgBuf)
+    {
+        PacketBuffer::Free(msgBuf);
+        msgBuf = NULL;
+    }
+    return err;
+}
+
+WEAVE_ERROR
+GenericTraitDataSink::GetLeafData(PropertyPathHandle aLeafHandle, char *buf)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    nl::Weave::TLV::TLVReader reader;
+    PacketBuffer *msgBuf = NULL;
+    std::map<PropertyPathHandle, PacketBuffer *>::iterator it = mpathLeafTlvMap.find(aLeafHandle);
+    WeaveLogDetail(DataManagement, "get1");
+    VerifyOrExit(it != mpathLeafTlvMap.end(), err = WEAVE_ERROR_INCORRECT_STATE);
+
+    WeaveLogDetail(DataManagement, "get2");
+    msgBuf = mpathLeafTlvMap[aLeafHandle];
+    mpathLeafTlvMap.erase(aLeafHandle);
+    WeaveLogDetail(DataManagement, "get3");
+    reader.Init(msgBuf);
+    err = reader.Next();
+    SuccessOrExit(err);
+    WeaveLogDetail(DataManagement, "get4");
+    err = reader.GetString(buf, sizeof(buf));
+    SuccessOrExit(err);
+    WeaveLogDetail(DataManagement, "get5");
+exit:
+    if (NULL != msgBuf)
+    {
+        PacketBuffer::Free(msgBuf);
+        msgBuf = NULL;
+    }
+    WeaveLogFunctError(err);
+
+    return err;
+}
+
+WEAVE_ERROR
+GenericTraitDataSink::GetLeafData(PropertyPathHandle aLeafHandle, uint64_t aTagToWrite, TLVWriter &aWriter)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    nl::Weave::TLV::TLVReader reader;
+    PacketBuffer *msgBuf = NULL;
+    char next_locale[24];
+    std::map<PropertyPathHandle, PacketBuffer *>::iterator it = mpathLeafTlvMap.find(aLeafHandle);
+    WeaveLogDetail(DataManagement, "testget1");
+
+    VerifyOrExit(it != mpathLeafTlvMap.end(), err = WEAVE_ERROR_INCORRECT_STATE);
+
+    WeaveLogDetail(DataManagement, "testget2");
+    msgBuf = mpathLeafTlvMap[aLeafHandle];
+    //mpathLeafTlvMap.erase(aLeafHandle);
+    WeaveLogDetail(DataManagement, "testget3");
+    reader.Init(msgBuf);
+    err = reader.Next();
+    DebugPrettyPrint(reader);
+    WeaveLogDetail(DataManagement, "testget4");
+    SuccessOrExit(err);
+
+    err = aWriter.CopyElement(aTagToWrite, reader);
+    SuccessOrExit(err);
+    WeaveLogDetail(DataManagement, "testget6");
+exit:
+    if (NULL != msgBuf)
+    {
+        PacketBuffer::Free(msgBuf);
+        msgBuf = NULL;
+    }
+    WeaveLogFunctError(err);
+
+    return err;
+}
+
+WEAVE_ERROR GenericTraitDataSink::GetNextDictionaryItemKey(PropertyPathHandle aDictionaryHandle, uintptr_t &aContext, PropertyDictionaryKey &aKey)
+{
+    return WEAVE_END_OF_INPUT;
+}
+
+void GenericTraitDataSink::TLVPrettyPrinter(const char *aFormat, ...)
+{
+    va_list args;
+
+    va_start(args, aFormat);
+
+    // There is no proper Weave logging routine for us to use here
+    vprintf(aFormat, args);
+
+    va_end(args);
+}
+
+WEAVE_ERROR GenericTraitDataSink::DebugPrettyPrint(nl::Weave::TLV::TLVReader & aReader)
+{
+    return nl::Weave::TLV::Debug::Dump(aReader, TLVPrettyPrinter);
+}
diff --git a/src/device-manager/GenericTraitDataSink.h b/src/device-manager/GenericTraitDataSink.h
new file mode 100644
index 0000000..f8b5428
--- /dev/null
+++ b/src/device-manager/GenericTraitDataSink.h
@@ -0,0 +1,61 @@
+/*
+ *
+ *    Copyright (c) 2019 Google, LLC.
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ *    @file
+ *      Sample mock trait data sinks that implement the simple and complex mock traits.
+ *
+ */
+
+#ifndef MOCK_TRAIT_SINKS_H_
+#define MOCK_TRAIT_SINKS_H_
+#define MAX_ARRAY_LEN 10
+#define MAX_ARRAY_SIZE sizeof(char) * MAX_ARRAY_LEN
+#define MAX_LOCALE_SIZE sizeof(char) * 24
+
+#include <SystemLayer/SystemPacketBuffer.h>
+
+// We want and assume the default managed namespace is Current and that is, explicitly, the managed namespace this code desires.
+#include <Weave/Profiles/data-management/DataManagement.h>
+#include <Weave/Profiles/data-management/SubscriptionClient.h>
+
+#include <map>
+using ::nl::Weave::System::PacketBuffer;
+using namespace ::nl::Weave::Profiles::DataManagement_Current;
+
+class GenericTraitDataSink : public nl::Weave::Profiles::DataManagement::TraitUpdatableDataSink
+{
+public:
+    GenericTraitDataSink(const nl::Weave::Profiles::DataManagement::TraitSchemaEngine * aEngine);
+    ~GenericTraitDataSink();
+    void ResetDataSink(void) { ClearVersion(); };
+    WEAVE_ERROR SetLeaf(PropertyPathHandle aLeafHandle, char *buf);
+    WEAVE_ERROR GetLeafData(PropertyPathHandle aLeafHandle, char *buf);
+
+private:
+    WEAVE_ERROR SetLeafData(nl::Weave::Profiles::DataManagement::PropertyPathHandle aLeafHandle, nl::Weave::TLV::TLVReader &aReader) __OVERRIDE;
+    WEAVE_ERROR GetLeafData(nl::Weave::Profiles::DataManagement::PropertyPathHandle aLeafHandle, uint64_t aTagToWrite, nl::Weave::TLV::TLVWriter &aWriter) __OVERRIDE;
+    WEAVE_ERROR GetNextDictionaryItemKey(nl::Weave::Profiles::DataManagement::PropertyPathHandle aDictionaryHandle, uintptr_t &aContext, nl::Weave::Profiles::DataManagement::PropertyDictionaryKey &aKey) __OVERRIDE;
+
+    static void TLVPrettyPrinter(const char *aFormat, ...);
+    static WEAVE_ERROR DebugPrettyPrint(nl::Weave::TLV::TLVReader & aReader);
+
+    std::map<PropertyPathHandle, PacketBuffer *> mpathLeafTlvMap;
+};
+
+#endif // MOCK_TRAIT_SINKS_H_
diff --git a/src/device-manager/LocaleSettingsTrait.cpp b/src/device-manager/LocaleSettingsTrait.cpp
new file mode 100644
index 0000000..14a72f6
--- /dev/null
+++ b/src/device-manager/LocaleSettingsTrait.cpp
@@ -0,0 +1,67 @@
+/*
+ *
+ *    Copyright (c) 2017 Nest Labs, Inc.
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/**
+ *    @file
+ *      THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ *      SOURCE PROTO: weave/trait/locale/locale_settings_trait.proto
+ *
+ */
+
+#include "LocaleSettingsTrait.h"
+
+using namespace nl::Weave::Profiles::DataManagement;
+
+namespace nl {
+    namespace Weave {
+        namespace DeviceManager {
+                namespace LocaleSettingsTrait {
+                    TraitSchemaEngine::PropertyInfo gSchemaMap[] = {
+                            /*  ParentHandle                ContextTag */
+                            {kPropertyHandle_Root, 1}
+                    };
+
+                    TraitSchemaEngine TraitSchema = {
+                            {
+                                    kWeaveProfileId,
+                                    gSchemaMap,
+                                    sizeof(gSchemaMap) / sizeof(gSchemaMap[0]),
+                                    1,
+#if (TDM_EXTENSION_SUPPORT) || (TDM_VERSIONING_SUPPORT)
+                                    2,
+#endif
+#if (TDM_DICTIONARY_SUPPORT)
+                                    NULL,
+#endif
+                                    NULL,
+                                    NULL,
+                                    NULL,
+                                    NULL,
+#if (TDM_EXTENSION_SUPPORT)
+                                    NULL,
+#endif
+#if (TDM_VERSIONING_SUPPORT)
+                                    NULL,
+#endif
+                            }
+                    };
+
+                }; // LocaleSettingsTrait
+            }; // DeviceManager
+    }; // Weave
+}; // nl
diff --git a/src/device-manager/LocaleSettingsTrait.h b/src/device-manager/LocaleSettingsTrait.h
new file mode 100644
index 0000000..4e3f198
--- /dev/null
+++ b/src/device-manager/LocaleSettingsTrait.h
@@ -0,0 +1,85 @@
+/*
+ *
+ *    Copyright (c) 2016-2017 Nest Labs, Inc.
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ *    @file
+ *      THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ *      SOURCE PROTO: weave/trait/locale/locale_settings_trait.proto
+ *
+ */
+
+#ifndef _LOCALE_SETTINGS_TRAIT_H
+#define _LOCALE_SETTINGS_TRAIT_H
+
+// We want and assume the default managed namespace is Current and that is, explicitly, the managed namespace this code desires.
+#include <Weave/Profiles/data-management/TraitData.h>
+
+namespace nl {
+    namespace Weave {
+        namespace DeviceManager {
+            namespace LocaleSettingsTrait {
+                    extern nl::Weave::Profiles::DataManagement::TraitSchemaEngine TraitSchema;
+
+                    enum {
+                        kWeaveProfileId = 0x00000014
+                    };
+
+                    enum {
+                        kPropertyHandle_Root = 1,
+                        /*
+                         * Root =
+                         * {
+                         *       active_locale = 1 (string),
+                         */
+                                kPropertyHandle_active_locale = 2,
+
+                        /*
+                         * }
+                         *
+                         */
+                    };
+                    //
+// Commands
+//
+
+                    enum {
+                        kCommandARequestId = 0x1,
+                        kCommandBRequestId = 0x2,
+                    };
+
+                    enum CommandARequestParameters {
+                        kCommandARequestParameter_A = 1,
+                        kCommandARequestParameter_B = 2,
+                    };
+
+                    enum CommandBRequestParameters {
+                        kCommandBRequestParameter_A = 1,
+                        kCommandBRequestParameter_B = 2,
+                    };
+
+                    enum CommandBResponseParameters {
+                        kCommandBResponseParameter_A = 1,
+                        kCommandBResponseParameter_B = 2,
+                    };
+                }; // LocaleSettingsTrait
+        } // DeviceManager
+    } // Weave
+} // nl
+
+#endif // _LOCALE_SETTINGS_TRAIT_H
\ No newline at end of file
diff --git a/src/device-manager/WeaveDeviceManager.cpp b/src/device-manager/WeaveDeviceManager.cpp
index d76336a..a4a1f39 100644
--- a/src/device-manager/WeaveDeviceManager.cpp
+++ b/src/device-manager/WeaveDeviceManager.cpp
@@ -32,6 +32,8 @@
 #include <errno.h>
 #include <time.h>
 
+#include <Weave/Profiles/data-management/Current/WdmManagedNamespace.h>
+
 #include <Weave/Core/WeaveCore.h>
 #include <Weave/Support/Base64.h>
 #include <Weave/Support/CodeUtils.h>
@@ -42,6 +44,7 @@
 #include <Weave/Profiles/network-provisioning/NetworkProvisioning.h>
 #include <Weave/Profiles/service-provisioning/ServiceProvisioning.h>
 #include <Weave/Profiles/fabric-provisioning/FabricProvisioning.h>
+#include <Weave/Profiles/data-management/DataManagement.h>
 #include <Weave/Profiles/device-description/DeviceDescription.h>
 #include <Weave/Profiles/device-control/DeviceControl.h>
 #include <Weave/Profiles/vendor/nestlabs/device-description/NestProductIdentifiers.hpp>
@@ -58,12 +61,44 @@
 #include <Weave/Profiles/vendor/nestlabs/dropcam-legacy-pairing/DropcamLegacyPairing.h>
 
 namespace nl {
+    namespace Weave {
+        namespace Profiles {
+            namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current) {
+
+            SubscriptionEngine * SubscriptionEngine::GetInstance()
+            {
+                static nl::Weave::Profiles::DataManagement::SubscriptionEngine gWdmSubscriptionEngine;
+                return &gWdmSubscriptionEngine;
+            }
+
+            namespace Platform {
+                // For unit tests, a dummy critical section is sufficient.
+                void CriticalSectionEnter()
+                {
+                    return;
+                }
+
+                void CriticalSectionExit()
+                {
+                    return;
+                }
+
+            } // Platform
+
+        } // WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+    } // Profiles
+} // Weave
+} // nl
+
+namespace nl {
 namespace Weave {
 namespace DeviceManager {
 
 using namespace nl::Weave::Encoding;
 using namespace nl::Weave::Profiles;
+using namespace nl::Weave::Profiles::DataManagement;
 using namespace nl::Weave::Profiles::DeviceDescription;
+using namespace nl::Weave::Profiles::Locale;
 using namespace nl::Weave::Profiles::NetworkProvisioning;
 using namespace nl::Weave::Profiles::Security;
 using namespace nl::Weave::Profiles::ServiceProvisioning;
@@ -73,10 +108,13 @@
 using namespace nl::Weave::Profiles::Vendor::Nestlabs::Thermostat;
 using namespace nl::Weave::TLV;
 
+const nl::Weave::ExchangeContext::Timeout kResponseTimeoutMsec = 15000;
+
 static bool IsProductWildcard(uint16_t productId);
 
 static const uint32_t ENUMERATED_NODES_LIST_INITIAL_SIZE = 256;
 
+
 WeaveDeviceManager *WeaveDeviceManager::sListeningDeviceMgr = NULL;
 
 WeaveDeviceManager::WeaveDeviceManager()
@@ -142,7 +180,6 @@
     mEnumeratedNodes = NULL;
     mEnumeratedNodesLen = 0;
     mEnumeratedNodesMaxLen = 0;
-
     // By default, rendezvous messages are sent to the IPv6 link-local, all-nodes multicast address.
     mRendezvousAddr = IPAddress::MakeIPv6WellKnownMulticast(kIPv6MulticastScope_Link, kIPV6MulticastGroup_AllNodes);
 
@@ -5056,6 +5093,746 @@
     return WEAVE_NO_ERROR;
 }
 
+WeaveDeviceManager::WDMDMClient::WDMDMClient() :
+        mpGenericTraitDataSink(NULL),
+        mpDeviceMgr(NULL),
+        mpBinding(NULL),
+        mSinkCatalog(ResourceIdentifier(ResourceIdentifier::SELF_NODE_ID),
+                     mSinkCatalogStore, sizeof(mSinkCatalogStore) / sizeof(mSinkCatalogStore[0]))
+{
+    mPathList.Init(mStorage, ArraySize(mStorage));
+}
+
+WeaveDeviceManager::WDMDMClient::~WDMDMClient(void)
+{
+    mpDeviceMgr = NULL;
+    mpBinding = NULL;
+    mDeviceId = kNodeIdNotSpecified ;
+}
+
+void WeaveDeviceManager::WDMDMClient::EngineEventCallback (void * const aAppState,
+                                                            SubscriptionEngine::EventID aEvent,
+                                                            const SubscriptionEngine::InEventParam & aInParam, SubscriptionEngine::OutEventParam & aOutParam)
+{
+    switch (aEvent)
+    {
+        default:
+            SubscriptionEngine::DefaultEventHandler(aEvent, aInParam, aOutParam);
+            break;
+    }
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::Setup(WeaveDeviceManager *apDeviceMgr, WeaveExchangeManager *apExchangeMgr, uint64_t aDeviceId, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    mpDeviceMgr = apDeviceMgr;
+    mDeviceId = aDeviceId;
+    mSubscriptionClient = NULL;
+    mpExchangeMgr = apExchangeMgr;
+    mpEcCommand = NULL;
+    mCmdState = kCmdState_Idle;
+
+    VerifyOrExit(mpGenericTraitDataSink == NULL, err = WEAVE_ERROR_INCORRECT_STATE);
+    mpGenericTraitDataSink = new GenericTraitDataSink(&LocaleSettingsTrait::TraitSchema);
+    VerifyOrExit(mpGenericTraitDataSink != NULL, err = WEAVE_ERROR_NO_MEMORY);
+
+    mSinkCatalog.Add(0, mpGenericTraitDataSink, mTraitHandleSet[0]);
+
+    mSinkCatalog.Locate(aProfileId, aInstanceId, mTraitPaths[0].mTraitDataHandle);
+
+    mTraitPaths[0].mPropertyPathHandle = aPropertyPathHandle;
+
+    err = SubscriptionEngine::GetInstance()->Init(mpExchangeMgr, this, EngineEventCallback);
+    SuccessOrExit(err);
+
+    if (NULL == mpBinding)
+    {
+        mpBinding = mpExchangeMgr->NewBinding(BindingEventCallback, this);
+        VerifyOrExit(NULL != mpBinding, err = WEAVE_ERROR_NO_MEMORY);
+        if (mpBinding->CanBePrepared())
+        {
+            err = mpBinding->RequestPrepare();
+            SuccessOrExit(err);
+        }
+    }
+
+exit:
+    return err;
+}
+
+void WeaveDeviceManager::WDMDMClient::TearDown()
+{
+    mpDeviceMgr = NULL;
+    mDeviceId = NULL;
+
+    if (NULL == mpBinding)
+    {
+        mpBinding->Release();
+        mpBinding = NULL;
+    }
+
+    if (mpGenericTraitDataSink != NULL)
+    {
+        delete mpGenericTraitDataSink;
+        mpGenericTraitDataSink = NULL;
+    }
+}
+
+void WeaveDeviceManager::WDMDMClient::BindingEventCallback (void * const apAppState, const nl::Weave::Binding::EventType aEvent,
+                                                            const nl::Weave::Binding::InEventParam & aInParam, nl::Weave::Binding::OutEventParam & aOutParam)
+{
+
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+    WeaveLogDetail(DeviceManager, "%s: Event(%d)", __func__, aEvent);
+
+    WDMDMClient * const pWDMDMClient = reinterpret_cast<WDMDMClient *>(apAppState);
+
+    switch (aEvent)
+    {
+        case nl::Weave::Binding::kEvent_PrepareRequested:
+            WeaveLogDetail(DeviceManager, "kEvent_PrepareRequested");
+            err = pWDMDMClient->PrepareBinding(pWDMDMClient->mpDeviceMgr->mDeviceCon);
+            SuccessOrExit(err);
+            break;
+
+        case nl::Weave::Binding::kEvent_PrepareFailed:
+            err = aInParam.PrepareFailed.Reason;
+            WeaveLogDetail(DeviceManager, "kEvent_PrepareFailed: reason");
+            break;
+
+        case nl::Weave::Binding::kEvent_BindingFailed:
+            err = aInParam.BindingFailed.Reason;
+            WeaveLogDetail(DeviceManager, "kEvent_BindingFailed: reason");
+            break;
+
+        case nl::Weave::Binding::kEvent_BindingReady:
+            WeaveLogDetail(DeviceManager, "kEvent_BindingReady");
+
+            WeaveLogProgress(DeviceManager, "%s", __PRETTY_FUNCTION__);
+
+            break;
+
+        case nl::Weave::Binding::kEvent_DefaultCheck:
+            WeaveLogDetail(DeviceManager, "kEvent_DefaultCheck");
+
+        default:
+            nl::Weave::Binding::DefaultEventHandler(apAppState, aEvent, aInParam, aOutParam);
+    }
+
+exit:
+    if (err != WEAVE_NO_ERROR)
+    {
+        WeaveLogDetail(DeviceManager, "error in BindingEventCallback");
+        if (NULL != pWDMDMClient->mpBinding)
+        {
+            pWDMDMClient->mpBinding->Release();
+            pWDMDMClient->mpBinding = NULL;
+        }
+    }
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::PrepareBinding(WeaveConnection *apDeviceCon)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+    if (apDeviceCon != NULL)
+    {
+        Binding::Configuration bindingConfig = mpBinding->BeginConfiguration()
+                .Target_NodeId(mDeviceId)
+                .Security_None()
+                .Transport_ExistingConnection(apDeviceCon)
+                .Exchange_ResponseTimeoutMsec(kResponseTimeoutMsec);
+        err = bindingConfig.PrepareBinding();
+    }
+    else
+    {
+        WeaveLogDetail(DeviceManager, "apDeviceCon is NULL");
+        err = WEAVE_ERROR_INCORRECT_STATE;
+    }
+
+    return err;
+}
+
+void WeaveDeviceManager::WDMDMClient::ClientEventCallback (void * const aAppState, SubscriptionClient::EventID aEvent,
+                                                        const SubscriptionClient::InEventParam & aInParam, SubscriptionClient::OutEventParam & aOutParam)
+{
+    WDMDMClient * const pWDMDMClient = reinterpret_cast<WDMDMClient *>(aAppState);
+
+    switch (aEvent)
+    {
+    case SubscriptionClient::kEvent_OnExchangeStart:
+        WeaveLogDetail(DeviceManager, "Client->kEvent_OnExchangeStart");
+        break;
+    case SubscriptionClient::kEvent_OnSubscribeRequestPrepareNeeded:
+        WeaveLogDetail(DeviceManager, "Client->kEvent_OnSubscribeRequestPrepareNeeded");
+
+        aOutParam.mSubscribeRequestPrepareNeeded.mPathList = pWDMDMClient->mTraitPaths;
+        aOutParam.mSubscribeRequestPrepareNeeded.mPathListSize = 1;
+        aOutParam.mSubscribeRequestPrepareNeeded.mNeedAllEvents = false;
+        aOutParam.mSubscribeRequestPrepareNeeded.mLastObservedEventList = NULL;
+        aOutParam.mSubscribeRequestPrepareNeeded.mLastObservedEventListSize = 0;
+        aOutParam.mSubscribeRequestPrepareNeeded.mTimeoutSecMin = 30;
+        aOutParam.mSubscribeRequestPrepareNeeded.mTimeoutSecMax = 3600;
+        break;
+
+    case SubscriptionClient::kEvent_OnSubscriptionEstablished:
+        WeaveLogDetail(DeviceManager, "Client->kEvent_OnSubscriptionEstablished");
+
+        if (pWDMDMClient)
+        {
+            pWDMDMClient->mSubscriptionClient->AbortSubscription();
+
+            WeaveLogProgress(DeviceManager, "%s", __PRETTY_FUNCTION__);
+
+            pWDMDMClient->RetrieveSinkTraitData();
+            //pWDMDMClient->TearDown();
+        }
+        break;
+    case SubscriptionClient::kEvent_OnNotificationRequest:
+        WeaveLogDetail(DeviceManager, "Client->kEvent_OnNotificationRequest");
+        break;
+    case SubscriptionClient::kEvent_OnNotificationProcessed:
+        WeaveLogDetail(DeviceManager, "Client->kEvent_OnNotificationProcessed");
+        break;
+    case SubscriptionClient::kEvent_OnSubscriptionTerminated:
+        WeaveLogDetail(DeviceManager, "Client->kEvent_OnSubscriptionTerminated. Reason: %u, peer = 0x%" PRIX64 "\n",
+            aInParam.mSubscriptionTerminated.mReason,
+            aInParam.mSubscriptionTerminated.mClient->GetPeerNodeId());
+        if (pWDMDMClient)
+        {
+            pWDMDMClient->mSubscriptionClient->AbortSubscription();
+            pWDMDMClient->mpDeviceMgr->ClearOpState();
+            pWDMDMClient->mpDeviceMgr->mOnComplete.General(pWDMDMClient->mpDeviceMgr, pWDMDMClient->mpDeviceMgr->mAppReqState);
+            //pWDMDMClient->TearDown();
+        }
+        break;
+    case SubscriptionClient::kEvent_OnUpdateComplete:
+        if ((aInParam.mUpdateComplete.mReason == WEAVE_NO_ERROR) && (nl::Weave::Profiles::Common::kStatus_Success == aInParam.mUpdateComplete.mStatusCode))
+        {
+            WeaveLogDetail(DeviceManager, "Update: path result: success");
+        }
+        else
+        {
+            WeaveLogDetail(DataManagement, "Update: path failed: %s, %s, tdh %" PRIu16", will %sretry",
+                       ErrorStr(aInParam.mUpdateComplete.mReason),
+                       nl::StatusReportStr(aInParam.mUpdateComplete.mStatusProfileId, aInParam.mUpdateComplete.mStatusCode),
+                       aInParam.mUpdateComplete.mTraitDataHandle,
+                       aInParam.mUpdateComplete.mWillRetry ? "" : "not ");
+        }
+        if (pWDMDMClient)
+        {
+            pWDMDMClient->mpDeviceMgr->ClearOpState();
+            pWDMDMClient->mpDeviceMgr->mOnComplete.General(pWDMDMClient->mpDeviceMgr, pWDMDMClient->mpDeviceMgr->mAppReqState);
+            //pWDMDMClient->TearDown();
+        }
+        break;
+    case SubscriptionClient::kEvent_OnNoMorePendingUpdates:
+        WeaveLogDetail(DeviceManager, "Update: no more pending updates");
+        break;
+
+    default:
+        SubscriptionClient::DefaultEventHandler(aEvent, aInParam, aOutParam);
+        break;
+    }
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::InitDMClient(WeaveDeviceManager *apDeviceMgr, WeaveExchangeManager *apExchangeMgr, uint64_t aDeviceId, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+    Setup(apDeviceMgr, apExchangeMgr, aDeviceId, aProfileId, aInstanceId, aPropertyPathHandle);
+    //WeaveLogProgress(DeviceManager, "%s", __PRETTY_FUNCTION__);
+
+    if (mSubscriptionClient == NULL)
+    {
+        err =  SubscriptionEngine::GetInstance()->NewClient(&mSubscriptionClient,
+                                                            mpBinding,
+                                                            this,
+                                                            ClientEventCallback,
+                                                            &mSinkCatalog,
+                                                            kResponseTimeoutMsec * 2); // max num of msec between subscribe request and subscribe response
+        SuccessOrExit(err);
+    }
+
+    mSubscriptionClient->EnableResubscribe(NULL);
+
+    mPathList.Clear();
+exit:
+    return WEAVE_NO_ERROR;
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::TriggerCustomCommand(const char *apName, const char *apCustomCommand)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    PacketBuffer *msgBuf = PacketBuffer::New();
+    static uint32_t commandType = 1;
+    static uint32_t signatureType = 0; // static dummy signature.  Values: 0 == None, 1 -- Weave Signature, 2 -- Group Key Signature
+
+    VerifyOrExit((NULL != mpBinding) && (kCmdState_Idle == mCmdState) && (NULL == mpEcCommand), err = WEAVE_ERROR_INCORRECT_STATE);
+    VerifyOrExit(NULL != msgBuf, err = WEAVE_ERROR_NO_MEMORY);
+
+    err = mpBinding->NewExchangeContext(mpEcCommand);
+    SuccessOrExit(err);
+
+    mpEcCommand->AppState = this;
+    mpEcCommand->OnMessageReceived = OnMessageReceivedForCustomCommand;
+    mpEcCommand->OnResponseTimeout = NULL;
+    mpEcCommand->OnSendError = NULL;
+    mpEcCommand->OnAckRcvd = NULL;
+
+    {
+        nl::Weave::TLV::TLVWriter writer;
+        CustomCommand::Builder request;
+        uint64_t nowMicroSecs, deadline;
+
+        writer.Init(msgBuf);
+        err = request.Init(&writer);
+        SuccessOrExit(err);
+
+        Path::Builder & path = request.CreatePathBuilder();
+
+        path.ProfileID(LocaleSettingsTrait::kWeaveProfileId).InstanceID(0).EndOfPath();
+
+        SuccessOrExit(path.GetError());
+
+        // Command Type
+        request.CommandType(commandType);
+
+        // It's safe to bail out after a series of operation, for
+        // SubscriptionRequest::Builder would internally turn to NOP after error is logged
+        SuccessOrExit(err = request.GetError());
+
+        /*
+        err = System::Layer::GetClock_RealTime(nowMicroSecs);
+        SuccessOrExit(err);
+        WeaveLogDetail(DataManagement, "TriggerCustomCommand6");
+        deadline = nowMicroSecs + 6000;
+        request.ExpiryTimeMicroSecond((int64_t)deadline);
+        SuccessOrExit(err = request.GetError());
+        */
+        // Add arguments here
+        {
+            nl::Weave::TLV::TLVType dummyType = nl::Weave::TLV::kTLVType_NotSpecified;
+            err = writer.StartContainer(nl::Weave::TLV::ContextTag(CustomCommand::kCsTag_Argument),
+                                        nl::Weave::TLV::kTLVType_Structure, dummyType);
+            SuccessOrExit(err);
+
+            err = writer.PutString(nl::Weave::TLV::ContextTag(1), apName);
+            SuccessOrExit(err);
+
+            err = writer.PutString(nl::Weave::TLV::ContextTag(2), apCustomCommand);
+            SuccessOrExit(err);
+
+            err = writer.EndContainer(dummyType);
+            SuccessOrExit(err);
+        }
+
+        request.EndOfCustomCommand();
+        SuccessOrExit(err = request.GetError());
+
+        err = writer.Finalize();
+        SuccessOrExit(err);
+
+        err = mpEcCommand->SendMessage(nl::Weave::Profiles::kWeaveProfile_WDM, kMsgType_CustomCommandRequest,
+                                      msgBuf, nl::Weave::ExchangeContext::kSendFlag_ExpectResponse);
+        msgBuf = NULL;
+        SuccessOrExit(err);
+    }
+
+    err = mpExchangeMgr->MessageLayer->SystemLayer->StartTimer(5000, HandleCustomCommandTimeout, this);
+    SuccessOrExit(err);
+    mCmdState = kCmdState_Requesting;
+
+exit:
+    WeaveLogFunctError(err);
+    if (NULL != msgBuf)
+    {
+        PacketBuffer::Free(msgBuf);
+        msgBuf = NULL;
+    }
+
+    if (WEAVE_NO_ERROR != err)
+    {
+        Command_End(true);
+    }
+    return WEAVE_NO_ERROR;
+}
+
+void WeaveDeviceManager::WDMDMClient::OnMessageReceivedForCustomCommand (nl::Weave::ExchangeContext *aEC, const nl::Inet::IPPacketInfo *aPktInfo,
+                                                                          const nl::Weave::WeaveMessageInfo *aMsgInfo, uint32_t aProfileId,
+                                                                          uint8_t aMsgType, PacketBuffer *aPayload)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    WDMDMClient * const pWDMDMClient = reinterpret_cast<WDMDMClient *>(aEC->AppState);
+    nl::Weave::Profiles::StatusReporting::StatusReport status;
+    enum
+    {
+        kMsgIdentified_Unknown        = 0,
+        kMsgIdentified_StatusReport   = 1,
+        kMsgIdentified_Response       = 2,
+        kMsgIdentified_InProgress     = 3,
+    } messageType = kMsgIdentified_Unknown;
+
+    WeaveLogDetail(DataManagement, "Responder %s: state: %d", __func__, pWDMDMClient->mCmdState);
+
+    VerifyOrExit(aEC == pWDMDMClient->mpEcCommand, err = WEAVE_ERROR_INCORRECT_STATE);
+    VerifyOrExit(kCmdState_Idle != pWDMDMClient->mCmdState, err = WEAVE_ERROR_INCORRECT_STATE);
+
+    if ((nl::Weave::Profiles::kWeaveProfile_Common == aProfileId) && (nl::Weave::Profiles::Common::kMsgType_StatusReport == aMsgType))
+    {
+        // Note that payload is not freed in this call to parse
+        err = nl::Weave::Profiles::StatusReporting::StatusReport::parse(aPayload, status);
+        SuccessOrExit(err);
+        messageType = kMsgIdentified_StatusReport;
+        WeaveLogError(DataManagement, "Received Status Report 0x%" PRIX32 " : 0x%" PRIX16, status.mProfileId, status.mStatusCode);
+    }
+    else if ((nl::Weave::Profiles::kWeaveProfile_WDM == aProfileId) && (kMsgType_CustomCommandResponse == aMsgType))
+    {
+        // command response, implies the request succeeded to some degree
+        messageType = kMsgIdentified_Response;
+    }
+    else if ((nl::Weave::Profiles::kWeaveProfile_WDM == aProfileId) && (kMsgType_InProgress == aMsgType))
+    {
+        messageType = kMsgIdentified_InProgress;
+    }
+    else
+    {
+        messageType = kMsgIdentified_Unknown;
+    }
+
+    switch (pWDMDMClient->mCmdState)
+    {
+        case kCmdState_Requesting:
+            if (kMsgIdentified_InProgress == messageType)
+            {
+                // in progress, indicates the other side has received the request and is working on it
+                // note we could have different time out settings after receiving this in progress message.
+                // it's up to each individual trait.
+                WeaveLogDetail(DataManagement, "Received In Progress message. Waiting for a response");
+                // there is no payload in "in progress" message, so there is nothing to parse
+                pWDMDMClient->mCmdState = kCmdState_Operating;
+                // do not close this EC when we leave this function
+                aEC = NULL;
+                break;
+            }
+            // fall through intentional
+        case kCmdState_Operating:
+            if (kMsgIdentified_Response == messageType)
+            {
+                // command response, implies the request succeeded to some degree
+                WeaveLogDetail(DataManagement, "Response message, end");
+
+                nl::Weave::TLV::TLVReader reader;
+                reader.Init(aPayload);
+
+                err = reader.Next();
+                SuccessOrExit(err);
+
+                CustomCommandResponse::Parser response;
+                err = response.Init(reader);
+                SuccessOrExit(err);
+
+#if WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
+                // this function only print out all recognized properties in the response
+    // check the parser class to see what else is available
+    err = response.CheckSchemaValidity();
+    SuccessOrExit(err);
+#endif // WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
+            }
+            else
+            {
+                if (kMsgIdentified_StatusReport == messageType)
+                {
+                    // status report, implies the request failed
+                    WeaveLogDetail(DataManagement, "Status Report, end");
+                }
+                else
+                {
+                    // unexpected message
+                    WeaveLogDetail(DataManagement, "Unexpected message, end");
+                }
+            }
+            // reset state and close the exchange
+            pWDMDMClient->Command_End();
+            // aEC has been closed/aborted as part of Command_End
+            aEC = NULL;
+            break;
+        default:
+            // this is probably dead code
+            ExitNow(err = WEAVE_ERROR_INCORRECT_STATE);
+    }
+
+exit:
+    WeaveLogFunctError(err);
+
+    if (WEAVE_NO_ERROR != err)
+    {
+        pWDMDMClient->Command_End(true);
+        // aEC has been closed/aborted as part of Command_End
+        aEC = NULL;
+    }
+
+    if (NULL != aEC)
+    {
+        aEC->Abort();
+        aEC = NULL;
+    }
+
+    if (NULL != aPayload)
+    {
+        PacketBuffer::Free(aPayload);
+        aPayload = NULL;
+    }
+}
+
+void WeaveDeviceManager::WDMDMClient::HandleCustomCommandTimeout(nl::Weave::System::Layer* aSystemLayer, void *aAppState, ::nl::Weave::System::Error aErr)
+{
+    WDMDMClient * const pWDMDMClient = reinterpret_cast<WDMDMClient *>(aAppState);
+    pWDMDMClient->Command_End(true);
+}
+
+void WeaveDeviceManager::WDMDMClient::Command_End(const bool aAbort)
+{
+    (void)mpExchangeMgr->MessageLayer->SystemLayer->CancelTimer(HandleCustomCommandTimeout, this);
+
+    mCmdState = kCmdState_Idle;
+    if (NULL != mpEcCommand)
+    {
+        // this might be needed, for the test infrastructure re-init this object multiple times
+        // ExchangeContext::Close would gracefully close this exchange, while ExchangeContext::Abort
+        // would forcefully reclaim all resources
+        if (aAbort)
+        {
+            mpEcCommand->Abort();
+        }
+        else
+        {
+            mpEcCommand->Close();
+        }
+        mpEcCommand = NULL;
+    }
+
+    if (mpDeviceMgr)
+    {
+        mpDeviceMgr->ClearOpState();
+        mpDeviceMgr->mOnComplete.General(mpDeviceMgr, mpDeviceMgr->mAppReqState);
+    }
+}
+
+void WeaveDeviceManager::WDMDMClient::ClearDataSinkIterator(void *aTraitInstance, TraitDataHandle aHandle, void *aContext)
+{
+    GenericTraitDataSink *traitInstance = static_cast<GenericTraitDataSink *>(aTraitInstance);
+    traitInstance->ResetDataSink();
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::RetrieveSinkTraitData()
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    TraitSchemaEngine::IGetDataDelegate *getDataDelegate;
+    TLVType dummyContainerType;
+    nl::Weave::TLV::TLVWriter writer;
+    uint32_t encodedLen = 0;
+    TraitDataSink *pSink = NULL;
+
+    OpState savedOpState = mpDeviceMgr->mOpState;
+
+    PacketBuffer * msgBuf = PacketBuffer::New();
+    VerifyOrExit(msgBuf != NULL, err = WEAVE_ERROR_NO_MEMORY);
+
+    writer.Init(msgBuf);
+    err = writer.StartContainer(AnonymousTag, kTLVType_Structure, dummyContainerType);
+    SuccessOrExit(err);
+
+    mSinkCatalog.Locate(mTraitPaths[0].mTraitDataHandle, &pSink);
+    getDataDelegate = static_cast<TraitSchemaEngine::IGetDataDelegate *>(pSink);
+    err = pSink->GetSchemaEngine()->RetrieveData(kRootPropertyPathHandle, ContextTag(DataElement::kCsTag_Data), writer, getDataDelegate);
+    SuccessOrExit(err);
+
+    err = writer.EndContainer(dummyContainerType);
+    SuccessOrExit(err);
+
+    err = writer.Finalize();
+    SuccessOrExit(err);
+
+    encodedLen = writer.GetLengthWritten();
+
+#if WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
+    {
+        nl::Weave::TLV::TLVReader reader;
+        //DataElement::Parser parser;
+        reader.Init(msgBuf);
+        err = reader.Next();
+        VerifyOrExit(err == WEAVE_NO_ERROR, WeaveLogDetail(DataManagement, "Created malformed update, err: %" PRId32, err));
+        //parser.Init(reader);
+        //parser.CheckSchemaValidity();
+        DebugPrettyPrint(reader);
+    }
+#endif //WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
+
+    mpDeviceMgr->ClearOpState();
+    WeaveLogDetail(DataManagement, "current op is, %d", savedOpState);
+    //VerifyOrExit(savedOpState == kOpState_ViewTrait, err = WEAVE_ERROR_INCORRECT_STATE);
+    //pWDMDMClient->mpDeviceMgr->mOnComplete.General(pWDMDMClient->mpDeviceMgr, pWDMDMClient->mpDeviceMgr->mAppReqState);
+    mpDeviceMgr->mOnComplete.ViewTrait(mpDeviceMgr, mpDeviceMgr->mAppReqState, msgBuf->Start(), msgBuf->DataLength());
+
+exit:
+    WeaveLogFunctError(err);
+    if (err != WEAVE_NO_ERROR)
+        mpDeviceMgr->mOnError(mpDeviceMgr, mpDeviceMgr->mAppReqState, err, NULL);
+    if (msgBuf != NULL)
+        PacketBuffer::Free(msgBuf);
+    return err;
+}
+
+void WeaveDeviceManager::WDMDMClient::TLVPrettyPrinter(const char *aFormat, ...)
+{
+    va_list args;
+
+    va_start(args, aFormat);
+
+    // There is no proper Weave logging routine for us to use here
+    vprintf(aFormat, args);
+
+    va_end(args);
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::DebugPrettyPrint(nl::Weave::TLV::TLVReader & aReader)
+{
+    return nl::Weave::TLV::Debug::Dump(aReader, TLVPrettyPrinter);
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::StoreTLVData(const uint8_t * encodedTlvVal, uint16_t encodedTlvalLen)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+    TraitDataSink *pSink = NULL;
+    PropertyPathHandle pathHandle = kNullPropertyPathHandle;
+
+    TLVReader reader;
+
+    pathHandle = mTraitPaths[0].mPropertyPathHandle;
+    mSinkCatalog.Locate(mTraitPaths[0].mTraitDataHandle, &pSink);
+/*
+    static const uint8_t Encoding[] =
+            {
+                    nlWeaveTLV_STRUCTURE(nlWeaveTLV_TAG_ANONYMOUS),
+                    nlWeaveTLV_UINT64(nlWeaveTLV_TAG_CONTEXT_SPECIFIC(ContextTag(DataElement::kCsTag_Version)), 1),
+                    nlWeaveTLV_STRUCTURE(nlWeaveTLV_TAG_CONTEXT_SPECIFIC(ContextTag(DataElement::kCsTag_Data))),
+                    nlWeaveTLV_UTF8_STRING_1ByteLength(nlWeaveTLV_TAG_CONTEXT_SPECIFIC(ContextTag(1)), 5),
+                    'e',
+                    'n',
+                    '-',
+                    'U',
+                    'S',
+                    nlWeaveTLV_END_OF_CONTAINER,
+                    nlWeaveTLV_END_OF_CONTAINER,
+            };
+*/
+    reader.Init(encodedTlvVal, encodedTlvalLen);
+    //reader.Init(Encoding, sizeof(Encoding));
+    err = reader.Next();
+    SuccessOrExit(err);
+    DebugPrettyPrint(reader);
+
+    //err = pSink->StoreDataElement(pathHandle, reader, 0, NULL, NULL);
+    err = mpGenericTraitDataSink->SetLeaf(pathHandle, "en-US");
+    SuccessOrExit(err);
+
+    WeaveLogDetail(DataManagement, "<set updated> in 0x%08x", pathHandle);
+    if (pSink->IsUpdatableDataSink())
+    {
+        WeaveLogDetail(DataManagement, "updating");
+        TraitUpdatableDataSink *updatableSink = static_cast<TraitUpdatableDataSink *>(pSink);
+        err = updatableSink->SetUpdated(mSubscriptionClient, pathHandle, false);
+        SuccessOrExit(err);
+    }
+exit:
+    return err;
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::TriggerUpdate(const uint8_t * encodedTlvVal, uint16_t encodedTlvalLen)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+    err = StoreTLVData(encodedTlvVal, encodedTlvalLen);
+    SuccessOrExit(err);
+
+    err = mSubscriptionClient->FlushUpdate();
+    SuccessOrExit(err);
+
+exit:
+    return err;
+}
+
+WEAVE_ERROR WeaveDeviceManager::WDMDMClient::RunShortLivedSubscription()
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+    mSinkCatalog.Iterate(WeaveDeviceManager::WDMDMClient::ClearDataSinkIterator, NULL);
+
+    mSubscriptionClient->InitiateSubscription();
+
+    return err;
+}
+
+WEAVE_ERROR WeaveDeviceManager::UpdateTrait(void* appReqState, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, const uint8_t * encodedTlvVal, uint16_t encodedTlvalLen, CompleteFunct onComplete, ErrorFunct onError)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    uint64_t deviceId = kNodeIdNotSpecified;
+
+    mAppReqState = appReqState;
+    mOnComplete.General = onComplete;
+    mOnError = onError;
+    mOpState = kOpState_UpdateTrait;
+
+    GetDeviceId(deviceId);
+
+    err = mWDMDMClient.InitDMClient(this, mExchangeMgr, deviceId, aProfileId, aInstanceId, aPropertyPathHandle);
+    SuccessOrExit(err);
+
+    err = mWDMDMClient.TriggerUpdate(encodedTlvVal, encodedTlvalLen);
+    SuccessOrExit(err);
+
+exit:
+    return err;
+}
+
+WEAVE_ERROR WeaveDeviceManager::ViewTrait(void* appReqState, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, ViewTraitCompleteFunct onComplete, ErrorFunct onError)
+{
+    uint64_t deviceId = kNodeIdNotSpecified;
+    GetDeviceId(deviceId);
+
+    mAppReqState = appReqState;
+    mOnComplete.ViewTrait = onComplete;
+    mOnError = onError;
+    mOpState = kOpState_ViewTrait;
+
+    mWDMDMClient.InitDMClient(this, mExchangeMgr, deviceId, aProfileId, aInstanceId, aPropertyPathHandle);
+    mWDMDMClient.RunShortLivedSubscription();
+    return WEAVE_NO_ERROR;
+}
+
+WEAVE_ERROR WeaveDeviceManager::SendCustomCommand(void* appReqState, const char *apName, const char *apCustomCommand, CompleteFunct onComplete, ErrorFunct onError)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    PacketBuffer *msgBuf = PacketBuffer::New();
+    static uint32_t commandType = 1;
+    static uint32_t signatureType = 0; // static dummy signature.  Values: 0 == None, 1 -- Weave Signature, 2 -- Group Key Signature
+    uint64_t deviceId = kNodeIdNotSpecified;
+
+    mAppReqState = appReqState;
+    mOnComplete.General = onComplete;
+    mOnError = onError;
+    mOpState = kOpState_SendCustomCommand;
+
+    GetDeviceId(deviceId);
+
+    mWDMDMClient.InitDMClient(this, mExchangeMgr, deviceId, 0x00000014, 0, kRootPropertyPathHandle);
+    mWDMDMClient.TriggerCustomCommand(apName, apCustomCommand);
+    return WEAVE_NO_ERROR;
+}
+
 bool IsProductWildcard(uint16_t productId)
 {
     return (productId >= kProductWildcardId_RangeStart && productId <= kProductWildcardId_RangeEnd);
diff --git a/src/device-manager/WeaveDeviceManager.h b/src/device-manager/WeaveDeviceManager.h
index 9633d87..d62d163 100644
--- a/src/device-manager/WeaveDeviceManager.h
+++ b/src/device-manager/WeaveDeviceManager.h
@@ -27,11 +27,15 @@
 #ifndef __WEAVEDEVICEMANAGER_H
 #define __WEAVEDEVICEMANAGER_H
 
+#include <Weave/Profiles/data-management/Current/WdmManagedNamespace.h>
+
 #include <Weave/Support/NLDLLUtil.h>
 #include <Weave/Core/WeaveCore.h>
 #include <Weave/Core/WeaveTLV.h>
 #include <Weave/Profiles/common/WeaveMessage.h>
+#include <Weave/Profiles/data-management/DataManagement.h>
 #include <Weave/Profiles/device-description/DeviceDescription.h>
+#include <Weave/Profiles/locale/LocaleProfile.hpp>
 #include <Weave/Profiles/network-provisioning/NetworkProvisioning.h>
 #include <Weave/Profiles/network-provisioning/NetworkInfo.h>
 #include <Weave/Profiles/security/WeaveSecurity.h>
@@ -43,11 +47,15 @@
 #include <Weave/Profiles/vendor/nestlabs/dropcam-legacy-pairing/DropcamLegacyPairing.h>
 #include <Weave/Profiles/vendor/nestlabs/thermostat/NestThermostatWeaveConstants.h>
 
+#include <Weave/DeviceManager/GenericTraitDataSink.h>
+#include <Weave/DeviceManager/LocaleSettingsTrait.h>
+
 namespace nl {
 namespace Weave {
 namespace DeviceManager {
 
 using namespace nl::Weave::Profiles;
+using namespace nl::Weave::Profiles::DataManagement;
 using namespace nl::Weave::Profiles::DeviceDescription;
 using namespace nl::Weave::Profiles::Vendor::Nestlabs::DropcamLegacyPairing;
 using namespace nl::Weave::Profiles::NetworkProvisioning;
@@ -88,6 +96,7 @@
 typedef void (*PairTokenCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState, const uint8_t *tokenPairingBundle, uint32_t tokenPairingBunldeLen);
 typedef void (*UnpairTokenCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState);
 typedef void (*GetCameraAuthDataCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState, const char *macAddress, const char *authData);
+typedef void (*ViewTraitCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState, const uint8_t *traitTlvData, uint32_t traitTlvDataLen);
 };
 
 class NL_DLL_EXPORT WeaveDeviceManager : private Security::CASE::WeaveCASEAuthDelegate
@@ -100,7 +109,6 @@
     } State;                        // [READ-ONLY] Current state
 
     WeaveDeviceManager();
-
     void *AppState;
 
     WEAVE_ERROR Init(WeaveExchangeManager *exchangeMsg, WeaveSecurityManager *securityMgr);
@@ -234,6 +242,11 @@
     WEAVE_ERROR StartSystemTest(void* appReqState, uint32_t profileId, uint32_t testId, CompleteFunct onComplete, ErrorFunct onError);
     WEAVE_ERROR StopSystemTest(void* appReqState, CompleteFunct onComplete, ErrorFunct onError);
 
+    // ----- Data Management -----
+    WEAVE_ERROR UpdateTrait(void* appReqState, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, const uint8_t *encodedTlvVal, uint16_t encodedTlvalLen, CompleteFunct onComplete, ErrorFunct onError);
+    WEAVE_ERROR ViewTrait(void* appReqState, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, ViewTraitCompleteFunct onComplete, ErrorFunct onError);
+    WEAVE_ERROR SendCustomCommand(void* appReqState, const char *apName, const char *apCustomCommand, CompleteFunct onComplete, ErrorFunct onError);
+
     // ---- Token Pairing ----
     WEAVE_ERROR PairToken(const uint8_t *pairingToken, uint32_t pairingTokenLen, void* appReqState, PairTokenCompleteFunct onComplete, ErrorFunct onError);
     WEAVE_ERROR UnpairToken(void* appReqState, UnpairTokenCompleteFunct onComplete, ErrorFunct onError);
@@ -297,7 +310,10 @@
         kOpState_UnpairToken                            = 41,
         kOpState_GetCameraAuthData                      = 42,
         kOpState_EnumerateDevices                       = 43,
-        kOpState_RemotePassiveRendezvousTimedOut        = 44
+        kOpState_RemotePassiveRendezvousTimedOut        = 44,
+        kOpState_UpdateTrait                            = 45,
+        kOpState_ViewTrait                              = 46,
+        kOpState_SendCustomCommand                      = 47,
     };
 
     enum ConnectionState
@@ -346,6 +362,80 @@
         kCertDecodeBufferSize = 1024
     };
 
+    class WDMDMClient
+    {
+    public:
+        WDMDMClient(void);
+
+        ~WDMDMClient(void);
+
+        WEAVE_ERROR InitDMClient(WeaveDeviceManager *apDeviceMgr, WeaveExchangeManager *apExchangeMgr, uint64_t aDeviceId, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle);
+
+        WEAVE_ERROR TriggerUpdate(const uint8_t * encodedTlvVal, uint16_t encodedTlvalLen);
+
+        WEAVE_ERROR RunShortLivedSubscription();
+
+        WEAVE_ERROR TriggerCustomCommand (const char *apName, const char *apCustomCommand);
+
+    private:
+        enum CustomCommandState
+        {
+            kCmdState_Idle          = 0,    ///< No active command
+            kCmdState_Requesting    = 1,    ///< Command has been sent but we haven't heard anything back
+            kCmdState_Operating     = 2,    ///< We have received In-Progress message but are still waiting for response
+        };
+
+        static void EngineEventCallback (void * const aAppState,
+                                         SubscriptionEngine::EventID aEvent,
+                                         const SubscriptionEngine::InEventParam & aInParam, SubscriptionEngine::OutEventParam & aOutParam);
+        WEAVE_ERROR Setup(WeaveDeviceManager *apDeviceMgr, WeaveExchangeManager *apExchangeMgr, uint64_t aDeviceId, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle);
+
+        void TearDown();
+
+        WEAVE_ERROR PrepareBinding(WeaveConnection *apDeviceCon);
+
+        static void BindingEventCallback(void * const apAppState, const nl::Weave::Binding::EventType aEvent,
+                                         const nl::Weave::Binding::InEventParam & aInParam,
+                                         nl::Weave::Binding::OutEventParam & aOutParam);
+
+        static void ClientEventCallback (void * const aAppState, SubscriptionClient::EventID aEvent,
+                                         const SubscriptionClient::InEventParam & aInParam, SubscriptionClient::OutEventParam & aOutParam);
+
+        WEAVE_ERROR RetrieveSinkTraitData();
+
+        WEAVE_ERROR StoreTLVData(const uint8_t * encodedTlvVal, uint16_t encodedTlvalLen);
+
+        void Command_End (const bool aAbort = false);
+
+        static void OnMessageReceivedForCustomCommand (nl::Weave::ExchangeContext *aEC, const nl::Inet::IPPacketInfo *aPktInfo,
+                                                       const nl::Weave::WeaveMessageInfo *aMsgInfo, uint32_t aProfileId,
+                                                       uint8_t aMsgType, PacketBuffer *aPayload);
+
+        static void HandleCustomCommandTimeout(nl::Weave::System::Layer* aSystemLayer, void *aAppState, ::nl::Weave::System::Error aErr);
+
+        static void ClearDataSinkIterator(void *aTraitInstance, TraitDataHandle aHandle, void *aContext);
+
+        static void TLVPrettyPrinter(const char *aFormat, ...);
+
+        static WEAVE_ERROR DebugPrettyPrint(nl::Weave::TLV::TLVReader & aReader);
+
+        GenericTraitDataSink *mpGenericTraitDataSink;
+        TraitPath mTraitPaths[1];
+        TraitDataHandle mTraitHandleSet[1];
+        TraitPathStore mPathList;
+        TraitPathStore::Record mStorage[1];
+        SingleResourceSinkTraitCatalog mSinkCatalog;
+        SingleResourceSinkTraitCatalog::CatalogItem mSinkCatalogStore[1];
+
+        WeaveDeviceManager *mpDeviceMgr;
+        uint64_t mDeviceId;
+        SubscriptionClient * mSubscriptionClient;
+        CustomCommandState mCmdState;
+        Binding * mpBinding;
+        nl::Weave::ExchangeContext * mpEcCommand;
+        WeaveExchangeManager * mpExchangeMgr;
+    };
+
     System::Layer* mSystemLayer;
     WeaveMessageLayer *mMessageLayer;
     WeaveExchangeManager *mExchangeMgr;
@@ -367,6 +457,7 @@
         UnpairTokenCompleteFunct UnpairToken;
         GetCameraAuthDataCompleteFunct GetCameraAuthData;
         DeviceEnumerationResponseFunct DeviceEnumeration;
+        ViewTraitCompleteFunct ViewTrait;
     } mOnComplete;
     CompleteFunct mOnRemotePassiveRendezvousComplete;
     ErrorFunct mOnError;
@@ -422,6 +513,7 @@
     uint64_t *mEnumeratedNodes;
     uint32_t mEnumeratedNodesLen;
     uint32_t mEnumeratedNodesMaxLen;
+    WDMDMClient mWDMDMClient;
 
     // Use by static HandleConnectionReceived callback.
     static WeaveDeviceManager *sListeningDeviceMgr;
diff --git a/src/device-manager/python/Makefile.am b/src/device-manager/python/Makefile.am
index e396a29..a6a2629 100644
--- a/src/device-manager/python/Makefile.am
+++ b/src/device-manager/python/Makefile.am
@@ -35,6 +35,7 @@
     openweave/WeaveCoreBluetoothMgr.py              \
     openweave/WeaveBluezMgr.py                      \
     openweave/WeaveBleUtility.py                    \
+    openweave/WeaveTLV.py                    \
     $(NULL)
 
 # Location into which the "openweave" python package will be installed.
diff --git a/src/device-manager/python/Makefile.in b/src/device-manager/python/Makefile.in
index 1a3a6dc..96e4b7f 100644
--- a/src/device-manager/python/Makefile.in
+++ b/src/device-manager/python/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -41,7 +41,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -119,12 +129,6 @@
 @WEAVE_BUILD_INSTALLABLE_PYTHON_PACKAGE_TRUE@    $(NULL)
 
 subdir = src/device-manager/python
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/depcomp \
-	$(openweave_PYTHON) \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/py-compile \
-	$(noinst_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/third_party/nlbuild-autotools/repo/autoconf/m4/ax_check_compiler.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/autoconf/m4/nl_enable_coverage.m4 \
@@ -143,18 +147,20 @@
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_cxx_compile_stdcxx_11.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_jni_include_dir.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_pthread.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/libtool.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltoptions.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltsugar.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltversion.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/pkg.m4 \
+	$(top_srcdir)/build/autoconf/m4/libtool.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltoptions.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltsugar.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltversion.m4 \
+	$(top_srcdir)/build/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_check_project_config_includes.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_enable_long_tests.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_with_lwip.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(openweave_PYTHON) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(SHELL) \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/include/BuildConfig.h
@@ -225,7 +231,10 @@
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/include
 depcomp = $(SHELL) \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BleApplicationDelegate.Plo \
+	./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BlePlatformDelegate.Plo \
+	./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-ScriptBinding.Plo
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -254,7 +263,7 @@
   esac
 am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile)
 am__pep3147_tweak = \
-  sed -e 's|\.py$$||' -e 's|[^/]*$$|__pycache__/&.*.py|'
+  sed -e 's|\.py$$||' -e 's|[^/]*$$|&.*.pyc\n&.*.pyo|'
 py_compile = $(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/py-compile
 HEADERS = $(noinst_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
@@ -276,6 +285,10 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/depcomp \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/py-compile
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -365,6 +378,7 @@
 LNDIR = @LNDIR@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LWIP_CPPFLAGS = @LWIP_CPPFLAGS@
 LWIP_LDFLAGS = @LWIP_LDFLAGS@
 LWIP_LIBS = @LWIP_LIBS@
@@ -524,6 +538,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -548,6 +563,7 @@
     openweave/WeaveCoreBluetoothMgr.py              \
     openweave/WeaveBluezMgr.py                      \
     openweave/WeaveBleUtility.py                    \
+    openweave/WeaveTLV.py                    \
     $(NULL)
 
 
@@ -613,14 +629,13 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/device-manager/python/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --foreign src/device-manager/python/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
 	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
 	esac;
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -711,9 +726,15 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BleApplicationDelegate.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BlePlatformDelegate.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-ScriptBinding.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BleApplicationDelegate.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BlePlatformDelegate.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-ScriptBinding.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+	@$(MKDIR_P) $(@D)
+	@echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
 
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -798,20 +819,15 @@
 	dir='$(DESTDIR)$(openweavedir)'; \
 	pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \
 	pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \
-	py_files_pep3147=`echo "$$py_files" | $(am__pep3147_tweak)`; \
-	echo "$$py_files_pep3147";\
-	pyc_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|c|'`; \
-	pyo_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|o|'`; \
 	st=0; \
-	for files in \
-	  "$$py_files" \
-	  "$$pyc_files" \
-	  "$$pyo_files" \
-	  "$$pyc_files_pep3147" \
-	  "$$pyo_files_pep3147" \
-	; do \
+	for files in "$$py_files" "$$pyc_files" "$$pyo_files"; do \
 	  $(am__uninstall_files_from_dir) || st=$$?; \
 	done; \
+	dir='$(DESTDIR)$(openweavedir)/__pycache__'; \
+	echo "$$py_files" | $(am__pep3147_tweak) | $(am__base_list) | \
+	  while read files; do \
+	    $(am__uninstall_files_from_dir) || st=$$?; \
+	  done || exit $$?; \
 	exit $$st
 
 ID: $(am__tagged_files)
@@ -866,7 +882,10 @@
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	list='$(DISTFILES)'; \
@@ -934,16 +953,18 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-@WEAVE_BUILD_INSTALLABLE_PYTHON_PACKAGE_FALSE@install-exec-local:
 @WEAVE_BUILD_INSTALLABLE_PYTHON_PACKAGE_FALSE@uninstall-local:
 @WEAVE_BUILD_INSTALLABLE_PYTHON_PACKAGE_FALSE@clean-local:
+@WEAVE_BUILD_INSTALLABLE_PYTHON_PACKAGE_FALSE@install-exec-local:
 clean: clean-am
 
 clean-am: clean-generic clean-libtool clean-local \
 	clean-openweaveLTLIBRARIES mostlyclean-am
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
+		-rm -f ./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BleApplicationDelegate.Plo
+	-rm -f ./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BlePlatformDelegate.Plo
+	-rm -f ./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-ScriptBinding.Plo
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-tags
@@ -990,7 +1011,9 @@
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
+		-rm -f ./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BleApplicationDelegate.Plo
+	-rm -f ./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-BlePlatformDelegate.Plo
+	-rm -f ./$(DEPDIR)/_WeaveDeviceMgr_la-WeaveDeviceManager-ScriptBinding.Plo
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -1012,13 +1035,14 @@
 
 .MAKE: install-am install-exec-am install-strip
 
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-local clean-openweaveLTLIBRARIES \
-	cscopelist-am ctags ctags-am distclean distclean-compile \
-	distclean-generic distclean-libtool distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-binSCRIPTS install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-exec-hook \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+	clean-generic clean-libtool clean-local \
+	clean-openweaveLTLIBRARIES cscopelist-am ctags ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binSCRIPTS \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-exec-hook \
 	install-exec-local install-html install-html-am install-info \
 	install-info-am install-man install-openweaveLTLIBRARIES \
 	install-openweavePYTHON install-pdf install-pdf-am install-ps \
@@ -1029,6 +1053,8 @@
 	uninstall-am uninstall-binSCRIPTS uninstall-local \
 	uninstall-openweaveLTLIBRARIES uninstall-openweavePYTHON
 
+.PRECIOUS: Makefile
+
 
 include $(abs_top_nlbuild_autotools_dir)/automake/pre.am
 
diff --git a/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp b/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp
index 6c8457a..da6fd2e 100644
--- a/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp
+++ b/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp
@@ -58,7 +58,7 @@
 using namespace nl::Weave;
 using namespace nl::Weave::DeviceManager;
 using namespace nl::Weave::Profiles::NetworkProvisioning;
-
+using namespace nl::Weave::Profiles::DataManagement;
 using DeviceDescription::IdentifyDeviceCriteria;
 
 extern "C" {
@@ -236,6 +236,9 @@
     NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_ArmFailSafe(WeaveDeviceManager *devMgr, uint8_t armMode, uint32_t failSafeToken, CompleteFunct onComplete, ErrorFunct onError);
     NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_DisarmFailSafe(WeaveDeviceManager *devMgr, CompleteFunct onComplete, ErrorFunct onError);
     NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_ResetConfig(WeaveDeviceManager *devMgr, uint16_t resetFlags, CompleteFunct onComplete, ErrorFunct onError);
+    NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_UpdateTrait(WeaveDeviceManager *devMgr, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, const uint8_t *encodedTlvVal, uint16_t encodedTlvalLen, CompleteFunct onComplete, ErrorFunct onError);
+    NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_ViewTrait(WeaveDeviceManager *devMgr, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, ViewTraitCompleteFunct onComplete, ErrorFunct onError);
+    NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_SendCustomCommand(WeaveDeviceManager *devMgr, const char *apName, const char *apCustomCommand, CompleteFunct onComplete, ErrorFunct onError);
     NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_PairToken(WeaveDeviceManager *devMgr, const uint8_t *pairingToken, uint32_t pairingTokenLen, PairTokenCompleteFunct onComplete, ErrorFunct onError);
     NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_UnpairToken(WeaveDeviceManager *devMgr, UnpairTokenCompleteFunct onComplete, ErrorFunct onError);
     NL_DLL_EXPORT WEAVE_ERROR nl_Weave_DeviceManager_StartSystemTest(WeaveDeviceManager *devMgr, uint32_t profileId, uint32_t testId, CompleteFunct onComplete, ErrorFunct onError);
@@ -1094,6 +1097,21 @@
     return devMgr->ResetConfig(resetFlags, NULL, onComplete, onError);
 }
 
+WEAVE_ERROR nl_Weave_DeviceManager_UpdateTrait(WeaveDeviceManager *devMgr, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, const uint8_t *encodedTlvVal, uint16_t encodedTlvalLen, CompleteFunct onComplete, ErrorFunct onError)
+{
+    return devMgr->UpdateTrait(NULL, aProfileId, aInstanceId, aPropertyPathHandle, encodedTlvVal, encodedTlvalLen, onComplete, onError);
+}
+
+WEAVE_ERROR nl_Weave_DeviceManager_ViewTrait(WeaveDeviceManager *devMgr, uint64_t aProfileId, uint64_t aInstanceId, PropertyPathHandle aPropertyPathHandle, ViewTraitCompleteFunct onComplete, ErrorFunct onError)
+{
+    return devMgr->ViewTrait(NULL, aProfileId, aInstanceId, aPropertyPathHandle, onComplete, onError);
+}
+
+WEAVE_ERROR nl_Weave_DeviceManager_SendCustomCommand(WeaveDeviceManager *devMgr, const char *apName, const char *apCustomCommand, CompleteFunct onComplete, ErrorFunct onError)
+{
+    return devMgr->SendCustomCommand(NULL, apName, apCustomCommand, onComplete, onError);
+}
+
 WEAVE_ERROR nl_Weave_DeviceManager_StartSystemTest(WeaveDeviceManager *devMgr, uint32_t profileId, uint32_t testId, CompleteFunct onComplete, ErrorFunct onError)
 {
     return devMgr->StartSystemTest(NULL, profileId, testId, onComplete, onError);
diff --git a/src/device-manager/python/openweave/WeaveDeviceMgr.py b/src/device-manager/python/openweave/WeaveDeviceMgr.py
index 2e5feff..08d86d6 100644
--- a/src/device-manager/python/openweave/WeaveDeviceMgr.py
+++ b/src/device-manager/python/openweave/WeaveDeviceMgr.py
@@ -33,8 +33,10 @@
 import time
 import glob
 import platform
+import ast
 from threading import Thread, Lock, Event
 from ctypes import *
+from WeaveTLV import TLVWriter
 
 __all__ = [ 'WeaveDeviceManager', 'NetworkInfo', 'DeviceManagerException', 'DeviceError', 'DeviceManagerError' ]
 
@@ -465,6 +467,7 @@
 _SubscribeBleCharacteristicFunct            = CFUNCTYPE(c_bool, c_void_p, c_void_p, c_void_p, c_bool)
 _CloseBleFunct                              = CFUNCTYPE(c_bool, c_void_p)
 _DeviceEnumerationResponseFunct             = CFUNCTYPE(None, c_void_p, POINTER(_DeviceDescriptorStruct), c_char_p)
+_ViewTraitCompleteFunct                     = CFUNCTYPE(None, c_void_p, c_void_p, c_void_p, c_uint32)
 
 # This is a fix for WEAV-429. Jay Logue recommends revisiting this at a later
 # date to allow for truely multiple instances so this is temporary.
@@ -1084,6 +1087,35 @@
             lambda: _dmLib.nl_Weave_DeviceManager_StopSystemTest(self.devMgr, self.cbHandleComplete, self.cbHandleError)
         )
 
+    def UpdateTrait(self, profileId, instanceId, propertyPathHandle, tlvString):
+        val = ast.literal_eval(tlvString)
+        print val
+        writer = TLVWriter()
+        encodedVal = writer.put(None, val)
+
+        self._CallDevMgrAsync(
+            lambda: _dmLib.nl_Weave_DeviceManager_UpdateTrait(self.devMgr, profileId, instanceId, propertyPathHandle, _ByteArrayToVoidPtr(writer.encoding), len(writer.encoding), self.cbHandleComplete, self.cbHandleError)
+        )
+
+    def ViewTrait(self, profileId, instanceId, propertyPathHandle):
+        def HandleViewTraitComplete(devMgr, reqState, traitTlvDataPtr, traitTlvDataLen):
+            self.callbackRes = _VoidPtrToByteArray(traitTlvDataPtr, traitTlvDataLen)
+            self.completeEvent.set()
+
+        cbHandleViewTraitComplete = _ViewTraitCompleteFunct(HandleViewTraitComplete)
+
+        return self._CallDevMgrAsync(
+            lambda: _dmLib.nl_Weave_DeviceManager_ViewTrait(self.devMgr, profileId, instanceId, propertyPathHandle, cbHandleViewTraitComplete, self.cbHandleError)
+        )
+
+    def SendCustomCommand(self, name, customCommand):
+        if name is None or customCommand is None:
+            raise ValueError('Unexpected NUL character in locale')
+
+        self._CallDevMgrAsync(
+            lambda: _dmLib.nl_Weave_DeviceManager_SendCustomCommand(self.devMgr, name, customCommand, self.cbHandleComplete, self.cbHandleError)
+        )
+
     # ----- Private Members -----
     def _InitLib(self):
         global _dmLib
@@ -1311,6 +1343,15 @@
             _dmLib.nl_Weave_DeviceManager_StopSystemTest.argtypes = [ c_void_p, _CompleteFunct, _ErrorFunct ]
             _dmLib.nl_Weave_DeviceManager_StopSystemTest.restype = c_uint32
 
+            _dmLib.nl_Weave_DeviceManager_UpdateTrait.argtypes = [ c_void_p, c_uint64, c_uint64, c_uint64, c_void_p, c_uint32, _CompleteFunct, _ErrorFunct ]
+            _dmLib.nl_Weave_DeviceManager_UpdateTrait.restype = c_uint32
+
+            _dmLib.nl_Weave_DeviceManager_ViewTrait.argtypes = [ c_void_p, c_uint64, c_uint64, c_uint64, _ViewTraitCompleteFunct, _ErrorFunct ]
+            _dmLib.nl_Weave_DeviceManager_ViewTrait.restype = c_uint32
+
+            _dmLib.nl_Weave_DeviceManager_SendCustomCommand.argtypes = [ c_void_p, c_char_p, c_char_p, _CompleteFunct, _ErrorFunct ]
+            _dmLib.nl_Weave_DeviceManager_SendCustomCommand.restype = c_uint32
+
         res = _dmLib.nl_Weave_DeviceManager_Init()
         if (res != 0):
             raise self._ErrorToException(res)
diff --git a/src/device-manager/python/openweave/WeaveTLV.py b/src/device-manager/python/openweave/WeaveTLV.py
new file mode 100644
index 0000000..6cd0637
--- /dev/null
+++ b/src/device-manager/python/openweave/WeaveTLV.py
@@ -0,0 +1,365 @@
+#!/usr/bin/env python3
+
+#
+#   Copyright (c) 2019 Google LLC.
+#   All rights reserved.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+#
+#   @file
+#         This file contains definitions for working with data encoded in Weave TLV format.
+#
+
+import sys
+import struct
+from collections import Mapping, Sequence, OrderedDict
+
+
+TLVType_SignedInteger                   = 0x00
+TLVType_UnsignedInteger                 = 0x04
+TLVType_Boolean                         = 0x08
+TLVType_FloatingPointNumber             = 0x0A
+TLVType_UTF8String                      = 0x0C
+TLVType_ByteString                      = 0x10
+TLVType_Null                            = 0x14
+TLVType_Structure                       = 0x15
+TLVType_Array                           = 0x16
+TLVType_Path                            = 0x17
+
+TLVTagControl_Anonymous                 = 0x00
+TLVTagControl_ContextSpecific           = 0x20
+TLVTagControl_CommonProfile_2Bytes      = 0x40
+TLVTagControl_CommonProfile_4Bytes      = 0x60
+TLVTagControl_ImplicitProfile_2Bytes    = 0x80
+TLVTagControl_ImplicitProfile_4Bytes    = 0xA0
+TLVTagControl_FullyQualified_6Bytes     = 0xC0
+TLVTagControl_FullyQualified_8Bytes     = 0xE0
+
+TLVBoolean_False                        = TLVType_Boolean
+TLVBoolean_True                         = TLVType_Boolean + 1
+
+TLVEndOfContainer                       = 0x18                  
+
+INT8_MIN                                = -128
+INT16_MIN                               = -32768
+INT32_MIN                               = -2147483648
+INT64_MIN                               = -9223372036854775808
+ 
+INT8_MAX                                = 127
+INT16_MAX                               = 32767
+INT32_MAX                               = 2147483647
+INT64_MAX                               = 9223372036854775807
+ 
+UINT8_MAX                               = 255
+UINT16_MAX                              = 65535
+UINT32_MAX                              = 4294967295
+UINT64_MAX                              = 18446744073709551615
+
+class TLVWriter(object):
+    
+    def __init__(self, encoding=bytearray(), implicitProfile=None):
+        self._encoding = encoding
+        self._implicitProfile = implicitProfile
+        self._containerStack = []
+
+    @property
+    def encoding(self):
+        '''The object into which encoded TLV data is written.
+           
+           By default this is a bytearray object. 
+        '''
+        return self._encoding
+    
+    @encoding.setter
+    def encoding(self, val):
+        self._encoding = val
+
+    @property
+    def implicitProfile(self):
+        '''The Weave profile id used when encoding implicit profile tags.
+        
+           Setting this value will result in an implicit profile tag being encoded
+           whenever the profile of the tag to be encoded matches the specified implicit
+           profile id.
+           
+           Setting this value to None (the default) disabled encoding of implicit
+           profile tags.
+        '''
+        return self._implicitProfile
+    
+    @implicitProfile.setter
+    def implicitProfile(self, val):
+        self._implicitProfile = val
+
+    def put(self, tag, val):
+        '''Write a value in TLV format with the specified TLV tag.
+        
+           val can be a Python object which will be encoded as follows: 
+           - Python bools, floats and strings are encoded as their respective TLV types.
+           - Python ints are encoded as unsigned TLV integers if zero or positive; signed TLV
+             integers if negative.
+           - None is encoded as a TLV Null.
+           - bytes and bytearray objects are encoded as TVL byte strings.
+           - Mapping-like objects (e.g. dict) are encoded as TLV structures.  The keys of the
+             map object are expected to be tag values, as described below for the tag argument.
+             Map values are encoded recursively, using the same rules as defined for the val
+             argument. The encoding order of elements depends on the type of the map object. 
+             Elements within a dict are automatically encoded tag numerical order. Elements
+             within other forms of mapping object (e.g. OrderedDict) are encoded in the
+             object's natural iteration order.
+           - Sequence-like objects (e.g. arrays) are written as TLV arrays. Elements within
+             the array are encoded recursively, using the same rules as defined for the val
+             argument.
+
+           tag can be a small int (0-255), a tuple of two integers, or None.
+           If tag is an integer, it is encoded as a TLV context-specific tag.
+           If tag is a two-integer tuple, it is encoded as a TLV profile-specific tag, with
+             the first integer encoded as the profile id and the second as the tag number.
+           If tag is None, it is encoded as a TLV anonymous tag.
+        '''
+        if val == None:
+            self.putNull(tag)
+        elif isinstance(val, bool):
+            self.putBool(tag, val)
+        elif isinstance(val, int):
+            if val < 0:
+                self.putSignedInt(tag, val)
+            else:
+                self.putUnsignedInt(tag, val)
+        elif isinstance(val, float):
+            self.putFloat(tag, val)
+        elif isinstance(val, str):
+            self.putString(tag, val)
+        elif isinstance(val, bytes) or isinstance(val, bytearray):
+            self.putBytes(tag, val)
+        elif isinstance(val, Mapping):
+            self.startStructure(tag)
+            if type(val) == dict:
+                val = OrderedDict(sorted(val.items(), key=lambda item: tlvTagToSortKey(item[0])))
+            for containedTag, containedVal in val.items():
+                self.put(containedTag, containedVal)
+            self.endContainer()
+        elif isinstance(val, Sequence):
+            self.startArray(tag)
+            for containedVal in val:
+                self.put(None, containedVal)
+            self.endContainer()
+        else:
+            raise ValueError('Attempt to TLV encode unsupported value')
+
+    def putSignedInt(self, tag, val):
+        '''Write a value as a TLV signed integer with the specified TLV tag.'''
+        if val >= INT8_MIN and val <= INT8_MAX:
+            format = '<b'
+        elif val >= INT16_MIN and val <= INT16_MAX:
+            format = '<h'
+        elif val >= INT32_MIN and val <= INT32_MAX:
+            format = '<l'
+        elif val >= INT64_MIN and val <= INT64_MAX:
+            format = '<q'
+        else:
+            raise ValueError('Integer value out of range')
+        val = struct.pack(format, val)
+        controlAndTag = self._encodeControlAndTag(TLVType_SignedInteger, tag, lenOfLenOrVal=len(val))
+        self._encoding.extend(controlAndTag)
+        self._encoding.extend(val)
+
+    def putUnsignedInt(self, tag, val):
+        '''Write a value as a TLV unsigned integer with the specified TLV tag.'''
+        val = self._encodeUnsignedInt(val)
+        controlAndTag = self._encodeControlAndTag(TLVType_UnsignedInteger, tag, lenOfLenOrVal=len(val))
+        self._encoding.extend(controlAndTag)
+        self._encoding.extend(val)
+
+    def putFloat(self, tag, val):
+        '''Write a value as a TLV float with the specified TLV tag.'''
+        val = struct.pack('d', val)
+        controlAndTag = self._encodeControlAndTag(TLVType_FloatingPointNumber, tag, lenOfLenOrVal=len(val))
+        self._encoding.extend(controlAndTag)
+        self._encoding.extend(val)
+
+    def putString(self, tag, val):
+        '''Write a value as a TLV string with the specified TLV tag.'''
+        val = val.encode('utf-8')
+        valLen = self._encodeUnsignedInt(len(val))
+        controlAndTag = self._encodeControlAndTag(TLVType_UTF8String, tag, lenOfLenOrVal=len(valLen))
+        self._encoding.extend(controlAndTag)
+        self._encoding.extend(valLen)
+        self._encoding.extend(val)
+
+    def putBytes(self, tag, val):
+        '''Write a value as a TLV byte string with the specified TLV tag.'''
+        valLen = self._encodeUnsignedInt(len(val))
+        controlAndTag = self._encodeControlAndTag(TLVType_ByteString, tag, lenOfLenOrVal=len(valLen))
+        self._encoding.extend(controlAndTag)
+        self._encoding.extend(valLen)
+        self._encoding.extend(val)
+
+    def putBool(self, tag, val):
+        '''Write a value as a TLV boolean with the specified TLV tag.'''
+        if val:
+            type = TLVBoolean_True
+        else:
+            type = TLVBoolean_False
+        controlAndTag = self._encodeControlAndTag(type, tag)
+        self._encoding.extend(controlAndTag)
+
+    def putNull(self, tag):
+        '''Write a TLV null with the specified TLV tag.'''
+        controlAndTag = self._encodeControlAndTag(TLVType_Null, tag)
+        self._encoding.extend(controlAndTag)
+
+    def startContainer(self, tag, containerType):
+        '''Start writing a TLV container with the specified TLV tag.
+        
+           containerType can be one of TLVType_Structure, TLVType_Array or
+           TLVType_Path.
+        '''
+        self._verifyValidContainerType(containerType)
+        controlAndTag = self._encodeControlAndTag(containerType, tag)
+        self._encoding.extend(controlAndTag)
+        self._containerStack.insert(0, containerType)
+
+    def startStructure(self, tag):
+        '''Start writing a TLV structure with the specified TLV tag.'''
+        self.startContainer(tag, containerType=TLVType_Structure)
+
+    def startArray(self, tag):
+        '''Start writing a TLV array with the specified TLV tag.'''
+        self.startContainer(tag, containerType=TLVType_Array)
+
+    def startPath(self, tag):
+        '''Start writing a TLV path with the specified TLV tag.'''
+        self.startContainer(tag, containerType=TLVType_Path)
+
+    def endContainer(self):
+        '''End writing the current TLV container.'''
+        self._containerStack.pop(0)
+        controlAndTag = self._encodeControlAndTag(TLVEndOfContainer, None)
+        self._encoding.extend(controlAndTag)
+
+    def _encodeControlAndTag(self, type, tag, lenOfLenOrVal=0):
+        controlByte = type
+        if lenOfLenOrVal == 2:
+            controlByte |= 1
+        elif lenOfLenOrVal == 4:
+            controlByte |= 2
+        elif lenOfLenOrVal == 8:
+            controlByte |= 3
+        if tag == None:
+            if type != TLVEndOfContainer and len(self._containerStack) != 0 and self._containerStack[0] == TLVType_Structure:
+                raise ValueError('Attempt to encode anonymous tag within TLV structure')
+            controlByte |= TLVTagControl_Anonymous
+            return struct.pack('<B', controlByte)
+        if isinstance(tag, int):
+            if tag < 0 or tag > UINT8_MAX:
+                ValueError('Context-specific TLV tag number out of range')
+            if len(self._containerStack) == 0:
+                raise ValueError('Attempt to encode context-specific TLV tag at top level')
+            if self._containerStack[0] == TLVType_Array:
+                raise ValueError('Attempt to encode context-specific tag within TLV array')
+            controlByte |= TLVTagControl_ContextSpecific
+            return struct.pack('<BB', controlByte, tag)
+        if isinstance(tag, tuple):
+            (profile, tagNum) = tag
+            if not isinstance(tagNum, int):
+                raise ValueError('Invalid object given for TLV tag')
+            if tagNum < 0 or tagNum > UINT32_MAX:
+                raise ValueError('TLV tag number out of range')
+            if profile != None:
+                if not isinstance(profile, int):
+                    raise ValueError('Invalid object given for TLV profile id')
+                if profile < 0 or profile > UINT32_MAX:
+                    raise ValueError('TLV profile id value out of range')
+            if len(self._containerStack) != 0 and self._containerStack[0] == TLVType_Array:
+                raise ValueError('Attempt to encode profile-specific tag within TLV array')
+            if profile == None or profile == self._implicitProfile:
+                if tagNum <= UINT16_MAX:
+                    controlByte |= TLVTagControl_ImplicitProfile_2Bytes
+                    return struct.pack('<BH', controlByte, tagNum)
+                else:
+                    controlByte |= TLVTagControl_ImplicitProfile_4Bytes
+                    return struct.pack('<BL', controlByte, tagNum)
+            elif profile == 0:
+                if tagNum <= UINT16_MAX:
+                    controlByte |= TLVTagControl_CommonProfile_2Bytes
+                    return struct.pack('<BH', controlByte, tagNum)
+                else:
+                    controlByte |= TLVTagControl_CommonProfile_4Bytes
+                    return struct.pack('<BL', controlByte, tagNum)
+            else:
+                if tagNum <= UINT16_MAX:
+                    controlByte |= TLVTagControl_FullyQualified_6Bytes
+                    return struct.pack('<BLH', controlByte, profile, tagNum)
+                else:
+                    controlByte |= TLVTagControl_FullyQualified_8Bytes
+                    return struct.pack('<BLL', controlByte, profile, tagNum)
+        raise ValueError('Invalid object given for TLV tag')
+    
+    @staticmethod
+    def _encodeUnsignedInt(val):
+        if val < 0:
+            raise ValueError('Integer value out of range')
+        if val <= UINT8_MAX:
+            format = '<B'
+        elif val <= UINT16_MAX:
+            format = '<H'
+        elif val <= UINT32_MAX:
+            format = '<L'
+        elif val <= UINT64_MAX:
+            format = '<Q'
+        else:
+            raise ValueError('Integer value out of range')
+        return struct.pack(format, val)
+        
+    @staticmethod
+    def _verifyValidContainerType(containerType):
+        if containerType != TLVType_Structure and containerType != TLVType_Array and containerType != TLVType_Path:
+            raise ValueError('Invalid TLV container type')
+
+def tlvTagToSortKey(tag):
+    if tag == None:
+        return -1
+    if isinstance(tag, int):
+        majorOrder = 0;
+    elif isinstance(tag, tuple):
+        (profileId, tag) = tag
+        if profileId == None:
+            majorOrder = 1
+        else:
+            majorOrder = profileId + 2
+    else:
+        raise ValueError('Invalid TLV tag')
+    return (majorOrder << 32) + tag
+
+if __name__ == '__main__':
+    val = dict([
+        (1, 0),
+        (2, 65536),
+        (3, True),
+        (4, None),
+        (5, "Hello!"),
+        (6, bytearray([ 0xDE, 0xAD, 0xBE, 0xEF ])),
+        (7, [
+            "Goodbye!",
+            71024724507,
+            False
+        ]),
+        ((0x235A0000, 42), "FOO"),
+        ((None, 42), "BAR"),
+    ])
+    writer = TLVWriter()
+    encodedVal = writer.put(None, val)
+    sys.stdout.write(writer.encoding)
diff --git a/src/device-manager/python/weave-device-mgr.py b/src/device-manager/python/weave-device-mgr.py
index 661520b..3a84ab8 100755
--- a/src/device-manager/python/weave-device-mgr.py
+++ b/src/device-manager/python/weave-device-mgr.py
@@ -275,6 +275,9 @@
         'ble-read',
         'start-system-test',
         'stop-system-test',
+        'update-trait',
+        'view-trait',
+        'send-custom-command',
         'ble-scan-connect',
         'pair-token',
         'unpair-token',
@@ -2421,6 +2424,70 @@
 
         print "Stop system test complete"
 
+    def do_updatetrait(self, line):
+        """
+          update-trait <locale>
+          Set the device's active locale.
+        """
+
+        args = shlex.split(line)
+
+        if (len(args) != 4):
+            print "Usage:"
+            self.do_help('update-trait')
+            return
+
+        try:
+            self.devMgr.UpdateTrait(int(args[0]), int(args[1]), int(args[2]), args[3])
+        except WeaveDeviceMgr.DeviceManagerException, ex:
+            print str(ex)
+            return
+
+        print "Update trait complete"
+
+    def do_viewtrait(self, line):
+        """
+          view-trait <locale>
+          Set the device's active locale.
+        """
+
+        args = shlex.split(line)
+
+        if (len(args) != 3):
+            print "Usage:"
+            self.do_help('view-traits profile-id instance-id propertypathhandle')
+            return
+
+        try:
+            traitTlvData = self.devMgr.ViewTrait(int(args[0]), int(args[1]), int(args[2]))
+        except WeaveDeviceMgr.DeviceManagerException, ex:
+            print str(ex)
+            return
+
+        print "View Traits complete"
+        print "trait tlv data: " + base64.b64encode(buffer(traitTlvData))
+
+    def do_sendcustomcommand(self, line):
+        """
+          sendcustomcommand <locale>
+          Set the device's active locale.
+        """
+
+        args = shlex.split(line)
+
+        if (len(args) != 2):
+            print "Usage:"
+            self.do_help('send-custom-command')
+            return
+
+        try:
+            self.devMgr.SendCustomCommand(args[0], args[1])
+        except WeaveDeviceMgr.DeviceManagerException, ex:
+            print str(ex)
+            return
+
+        print "Send Custom Command"
+
     def do_history(self, line):
         """
         history
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
index 35cea57..464b98a 100644
--- a/src/include/Makefile.am
+++ b/src/include/Makefile.am
@@ -693,7 +693,6 @@
 nl_public_WeaveProfiles_locale_header_sources = \
 $(nl_public_WeaveProfiles_source_dirstem)/locale/LocaleProfile.hpp \
 $(nl_public_WeaveProfiles_source_dirstem)/locale/LocaleStatus.hpp \
-$(nl_public_WeaveProfiles_source_dirstem)/locale/LocaleTags.hpp \
 $(NULL)
 
 nl_public_WeaveProfiles_network_provisioning_header_sources = \
@@ -959,6 +958,8 @@
 
 nl_public_WeaveDeviceManager_header_sources = \
 $(nl_public_WeaveDeviceManager_source_dirstem)/WeaveDeviceManager.h \
+$(nl_public_WeaveDeviceManager_source_dirstem)/GenericTraitDataSink.h \
+$(nl_public_WeaveDeviceManager_source_dirstem)/LocaleSettingsTrait.h \
 $(NULL)
 
 nl_public_WeaveDeviceManager_header_paths = $(subst $(nl_public_WeaveDeviceManager_source_dirstem)/,,$(nl_public_WeaveDeviceManager_header_sources))
diff --git a/src/include/Makefile.in b/src/include/Makefile.in
index a49005a..e992a85 100644
--- a/src/include/Makefile.in
+++ b/src/include/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -151,12 +151,12 @@
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_cxx_compile_stdcxx_11.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_jni_include_dir.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_pthread.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/libtool.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltoptions.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltsugar.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltversion.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/pkg.m4 \
+	$(top_srcdir)/build/autoconf/m4/libtool.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltoptions.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltsugar.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltversion.m4 \
+	$(top_srcdir)/build/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_check_project_config_includes.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_enable_long_tests.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_with_lwip.m4 \
@@ -504,6 +504,7 @@
 LNDIR = @LNDIR@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LWIP_CPPFLAGS = @LWIP_CPPFLAGS@
 LWIP_LDFLAGS = @LWIP_LDFLAGS@
 LWIP_LIBS = @LWIP_LIBS@
@@ -1159,7 +1160,6 @@
 nl_public_WeaveProfiles_locale_header_sources = \
 $(nl_public_WeaveProfiles_source_dirstem)/locale/LocaleProfile.hpp \
 $(nl_public_WeaveProfiles_source_dirstem)/locale/LocaleStatus.hpp \
-$(nl_public_WeaveProfiles_source_dirstem)/locale/LocaleTags.hpp \
 $(NULL)
 
 nl_public_WeaveProfiles_network_provisioning_header_sources = \
@@ -1356,6 +1356,8 @@
 nl_public_WeaveDeviceManager_destination_dirstem = Weave/DeviceManager
 nl_public_WeaveDeviceManager_header_sources = \
 $(nl_public_WeaveDeviceManager_source_dirstem)/WeaveDeviceManager.h \
+$(nl_public_WeaveDeviceManager_source_dirstem)/GenericTraitDataSink.h \
+$(nl_public_WeaveDeviceManager_source_dirstem)/LocaleSettingsTrait.h \
 $(NULL)
 
 nl_public_WeaveDeviceManager_header_paths = $(subst $(nl_public_WeaveDeviceManager_source_dirstem)/,,$(nl_public_WeaveDeviceManager_header_sources))
@@ -1666,8 +1668,8 @@
 	  *config.status*) \
 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
 	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
 	esac;
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@@ -3033,7 +3035,10 @@
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	list='$(DISTFILES)'; \
diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in
index 251ddcb..5bfab0a 100644
--- a/src/lib/Makefile.in
+++ b/src/lib/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -246,7 +246,17 @@
 # Manager code altogether.
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -310,14 +320,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(srcdir)/../system/SystemLayer.am \
-	$(srcdir)/../inet/InetLayer.am $(srcdir)/../ble/BleLayer.am \
-	$(srcdir)/core/WeaveCore.am $(srcdir)/support/WeaveSupport.am \
-	$(srcdir)/profiles/WeaveProfiles.am $(srcdir)/../warm/Warm.am \
-	$(srcdir)/../device-manager/DeviceManager.am \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/depcomp
 @WEAVE_WITH_NLFAULTINJECTION_TRUE@am__append_1 = @top_builddir@/src/system/SystemFaultInjection.cpp
 @INET_WANT_ENDPOINT_DNS_TRUE@am__append_2 = @top_builddir@/src/inet/DNSResolver.cpp
 @INET_WANT_ENDPOINT_RAW_TRUE@am__append_3 = @top_builddir@/src/inet/RawEndPoint.cpp
@@ -388,18 +390,19 @@
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_cxx_compile_stdcxx_11.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_jni_include_dir.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ax_pthread.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/libtool.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltoptions.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltsugar.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/ltversion.m4 \
-	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/m4/pkg.m4 \
+	$(top_srcdir)/build/autoconf/m4/libtool.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltoptions.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltsugar.m4 \
+	$(top_srcdir)/build/autoconf/m4/ltversion.m4 \
+	$(top_srcdir)/build/autoconf/m4/lt~obsolete.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_check_project_config_includes.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_enable_long_tests.m4 \
 	$(top_srcdir)/build/autoconf/m4/nl_with_lwip.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(SHELL) \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/include/BuildConfig.h
@@ -631,6 +634,8 @@
 	@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelCommon.cpp \
 	@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelConnectionMgr.cpp \
 	@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelControl.cpp \
+	@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp \
+	@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp \
 	@top_builddir@/src/lib/profiles/data-management/Legacy/Binding.cpp \
 	@top_builddir@/src/lib/profiles/data-management/Legacy/ClientNotifier.cpp \
 	@top_builddir@/src/lib/profiles/data-management/Legacy/DMClient.cpp \
@@ -840,6 +845,8 @@
 	@top_builddir@/src/lib/profiles/weave-tunneling/libWeave_a-WeaveTunnelCommon.$(OBJEXT) \
 	@top_builddir@/src/lib/profiles/weave-tunneling/libWeave_a-WeaveTunnelConnectionMgr.$(OBJEXT) \
 	@top_builddir@/src/lib/profiles/weave-tunneling/libWeave_a-WeaveTunnelControl.$(OBJEXT) \
+	@top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.$(OBJEXT) \
+	@top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.$(OBJEXT) \
 	$(am__objects_21) $(am__objects_22)
 am__objects_24 =  \
 	@top_builddir@/src/warm/libWeave_a-WarmCore.$(OBJEXT)
@@ -863,7 +870,199 @@
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/include
 depcomp = $(SHELL) \
 	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/depcomp
-am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade =  \
+	@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BLEEndPoint.Po \
+	@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleError.Po \
+	@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleLayer.Po \
+	@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleUUID.Po \
+	@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-WoBle.Po \
+	@top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WeaveDeviceManager.Po \
+	@top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WoBleTest.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-AsyncDNSResolverSockets.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-DNSResolver.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-EndPointBasis.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress-StringFuncts.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPEndPointBasis.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPPrefix.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetError.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetFaultInjection.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetInterface.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayer.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayerBasis.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetTimer.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetUtils.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-RawEndPoint.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TCPEndPoint.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TunEndPoint.Po \
+	@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-UDPEndPoint.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-ExchangeContext.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-HostPortList.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveBinding.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveCircularTLVBuffer.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnection.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnectionTunnel.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveError.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveExchangeMgr.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveFabricState.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveGlobals.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveKeyIds.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveMessageLayer.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-Malloc.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-SimpleAlloc.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveServerBase.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveStats.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVDebug.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVReader.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUpdater.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUtilities.Po \
+	@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVWriter.Po \
+	@top_builddir@/src/lib/profiles/bulk-data-transfer/$(DEPDIR)/libWeave_a-BulkDataTransfer.Po \
+	@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXMessages.Po \
+	@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXNode.Po \
+	@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXProtocol.Po \
+	@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXTransferState.Po \
+	@top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-RetainedPacketBuffer.Po \
+	@top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-WeaveMessage.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-Command.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLogging.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLoggingTypes.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventProcessor.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LogBDXUpload.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingConfiguration.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingManagement.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-MessageDef.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-NotificationEngine.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ResourceIdentifier.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionClient.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionEngine.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionHandler.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitData.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitPathStore.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateClient.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateEncoder.Po \
+	@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ViewClient.Po \
+	@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Po \
+	@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ClientNotifier.Po \
+	@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMClient.Po \
+	@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMPublisher.Po \
+	@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProfileDatabase.Po \
+	@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProtocolEngine.Po \
+	@top_builddir@/src/lib/profiles/device-control/$(DEPDIR)/libWeave_a-DeviceControl.Po \
+	@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescription.Po \
+	@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionClient.Po \
+	@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionServer.Po \
+	@top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po \
+	@top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po \
+	@top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po \
+	@top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po \
+	@top_builddir@/src/lib/profiles/fabric-provisioning/$(DEPDIR)/libWeave_a-FabricProvisioning.Po \
+	@top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatReceiver.Po \
+	@top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatSender.Po \
+	@top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Po \
+	@top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Po \
+	@top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkInfo.Po \
+	@top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkProvisioning.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTrait.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTraitDataSink.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveAccessToken.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveApplicationKeys.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEEngine.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEMessages.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCert.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveDummyGroupKeyStore.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExport.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportClient.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportTest.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePASEEngine.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePasscodes.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePrivateKey.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvBundle.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvHash.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurity.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurityDebug.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSig.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveTAKEEngine.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveToX509.Po \
+	@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-X509ToWeave.Po \
+	@top_builddir@/src/lib/profiles/service-directory/$(DEPDIR)/libWeave_a-ServiceDirectory.Po \
+	@top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioning.Po \
+	@top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioningServer.Po \
+	@top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-SoftwareUpdateProfile.Po \
+	@top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-WeaveImageAnnounceServer.Po \
+	@top_builddir@/src/lib/profiles/status-report/$(DEPDIR)/libWeave_a-StatusReportProfile.Po \
+	@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTime.Po \
+	@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeClient.Po \
+	@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeCoordinator.Po \
+	@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeServer.Po \
+	@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeZone.Po \
+	@top_builddir@/src/lib/profiles/token-pairing/$(DEPDIR)/libWeave_a-TokenPairing.Po \
+	@top_builddir@/src/lib/profiles/vendor/nestlabs/dropcam-legacy-pairing/$(DEPDIR)/libWeave_a-DropcamLegacyPairing.Po \
+	@top_builddir@/src/lib/profiles/vendor/nestlabs/thermostat/$(DEPDIR)/libWeave_a-IfjStatusStr.Po \
+	@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelAgent.Po \
+	@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelCommon.Po \
+	@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelConnectionMgr.Po \
+	@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelControl.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Error.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1OID.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Reader.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Writer.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-Base64.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ErrorStr.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-FibonacciUtils.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-MathUtils.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NestCerts.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NonProductionMarker.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-PersistedCounter.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ProfileStringSupport.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-RandUtils.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerialNumberUtils.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerializationUtils.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-StatusReportStr.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-TimeUtils.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveCounter.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveFaultInjection.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveNames.Po \
+	@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-nlargparser.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-AESNI.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-OpenSSL.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-mbedTLS.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-CTRMode.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-DRBG.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-OpenSSL.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-uECC.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HKDF.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HMAC.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-MinCrypt.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-OpenSSL.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-mbedTLS.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto-OpenSSL.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-NestDRBG.Po \
+	@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-OpenSSL.Po \
+	@top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-DecodedIPPacket.Po \
+	@top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-WeaveLogging.Po \
+	@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-KryptonitePairingCodeUtils.Po \
+	@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-NevisPairingCodeUtils.Po \
+	@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-PairingCodeUtils.Po \
+	@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff.Po \
+	@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff10.Po \
+	@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff16.Po \
+	@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff32.Po \
+	@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff36.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemClock.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemError.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemFaultInjection.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemLayer.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemMutex.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemObject.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemPacketBuffer.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemStats.Po \
+	@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemTimer.Po \
+	@top_builddir@/src/warm/$(DEPDIR)/libWeave_a-WarmCore.Po
 am__mv = mv -f
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -913,6 +1112,15 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/../ble/BleLayer.am \
+	$(srcdir)/../device-manager/DeviceManager.am \
+	$(srcdir)/../inet/InetLayer.am \
+	$(srcdir)/../system/SystemLayer.am $(srcdir)/../warm/Warm.am \
+	$(srcdir)/Makefile.in $(srcdir)/core/WeaveCore.am \
+	$(srcdir)/profiles/WeaveProfiles.am \
+	$(srcdir)/support/WeaveSupport.am \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/depcomp \
+	$(top_srcdir)/third_party/nlbuild-autotools/repo/third_party/autoconf/mkinstalldirs
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -1002,6 +1210,7 @@
 LNDIR = @LNDIR@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LWIP_CPPFLAGS = @LWIP_CPPFLAGS@
 LWIP_LDFLAGS = @LWIP_LDFLAGS@
 LWIP_LIBS = @LWIP_LIBS@
@@ -1161,6 +1370,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -1355,6 +1565,8 @@
 	@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelCommon.cpp \
 	@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelConnectionMgr.cpp \
 	@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelControl.cpp \
+	@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp \
+	@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp \
 	$(NULL) $(am__append_12) $(am__append_13)
 nl_Warm_sources = \
     @top_builddir@/src/warm/WarmCore.cpp                     \
@@ -1427,16 +1639,15 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/lib/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --foreign src/lib/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
 	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
 	esac;
-$(srcdir)/../system/SystemLayer.am $(srcdir)/../inet/InetLayer.am $(srcdir)/../ble/BleLayer.am $(srcdir)/core/WeaveCore.am $(srcdir)/support/WeaveSupport.am $(srcdir)/profiles/WeaveProfiles.am $(srcdir)/../warm/Warm.am $(srcdir)/../device-manager/DeviceManager.am:
+$(srcdir)/../system/SystemLayer.am $(srcdir)/../inet/InetLayer.am $(srcdir)/../ble/BleLayer.am $(srcdir)/core/WeaveCore.am $(srcdir)/support/WeaveSupport.am $(srcdir)/profiles/WeaveProfiles.am $(srcdir)/../warm/Warm.am $(srcdir)/../device-manager/DeviceManager.am $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -2166,6 +2377,18 @@
 	@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/$(am__dirstamp)
 @top_builddir@/src/lib/profiles/weave-tunneling/libWeave_a-WeaveTunnelControl.$(OBJEXT): @top_builddir@/src/lib/profiles/weave-tunneling/$(am__dirstamp) \
 	@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/$(am__dirstamp)
+@top_builddir@/src/lib/profiles/locale/$(am__dirstamp):
+	@$(MKDIR_P) @top_builddir@/src/lib/profiles/locale
+	@: > @top_builddir@/src/lib/profiles/locale/$(am__dirstamp)
+@top_builddir@/src/lib/profiles/locale/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) @top_builddir@/src/lib/profiles/locale/$(DEPDIR)
+	@: > @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/$(am__dirstamp)
+@top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.$(OBJEXT):  \
+	@top_builddir@/src/lib/profiles/locale/$(am__dirstamp) \
+	@top_builddir@/src/lib/profiles/locale/$(DEPDIR)/$(am__dirstamp)
+@top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.$(OBJEXT):  \
+	@top_builddir@/src/lib/profiles/locale/$(am__dirstamp) \
+	@top_builddir@/src/lib/profiles/locale/$(DEPDIR)/$(am__dirstamp)
 @top_builddir@/src/lib/profiles/data-management/Legacy/$(am__dirstamp):
 	@$(MKDIR_P) @top_builddir@/src/lib/profiles/data-management/Legacy
 	@: > @top_builddir@/src/lib/profiles/data-management/Legacy/$(am__dirstamp)
@@ -2218,6 +2441,7 @@
 	-rm -f @top_builddir@/src/lib/profiles/echo/Next/*.$(OBJEXT)
 	-rm -f @top_builddir@/src/lib/profiles/fabric-provisioning/*.$(OBJEXT)
 	-rm -f @top_builddir@/src/lib/profiles/heartbeat/*.$(OBJEXT)
+	-rm -f @top_builddir@/src/lib/profiles/locale/*.$(OBJEXT)
 	-rm -f @top_builddir@/src/lib/profiles/network-provisioning/*.$(OBJEXT)
 	-rm -f @top_builddir@/src/lib/profiles/security/*.$(OBJEXT)
 	-rm -f @top_builddir@/src/lib/profiles/service-directory/*.$(OBJEXT)
@@ -2240,195 +2464,203 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BLEEndPoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleError.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleLayer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleUUID.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-WoBle.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WeaveDeviceManager.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WoBleTest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-AsyncDNSResolverSockets.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-DNSResolver.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-EndPointBasis.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress-StringFuncts.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPEndPointBasis.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPPrefix.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetError.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetFaultInjection.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetInterface.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayerBasis.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetTimer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-RawEndPoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TCPEndPoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TunEndPoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-UDPEndPoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-ExchangeContext.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-HostPortList.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveBinding.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveCircularTLVBuffer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnection.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnectionTunnel.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveError.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveExchangeMgr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveFabricState.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveGlobals.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveKeyIds.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveMessageLayer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-Malloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-SimpleAlloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveServerBase.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveStats.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVDebug.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVReader.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUpdater.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUtilities.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVWriter.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/$(DEPDIR)/libWeave_a-BulkDataTransfer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXMessages.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXNode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXProtocol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXTransferState.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-RetainedPacketBuffer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-WeaveMessage.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-Command.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLogging.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLoggingTypes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventProcessor.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LogBDXUpload.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingConfiguration.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingManagement.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-MessageDef.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-NotificationEngine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ResourceIdentifier.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionEngine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionHandler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitData.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitPathStore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateEncoder.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ViewClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ClientNotifier.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMPublisher.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProfileDatabase.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProtocolEngine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-control/$(DEPDIR)/libWeave_a-DeviceControl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescription.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionServer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/fabric-provisioning/$(DEPDIR)/libWeave_a-FabricProvisioning.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatReceiver.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatSender.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkInfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkProvisioning.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTrait.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTraitDataSink.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveAccessToken.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveApplicationKeys.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEEngine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEMessages.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCert.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveDummyGroupKeyStore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExport.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportTest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePASEEngine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePasscodes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePrivateKey.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvBundle.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvHash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurity.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurityDebug.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSig.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveTAKEEngine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveToX509.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-X509ToWeave.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/service-directory/$(DEPDIR)/libWeave_a-ServiceDirectory.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioning.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioningServer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-SoftwareUpdateProfile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-WeaveImageAnnounceServer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/status-report/$(DEPDIR)/libWeave_a-StatusReportProfile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeClient.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeCoordinator.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeServer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeZone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/token-pairing/$(DEPDIR)/libWeave_a-TokenPairing.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/vendor/nestlabs/dropcam-legacy-pairing/$(DEPDIR)/libWeave_a-DropcamLegacyPairing.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/vendor/nestlabs/thermostat/$(DEPDIR)/libWeave_a-IfjStatusStr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelAgent.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelCommon.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelConnectionMgr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelControl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1OID.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Reader.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Writer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-Base64.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ErrorStr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-FibonacciUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-MathUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NestCerts.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NonProductionMarker.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-PersistedCounter.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ProfileStringSupport.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-RandUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerialNumberUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerializationUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-StatusReportStr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-TimeUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveCounter.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveFaultInjection.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveNames.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-nlargparser.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-AESNI.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-OpenSSL.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-mbedTLS.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-CTRMode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-DRBG.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-OpenSSL.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-uECC.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HKDF.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HMAC.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-MinCrypt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-OpenSSL.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-mbedTLS.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto-OpenSSL.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-NestDRBG.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-OpenSSL.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-DecodedIPPacket.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-WeaveLogging.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-KryptonitePairingCodeUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-NevisPairingCodeUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-PairingCodeUtils.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff10.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff16.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff36.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemClock.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemError.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemFaultInjection.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemLayer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemMutex.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemObject.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemPacketBuffer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemStats.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemTimer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/warm/$(DEPDIR)/libWeave_a-WarmCore.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BLEEndPoint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleError.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleLayer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleUUID.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/ble/$(DEPDIR)/libWeave_a-WoBle.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WeaveDeviceManager.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WoBleTest.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-AsyncDNSResolverSockets.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-DNSResolver.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-EndPointBasis.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress-StringFuncts.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPEndPointBasis.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPPrefix.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetError.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetFaultInjection.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetInterface.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayerBasis.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetTimer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-RawEndPoint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TCPEndPoint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TunEndPoint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/inet/$(DEPDIR)/libWeave_a-UDPEndPoint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-ExchangeContext.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-HostPortList.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveBinding.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveCircularTLVBuffer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnection.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnectionTunnel.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveError.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveExchangeMgr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveFabricState.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveGlobals.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveKeyIds.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveMessageLayer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-Malloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-SimpleAlloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveServerBase.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveStats.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVDebug.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVReader.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUpdater.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUtilities.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVWriter.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/$(DEPDIR)/libWeave_a-BulkDataTransfer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXMessages.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXNode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXProtocol.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXTransferState.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-RetainedPacketBuffer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-WeaveMessage.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-Command.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLogging.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLoggingTypes.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventProcessor.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LogBDXUpload.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingConfiguration.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingManagement.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-MessageDef.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-NotificationEngine.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ResourceIdentifier.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionEngine.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionHandler.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitData.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitPathStore.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateEncoder.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ViewClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ClientNotifier.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMPublisher.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProfileDatabase.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProtocolEngine.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-control/$(DEPDIR)/libWeave_a-DeviceControl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescription.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionServer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/fabric-provisioning/$(DEPDIR)/libWeave_a-FabricProvisioning.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatReceiver.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatSender.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkInfo.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkProvisioning.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTrait.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTraitDataSink.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveAccessToken.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveApplicationKeys.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEEngine.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEMessages.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCert.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveDummyGroupKeyStore.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExport.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportTest.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePASEEngine.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePasscodes.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePrivateKey.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvBundle.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvHash.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurity.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurityDebug.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSig.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveTAKEEngine.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveToX509.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-X509ToWeave.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/service-directory/$(DEPDIR)/libWeave_a-ServiceDirectory.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioning.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioningServer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-SoftwareUpdateProfile.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-WeaveImageAnnounceServer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/status-report/$(DEPDIR)/libWeave_a-StatusReportProfile.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeClient.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeCoordinator.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeServer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeZone.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/token-pairing/$(DEPDIR)/libWeave_a-TokenPairing.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/vendor/nestlabs/dropcam-legacy-pairing/$(DEPDIR)/libWeave_a-DropcamLegacyPairing.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/vendor/nestlabs/thermostat/$(DEPDIR)/libWeave_a-IfjStatusStr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelAgent.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelCommon.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelConnectionMgr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelControl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Error.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1OID.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Reader.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Writer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-Base64.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ErrorStr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-FibonacciUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-MathUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NestCerts.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NonProductionMarker.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-PersistedCounter.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ProfileStringSupport.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-RandUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerialNumberUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerializationUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-StatusReportStr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-TimeUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveCounter.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveFaultInjection.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveNames.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-nlargparser.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-AESNI.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-OpenSSL.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-mbedTLS.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-CTRMode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-DRBG.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-OpenSSL.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-uECC.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HKDF.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HMAC.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-MinCrypt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-OpenSSL.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-mbedTLS.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto-OpenSSL.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-NestDRBG.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-OpenSSL.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-DecodedIPPacket.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-WeaveLogging.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-KryptonitePairingCodeUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-NevisPairingCodeUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-PairingCodeUtils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff10.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff16.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff32.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff36.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemClock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemError.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemFaultInjection.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemLayer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemMutex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemObject.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemPacketBuffer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemStats.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemTimer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@top_builddir@/src/warm/$(DEPDIR)/libWeave_a-WarmCore.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+	@$(MKDIR_P) $(@D)
+	@echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
 
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -4988,6 +5220,34 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o @top_builddir@/src/lib/profiles/weave-tunneling/libWeave_a-WeaveTunnelControl.obj `if test -f '@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelControl.cpp'; then $(CYGPATH_W) '@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelControl.cpp'; else $(CYGPATH_W) '$(srcdir)/@top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelControl.cpp'; fi`
 
+@top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.o: @top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT @top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.o -MD -MP -MF @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Tpo -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.o `test -f '@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp' || echo '$(srcdir)/'`@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Tpo @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp' object='@top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.o `test -f '@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp' || echo '$(srcdir)/'`@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp
+
+@top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.obj: @top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT @top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.obj -MD -MP -MF @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Tpo -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.obj `if test -f '@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp'; then $(CYGPATH_W) '@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Tpo @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp' object='@top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-LocaleSettingsTrait.obj `if test -f '@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp'; then $(CYGPATH_W) '@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/@top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp'; fi`
+
+@top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.o: @top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT @top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.o -MD -MP -MF @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Tpo -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.o `test -f '@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp' || echo '$(srcdir)/'`@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Tpo @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp' object='@top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.o `test -f '@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp' || echo '$(srcdir)/'`@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp
+
+@top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.obj: @top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT @top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.obj -MD -MP -MF @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Tpo -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.obj `if test -f '@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp'; then $(CYGPATH_W) '@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Tpo @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp' object='@top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o @top_builddir@/src/lib/profiles/locale/libWeave_a-MockSinkTrait.obj `if test -f '@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp'; then $(CYGPATH_W) '@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/@top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp'; fi`
+
 @top_builddir@/src/lib/profiles/data-management/Legacy/libWeave_a-Binding.o: @top_builddir@/src/lib/profiles/data-management/Legacy/Binding.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libWeave_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT @top_builddir@/src/lib/profiles/data-management/Legacy/libWeave_a-Binding.o -MD -MP -MF @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Tpo -c -o @top_builddir@/src/lib/profiles/data-management/Legacy/libWeave_a-Binding.o `test -f '@top_builddir@/src/lib/profiles/data-management/Legacy/Binding.cpp' || echo '$(srcdir)/'`@top_builddir@/src/lib/profiles/data-management/Legacy/Binding.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Tpo @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Po
@@ -5158,7 +5418,10 @@
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-distdir: $(DISTFILES)
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	list='$(DISTFILES)'; \
@@ -5251,6 +5514,8 @@
 	-rm -f @top_builddir@/src/lib/profiles/fabric-provisioning/$(am__dirstamp)
 	-rm -f @top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/$(am__dirstamp)
 	-rm -f @top_builddir@/src/lib/profiles/heartbeat/$(am__dirstamp)
+	-rm -f @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/$(am__dirstamp)
+	-rm -f @top_builddir@/src/lib/profiles/locale/$(am__dirstamp)
 	-rm -f @top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/$(am__dirstamp)
 	-rm -f @top_builddir@/src/lib/profiles/network-provisioning/$(am__dirstamp)
 	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/$(am__dirstamp)
@@ -5297,7 +5562,197 @@
 	mostlyclean-am
 
 distclean: distclean-am
-	-rm -rf @top_builddir@/src/ble/$(DEPDIR) @top_builddir@/src/device-manager/$(DEPDIR) @top_builddir@/src/inet/$(DEPDIR) @top_builddir@/src/lib/core/$(DEPDIR) @top_builddir@/src/lib/profiles/bulk-data-transfer/$(DEPDIR) @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR) @top_builddir@/src/lib/profiles/common/$(DEPDIR) @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR) @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR) @top_builddir@/src/lib/profiles/device-control/$(DEPDIR) @top_builddir@/src/lib/profiles/device-description/$(DEPDIR) @top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR) @top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR) @top_builddir@/src/lib/profiles/fabric-provisioning/$(DEPDIR) @top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR) @top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR) @top_builddir@/src/lib/profiles/security/$(DEPDIR) @top_builddir@/src/lib/profiles/service-directory/$(DEPDIR) @top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR) @top_builddir@/src/lib/profiles/software-update/$(DEPDIR) @top_builddir@/src/lib/profiles/status-report/$(DEPDIR) @top_builddir@/src/lib/profiles/time/$(DEPDIR) @top_builddir@/src/lib/profiles/token-pairing/$(DEPDIR) @top_builddir@/src/lib/profiles/vendor/nestlabs/dropcam-legacy-pairing/$(DEPDIR) @top_builddir@/src/lib/profiles/vendor/nestlabs/thermostat/$(DEPDIR) @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR) @top_builddir@/src/lib/support/$(DEPDIR) @top_builddir@/src/lib/support/crypto/$(DEPDIR) @top_builddir@/src/lib/support/logging/$(DEPDIR) @top_builddir@/src/lib/support/pairing-code/$(DEPDIR) @top_builddir@/src/lib/support/verhoeff/$(DEPDIR) @top_builddir@/src/system/$(DEPDIR) @top_builddir@/src/warm/$(DEPDIR)
+		-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BLEEndPoint.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleError.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleLayer.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleUUID.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-WoBle.Po
+	-rm -f @top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WeaveDeviceManager.Po
+	-rm -f @top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WoBleTest.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-AsyncDNSResolverSockets.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-DNSResolver.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-EndPointBasis.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress-StringFuncts.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPEndPointBasis.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPPrefix.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetError.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetFaultInjection.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetInterface.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayer.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayerBasis.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetTimer.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetUtils.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-RawEndPoint.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TCPEndPoint.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TunEndPoint.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-UDPEndPoint.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-ExchangeContext.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-HostPortList.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveBinding.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveCircularTLVBuffer.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnection.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnectionTunnel.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveError.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveExchangeMgr.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveFabricState.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveGlobals.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveKeyIds.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveMessageLayer.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-Malloc.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-SimpleAlloc.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveServerBase.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveStats.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVDebug.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVReader.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUpdater.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUtilities.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVWriter.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/$(DEPDIR)/libWeave_a-BulkDataTransfer.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXMessages.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXNode.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXProtocol.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXTransferState.Po
+	-rm -f @top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-RetainedPacketBuffer.Po
+	-rm -f @top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-WeaveMessage.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-Command.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLogging.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLoggingTypes.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventProcessor.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LogBDXUpload.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingConfiguration.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingManagement.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-MessageDef.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-NotificationEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ResourceIdentifier.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionHandler.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitData.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitPathStore.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateEncoder.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ViewClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ClientNotifier.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMPublisher.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProfileDatabase.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProtocolEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-control/$(DEPDIR)/libWeave_a-DeviceControl.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescription.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/fabric-provisioning/$(DEPDIR)/libWeave_a-FabricProvisioning.Po
+	-rm -f @top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatReceiver.Po
+	-rm -f @top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatSender.Po
+	-rm -f @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Po
+	-rm -f @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Po
+	-rm -f @top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkInfo.Po
+	-rm -f @top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkProvisioning.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTrait.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTraitDataSink.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveAccessToken.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveApplicationKeys.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEMessages.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCert.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveDummyGroupKeyStore.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExport.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportTest.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePASEEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePasscodes.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePrivateKey.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvBundle.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvHash.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurity.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurityDebug.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSig.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveTAKEEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveToX509.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-X509ToWeave.Po
+	-rm -f @top_builddir@/src/lib/profiles/service-directory/$(DEPDIR)/libWeave_a-ServiceDirectory.Po
+	-rm -f @top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioning.Po
+	-rm -f @top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioningServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-SoftwareUpdateProfile.Po
+	-rm -f @top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-WeaveImageAnnounceServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/status-report/$(DEPDIR)/libWeave_a-StatusReportProfile.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTime.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeCoordinator.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeZone.Po
+	-rm -f @top_builddir@/src/lib/profiles/token-pairing/$(DEPDIR)/libWeave_a-TokenPairing.Po
+	-rm -f @top_builddir@/src/lib/profiles/vendor/nestlabs/dropcam-legacy-pairing/$(DEPDIR)/libWeave_a-DropcamLegacyPairing.Po
+	-rm -f @top_builddir@/src/lib/profiles/vendor/nestlabs/thermostat/$(DEPDIR)/libWeave_a-IfjStatusStr.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelAgent.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelCommon.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelConnectionMgr.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelControl.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Error.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1OID.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Reader.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Writer.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-Base64.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ErrorStr.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-FibonacciUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-MathUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NestCerts.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NonProductionMarker.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-PersistedCounter.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ProfileStringSupport.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-RandUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerialNumberUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerializationUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-StatusReportStr.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-TimeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveCounter.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveFaultInjection.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveNames.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-nlargparser.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-AESNI.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-mbedTLS.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-CTRMode.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-DRBG.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-uECC.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HKDF.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HMAC.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-MinCrypt.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-mbedTLS.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-NestDRBG.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-DecodedIPPacket.Po
+	-rm -f @top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-WeaveLogging.Po
+	-rm -f @top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-KryptonitePairingCodeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-NevisPairingCodeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-PairingCodeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff10.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff16.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff32.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff36.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemClock.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemError.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemFaultInjection.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemLayer.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemMutex.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemObject.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemPacketBuffer.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemStats.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemTimer.Po
+	-rm -f @top_builddir@/src/warm/$(DEPDIR)/libWeave_a-WarmCore.Po
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-tags
@@ -5343,7 +5798,197 @@
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf @top_builddir@/src/ble/$(DEPDIR) @top_builddir@/src/device-manager/$(DEPDIR) @top_builddir@/src/inet/$(DEPDIR) @top_builddir@/src/lib/core/$(DEPDIR) @top_builddir@/src/lib/profiles/bulk-data-transfer/$(DEPDIR) @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR) @top_builddir@/src/lib/profiles/common/$(DEPDIR) @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR) @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR) @top_builddir@/src/lib/profiles/device-control/$(DEPDIR) @top_builddir@/src/lib/profiles/device-description/$(DEPDIR) @top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR) @top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR) @top_builddir@/src/lib/profiles/fabric-provisioning/$(DEPDIR) @top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR) @top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR) @top_builddir@/src/lib/profiles/security/$(DEPDIR) @top_builddir@/src/lib/profiles/service-directory/$(DEPDIR) @top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR) @top_builddir@/src/lib/profiles/software-update/$(DEPDIR) @top_builddir@/src/lib/profiles/status-report/$(DEPDIR) @top_builddir@/src/lib/profiles/time/$(DEPDIR) @top_builddir@/src/lib/profiles/token-pairing/$(DEPDIR) @top_builddir@/src/lib/profiles/vendor/nestlabs/dropcam-legacy-pairing/$(DEPDIR) @top_builddir@/src/lib/profiles/vendor/nestlabs/thermostat/$(DEPDIR) @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR) @top_builddir@/src/lib/support/$(DEPDIR) @top_builddir@/src/lib/support/crypto/$(DEPDIR) @top_builddir@/src/lib/support/logging/$(DEPDIR) @top_builddir@/src/lib/support/pairing-code/$(DEPDIR) @top_builddir@/src/lib/support/verhoeff/$(DEPDIR) @top_builddir@/src/system/$(DEPDIR) @top_builddir@/src/warm/$(DEPDIR)
+		-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BLEEndPoint.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleError.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleLayer.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-BleUUID.Po
+	-rm -f @top_builddir@/src/ble/$(DEPDIR)/libWeave_a-WoBle.Po
+	-rm -f @top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WeaveDeviceManager.Po
+	-rm -f @top_builddir@/src/device-manager/$(DEPDIR)/libWeave_a-WoBleTest.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-AsyncDNSResolverSockets.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-DNSResolver.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-EndPointBasis.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress-StringFuncts.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPAddress.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPEndPointBasis.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-IPPrefix.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetError.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetFaultInjection.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetInterface.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayer.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetLayerBasis.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetTimer.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-InetUtils.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-RawEndPoint.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TCPEndPoint.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-TunEndPoint.Po
+	-rm -f @top_builddir@/src/inet/$(DEPDIR)/libWeave_a-UDPEndPoint.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-ExchangeContext.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-HostPortList.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveBinding.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveCircularTLVBuffer.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnection.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveConnectionTunnel.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveError.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveExchangeMgr.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveFabricState.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveGlobals.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveKeyIds.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveMessageLayer.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-Malloc.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr-SimpleAlloc.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveSecurityMgr.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveServerBase.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveStats.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVDebug.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVReader.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUpdater.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVUtilities.Po
+	-rm -f @top_builddir@/src/lib/core/$(DEPDIR)/libWeave_a-WeaveTLVWriter.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/$(DEPDIR)/libWeave_a-BulkDataTransfer.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXMessages.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXNode.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXProtocol.Po
+	-rm -f @top_builddir@/src/lib/profiles/bulk-data-transfer/Development/$(DEPDIR)/libWeave_a-BDXTransferState.Po
+	-rm -f @top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-RetainedPacketBuffer.Po
+	-rm -f @top_builddir@/src/lib/profiles/common/$(DEPDIR)/libWeave_a-WeaveMessage.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-Command.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLogging.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventLoggingTypes.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-EventProcessor.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LogBDXUpload.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingConfiguration.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-LoggingManagement.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-MessageDef.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-NotificationEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ResourceIdentifier.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-SubscriptionHandler.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitData.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-TraitPathStore.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-UpdateEncoder.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Current/$(DEPDIR)/libWeave_a-ViewClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-Binding.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ClientNotifier.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-DMPublisher.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProfileDatabase.Po
+	-rm -f @top_builddir@/src/lib/profiles/data-management/Legacy/$(DEPDIR)/libWeave_a-ProtocolEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-control/$(DEPDIR)/libWeave_a-DeviceControl.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescription.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/device-description/$(DEPDIR)/libWeave_a-DeviceDescriptionServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Current/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/echo/Next/$(DEPDIR)/libWeave_a-WeaveEchoServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/fabric-provisioning/$(DEPDIR)/libWeave_a-FabricProvisioning.Po
+	-rm -f @top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatReceiver.Po
+	-rm -f @top_builddir@/src/lib/profiles/heartbeat/$(DEPDIR)/libWeave_a-WeaveHeartbeatSender.Po
+	-rm -f @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-LocaleSettingsTrait.Po
+	-rm -f @top_builddir@/src/lib/profiles/locale/$(DEPDIR)/libWeave_a-MockSinkTrait.Po
+	-rm -f @top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkInfo.Po
+	-rm -f @top_builddir@/src/lib/profiles/network-provisioning/$(DEPDIR)/libWeave_a-NetworkProvisioning.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTrait.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-ApplicationKeysTraitDataSink.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveAccessToken.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveApplicationKeys.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCASEMessages.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveCert.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveDummyGroupKeyStore.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExport.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveKeyExportTest.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePASEEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePasscodes.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeavePrivateKey.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvBundle.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveProvHash.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurity.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSecurityDebug.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveSig.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveTAKEEngine.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-WeaveToX509.Po
+	-rm -f @top_builddir@/src/lib/profiles/security/$(DEPDIR)/libWeave_a-X509ToWeave.Po
+	-rm -f @top_builddir@/src/lib/profiles/service-directory/$(DEPDIR)/libWeave_a-ServiceDirectory.Po
+	-rm -f @top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioning.Po
+	-rm -f @top_builddir@/src/lib/profiles/service-provisioning/$(DEPDIR)/libWeave_a-ServiceProvisioningServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-SoftwareUpdateProfile.Po
+	-rm -f @top_builddir@/src/lib/profiles/software-update/$(DEPDIR)/libWeave_a-WeaveImageAnnounceServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/status-report/$(DEPDIR)/libWeave_a-StatusReportProfile.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTime.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeClient.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeCoordinator.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeServer.Po
+	-rm -f @top_builddir@/src/lib/profiles/time/$(DEPDIR)/libWeave_a-WeaveTimeZone.Po
+	-rm -f @top_builddir@/src/lib/profiles/token-pairing/$(DEPDIR)/libWeave_a-TokenPairing.Po
+	-rm -f @top_builddir@/src/lib/profiles/vendor/nestlabs/dropcam-legacy-pairing/$(DEPDIR)/libWeave_a-DropcamLegacyPairing.Po
+	-rm -f @top_builddir@/src/lib/profiles/vendor/nestlabs/thermostat/$(DEPDIR)/libWeave_a-IfjStatusStr.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelAgent.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelCommon.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelConnectionMgr.Po
+	-rm -f @top_builddir@/src/lib/profiles/weave-tunneling/$(DEPDIR)/libWeave_a-WeaveTunnelControl.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Error.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1OID.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Reader.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ASN1Writer.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-Base64.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ErrorStr.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-FibonacciUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-MathUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NestCerts.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-NonProductionMarker.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-PersistedCounter.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-ProfileStringSupport.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-RandUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerialNumberUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-SerializationUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-StatusReportStr.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-TimeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveCounter.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveFaultInjection.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-WeaveNames.Po
+	-rm -f @top_builddir@/src/lib/support/$(DEPDIR)/libWeave_a-nlargparser.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-AESNI.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-AESBlockCipher-mbedTLS.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-CTRMode.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-DRBG.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve-uECC.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-EllipticCurve.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HKDF.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HMAC.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-MinCrypt.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-HashAlgos-mbedTLS.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveCrypto.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-NestDRBG.Po
+	-rm -f @top_builddir@/src/lib/support/crypto/$(DEPDIR)/libWeave_a-WeaveRNG-OpenSSL.Po
+	-rm -f @top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-DecodedIPPacket.Po
+	-rm -f @top_builddir@/src/lib/support/logging/$(DEPDIR)/libWeave_a-WeaveLogging.Po
+	-rm -f @top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-KryptonitePairingCodeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-NevisPairingCodeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/pairing-code/$(DEPDIR)/libWeave_a-PairingCodeUtils.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff10.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff16.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff32.Po
+	-rm -f @top_builddir@/src/lib/support/verhoeff/$(DEPDIR)/libWeave_a-Verhoeff36.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemClock.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemError.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemFaultInjection.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemLayer.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemMutex.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemObject.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemPacketBuffer.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemStats.Po
+	-rm -f @top_builddir@/src/system/$(DEPDIR)/libWeave_a-SystemTimer.Po
+	-rm -f @top_builddir@/src/warm/$(DEPDIR)/libWeave_a-WarmCore.Po
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -5364,9 +6009,9 @@
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libLIBRARIES clean-libtool cscopelist-am ctags ctags-am \
-	distclean distclean-compile distclean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+	clean-generic clean-libLIBRARIES clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
@@ -5378,6 +6023,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am uninstall-libLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 include $(abs_top_nlbuild_autotools_dir)/automake/pre.am
 
diff --git a/src/lib/core/WeaveBinding.cpp b/src/lib/core/WeaveBinding.cpp
index 3cc4f76..7ff220e 100644
--- a/src/lib/core/WeaveBinding.cpp
+++ b/src/lib/core/WeaveBinding.cpp
@@ -1908,13 +1908,6 @@
 {
     mBinding.mPeerNodeId = apMsgHeader->SourceNodeId;
 
-    // Configure the outgoing interface only if the received message is from a
-    // link-local address because we need to specify the interface when we are
-    // sending to a link local address. Otherwise, defer to the routing logic
-    // to choose the outgoing interface.
-    TargetAddress_IP(apPktInfo->SrcAddress, apPktInfo->SrcPort,
-                     apPktInfo->SrcAddress.IsIPv6LinkLocal() ? apPktInfo->Interface : INET_NULL_INTERFACEID);
-
     if (apConnection != NULL)
     {
         Transport_ExistingConnection(apConnection);
@@ -1932,15 +1925,7 @@
         Transport_UDP();
     }
 
-    if (apMsgHeader->KeyId == WeaveKeyId::kNone)
-    {
-        Security_None();
-    }
-    else
-    {
-        Security_Key(apMsgHeader->KeyId);
-        Security_EncryptionType(apMsgHeader->EncryptionType);
-    }
+    Security_None();
 
     return *this;
 }
diff --git a/src/lib/profiles/WeaveProfiles.am b/src/lib/profiles/WeaveProfiles.am
index 18fe494..09a7f1f 100644
--- a/src/lib/profiles/WeaveProfiles.am
+++ b/src/lib/profiles/WeaveProfiles.am
@@ -102,6 +102,8 @@
     @top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelCommon.cpp               \
     @top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelConnectionMgr.cpp        \
     @top_builddir@/src/lib/profiles/weave-tunneling/WeaveTunnelControl.cpp              \
+    @top_builddir@/src/lib/profiles/locale/LocaleSettingsTrait.cpp                      \
+    @top_builddir@/src/lib/profiles/locale/MockSinkTrait.cpp                            \
     $(NULL)
 
 if WEAVE_BUILD_LEGACY_WDM
diff --git a/src/lib/profiles/data-management/Current/Command.cpp b/src/lib/profiles/data-management/Current/Command.cpp
index a22ce57..bda5320 100644
--- a/src/lib/profiles/data-management/Current/Command.cpp
+++ b/src/lib/profiles/data-management/Current/Command.cpp
@@ -393,7 +393,7 @@
 
     // Call exchange context to send response
     err = mEC->SendMessage(nl::Weave::Profiles::kWeaveProfile_WDM, kMsgType_CustomCommandResponse, respBuf,
-                           nl::Weave::ExchangeContext::kSendFlag_RequestAck);
+                           nl::Weave::ExchangeContext::kSendFlag_NoAutoRequestAck);
 
     // Don't free the buffer on exit.
     respBuf = NULL;
diff --git a/src/lib/profiles/data-management/Current/SubscriptionEngine.cpp b/src/lib/profiles/data-management/Current/SubscriptionEngine.cpp
index ff936fb..20c7477 100644
--- a/src/lib/profiles/data-management/Current/SubscriptionEngine.cpp
+++ b/src/lib/profiles/data-management/Current/SubscriptionEngine.cpp
@@ -1091,7 +1091,7 @@
         ExitNow(err = WEAVE_ERROR_NO_MEMORY);
     }
 
-    err = binding->BeginConfiguration().ConfigureFromMessage(aMsgInfo, aPktInfo).PrepareBinding();
+    err = binding->BeginConfiguration().ConfigureFromMessage(aMsgInfo, aPktInfo, aEC->Con).PrepareBinding();
     SuccessOrExit(err);
 
     // If the peer requested an ACK, we need to ensure that the exchange context will automatically
@@ -1307,7 +1307,7 @@
     Command * command                  = NULL;
     uint32_t statusReportProfile       = nl::Weave::Profiles::kWeaveProfile_WDM;
     uint16_t statusReportCode          = nl::Weave::Profiles::DataManagement::kStatus_InvalidPath;
-
+    WeaveLogDetail(DataManagement, "receive command0");
     for (size_t i = 0; i < kMaxNumCommandObjs; ++i)
     {
         if (pEngine->mCommandObjs[i].IsFree())
@@ -1320,7 +1320,7 @@
         }
     }
     VerifyOrExit(NULL != command, err = WEAVE_ERROR_NO_MEMORY);
-
+    WeaveLogDetail(DataManagement, "receive command1");
     if (!pEngine->mIsPublisherEnabled)
     {
         // Has to be a publisher to be processing a command
@@ -1330,7 +1330,7 @@
     }
 
     // Set the flag indicating whether this is a OneWay Command or not.
-
+    WeaveLogDetail(DataManagement, "receive command2");
     if (aMsgType == kMsgType_OneWayCommand)
     {
         command->SetIsOneWay(true);
@@ -1346,7 +1346,7 @@
 
         err = reader.Next();
         SuccessOrExit(err);
-
+        WeaveLogDetail(DataManagement, "receive command3");
         {
             CustomCommand::Parser cmdParser;
             TraitDataHandle traitDataHandle;
@@ -1355,7 +1355,7 @@
 
             err = cmdParser.Init(reader);
             SuccessOrExit(err);
-
+            WeaveLogDetail(DataManagement, "receive command4");
 #if WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
             err = cmdParser.CheckSchemaValidity();
             SuccessOrExit(err);
@@ -1366,7 +1366,7 @@
 
             err = pEngine->mPublisherCatalog->AddressToHandle(pathReader, traitDataHandle, requestedSchemaVersion);
             SuccessOrExit(err);
-
+            WeaveLogDetail(DataManagement, "receive command5");
             err = SubscriptionEngine::GetInstance()->mPublisherCatalog->Locate(traitDataHandle, &dataSource);
             SuccessOrExit(err);
 
@@ -1379,7 +1379,7 @@
                 statusReportCode    = kStatus_IncompatibleDataSchemaVersion;
                 ExitNow(err = WEAVE_ERROR_INCOMPATIBLE_SCHEMA_VERSION);
             }
-
+            WeaveLogDetail(DataManagement, "receive command6");
             err = cmdParser.GetCommandType(&command->commandType);
             SuccessOrExit(err);
 
@@ -1396,7 +1396,7 @@
             {
                 ExitNow();
             }
-
+            WeaveLogDetail(DataManagement, "receive command7");
             err = cmdParser.GetActionTimeMicroSecond(&command->actionTimeMicroSecond);
             if (WEAVE_NO_ERROR == err)
             {
@@ -1410,7 +1410,7 @@
             {
                 ExitNow();
             }
-
+            WeaveLogDetail(DataManagement, "receive command8");
             err = cmdParser.GetExpiryTimeMicroSecond(&command->expiryTimeMicroSecond);
             if (WEAVE_NO_ERROR == err)
             {
@@ -1424,7 +1424,7 @@
             {
                 ExitNow();
             }
-
+            WeaveLogDetail(DataManagement, "receive command9");
             err = cmdParser.GetMustBeVersion(&command->mustBeVersion);
             if (WEAVE_NO_ERROR == err)
             {
@@ -1438,9 +1438,10 @@
             {
                 ExitNow();
             }
-
+            WeaveLogDetail(DataManagement, "receive command10");
             err = cmdParser.GetReaderOnArgument(&reader);
             SuccessOrExit(err);
+            WeaveLogDetail(DataManagement, "receive command11");
         }
 
 #if WDM_ENFORCE_EXPIRY_TIME
@@ -1466,6 +1467,7 @@
             WeaveLogDetail(DataManagement, "Command ExpiryTime 0x%" PRIX64 ", now: 0x% " PRIX64 " ", command->expiryTimeMicroSecond,
                            now_usec);
         }
+        WeaveLogDetail(DataManagement, "receive command12");
 #endif // WDM_ENFORCE_EXPIRY_TIME
 
         if (command->IsMustBeVersionValid())
@@ -1480,7 +1482,7 @@
                 ExitNow();
             }
         }
-
+        WeaveLogDetail(DataManagement, "receive command13");
         // Note we cannot just use pathReader at here because the TDM related functions
         // generally assume they can move the reader at their will.
         // Note that callee is supposed to cache whatever is useful in the TLV stream into its own memory
@@ -1493,6 +1495,7 @@
 
         command  = NULL;
         aPayload = NULL;
+        WeaveLogDetail(DataManagement, "receive command14");
     }
 
 exit:
diff --git a/src/lib/profiles/data-management/Current/SubscriptionHandler.cpp b/src/lib/profiles/data-management/Current/SubscriptionHandler.cpp
index f0de69f..43c5297 100644
--- a/src/lib/profiles/data-management/Current/SubscriptionHandler.cpp
+++ b/src/lib/profiles/data-management/Current/SubscriptionHandler.cpp
@@ -863,7 +863,7 @@
 
     // Note we're sending back a message using an EC initiated by the client
     err    = mEC->SendMessage(nl::Weave::Profiles::kWeaveProfile_WDM, kMsgType_SubscribeResponse, msgBuf,
-                           nl::Weave::ExchangeContext::kSendFlag_RequestAck);
+                           nl::Weave::ExchangeContext::kSendFlag_NoAutoRequestAck);
     msgBuf = NULL;
     SuccessOrExit(err);
 
diff --git a/src/lib/profiles/data-management/Current/TraitData.cpp b/src/lib/profiles/data-management/Current/TraitData.cpp
index 3550c77..ad4eddd 100644
--- a/src/lib/profiles/data-management/Current/TraitData.cpp
+++ b/src/lib/profiles/data-management/Current/TraitData.cpp
@@ -1293,7 +1293,7 @@
     apSubClient->UnlockUpdateMutex();
 }
 
-WEAVE_ERROR TraitUpdatableDataSink::GetData(PropertyPathHandle aHandle, uint64_t aTagToWrite, nl::Weave::TLV::TLVWriter & aWriter,
+WEAVE_ERROR TraitDataSink::GetData(PropertyPathHandle aHandle, uint64_t aTagToWrite, nl::Weave::TLV::TLVWriter & aWriter,
                                             bool & aIsNull, bool & aIsPresent)
 {
     WEAVE_ERROR err = WEAVE_NO_ERROR;
@@ -1336,7 +1336,7 @@
     }
 }
 
-WEAVE_ERROR TraitUpdatableDataSink::ReadData(TraitDataHandle aTraitDataHandle,
+WEAVE_ERROR TraitDataSink::ReadData(TraitDataHandle aTraitDataHandle,
                                              PropertyPathHandle aHandle,
                                              uint64_t aTagToWrite,
                                              TLVWriter & aWriter,
diff --git a/src/lib/profiles/data-management/Current/TraitData.h b/src/lib/profiles/data-management/Current/TraitData.h
index 7abf5d4..b99ec76 100644
--- a/src/lib/profiles/data-management/Current/TraitData.h
+++ b/src/lib/profiles/data-management/Current/TraitData.h
@@ -536,7 +536,7 @@
  *         It takes in a pointer to a schema that it then uses to help decipher incoming TLV data from a publisher and invoke the
  *         relevant data setter calls to pass the data up to subclasses.
  */
-class TraitDataSink : private TraitSchemaEngine::ISetDataDelegate
+class TraitDataSink : private TraitSchemaEngine::ISetDataDelegate, public TraitSchemaEngine::IGetDataDelegate
 {
 public:
 
@@ -546,6 +546,24 @@
 
     typedef WEAVE_ERROR (*OnChangeRejection)(uint16_t aRejectionStatusCode, uint64_t aVersion, void * aContext);
 
+    WEAVE_ERROR ReadData(TraitDataHandle aTraitDataHandle, PropertyPathHandle aHandle, uint64_t aTagToWrite, TLV::TLVWriter & aWriter, PropertyPathHandle & aPropertyPathHandleOfDictItemToStartFrom);
+
+    virtual WEAVE_ERROR GetLeafData(PropertyPathHandle aLeafHandle, uint64_t aTagToWrite,
+                                    nl::Weave::TLV::TLVWriter & aWriter) __OVERRIDE
+    {
+        return WEAVE_ERROR_INVALID_ARGUMENT;
+    }
+
+    virtual WEAVE_ERROR GetData(PropertyPathHandle aHandle, uint64_t aTagToWrite, nl::Weave::TLV::TLVWriter & aWriter,
+                                bool & aIsNull, bool & aIsPresent) __OVERRIDE;
+
+#if TDM_ENABLE_PUBLISHER_DICTIONARY_SUPPORT
+    virtual WEAVE_ERROR GetNextDictionaryItemKey(PropertyPathHandle aDictionaryHandle, uintptr_t & aContext,
+                                                 PropertyDictionaryKey & aKey) __OVERRIDE
+    {
+        return WEAVE_ERROR_INVALID_ARGUMENT;
+    }
+#endif
     enum ChangeFlags
     {
         kFirstElementInChange = (1 << 0),
@@ -755,16 +773,11 @@
  * and generate local sink changes to publisher.
  *
  */
-class TraitUpdatableDataSink : public TraitDataSink, protected TraitSchemaEngine::IGetDataDelegate
+class TraitUpdatableDataSink : public TraitDataSink
 {
 public:
     TraitUpdatableDataSink(const TraitSchemaEngine * aEngine);
 
-    WEAVE_ERROR ReadData(TraitDataHandle aTraitDataHandle, PropertyPathHandle aHandle, uint64_t aTagToWrite, TLV::TLVWriter & aWriter, PropertyPathHandle & aPropertyPathHandleOfDictItemToStartFrom);
-
-    virtual WEAVE_ERROR GetData(PropertyPathHandle aHandle, uint64_t aTagToWrite, nl::Weave::TLV::TLVWriter & aWriter,
-                                bool & aIsNull, bool & aIsPresent) __OVERRIDE;
-
     WEAVE_ERROR SetUpdated(SubscriptionClient * apSubClient, PropertyPathHandle aPropertyHandle, bool aIsConditional=false);
 
     void Lock(SubscriptionClient * apSubClient);
diff --git a/src/test-apps/Makefile.in b/src/test-apps/Makefile.in
index 41fbe59..baa61a3 100644
--- a/src/test-apps/Makefile.in
+++ b/src/test-apps/Makefile.in
@@ -8626,11 +8626,11 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-@WEAVE_BUILD_TESTS_FALSE@uninstall-local:
 @WEAVE_BUILD_TESTS_FALSE@install-exec-local:
 @WEAVE_BUILD_COVERAGE_FALSE@clean-local:
 @WEAVE_BUILD_COVERAGE_REPORTS_FALSE@clean-local:
 @WEAVE_BUILD_TESTS_FALSE@clean-local:
+@WEAVE_BUILD_TESTS_FALSE@uninstall-local:
 clean: clean-recursive
 
 clean-am: clean-checkPROGRAMS clean-generic clean-libexecPROGRAMS \
diff --git a/src/test-apps/MockSinkTraits.cpp b/src/test-apps/MockSinkTraits.cpp
index 5a93618..1baefaa 100644
--- a/src/test-apps/MockSinkTraits.cpp
+++ b/src/test-apps/MockSinkTraits.cpp
@@ -81,22 +81,6 @@
 }
 #endif // WEAVE_CONFIG_ENABLE_WDM_UPDATE
 
-WEAVE_ERROR
-MockTraitDataSourceDelegate::GetData(PropertyPathHandle aHandle,
-                                     uint64_t aTagToWrite,
-                                     nl::Weave::TLV::TLVWriter &aWriter,
-                                     bool &aIsNull,
-                                     bool &aIsPresent)
-{
-    WEAVE_ERROR err = WEAVE_NO_ERROR;
-
-    aIsNull = false;
-    aIsPresent = true;
-    err = GetLeafData(aHandle, aTagToWrite, aWriter);
-
-    return err;
-}
-
 LocaleSettingsTraitDataSink::LocaleSettingsTraitDataSink()
     : MockTraitDataSink(&LocaleSettingsTrait::TraitSchema)
 {
diff --git a/src/test-apps/MockSinkTraits.h b/src/test-apps/MockSinkTraits.h
index 1b1d506..563efc8 100644
--- a/src/test-apps/MockSinkTraits.h
+++ b/src/test-apps/MockSinkTraits.h
@@ -199,18 +199,7 @@
 
 #endif // WEAVE_CONFIG_ENABLE_WDM_UPDATE
 
-// This class is used to fetch data from sinks using existing data source APIs
-class MockTraitDataSourceDelegate : public nl::Weave::Profiles::DataManagement::TraitSchemaEngine::IGetDataDelegate
-{
-public:
-    WEAVE_ERROR GetData(nl::Weave::Profiles::DataManagement::PropertyPathHandle aHandle,
-                        uint64_t aTagToWrite,
-                        nl::Weave::TLV::TLVWriter &aWriter,
-                        bool &aIsNull,
-                        bool &aIsPresent) __OVERRIDE;
-};
-
-class LocaleSettingsTraitDataSink : public MockTraitDataSink,  public MockTraitDataSourceDelegate
+class LocaleSettingsTraitDataSink : public MockTraitDataSink
 {
 public:
     LocaleSettingsTraitDataSink();
@@ -227,7 +216,7 @@
     char mLocale[kMaxNumOfCharsPerLocale];
 };
 
-class LocaleCapabilitiesTraitDataSink : public MockTraitDataSink,  public MockTraitDataSourceDelegate
+class LocaleCapabilitiesTraitDataSink : public MockTraitDataSink
 {
 public:
     LocaleCapabilitiesTraitDataSink();
@@ -249,7 +238,7 @@
     char mLocales[kMaxNumOfLocals][kMaxNumOfCharsPerLocale];
 };
 
-class BoltLockSettingTraitDataSink : public MockTraitDataSink, public MockTraitDataSourceDelegate
+class BoltLockSettingTraitDataSink : public MockTraitDataSink
 {
 public:
     BoltLockSettingTraitDataSink();
@@ -263,7 +252,7 @@
     uint32_t mAutoRelockDuration;
 };
 
-class TestATraitDataSink : public MockTraitDataSink, public MockTraitDataSourceDelegate
+class TestATraitDataSink : public MockTraitDataSink
 {
 public:
     TestATraitDataSink();
@@ -325,7 +314,7 @@
     bool nullified_path[Schema::Nest::Test::Trait::TestATrait::kPropertyHandle_TaJ_Value_SaB];
 };
 
-class TestBTraitDataSink : public MockTraitDataSink, public MockTraitDataSourceDelegate
+class TestBTraitDataSink : public MockTraitDataSink
 {
 public:
     TestBTraitDataSink();
@@ -357,7 +346,7 @@
     bool nullified_path[Schema::Nest::Test::Trait::TestBTrait::kPropertyHandle_TaJ_Value_SaB];
 };
 
-class TestApplicationKeysTraitDataSink : public Schema::Weave::Trait::Auth::ApplicationKeysTrait::ApplicationKeysTraitDataSink, public MockTraitDataSourceDelegate
+class TestApplicationKeysTraitDataSink : public Schema::Weave::Trait::Auth::ApplicationKeysTrait::ApplicationKeysTraitDataSink
 {
 public:
     TestApplicationKeysTraitDataSink(void);
diff --git a/src/test-apps/MockSourceTraits.cpp b/src/test-apps/MockSourceTraits.cpp
index 3a59d9b..a7a45a9 100644
--- a/src/test-apps/MockSourceTraits.cpp
+++ b/src/test-apps/MockSourceTraits.cpp
@@ -118,6 +118,175 @@
     return err;
 }
 
+
+void LocaleSettingsTraitDataSource::HandleCommandOperationTimeout(nl::Weave::System::Layer* aSystemLayer, void *aAppState,
+                                                         nl::Weave::System::Error aErr)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    LocaleSettingsTraitDataSource * const datasource = reinterpret_cast<LocaleSettingsTraitDataSource *>(aAppState);
+
+    WeaveLogDetail(DataManagement, "LocaleSettingsTrait %s", __func__);
+
+    VerifyOrExit (NULL != datasource->mActiveCommand, err = WEAVE_ERROR_INCORRECT_STATE);
+
+    // If Command was OneWay, exit and close Command.
+
+    VerifyOrExit(!datasource->mActiveCommand->IsOneWay(), err = WEAVE_NO_ERROR);
+
+exit:
+    WeaveLogFunctError(err);
+
+    if (NULL != datasource->mActiveCommand)
+    {
+        datasource->mActiveCommand->Close();
+        datasource->mActiveCommand = NULL;
+    }
+}
+
+void LocaleSettingsTraitDataSource::OnCustomCommand(nl::Weave::Profiles::DataManagement::Command * aCommand,
+                                           const nl::Weave::WeaveMessageInfo * aMsgInfo,
+                                           nl::Weave::PacketBuffer * aPayload,
+                                           const uint64_t & aCommandType,
+                                           const bool aIsExpiryTimeValid,
+                                           const int64_t & aExpiryTimeMicroSecond,
+                                           const bool aIsMustBeVersionValid,
+                                           const uint64_t & aMustBeVersion,
+                                           nl::Weave::TLV::TLVReader & aArgumentReader)
+{
+    WEAVE_ERROR err = WEAVE_NO_ERROR;
+    uint32_t reportProfileId = nl::Weave::Profiles::kWeaveProfile_Common;
+    uint16_t reportStatusCode = nl::Weave::Profiles::Common::kStatus_BadRequest;
+
+    WeaveLogDetail(DataManagement, "LocaleSettingsTrait %s", __func__);
+
+    // verify there is no active command already running
+    // this is needed only if the implementation cannot handle more than one concurrent command per trait
+    if (NULL != mActiveCommand)
+    {
+        // we already have one active command. Reject this new one directly
+        reportProfileId = nl::Weave::Profiles::kWeaveProfile_Common;
+        reportStatusCode = nl::Weave::Profiles::Common::kStatus_OutOfMemory;
+        err = WEAVE_ERROR_NO_MEMORY;
+        ExitNow ();
+    }
+
+    // verify if this command comes with a valid EC with the right peer node ID, key ID, and authenticator
+    // more detailed example will be available when we have the security added
+
+    // Note that the version check is passed to application layer because the application layer might want to know
+    // someone is making a request.
+    if (aIsMustBeVersionValid)
+    {
+        WeaveLogDetail(DataManagement, "Actual version is 0x%" PRIx64 ", while must-be version is: 0x%" PRIx64, GetVersion(), aMustBeVersion);
+
+        if (aMustBeVersion != GetVersion())
+        {
+            reportProfileId = nl::Weave::Profiles::kWeaveProfile_WDM;
+            reportStatusCode = kStatus_VersionMismatch;
+            ExitNow ();
+        }
+    }
+
+    WeaveLogDetail(DataManagement, "Command Type ID 0x%" PRIx64, aCommandType);
+
+    // verify the command type and arguments are valid
+    // command type 1: one shot signaling without custom data in response
+    if (1 == aCommandType)
+    {
+        // Parse and validate the arguments according to schema definitions for this command
+        {
+            nl::Weave::TLV::TLVType OuterContainerType;
+            err = aArgumentReader.EnterContainer(OuterContainerType);
+            SuccessOrExit(err);
+
+            while (WEAVE_NO_ERROR == (err = aArgumentReader.Next()))
+            {
+                // usually there is only context-specific tags in argument section
+                VerifyOrExit(nl::Weave::TLV::IsContextTag(aArgumentReader.GetTag()), err = WEAVE_ERROR_INVALID_TLV_TAG);
+                switch (nl::Weave::TLV::TagNumFromTag(aArgumentReader.GetTag()))
+                {
+                    case kCmdParam_1:
+                        err = aArgumentReader.GetString(mCommandParam_1, 10);
+                        SuccessOrExit(err);
+                        WeaveLogDetail(DataManagement, "Parameter 1: %s", mCommandParam_1);
+                        break;
+
+                    case kCmdParam_2:
+                        err = aArgumentReader.GetString(mCommandParam_2, 100);
+                        SuccessOrExit(err);
+                        WeaveLogDetail(DataManagement, "Parameter 2: %s", mCommandParam_2);
+                        break;
+
+                    default:
+                        // unrecognized arguments are allowed or not is a trait-specific question
+                        ExitNow(err = WEAVE_ERROR_INVALID_TLV_TAG);
+                }
+            }
+
+            if (WEAVE_END_OF_TLV == err)
+            {
+                // if any of the parameters are mandatory, we can verify at here
+                err = WEAVE_NO_ERROR;
+            }
+            SuccessOrExit(err);
+        }
+
+        // Free the packet buffer after we parsed and processed/cached all arguments.
+        // Doing this before allocating buffer for response might help reduce the max number of packet buffer needed
+        PacketBuffer::Free(aPayload);
+        aPayload = NULL;
+
+        // If Command was OneWay, close Command and exit.
+
+        if (aCommand->IsOneWay())
+        {
+            aCommand->Close();
+            aCommand = NULL;
+            ExitNow(err = WEAVE_NO_ERROR);
+        }
+
+        // Generate a success response right here
+        {
+
+            PacketBuffer * msgBuf = PacketBuffer::New();
+            if (NULL == msgBuf)
+            {
+                // It's unlikely we'll have packet buffer to send out the status report, but let us try anyways
+                reportProfileId = nl::Weave::Profiles::kWeaveProfile_Common;
+                reportStatusCode = nl::Weave::Profiles::Common::kStatus_OutOfMemory;
+                err = WEAVE_ERROR_NO_MEMORY;
+                ExitNow ();
+            }
+
+            aCommand->SendResponse(GetVersion(), msgBuf);
+            aCommand = NULL;
+            msgBuf = NULL;
+        }
+    }
+    else
+    {
+        // unrecognized command type id
+        // default error is bad request
+        err = WEAVE_ERROR_NOT_IMPLEMENTED;
+        ExitNow();
+    }
+
+exit:
+    WeaveLogFunctError(err);
+
+    if (NULL != aCommand)
+    {
+        aCommand->SendError(reportProfileId, reportStatusCode, err);
+        aCommand = NULL;
+    }
+
+    if (aPayload)
+    {
+        PacketBuffer::Free(aPayload);
+        aPayload = NULL;
+    }
+}
+
 LocaleCapabilitiesTraitDataSource::LocaleCapabilitiesTraitDataSource()
     : TraitDataSource(&LocaleCapabilitiesTrait::TraitSchema)
 {
diff --git a/src/test-apps/MockSourceTraits.h b/src/test-apps/MockSourceTraits.h
index d1c7af4..62f9a82 100644
--- a/src/test-apps/MockSourceTraits.h
+++ b/src/test-apps/MockSourceTraits.h
@@ -44,6 +44,29 @@
     LocaleSettingsTraitDataSource();
     void Mutate();
 
+    virtual void OnCustomCommand(nl::Weave::Profiles::DataManagement::Command * aCommand,
+                                 const nl::Weave::WeaveMessageInfo * aMsgInfo,
+                                 nl::Weave::PacketBuffer * aPayload,
+                                 const uint64_t & aCommandType,
+                                 const bool aIsExpiryTimeValid,
+                                 const int64_t & aExpiryTimeMicroSecond,
+                                 const bool aIsMustBeVersionValid,
+                                 const uint64_t & aMustBeVersion,
+                                 nl::Weave::TLV::TLVReader & aArgumentReader) __OVERRIDE;
+
+    static void HandleCommandOperationTimeout(nl::Weave::System::Layer* aSystemLayer, void *aAppState, nl::Weave::System::Error aErr);
+
+    enum
+    {
+        kCmdType_1      = 1,
+        kCmdParam_1     = 1,
+        kCmdParam_2     = 2,
+    };
+
+    char mCommandParam_1[10];
+    char mCommandParam_2[100];
+    nl::Weave::Profiles::DataManagement::Command * mActiveCommand;
+
 private:
     WEAVE_ERROR GetLeafData(nl::Weave::Profiles::DataManagement::PropertyPathHandle aLeafHandle, uint64_t aTagToWrite, nl::Weave::TLV::TLVWriter &aWriter) __OVERRIDE;
 
diff --git a/src/test-apps/MockWdmSubscriptionResponder.cpp b/src/test-apps/MockWdmSubscriptionResponder.cpp
index fc8b5a2..798f0b9 100644
--- a/src/test-apps/MockWdmSubscriptionResponder.cpp
+++ b/src/test-apps/MockWdmSubscriptionResponder.cpp
@@ -238,6 +238,8 @@
         kTestCase_IncompatibleVersionedCommandRequest = 9,
 
         kTestCase_TestUpdatableTrait = 10,
+
+        kTestCase_TestUpdatableTraitOverBLE = 11,
     };
 
     enum
@@ -444,6 +446,10 @@
         WeaveLogDetail(DataManagement, "kTestCase_TestUpdatableTrait");
         break;
 
+    case kTestCase_TestUpdatableTraitOverBLE:
+        WeaveLogDetail(DataManagement, "kTestCase_TestUpdatableTraitOverBLE");
+        break;
+
     default:
         WeaveLogDetail(DataManagement, "kTestCase_TestTrait");
         break;
@@ -542,6 +548,7 @@
             DumpClientTraitChecksum(kTestADataSink1Index);
             break;
         case kTestCase_TestUpdatableTrait:
+        case kTestCase_TestUpdatableTraitOverBLE:
             break;
     }
 }
@@ -574,6 +581,7 @@
             DumpPublisherTraitChecksum(kTestATraitSource1Index);
             break;
         case kTestCase_TestUpdatableTrait:
+        case kTestCase_TestUpdatableTraitOverBLE:
             break;
     }
 }
@@ -682,6 +690,7 @@
                 {
                 case kTestCase_TestTrait:
                 case kTestCase_TestUpdatableTrait:
+                case kTestCase_TestUpdatableTraitOverBLE:
                     responder->mNumPaths = 3;
                     responder->mTraitPaths[0].mTraitDataHandle = responder->mTraitHandleSet[kTestADataSink0Index];
                     responder->mTraitPaths[0].mPropertyPathHandle = kRootPropertyPathHandle;
@@ -1149,14 +1158,20 @@
 
     updateResponseBuilder.EndOfResponse();
     SuccessOrExit(updateResponseBuilder.GetError());
-
     referenceTLVData.init(sizeof(updateResponseBuf), sizeof(updateResponseBuf), updateResponseBuf);
 
     statusReport.init(nl::Weave::Profiles::kWeaveProfile_Common, nl::Weave::Profiles::Common::kStatus_Success, &referenceTLVData);
     err = statusReport.pack(mBuf);
     SuccessOrExit(err);
 
-    err = ec->SendMessage(nl::Weave::Profiles::kWeaveProfile_Common, nl::Weave::Profiles::Common::kMsgType_StatusReport, mBuf, nl::Weave::ExchangeContext::kSendFlag_RequestAck);
+    if (pResponder->mTestCaseId == kTestCase_TestUpdatableTraitOverBLE)
+    {
+        err = ec->SendMessage(nl::Weave::Profiles::kWeaveProfile_Common, nl::Weave::Profiles::Common::kMsgType_StatusReport, mBuf, nl::Weave::ExchangeContext::kSendFlag_NoAutoRequestAck);
+    }
+    else
+    {
+        err = ec->SendMessage(nl::Weave::Profiles::kWeaveProfile_Common, nl::Weave::Profiles::Common::kMsgType_StatusReport, mBuf, nl::Weave::ExchangeContext::kSendFlag_RequestAck);
+    }
     mBuf = NULL;
     SuccessOrExit(err);
 
@@ -1546,6 +1561,7 @@
             SubscriptionEngine::GetInstance()->GetNotificationEngine()->Run();
             break;
         case kTestCase_TestUpdatableTrait:
+        case kTestCase_TestUpdatableTraitOverBLE:
             break;
         case kTestCase_IncompatibleVersionedCommandRequest:
             responder->Command_Send();
diff --git a/src/test-apps/TestTDM.cpp b/src/test-apps/TestTDM.cpp
index 61e9e3d..e78907f 100644
--- a/src/test-apps/TestTDM.cpp
+++ b/src/test-apps/TestTDM.cpp
@@ -286,7 +286,6 @@
 
     WEAVE_ERROR SetLeafData(PropertyPathHandle aLeafHandle, TLVReader &aReader) { mSetLeafDataCalled = true; return WEAVE_ERROR_INVALID_ARGUMENT; }
     WEAVE_ERROR OnEvent(uint16_t aType, void *aInEventParam);
-
     bool mSetLeafDataCalled;
     bool mEventDataElementBeginSignalled;
     bool mEventDataElementEndSignalled;
@@ -582,7 +581,6 @@
 private:
     WEAVE_ERROR OnEvent(uint16_t aType, void *aInParam);
     WEAVE_ERROR SetLeafData(PropertyPathHandle aLeafHandle, nl::Weave::TLV::TLVReader &aReader);
-    WEAVE_ERROR GetLeafData(PropertyPathHandle aLeafHandle, uint64_t aTagToWrite, TLVWriter &aWriter);
     std::map <PropertyPathHandle, uint32_t> mModifiedHandles;
     std::set <PropertyPathHandle> mDeletedHandles;
     std::set <PropertyPathHandle> mReplacedDictionaries;
diff --git a/src/test-apps/mock-device.cpp b/src/test-apps/mock-device.cpp
index 7c8b981..5c9ec1c 100644
--- a/src/test-apps/mock-device.cpp
+++ b/src/test-apps/mock-device.cpp
@@ -104,6 +104,7 @@
 static void InitiateConnection(System::Layer* aSystemLayer, void* aAppState, System::Error aError);
 static void HandleConnectionComplete(WeaveConnection *con, WEAVE_ERROR conErr);
 static void HandleWdmCompleteTest();
+static void HandleError();
 
 #if CONFIG_BLE_PLATFORM_BLUEZ
 bool EnableWeaveBluezPeripheral = false;
@@ -766,6 +767,111 @@
 
 #endif // CONFIG_BLE_PLATFORM_BLUEZ
 
+    InitializeEventLogging(&ExchangeMgr);
+
+    switch (gMockWdmNodeOptions.mWdmRoleInTest)
+    {
+        case 0:
+            break;
+        case kToolOpt_WdmInitMutualSubscription:
+        case kToolOpt_WdmSubscriptionClient:
+
+            if (gMockWdmNodeOptions.mWdmPublisherNodeId != kAnyNodeId)
+            {
+                err = MockWdmSubscriptionInitiator::GetInstance()->Init(&ExchangeMgr,
+                                                                        gGroupKeyEncOptions.GetEncKeyId(),
+                                                                        gWeaveSecurityMode.SecurityMode,
+                                                                        gMockWdmNodeOptions);
+                FAIL_ERROR(err, "MockWdmSubscriptionInitiator.Init failed");
+                MockWdmSubscriptionInitiator::GetInstance()->onCompleteTest = HandleWdmCompleteTest;
+                MockWdmSubscriptionInitiator::GetInstance()->onError = HandleError;
+
+            }
+            else
+            {
+                err = WEAVE_ERROR_INVALID_ARGUMENT;
+                FAIL_ERROR(err, "MockWdmSubscriptionInitiator requires node ID to some publisher");
+            }
+
+            break;
+        case kToolOpt_WdmRespMutualSubscription:
+        case kToolOpt_WdmSubscriptionPublisher:
+            if (gMockWdmNodeOptions.mEnableRetry)
+            {
+                err = WEAVE_ERROR_INVALID_ARGUMENT;
+                FAIL_ERROR(err, "MockWdmSubcriptionResponder is incompatible with --enable-retry");
+            }
+
+            err = MockWdmSubscriptionResponder::GetInstance()->Init(&ExchangeMgr,
+                                                                    gMockWdmNodeOptions
+                                                                    );
+            FAIL_ERROR(err, "MockWdmSubscriptionResponder.Init failed");
+            MockWdmSubscriptionResponder::GetInstance()->onCompleteTest = HandleWdmCompleteTest;
+            MockWdmSubscriptionResponder::GetInstance()->onError = HandleError;
+            if (gTestWdmNextOptions.mClearDataSinkState)
+            {
+                MockWdmSubscriptionResponder::GetInstance()->ClearDataSinkState();
+            }
+            break;
+        default:
+            err = WEAVE_ERROR_INVALID_ARGUMENT;
+            FAIL_ERROR(err, "WdmRoleInTest is invalid");
+    };
+
+    for (uint32_t iteration = 1; iteration <= gTestWdmNextOptions.mTestIterations; iteration++) {
+
+        switch (gMockWdmNodeOptions.mWdmRoleInTest) {
+            case 0:
+                break;
+            case kToolOpt_WdmInitMutualSubscription:
+            case kToolOpt_WdmSubscriptionClient:
+                if (gTestWdmNextOptions.mClearDataSinkState) {
+                    MockWdmSubscriptionInitiator::GetInstance()->ClearDataSinkState();
+                }
+                err = MockWdmSubscriptionInitiator::GetInstance()->StartTesting(gMockWdmNodeOptions.mWdmPublisherNodeId,
+                                                                                gMockWdmNodeOptions.mWdmUseSubnetId);
+                if (err != WEAVE_NO_ERROR) {
+                    printf("\nMockWdmSubscriptionInitiator.StartTesting failed: %s\n", ErrorStr(err));
+                    Done = true;
+                }
+                //FAIL_ERROR(err, "MockWdmSubscriptionInitiator.StartTesting failed");
+                break;
+            default:
+                printf("TestWdmNext server is ready\n");
+        };
+
+        switch (gMockWdmNodeOptions.mEventGeneratorType) {
+            case MockWdmNodeOptions::kGenerator_None:
+                gEventGenerator = NULL;
+                break;
+            case MockWdmNodeOptions::kGenerator_TestDebug:
+                gEventGenerator = GetTestDebugGenerator();
+                break;
+            case MockWdmNodeOptions::kGenerator_TestLiveness:
+                gEventGenerator = GetTestLivenessGenerator();
+                break;
+            case MockWdmNodeOptions::kGenerator_TestSecurity:
+                gEventGenerator = GetTestSecurityGenerator();
+                break;
+            case MockWdmNodeOptions::kGenerator_TestTelemetry:
+                gEventGenerator = GetTestTelemetryGenerator();
+                break;
+            case MockWdmNodeOptions::kGenerator_TestTrait:
+                gEventGenerator = GetTestTraitGenerator();
+                break;
+            case MockWdmNodeOptions::kGenerator_NumItems:
+            default:
+                gEventGenerator = NULL;
+                break;
+        }
+
+        if (gEventGenerator != NULL) {
+            printf("Starting Event Generator\n");
+            MockEventGenerator::GetInstance()->Init(&ExchangeMgr, gEventGenerator,
+                                                    gMockWdmNodeOptions.mTimeBetweenEvents, true);
+        }
+
+    }
     while (!Done)
     {
         struct timeval sleepTime;
@@ -1069,3 +1175,8 @@
         Done = true;
     }
 }
+
+static void HandleError()
+{
+    Done = true;
+}