All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 01/51] core/pkg-autotools: align host configure commands to target one
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 02/51] package/gcc: comment on why we override the generic configure commands Yann E. MORIN
                   ` (50 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

The host configure commands are not indented the same way as the target
ones. Besides, there are leading spaces (instead of TABs) on one line.

Replicate the same indentation as used for the target commands.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/pkg-autotools.mk | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
index 4787914..502eeea 100644
--- a/package/pkg-autotools.mk
+++ b/package/pkg-autotools.mk
@@ -214,12 +214,12 @@ else
 # installed.
 define $(2)_CONFIGURE_CMDS
 	(cd $$($$(PKG)_SRCDIR) && rm -rf config.cache; \
-	        $$(HOST_CONFIGURE_OPTS) \
-		CFLAGS="$$(HOST_CFLAGS)" \
-		LDFLAGS="$$(HOST_LDFLAGS)" \
-		$$($$(PKG)_CONF_ENV) \
-		CONFIG_SITE=/dev/null \
-		./configure \
+	$$(HOST_CONFIGURE_OPTS) \
+	CFLAGS="$$(HOST_CFLAGS)" \
+	LDFLAGS="$$(HOST_LDFLAGS)" \
+	$$($$(PKG)_CONF_ENV) \
+	CONFIG_SITE=/dev/null \
+	./configure \
 		--prefix="$$(HOST_DIR)/usr" \
 		--sysconfdir="$$(HOST_DIR)/etc" \
 		--localstatedir="$$(HOST_DIR)/var" \
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 02/51] package/gcc: comment on why we override the generic configure commands
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 01/51] core/pkg-autotools: align host configure commands to target one Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 03/51] package/gcc: align gcc-final configure-cmds to the generic ones Yann E. MORIN
                   ` (49 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

The explanations given in the commit log of 7d6c79 (Compile static
versions of gcc libraries) do not explain why we have to provide custom
configure commands, instead of just adding --enable-static to the
configure options.

Add a comment in the code that explains why that is so. Add a pointer to
the ML archives with the explanations, too.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: J?r?me Pouiller <jezz@sysmic.org>
---
 package/gcc/gcc-final/gcc-final.mk | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
index 7802855..dbdb615 100644
--- a/package/gcc/gcc-final/gcc-final.mk
+++ b/package/gcc/gcc-final/gcc-final.mk
@@ -27,6 +27,15 @@ HOST_GCC_FINAL_SUBDIR = build
 
 HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK
 
+# We want to always build the static variants of all the gcc libraries,
+# of which libstdc++, libgomp, libmudflap...
+# To do so, we can not just pass --enable-static to override the generic
+# --disable-static flag, otherwise gcc fails to build some of those
+# libraries, see;
+#   http://lists.busybox.net/pipermail/buildroot/2013-October/080412.html
+#
+# So we must completely override the generic commands and provide our own.
+#
 define  HOST_GCC_FINAL_CONFIGURE_CMDS
 	(cd $(HOST_GCC_FINAL_SRCDIR) && rm -rf config.cache; \
 		$(HOST_CONFIGURE_OPTS) \
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 03/51] package/gcc: align gcc-final configure-cmds to the generic ones
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 01/51] core/pkg-autotools: align host configure commands to target one Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 02/51] package/gcc: comment on why we override the generic configure commands Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:10   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 04/51] core/pkg-generic: add macro to hardlink-or-copy Yann E. MORIN
                   ` (48 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Since 7d6c79 (Compile static versions of gcc libraries) was applied, the
generic configure commands have been updated, but those changes have not
been propagated to the gcc-final custom configure commands.

Update the gcc-final custom configure commands to better match the
generic ones.

We do not propagate --disable-dependency-tracking because it breaks the
build, and --enable-shared (because of 169141a).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-final/gcc-final.mk | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
index dbdb615..53199c3 100644
--- a/package/gcc/gcc-final/gcc-final.mk
+++ b/package/gcc/gcc-final/gcc-final.mk
@@ -36,16 +36,31 @@ HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK
 #
 # So we must completely override the generic commands and provide our own.
 #
+# Except for --disable-dependency-tracking which breaks the build, and
+# --enable-shared (see 169141a, gcc-final: disable shared build for
+# static), we reproduce the exact same command as the autotools infra
+# uses.
+#
 define  HOST_GCC_FINAL_CONFIGURE_CMDS
 	(cd $(HOST_GCC_FINAL_SRCDIR) && rm -rf config.cache; \
-		$(HOST_CONFIGURE_OPTS) \
-		CFLAGS="$(HOST_CFLAGS)" \
-		LDFLAGS="$(HOST_LDFLAGS)" \
-		$(HOST_GCC_FINAL_CONF_ENV) \
-		./configure \
+	$(HOST_CONFIGURE_OPTS) \
+	CFLAGS="$(HOST_CFLAGS)" \
+	LDFLAGS="$(HOST_LDFLAGS)" \
+	$(HOST_GCC_FINAL_CONF_ENV) \
+	CONFIG_SITE=/dev/null \
+	./configure \
 		--prefix="$(HOST_DIR)/usr" \
 		--sysconfdir="$(HOST_DIR)/etc" \
+		--localstatedir="$(HOST_DIR)/var" \
 		--enable-static \
+		--disable-gtk-doc \
+		--disable-gtk-doc-html \
+		--disable-doc \
+		--disable-docs \
+		--disable-documentation \
+		--disable-debug \
+		--with-xmlto=no \
+		--with-fop=no \
 		$(QUIET) $(HOST_GCC_FINAL_CONF_OPTS) \
 	)
 endef
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 04/51] core/pkg-generic: add macro to hardlink-or-copy
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (2 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 03/51] package/gcc: align gcc-final configure-cmds to the generic ones Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 17:15   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 05/51] core/legal-info: use the macro to install source archives Yann E. MORIN
                   ` (47 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>

---
Changes RFC -> v1:
  - move to pkg-utils  (Luca)
---
 package/pkg-utils.mk | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
index 44bd2c9..447b849 100644
--- a/package/pkg-utils.mk
+++ b/package/pkg-utils.mk
@@ -113,6 +113,24 @@ $$(error Package error: use $(2) instead of $(1). Please fix your .mk file)
 endif
 endef
 
+################################################################################
+# hardlink-copy -- hardlink source and destination if possible, otherwise
+# do a simple copy
+#
+# argument 1 is the source *file*
+# argument 2 is the destination *directory*
+#
+# example:
+#   $(call hardlink-copy,/path/to/source/file,/path/to/destination/dir/)
+#
+# Note: we make that a single command, so se can:
+#  - use '$(Q)' in front of it and properly silence the whole macro,
+#  - use '|| exit 1' after it, so we can exit on error in compound commands,
+################################################################################
+define hardlink-copy
+	{ mkdir -p $(2) && { cp -l $(1) $(2) 2>/dev/null || cp $(1) $(2); } }
+endef
+
 #
 # legal-info helper functions
 #
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 05/51] core/legal-info: use the macro to install source archives
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (3 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 04/51] core/pkg-generic: add macro to hardlink-or-copy Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 17:18   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output Yann E. MORIN
                   ` (46 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 package/pkg-generic.mk | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 357a5c7..e69c970 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -805,9 +805,10 @@ ifeq ($$($(2)_REDISTRIBUTE),YES)
 ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
 	$$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
 endif
-# Copy the source tarball (just hardlink if possible)
-	@cp -l $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))) 2>/dev/null || \
-	    cp $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))
+# Copy the source tarball
+	$$(Q)$$(call hardlink-copy,\
+		     $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
+		     $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))))
 endif # redistribute
 
 endif # other packages
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (4 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 05/51] core/legal-info: use the macro to install source archives Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 17:25   ` Luca Ceresoli
  2015-11-23 20:24   ` Thomas Petazzoni
  2015-11-23 14:47 ` [Buildroot] [PATCH 07/51] core: add a global variable with already-unquoted global patch dir Yann E. MORIN
                   ` (45 subsequent siblings)
  51 siblings, 2 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

The perl-cross sources are combined with the perl sources, so they must
be redistributed for proper compliance.

Add a post-legal-info hook that also installs them in the legal-info
output.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Francois Perrad <fperrad@gmail.com>
---
 package/perl/perl.mk | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/package/perl/perl.mk b/package/perl/perl.mk
index f3b7b2b..25294e6 100644
--- a/package/perl/perl.mk
+++ b/package/perl/perl.mk
@@ -32,6 +32,13 @@ define PERL_CROSS_EXTRACT
 endef
 PERL_POST_EXTRACT_HOOKS += PERL_CROSS_EXTRACT
 
+# ... and as such should be part of the legal-info redistribution
+define PERL_CROSS_LEGAL_INFO
+	$(Q)$(call hardlink-copy,$(DL_DIR)/$(PERL_CROSS_SOURCE),\
+				 $(PERL_REDIST_SOURCES_DIR))
+endef
+PERL_POST_LEGAL_INFO_HOOKS += PERL_CROSS_LEGAL_INFO
+
 define PERL_CROSS_SET_POD
 	$(SED) s/$(PERL_CROSS_OLD_POD)/$(PERL_CROSS_NEW_POD)/g $(@D)/Makefile
 endef
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 07/51] core: add a global variable with already-unquoted global patch dir
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (5 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 16:18   ` Thomas Petazzoni
  2015-11-23 14:47 ` [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info Yann E. MORIN
                   ` (44 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

... and use it instead of duplicating the qstrip everywhere it is
needed.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 Makefile               | 3 +++
 package/gcc/gcc.mk     | 4 ++--
 package/pkg-generic.mk | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index 71c6836..5e62275 100644
--- a/Makefile
+++ b/Makefile
@@ -218,6 +218,9 @@ ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
 -include $(BR2_CONFIG)
 endif
 
+# Needs to be after we parse the .config
+BR_GLOBAL_PATCH_DIR := $(call qstrip,$(BR2_GLOBAL_PATCH_DIR))
+
 # To put more focus on warnings, be less verbose as default
 # Use 'make V=1' to see the full commands
 ifeq ("$(origin V)", "command line")
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index b9551e8..51e8378 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -248,8 +248,8 @@ HOST_GCC_COMMON_CCACHE_HASH_FILES += $(DL_DIR)/$(GCC_SOURCE)
 HOST_GCC_COMMON_CCACHE_HASH_FILES += \
 	$(sort $(wildcard \
 		package/gcc/$(GCC_VERSION)/*.patch \
-		$(addsuffix $((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \
-		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR)))))
+		$(addsuffix $((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
+		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(BR2_GLOBAL_PATCH_DIR))))
 ifeq ($(BR2_xtensa),y)
 HOST_GCC_COMMON_CCACHE_HASH_FILES += $(HOST_GCC_XTENSA_OVERLAY_TAR)
 endif
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index e69c970..5414bc6 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -155,7 +155,7 @@ $(BUILD_DIR)/%/.stamp_rsynced:
 # For BR2_GLOBAL_PATCH_DIR, only generate if it is defined
 $(BUILD_DIR)/%/.stamp_patched: NAMEVER = $(RAWNAME)-$($(PKG)_VERSION)
 $(BUILD_DIR)/%/.stamp_patched: PATCH_BASE_DIRS =  $(PKGDIR)
-$(BUILD_DIR)/%/.stamp_patched: PATCH_BASE_DIRS += $(addsuffix /$(RAWNAME),$(call qstrip,$(BR2_GLOBAL_PATCH_DIR)))
+$(BUILD_DIR)/%/.stamp_patched: PATCH_BASE_DIRS += $(addsuffix /$(RAWNAME),$(BR_GLOBAL_PATCH_DIR))
 $(BUILD_DIR)/%/.stamp_patched:
 	@$(call step_start,patch)
 	@$(call MESSAGE,"Patching")
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (6 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 07/51] core: add a global variable with already-unquoted global patch dir Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 20:26   ` Thomas Petazzoni
  2015-11-23 14:47 ` [Buildroot] [PATCH 09/51] core/pkg-virtual: ignore from legal-info output Yann E. MORIN
                   ` (43 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

It might be necessary to not even mention a package in the output of
legal-info:

  - virtual package have virtually nothing to save in the legal-info
    output;

  - for Buildroot itself, host-gcc-initial and host-gcc-final are not
    real packages, they are just two different steps of the same
    package, gcc;

  - for proprietary packages, it might not even be legal to even mention
    them, being under NDA or some other such restrictive conditions.

Add the new 'IGNORE' keyword to the _REDISTRIBUTE package variable, so
that the legal-info infra will simply completely ignore that package.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 docs/manual/adding-packages-generic.txt | 7 +++++--
 package/pkg-generic.mk                  | 8 +++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/docs/manual/adding-packages-generic.txt b/docs/manual/adding-packages-generic.txt
index 1c25c4e..aec398b 100644
--- a/docs/manual/adding-packages-generic.txt
+++ b/docs/manual/adding-packages-generic.txt
@@ -390,7 +390,8 @@ information is (assuming the package name is +libfoo+) :
   See xref:legal-info[] for more information.
   This variable is optional. If it is not defined, a warning will be produced
   to let you know, and +not saved+ will appear in the +license files+ field
-  of the manifest file for this package.
+  of the manifest file for this package (unless +LIBFOO_REDISTRIBUTE+ is
+  set to +IGNORE+, see below...)
 
 * +LIBFOO_ACTUAL_SOURCE_TARBALL+ only applies to packages whose
   +LIBFOO_SITE+ / +LIBTOO_SOURCE+ pair points to an archive that does
@@ -414,7 +415,9 @@ information is (assuming the package name is +libfoo+) :
 * +LIBFOO_REDISTRIBUTE+ can be set to +YES+ (default) or +NO+ to indicate if
   the package source code is allowed to be redistributed. Set it to +NO+ for
   non-opensource packages: Buildroot will not save the source code for this
-  package when collecting the +legal-info+.
+  package when collecting the +legal-info+. Alternatively, you may set it to
+  +IGNORE+ so that Buildroot does not even mention that package in the
+  +legal-info+ output.
 
 * +LIBFOO_FLAT_STACKSIZE+ defines the stack size of an application built into
   the FLAT binary format. The application stack size on the NOMMU architecture
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 5414bc6..98db3ba 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -747,10 +747,12 @@ $(2)_MANIFEST_LICENSE_FILES ?= not saved
 
 # If the package declares _LICENSE_FILES, we need to extract it,
 # for overriden, local or normal remote packages alike, whether
-# we want to redistribute it or not.
+# we want to redistribute it or not, but not if we want to ignore it.
+ifneq ($$($(2)_REDISTRIBUTE),IGNORE)
 ifneq ($$($(2)_LICENSE_FILES),)
 $(1)-legal-info: $(1)-patch
 endif
+endif
 
 # We only save the sources of packages we want to redistribute, that are
 # non-local, and non-overriden. So only store, in the manifest, the tarball
@@ -774,6 +776,8 @@ $(2)_ACTUAL_SOURCE_SITE    ?= $$(call qstrip,$$($(2)_SITE))
 
 # legal-info: produce legally relevant info.
 $(1)-legal-info:
+ifneq ($$($(2)_REDISTRIBUTE),IGNORE)
+
 # Packages without a source are assumed to be part of Buildroot, skip them.
 	$$(foreach hook,$$($(2)_PRE_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep))
 ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
@@ -816,6 +820,8 @@ endif # other packages
 endif # ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
 	$$(foreach hook,$$($(2)_POST_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep))
 
+endif # REDISTRIBUTE == IGNORE
+
 # add package to the general list of targets if requested by the buildroot
 # configuration
 ifeq ($$($$($(2)_KCONFIG_VAR)),y)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 09/51] core/pkg-virtual: ignore from legal-info output
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (7 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:13   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 10/51] core/legal-info: install source archives in their own sub-dir Yann E. MORIN
                   ` (42 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Virtual packages really have nothing to save for legal-info, so we just
ignore them.

Currently, packages are only extracted if they define _LICENSE_FILES.
Follow-up patches will always extract and patch non-ignored packages, so
we would potentially see spurious "extracting" and "patching" messages
for virtual packages on the console, which would be a bit strange.
Ignoring virtual packages will get us a cleaner log.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 docs/manual/adding-packages-virtual.txt | 3 +++
 package/pkg-virtual.mk                  | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/docs/manual/adding-packages-virtual.txt b/docs/manual/adding-packages-virtual.txt
index a5f17a2..11a497d 100644
--- a/docs/manual/adding-packages-virtual.txt
+++ b/docs/manual/adding-packages-virtual.txt
@@ -56,6 +56,9 @@ The +.mk+ for the virtual package should just evaluate the +virtual-package+ mac
 The ability to have target and host packages is also available, with the
 +host-virtual-package+ macro.
 
+.Note:
+Virtual packages are automatically ignored when generating the +legal-info+ output.
+
 ==== Provider's +Config.in+ file
 
 When adding a package as a provider, only the +Config.in+ file requires some
diff --git a/package/pkg-virtual.mk b/package/pkg-virtual.mk
index 9c68b51..1471b95 100644
--- a/package/pkg-virtual.mk
+++ b/package/pkg-virtual.mk
@@ -57,6 +57,8 @@ endif
 # Add dependency against the provider
 $(2)_DEPENDENCIES += $$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2)))
 
+$(2)_REDISTRIBUTE = IGNORE
+
 # Call the generic package infrastructure to generate the necessary
 # make targets
 $(call inner-generic-package,$(1),$(2),$(3),$(4))
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 10/51] core/legal-info: install source archives in their own sub-dir
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (8 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 09/51] core/pkg-virtual: ignore from legal-info output Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:16   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 11/51] core/legal-info: add package version to license directory Yann E. MORIN
                   ` (41 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Currently, we put all source archives side-by-side in the same
directory.

Since we're about to also save individual patches that were applied
on those sources, we don't want to make that directory a complete
mess of unassorted files.

So, we install each source archive in its own sub-directory, where
we'll later store the patches too. Store that location in a variable,
so it can be re-used later on (to install patches in a future commit).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 package/pkg-generic.mk | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 98db3ba..bb3a6da 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -482,6 +482,8 @@ endif
 
 $(2)_REDISTRIBUTE		?= YES
 
+$(2)_REDIST_SOURCES_DIR = $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))/$$($(2)_RAWNAME)-$$($(2)_VERSION)
+
 # When a target package is a toolchain dependency set this variable to
 # 'NO' so the 'toolchain' dependency is not added to prevent a circular
 # dependency
@@ -812,7 +814,7 @@ endif
 # Copy the source tarball
 	$$(Q)$$(call hardlink-copy,\
 		     $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
-		     $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))))
+		     $$($(2)_REDIST_SOURCES_DIR))
 endif # redistribute
 
 endif # other packages
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 11/51] core/legal-info: add package version to license directory
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (9 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 10/51] core/legal-info: install source archives in their own sub-dir Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:17   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches Yann E. MORIN
                   ` (40 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Now that we save the source archives in a directory named after the
package and its version, do the same for the license files, for
consistency.

It has a not-so-bad side-effect of also saving the version string in
the all-licenses list.

The only (small) drawback, is that the warnings about undefined
_LICENSE_FILES now contains the version string, too. That's unavoidable,
since that's what is stored in the legal report.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 package/pkg-generic.mk | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index bb3a6da..07ff820 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -791,10 +791,10 @@ ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
 # is that the license still applies to the files distributed as part
 # of the rootfs, even if the sources are not themselves redistributed.
 ifeq ($$(call qstrip,$$($(2)_LICENSE_FILES)),)
-	@$$(call legal-license-nofiles,$$($(2)_RAWNAME),$$(call UPPERCASE,$(4)))
-	@$$(call legal-warning-pkg,$$($(2)_RAWNAME),cannot save license ($(2)_LICENSE_FILES not defined))
+	@$$(call legal-license-nofiles,$$($(2)_RAWNAME)-$$($(2)_VERSION),$$(call UPPERCASE,$(4)))
+	@$$(call legal-warning-pkg,$$($(2)_RAWNAME)-$$($(2)_VERSION),cannot save license ($(2)_LICENSE_FILES not defined))
 else
-	@$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep))
+	@$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME)-$$($(2)_VERSION),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep))
 endif # license files
 
 ifeq ($$($(2)_SITE_METHOD),local)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (10 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 11/51] core/legal-info: add package version to license directory Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:18   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 13/51] core/legal-info: also save patches Yann E. MORIN
                   ` (39 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Currently, we only store the filename of the applied patches.

However, we are soon to want to install those patches in the legal-info
directory, so we'll have to know where those patches come from.

Instead of duplicating the logic to find the patches, just store the
full path to each of those patches so we can retrieve them more easily
later on.

Also always create the list-file, even if empty, so that we need not
test for its existence before reading it.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 support/scripts/apply-patches.sh | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
index 2edf054..ce957da 100755
--- a/support/scripts/apply-patches.sh
+++ b/support/scripts/apply-patches.sh
@@ -65,6 +65,10 @@ find ${builddir}/ '(' -name '*.rej' -o -name '.*.rej' ')' -print0 | \
 function apply_patch {
     path=$1
     patch=$2
+    case "${path}" in
+        /*) ;;
+        *)  path="$(pwd)/${path}";;
+    esac
     if [ "$3" ]; then
         type="series"; uncomp="cat"
     else
@@ -99,7 +103,7 @@ function apply_patch {
 	echo "Error: missing patch file ${path}/$patch"
 	exit 1
     fi
-    echo $patch >> ${builddir}/.applied_patches_list
+    echo "${path}/${patch}" >> ${builddir}/.applied_patches_list
     ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}" -t -N $silent
     if [ $? != 0 ] ; then
         echo "Patch failed!  Please fix ${patch}!"
@@ -135,6 +139,7 @@ function scan_patchdir {
     fi
 }
 
+touch ${builddir}/.applied_patches_list
 scan_patchdir "$patchdir" "$patchpattern"
 
 # Check for rejects...
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 13/51] core/legal-info: also save patches
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (11 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:19   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 14/51] core/legal-info: update the legal-info report header Yann E. MORIN
                   ` (38 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Currently, the legal-info infra only saves the source archive of a
package. However, that's not enough as we may apply some patches on
packages sources.

We do suggest users to also redistribute the Buildroot sources as part
of their compliance distribution, so the patches bundled in Buildroot
would indeed be included in the compliance distribution.

However, that's still not enough, since we may download some patches, or
the user may use a global patch directory. Patches in there might not
end up in the compliance distribution, and there are risks of
non-conformity.

So, always include patches alongside the source archive.

To ensure reproducibility, we also generate a series file, so patches
can be re-applied in the correct order.

We get the list of patches to include from the list of patches that were
applied by the package infrastructure (via the apply-patches support
script). So, we need to get packages properly extracted and patched
before we can save their legal-info, not just in the case they define
_LICENSE_FILES (however, we need not extract and patch a package if it
is set to be ignored for redistribution).

Update the legal-info header accordingly.

Note: this means that, when a (non-ignored) package is not patched and
defines no LICENSE_FILES, we will extract and patch it for nothing.
There is no easy way to know whether we have to patch a package or not.
We can only either duplicate the logic to detect patches (bad) or rely
on the infra actually patching the package.  Also, a vast majority of
packages are either patched, or define _LICENSE_FILES, so it is best and
easiest to always extract and patch them prior to legal-info.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 package/pkg-generic.mk           | 12 +++++++++---
 support/legal-info/README.header |  3 +--
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 07ff820..723d1a6 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -749,12 +749,14 @@ $(2)_MANIFEST_LICENSE_FILES ?= not saved
 
 # If the package declares _LICENSE_FILES, we need to extract it,
 # for overriden, local or normal remote packages alike, whether
-# we want to redistribute it or not, but not if we want to ignore it.
+# we want to redistribute it or not.
+# To get the list of patches applied to a package, we need to
+# patch it.
+# If we want to ignore the package, we need not extract or patch
+# it, however.
 ifneq ($$($(2)_REDISTRIBUTE),IGNORE)
-ifneq ($$($(2)_LICENSE_FILES),)
 $(1)-legal-info: $(1)-patch
 endif
-endif
 
 # We only save the sources of packages we want to redistribute, that are
 # non-local, and non-overriden. So only store, in the manifest, the tarball
@@ -815,6 +817,10 @@ endif
 	$$(Q)$$(call hardlink-copy,\
 		     $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
 		     $$($(2)_REDIST_SOURCES_DIR))
+	$$(Q)while read f; do \
+		$$(call hardlink-copy,$$$${f},$$($(2)_REDIST_SOURCES_DIR)) || exit 1; \
+		printf "%s\n" "$$$${f##*/}" >>$$($(2)_REDIST_SOURCES_DIR)/series || exit 1; \
+	done <$$($(2)_DIR)/.applied_patches_list
 endif # redistribute
 
 endif # other packages
diff --git a/support/legal-info/README.header b/support/legal-info/README.header
index 3321adb..90fc445 100644
--- a/support/legal-info/README.header
+++ b/support/legal-info/README.header
@@ -16,8 +16,7 @@ This material is composed of the following items.
    collect it manually.
  * The source code for all packages; this has been saved in the sources/
    subdirectory (except for the proprietary packages, which have not been
-   saved); patches applied to some packages by Buildroot are included in the
-   Buildroot sources and were not duplicated in the sources/ subdirectory.
+   saved).
  * A manifest file listing the configured packages and related information.
  * The license text of the packages; they have been saved in the licenses/
    subdirectory.
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 14/51] core/legal-info: update the legal-info report header
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (12 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 13/51] core/legal-info: also save patches Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:21   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 15/51] core/legal-info: ensure legal-info works in off-line mode Yann E. MORIN
                   ` (37 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

In some cases, the toolchain sources are now recovered and available in
the legal-info output. So, adapt the header to use conditional instead
of an definitive negation.

Also update the part about saving the sources: it's not the license list
that defines whether sources are installed, but rather whether the
package is reditributable or not. Update the header acoordingly.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 support/legal-info/README.header | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/support/legal-info/README.header b/support/legal-info/README.header
index 90fc445..08aa74d 100644
--- a/support/legal-info/README.header
+++ b/support/legal-info/README.header
@@ -12,11 +12,11 @@ This material is composed of the following items.
  * The Buildroot configuration file; this has been saved in buildroot.config.
  * The toolchain (cross-compiler and related tools) used to generate all the
    compiled programs.
-   Note: this has not been saved due to technical limitations, you must
+   Note: this may not been saved due to technical limitations, you may need to
    collect it manually.
  * The source code for all packages; this has been saved in the sources/
-   subdirectory (except for the proprietary packages, which have not been
-   saved).
+   subdirectory (except for the non-redistributable packages, which have not
+   been saved).
  * A manifest file listing the configured packages and related information.
  * The license text of the packages; they have been saved in the licenses/
    subdirectory.
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 15/51] core/legal-info: ensure legal-info works in off-line mode
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (13 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 14/51] core/legal-info: update the legal-info report header Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 16/51] toolchain/external: add hash for Arago actual sources Yann E. MORIN
                   ` (36 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Almost all packages which are saved for legal-info have their source
archives downloaded as part of 'make source', which makes an off-line
build completely possible [0].

However, for the pre-configured external toolchains, the source tarball
is different, as the main tarball is a binary package. And that source
tarball is only downloaded during the legal-info phase, which makes it
inconvenient for full off-line builds.

We fix that in two steps:

  - first, we move the declaration of _ACTUAL_SOURCE_TARBALL and _SITE
    earlier in the pkg-generic.mk file, so we get those definitions at
    the time we define the -source and -all-source rules;

  - second, we add a new rule, $(1)-legal-source which only
    $(1)-all-source depends on, so that we only download it for a
    top-level 'make source', not as part of the standard download
    mechanism (i.e. only what is really needed to build).

This way, we can do a complete [0] off-line build and are still able to
generate legal-info, while at the same time we do not incur any download
overhead during a simple build.

Also, we previously downloaded the _ACTUAL_SOURCE_TARBALL when it was
not empty. However, since _ACTUAL_SOURCE_TARBALL default to the value of
_SOURCE, it can not be empty when _SOURCE is not. Thus, we'd get a
spurious report of a missing hash for the tarball, since it was not in
a standard package rule (configure, build, install..) and thus would
miss the PKG and PKGDIR variables to find the .hash file.

We fix that in this commit as well, by:

  - setting PKG and PKGDIR just for the -legal-source rule;

  - only downloading _ACTUAL_SOURCE_TARBALL if it is not empty *and* not
    the same as _SOURCE (to avoid a second report about the hash).

Note that the actual sources are not downloaded if the package is set to
be ignored.

[0] Save for nodejs which invarriably wants to download stuff at build
time. Sigh... :-( Fixing that is work for another time...

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Peter Korsgaard <jacmet@uclibc.org>
---
 package/pkg-generic.mk | 38 ++++++++++++++++++++++++++++----------
 1 file changed, 28 insertions(+), 10 deletions(-)

diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 723d1a6..d693d0d 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -428,6 +428,14 @@ ifndef $(2)_SOURCE
  endif
 endif
 
+# If FOO_ACTUAL_SOURCE_TARBALL is explicitly defined, it means FOO_SOURCE is
+# indeed a binary (e.g. external toolchain) and FOO_ACTUAL_SOURCE_TARBALL/_SITE
+# point to the actual sources tarball. Use the actual sources for legal-info.
+# For most packages the FOO_SITE/FOO_SOURCE pair points to real source code,
+# so these are the defaults for FOO_ACTUAL_*.
+$(2)_ACTUAL_SOURCE_TARBALL ?= $$($(2)_SOURCE)
+$(2)_ACTUAL_SOURCE_SITE    ?= $$(call qstrip,$$($(2)_SITE))
+
 ifndef $(2)_PATCH
  ifdef $(3)_PATCH
   $(2)_PATCH = $$($(3)_PATCH)
@@ -629,6 +637,10 @@ $(1)-depends:		$$($(2)_FINAL_DEPENDENCIES)
 
 $(1)-source:		$$($(2)_TARGET_SOURCE)
 
+$(1)-all-source:	$(1)-legal-source
+
+$(1)-legal-source:	$(1)-source
+
 $(1)-source-check:
 	$$(foreach p,$$($(2)_ALL_DOWNLOADS),$$(call SOURCE_CHECK,$$(p))$$(sep))
 
@@ -770,13 +782,21 @@ endif
 endif
 endif
 
-# If FOO_ACTUAL_SOURCE_TARBALL is explicitly defined, it means FOO_SOURCE is
-# indeed a binary (e.g. external toolchain) and FOO_ACTUAL_SOURCE_TARBALL/_SITE
-# point to the actual sources tarball. Use the actual sources for legal-info.
-# For most packages the FOO_SITE/FOO_SOURCE pair points to real source code,
-# so these are the defaults for FOO_ACTUAL_*.
-$(2)_ACTUAL_SOURCE_TARBALL ?= $$($(2)_SOURCE)
-$(2)_ACTUAL_SOURCE_SITE    ?= $$(call qstrip,$$($(2)_SITE))
+# Download actual sources if they differ from the extracted sources
+# (e.g. for external toolchains)
+#
+# We need to provide PKG and PKGDIR, because there's no .stamp file for
+# the legal-info step.
+$(1)-legal-source:	PKG=$(2)
+$(1)-legal-source:	PKGDIR=$(pkgdir)
+$(1)-legal-source:
+ifneq ($$($(2)_REDISTRIBUTE),IGNORE)
+ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),)
+ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
+	$$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
+endif # actuall sources != sources
+endif # actuall source != ""
+endif # redistribute != ignore
 
 # legal-info: produce legally relevant info.
 $(1)-legal-info:
@@ -810,9 +830,6 @@ else
 # Other packages
 
 ifeq ($$($(2)_REDISTRIBUTE),YES)
-ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
-	$$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
-endif
 # Copy the source tarball
 	$$(Q)$$(call hardlink-copy,\
 		     $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
@@ -921,6 +938,7 @@ endif
 	$(1)-show-depends \
 	$(1)-show-version \
 	$(1)-source \
+	$(1)-legal-source \
 	$(1)-source-check
 
 ifeq ($$(patsubst %/,ERROR,$$($(2)_SITE)),ERROR)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 16/51] toolchain/external: add hash for Arago actual sources
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (14 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 15/51] core/legal-info: ensure legal-info works in off-line mode Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files Yann E. MORIN
                   ` (35 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 toolchain/toolchain-external/toolchain-external.hash | 1 +
 1 file changed, 1 insertion(+)

diff --git a/toolchain/toolchain-external/toolchain-external.hash b/toolchain/toolchain-external/toolchain-external.hash
index 2d41389..5327ffe 100644
--- a/toolchain/toolchain-external/toolchain-external.hash
+++ b/toolchain/toolchain-external/toolchain-external.hash
@@ -47,6 +47,7 @@ sha256 8ea78c5988b2bb507534f1ad46aa46659f66b39d55f2fc40e163a90b4195e70f  aarch64
 # ARM toolchains from Texas Instrument's Arago project
 sha256 f2febf3b3c565536461ad4405f1bcb835d75a6afb2a8bec958a1248cb4b81fc7  arago-2011.09-armv7a-linux-gnueabi-sdk.tar.bz2
 sha256 254af7d02eb3bcc8345c78e131700bc995d65b68232caaed21150a5fd1456070  arago-2011.09-armv5te-linux-gnueabi-sdk.tar.bz2
+sha256 25fbf0513ad7322b15cbaae964cafadcbb4c939f2708f57f40b8f9f2d601122b  arago-toolchain-2011.09-sources.tar.bz2
 
 # ARM and Aarch64 toolchains from Linaro
 sha256 0cffac0caea0eb3c8bdddfa14be011ce366680f40aeddbefc7cf23cb6d4f1891  gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (15 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 16/51] toolchain/external: add hash for Arago actual sources Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-12-03 17:24   ` Luca Ceresoli
  2015-11-23 14:47 ` [Buildroot] [PATCH 18/51] package/gcc: add a patch for arc rather than using sed Yann E. MORIN
                   ` (34 subsequent siblings)
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Having a hash of the saved files can be interesting for the recipient to
verify the integrity of the files.

We remove the warning file earlier, to exclude it from the hash list.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
---
 Makefile | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 5e62275..947f941 100644
--- a/Makefile
+++ b/Makefile
@@ -662,8 +662,13 @@ legal-info: dirs legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p
 		cat support/legal-info/README.warnings-header \
 			$(LEGAL_WARNINGS) >>$(LEGAL_REPORT); \
 		cat $(LEGAL_WARNINGS); fi
-	@echo "Legal info produced in $(LEGAL_INFO_DIR)"
 	@rm -f $(LEGAL_WARNINGS)
+	@find $(LEGAL_INFO_DIR) -type f -exec sha256sum {} + \
+	 |sed -r -e 's:  $(LEGAL_INFO_DIR)/+:  :' \
+	 |sort -k2 \
+	 >$(BUILD_DIR)/legal-info.sha256
+	@mv $(BUILD_DIR)/legal-info.sha256 $(LEGAL_INFO_DIR)/legal-info.sha256
+	@echo "Legal info produced in $(LEGAL_INFO_DIR)"
 
 show-targets:
 	@echo $(PACKAGES) $(TARGETS_ROOTFS)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 18/51] package/gcc: add a patch for arc rather than using sed
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (16 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 19/51] package/gcc: simplify setting GCC_SOURCE Yann E. MORIN
                   ` (33 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 .../900-no-libgmon.a-when-inhibit_libc.patch       | 43 ++++++++++++++++++++++
 package/gcc/gcc-initial/gcc-initial.mk             | 13 -------
 2 files changed, 43 insertions(+), 13 deletions(-)
 create mode 100644 package/gcc/arc-2015.06/900-no-libgmon.a-when-inhibit_libc.patch

diff --git a/package/gcc/arc-2015.06/900-no-libgmon.a-when-inhibit_libc.patch b/package/gcc/arc-2015.06/900-no-libgmon.a-when-inhibit_libc.patch
new file mode 100644
index 0000000..e9fbf3f
--- /dev/null
+++ b/package/gcc/arc-2015.06/900-no-libgmon.a-when-inhibit_libc.patch
@@ -0,0 +1,43 @@
+libgcc: on ARC, do not build libgmon.a when inhibit_libc
+
+gcc on ARC has a bug: in its libgcc, even when no C library is available
+(--with-newlib is passed, and therefore inhibit_libc is defined), it
+tries to use the C library for the libgmon library.
+
+Only add it to the list of extra_parts if inhibit_libc is not true.
+
+inhibit_libc is not available to libgcc, so we use a dirty hack to get
+its value from the gcc/config.log. This is not really nice, but is not
+much worse than the sed invocation we previously had to tweak that file.
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+
+diff -durN host-gcc-arc-2015.06.orig/libgcc/config.host host-gcc-arc-2015.06/libgcc/config.host
+--- host-gcc-arc-2015.06.orig/libgcc/config.host	2015-11-15 23:01:57.588638300 +0100
++++ host-gcc-arc-2015.06/libgcc/config.host	2015-11-15 23:07:25.256450515 +0100
+@@ -75,6 +75,9 @@
+ md_unwind_header=no-unwind.h
+ unwind_header=unwind-generic.h
+ 
++# Hack to know whether we need to set inhibit_libc (to exclude libgmon.a)
++eval $(grep -E "^inhibit_libc='true'\$" ../../gcc/config.log 2>&1)
++
+ # Set default cpu_type so it can be updated in each machine entry.
+ cpu_type=`echo ${host} | sed 's/-.*$//'`
+ case ${host} in
+diff -durN host-gcc-arc-2015.06.orig/libgcc/config.host host-gcc-arc-2015.06/libgcc/config.host
+--- host-gcc-arc-2015.06.orig/libgcc/config.host	2015-06-26 12:34:27.000000000 +0200
++++ host-gcc-arc-2015.06/libgcc/config.host	2015-11-15 19:47:27.384690564 +0100
+@@ -327,7 +327,11 @@
+ 	;;
+ arc*-*-linux-uclibc*)
+ 	tmake_file="${tmake_file} t-slibgcc-libgcc t-slibgcc-nolc-override arc/t-arc700-uClibc arc/t-arc"
+-	extra_parts="crti.o crtn.o crtend.o crtbegin.o crtendS.o crtbeginS.o libgmon.a crtg.o crtgend.o"
++	extra_parts="crti.o crtn.o crtend.o crtbegin.o crtendS.o crtbeginS.o"
++	if [ ! "${inhibit_libc}" = "true" ]; then
++		extra_parts="${extra_parts} libgmon.a"
++	fi
++	extra_parts="${extra_parts} crtg.o crtgend.o"
+ 	;;
+ arm-wrs-vxworks)
+ 	tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index 1e58d8b..f3cd34c 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -25,19 +25,6 @@ HOST_GCC_INITIAL_SUBDIR = build
 
 HOST_GCC_INITIAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK
 
-# gcc on ARC has a bug: in its libgcc, even when no C library is
-# available (--with-newlib is passed, and therefore inhibit_libc is
-# defined), it tries to use the C library for the libgmon
-# library. Since it's not needed in gcc-initial, we disabled it here.
-ifeq ($(BR2_GCC_VERSION_4_8_ARC),y)
-define HOST_GCC_INITIAL_DISABLE_LIBGMON
-	$(SED) 's/crtbeginS.o libgmon.a crtg.o/crtbeginS.o crtg.o/' \
-		$(@D)/libgcc/config.host
-endef
-HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_INITIAL_DISABLE_LIBGMON
-HOST_GCC_INITIAL_POST_RSYNC_HOOKS += HOST_GCC_INITIAL_DISABLE_LIBGMON
-endif
-
 HOST_GCC_INITIAL_CONF_OPTS = \
 	$(HOST_GCC_COMMON_CONF_OPTS) \
 	--enable-languages=c \
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 19/51] package/gcc: simplify setting GCC_SOURCE
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (17 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 18/51] package/gcc: add a patch for arc rather than using sed Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 20/51] pacakge/gcc: rename all variables as it is a host-only package Yann E. MORIN
                   ` (32 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

We have a conditional block to set the GCC_SOURCE variable, so we do not
need to use a 'make' conditonal assignment.

Just move setting GCC_SOURCE in the conditional block.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc.mk | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index 51e8378..091bba7 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -15,10 +15,9 @@ GCC_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,gcc,$(GCC_VERSION)
 GCC_SOURCE = gcc-$(GCC_VERSION).tar.gz
 else
 GCC_SITE = $(BR2_GNU_MIRROR:/=)/gcc/gcc-$(GCC_VERSION)
+GCC_SOURCE = gcc-$(GCC_VERSION).tar.bz2
 endif
 
-GCC_SOURCE ?= gcc-$(GCC_VERSION).tar.bz2
-
 #
 # Xtensa special hook
 #
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 20/51] pacakge/gcc: rename all variables as it is a host-only package
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (18 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 19/51] package/gcc: simplify setting GCC_SOURCE Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 21/51] package/gcc: prefix all common variables with HOST_GCC_COMMON_ Yann E. MORIN
                   ` (31 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

The naming convention in Buildroot is that package-specific variables be
prefixed with the package name.

gcc-initial and gcc-final are host-only packages, so they really are
named host-gcc-initial and host-gcc-final, so all their variables should
be prefixed with HOST_GCC_INITIAL_ or HOST_GCC_FINAL_.

gcc is not a package, it only defines variables for either or both of
host-gcc-initial and host-gcc-final, so is only defining variables for
the host variants. Even though it is not a package, prefix all variables
in gcc.mk with HOST_GCC_.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-final/gcc-final.mk     | 16 ++++-----
 package/gcc/gcc-initial/gcc-initial.mk |  6 ++--
 package/gcc/gcc.mk                     | 60 +++++++++++++++++-----------------
 3 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
index 53199c3..9a6d437 100644
--- a/package/gcc/gcc-final/gcc-final.mk
+++ b/package/gcc/gcc-final/gcc-final.mk
@@ -4,9 +4,9 @@
 #
 ################################################################################
 
-GCC_FINAL_VERSION = $(GCC_VERSION)
-GCC_FINAL_SITE = $(GCC_SITE)
-GCC_FINAL_SOURCE = $(GCC_SOURCE)
+HOST_GCC_FINAL_VERSION = $(HOST_GCC_VERSION)
+HOST_GCC_FINAL_SITE = $(HOST_GCC_SITE)
+HOST_GCC_FINAL_SOURCE = $(HOST_GCC_SOURCE)
 
 HOST_GCC_FINAL_DEPENDENCIES = \
 	$(HOST_GCC_COMMON_DEPENDENCIES) \
@@ -67,14 +67,14 @@ endef
 
 
 # Languages supported by the cross-compiler
-GCC_FINAL_CROSS_LANGUAGES-y = c
-GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
-GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran
-GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y))
+HOST_GCC_FINAL_CROSS_LANGUAGES-y = c
+HOST_GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
+HOST_GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran
+HOST_GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(HOST_GCC_FINAL_CROSS_LANGUAGES-y))
 
 HOST_GCC_FINAL_CONF_OPTS = \
 	$(HOST_GCC_COMMON_CONF_OPTS) \
-	--enable-languages=$(GCC_FINAL_CROSS_LANGUAGES) \
+	--enable-languages=$(HOST_GCC_FINAL_CROSS_LANGUAGES) \
 	--with-build-time-tools=$(HOST_DIR)/usr/$(GNU_TARGET_NAME)/bin
 
 HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*
diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index f3cd34c..ca8a7ce 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -4,9 +4,9 @@
 #
 ################################################################################
 
-GCC_INITIAL_VERSION = $(GCC_VERSION)
-GCC_INITIAL_SITE = $(GCC_SITE)
-GCC_INITIAL_SOURCE = $(GCC_SOURCE)
+HOST_GCC_INITIAL_VERSION = $(HOST_GCC_VERSION)
+HOST_GCC_INITIAL_SITE = $(HOST_GCC_SITE)
+HOST_GCC_INITIAL_SOURCE = $(HOST_GCC_SOURCE)
 
 HOST_GCC_INITIAL_DEPENDENCIES = $(HOST_GCC_COMMON_DEPENDENCIES)
 
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index 091bba7..f5d1b50 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -8,14 +8,14 @@
 # Version, site and source
 #
 
-GCC_VERSION = $(call qstrip,$(BR2_GCC_VERSION))
+HOST_GCC_VERSION = $(call qstrip,$(BR2_GCC_VERSION))
 
 ifeq ($(BR2_arc),y)
-GCC_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,gcc,$(GCC_VERSION))
-GCC_SOURCE = gcc-$(GCC_VERSION).tar.gz
+HOST_GCC_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,gcc,$(HOST_GCC_VERSION))
+HOST_GCC_SOURCE = gcc-$(HOST_GCC_VERSION).tar.gz
 else
-GCC_SITE = $(BR2_GNU_MIRROR:/=)/gcc/gcc-$(GCC_VERSION)
-GCC_SOURCE = gcc-$(GCC_VERSION).tar.bz2
+HOST_GCC_SITE = $(BR2_GNU_MIRROR:/=)/gcc/gcc-$(HOST_GCC_VERSION)
+HOST_GCC_SOURCE = gcc-$(HOST_GCC_VERSION).tar.bz2
 endif
 
 #
@@ -35,14 +35,14 @@ endef
 ifeq ($(ARCH),powerpc)
 ifneq ($(BR2_SOFT_FLOAT),)
 define HOST_GCC_APPLY_POWERPC_PATCH
-	$(APPLY_PATCHES) $(@D) package/gcc/$(GCC_VERSION) 1000-powerpc-link-with-math-lib.patch.conditional
+	$(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_VERSION) 1000-powerpc-link-with-math-lib.patch.conditional
 endef
 endif
 endif
 
 define HOST_GCC_APPLY_PATCHES
-	if test -d package/gcc/$(GCC_VERSION); then \
-	  $(APPLY_PATCHES) $(@D) package/gcc/$(GCC_VERSION) \*.patch ; \
+	if test -d package/gcc/$(HOST_GCC_VERSION); then \
+	  $(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_VERSION) \*.patch ; \
 	fi;
 	$(HOST_GCC_APPLY_POWERPC_PATCH)
 endef
@@ -93,28 +93,28 @@ HOST_GCC_COMMON_CONF_OPTS = \
 HOST_GCC_COMMON_CONF_ENV = \
 	MAKEINFO=missing
 
-GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS)
-GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
+HOST_GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS)
+HOST_GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
 
 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43810
 # Workaround until it's fixed in 4.5.4 or later
 ifeq ($(ARCH),powerpc)
-ifeq ($(findstring x4.5.,x$(GCC_VERSION)),x4.5.)
-GCC_COMMON_TARGET_CFLAGS = $(filter-out -Os,$(GCC_COMMON_TARGET_CFLAGS))
-GCC_COMMON_TARGET_CXXFLAGS = $(filter-out -Os,$(GCC_COMMON_TARGET_CXXFLAGS))
+ifeq ($(findstring x4.5.,x$(HOST_GCC_VERSION)),x4.5.)
+HOST_GCC_COMMON_TARGET_CFLAGS = $(filter-out -Os,$(HOST_GCC_COMMON_TARGET_CFLAGS))
+HOST_GCC_COMMON_TARGET_CXXFLAGS = $(filter-out -Os,$(HOST_GCC_COMMON_TARGET_CXXFLAGS))
 endif
 endif
 
 # Xtensa libgcc can't be built with -mauto-litpools
 # because of the trick used to generate .init/.fini sections.
 ifeq ($(BR2_xtensa),y)
-GCC_COMMON_TARGET_CFLAGS = $(filter-out -mauto-litpools,$(TARGET_CFLAGS))
-GCC_COMMON_TARGET_CXXFLAGS = $(filter-out -mauto-litpools,$(TARGET_CXXFLAGS))
+HOST_GCC_COMMON_TARGET_CFLAGS = $(filter-out -mauto-litpools,$(TARGET_CFLAGS))
+HOST_GCC_COMMON_TARGET_CXXFLAGS = $(filter-out -mauto-litpools,$(TARGET_CXXFLAGS))
 endif
 
 # Propagate options used for target software building to GCC target libs
-HOST_GCC_COMMON_CONF_ENV += CFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CFLAGS)"
-HOST_GCC_COMMON_CONF_ENV += CXXFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CXXFLAGS)"
+HOST_GCC_COMMON_CONF_ENV += CFLAGS_FOR_TARGET="$(HOST_GCC_COMMON_TARGET_CFLAGS)"
+HOST_GCC_COMMON_CONF_ENV += CXXFLAGS_FOR_TARGET="$(HOST_GCC_COMMON_TARGET_CXXFLAGS)"
 
 # libitm needs sparc V9+
 ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y)
@@ -206,19 +206,19 @@ HOST_GCC_COMMON_CONF_OPTS += --with-cpu=$(call qstrip,$(BR2_GCC_TARGET_CPU))
 endif
 endif
 
-GCC_TARGET_FPU = $(call qstrip,$(BR2_GCC_TARGET_FPU))
-ifneq ($(GCC_TARGET_FPU),)
-HOST_GCC_COMMON_CONF_OPTS += --with-fpu=$(GCC_TARGET_FPU)
+HOST_GCC_TARGET_FPU = $(call qstrip,$(BR2_GCC_TARGET_FPU))
+ifneq ($(HOST_GCC_TARGET_FPU),)
+HOST_GCC_COMMON_CONF_OPTS += --with-fpu=$(HOST_GCC_TARGET_FPU)
 endif
 
-GCC_TARGET_FLOAT_ABI = $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI))
-ifneq ($(GCC_TARGET_FLOAT_ABI),)
-HOST_GCC_COMMON_CONF_OPTS += --with-float=$(GCC_TARGET_FLOAT_ABI)
+HOST_GCC_TARGET_FLOAT_ABI = $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI))
+ifneq ($(HOST_GCC_TARGET_FLOAT_ABI),)
+HOST_GCC_COMMON_CONF_OPTS += --with-float=$(HOST_GCC_TARGET_FLOAT_ABI)
 endif
 
-GCC_TARGET_MODE = $(call qstrip,$(BR2_GCC_TARGET_MODE))
-ifneq ($(GCC_TARGET_MODE),)
-HOST_GCC_COMMON_CONF_OPTS += --with-mode=$(GCC_TARGET_MODE)
+HOST_GCC_TARGET_MODE = $(call qstrip,$(BR2_GCC_TARGET_MODE))
+ifneq ($(HOST_GCC_TARGET_MODE),)
+HOST_GCC_COMMON_CONF_OPTS += --with-mode=$(HOST_GCC_TARGET_MODE)
 endif
 
 # Enable proper double/long double for SPE ABI
@@ -241,20 +241,20 @@ HOST_GCC_COMMON_MAKE_OPTS = \
 	gcc_cv_libc_provides_ssp=$(if $(BR2_TOOLCHAIN_HAS_SSP),yes,no)
 
 ifeq ($(BR2_CCACHE),y)
-HOST_GCC_COMMON_CCACHE_HASH_FILES += $(DL_DIR)/$(GCC_SOURCE)
+HOST_GCC_COMMON_CCACHE_HASH_FILES += $(DL_DIR)/$(HOST_GCC_SOURCE)
 # Cfr. PATCH_BASE_DIRS in .stamp_patched, but we catch both versioned and
 # unversioned patches unconditionally
 HOST_GCC_COMMON_CCACHE_HASH_FILES += \
 	$(sort $(wildcard \
-		package/gcc/$(GCC_VERSION)/*.patch \
-		$(addsuffix $((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
+		package/gcc/$(HOST_GCC_VERSION)/*.patch \
+		$(addsuffix $((PKG)_RAWNAME)/$(HOST_GCC_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
 		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(BR2_GLOBAL_PATCH_DIR))))
 ifeq ($(BR2_xtensa),y)
 HOST_GCC_COMMON_CCACHE_HASH_FILES += $(HOST_GCC_XTENSA_OVERLAY_TAR)
 endif
 ifeq ($(ARCH),powerpc)
 ifneq ($(BR2_SOFT_FLOAT),)
-HOST_GCC_COMMON_CCACHE_HASH_FILES += package/gcc/$(GCC_VERSION)/1000-powerpc-link-with-math-lib.patch.conditional
+HOST_GCC_COMMON_CCACHE_HASH_FILES += package/gcc/$(HOST_GCC_VERSION)/1000-powerpc-link-with-math-lib.patch.conditional
 endif
 endif
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 21/51] package/gcc: prefix all common variables with HOST_GCC_COMMON_
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (19 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 20/51] pacakge/gcc: rename all variables as it is a host-only package Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 22/51] package/gcc: rename the common files Yann E. MORIN
                   ` (30 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

The variables defined in gcc.mk are all common to the gcc-initial and
gcc-final packages.

In a followup patch, we're going to rename gcc-final into just gcc, so
to avoid namespace clashing, we rename all common gcc variables to be
prefixed with HOST_GCC_COMMON_ instead of just HOST_GCC_.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-final/gcc-final.mk     | 18 +++++-----
 package/gcc/gcc-initial/gcc-initial.mk | 18 +++++-----
 package/gcc/gcc.mk                     | 66 +++++++++++++++++-----------------
 3 files changed, 51 insertions(+), 51 deletions(-)

diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
index 9a6d437..c5da163 100644
--- a/package/gcc/gcc-final/gcc-final.mk
+++ b/package/gcc/gcc-final/gcc-final.mk
@@ -4,28 +4,28 @@
 #
 ################################################################################
 
-HOST_GCC_FINAL_VERSION = $(HOST_GCC_VERSION)
-HOST_GCC_FINAL_SITE = $(HOST_GCC_SITE)
-HOST_GCC_FINAL_SOURCE = $(HOST_GCC_SOURCE)
+HOST_GCC_FINAL_VERSION = $(HOST_GCC_COMMON_VERSION)
+HOST_GCC_FINAL_SITE = $(HOST_GCC_COMMON_SITE)
+HOST_GCC_FINAL_SOURCE = $(HOST_GCC_COMMON_SOURCE)
 
 HOST_GCC_FINAL_DEPENDENCIES = \
 	$(HOST_GCC_COMMON_DEPENDENCIES) \
 	$(BR_LIBC)
 
-HOST_GCC_FINAL_EXCLUDES = $(HOST_GCC_EXCLUDES)
-HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_FAKE_TESTSUITE
+HOST_GCC_FINAL_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
+HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
 ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
-HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_XTENSA_OVERLAY_EXTRACT
+HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
 endif
 
-HOST_GCC_FINAL_POST_PATCH_HOOKS += HOST_GCC_APPLY_PATCHES
+HOST_GCC_FINAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
 
 # gcc doesn't support in-tree build, so we create a 'build'
 # subdirectory in the gcc sources, and build from there.
 HOST_GCC_FINAL_SUBDIR = build
 
-HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK
+HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
 
 # We want to always build the static variants of all the gcc libraries,
 # of which libstdc++, libgomp, libmudflap...
@@ -126,7 +126,7 @@ HOST_GCC_FINAL_TOOLCHAIN_WRAPPER_ARGS += $(HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARG
 HOST_GCC_FINAL_POST_BUILD_HOOKS += TOOLCHAIN_BUILD_WRAPPER
 # Note: this must be done after CREATE_CC_SYMLINKS, otherwise the
 # -cc symlink to the wrapper is not created.
-HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
+HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_COMMON_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
 
 # In gcc 4.7.x, the ARM EABIhf library loader path for (e)glibc was not
 # correct, so we create a symbolic link to make things work
diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index ca8a7ce..02537cf 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -4,26 +4,26 @@
 #
 ################################################################################
 
-HOST_GCC_INITIAL_VERSION = $(HOST_GCC_VERSION)
-HOST_GCC_INITIAL_SITE = $(HOST_GCC_SITE)
-HOST_GCC_INITIAL_SOURCE = $(HOST_GCC_SOURCE)
+HOST_GCC_INITIAL_VERSION = $(HOST_GCC_COMMON_VERSION)
+HOST_GCC_INITIAL_SITE = $(HOST_GCC_COMMON_SITE)
+HOST_GCC_INITIAL_SOURCE = $(HOST_GCC_COMMON_SOURCE)
 
 HOST_GCC_INITIAL_DEPENDENCIES = $(HOST_GCC_COMMON_DEPENDENCIES)
 
-HOST_GCC_INITIAL_EXCLUDES = $(HOST_GCC_EXCLUDES)
-HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_FAKE_TESTSUITE
+HOST_GCC_INITIAL_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
+HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
 ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
-HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_XTENSA_OVERLAY_EXTRACT
+HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
 endif
 
-HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_APPLY_PATCHES
+HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
 
 # gcc doesn't support in-tree build, so we create a 'build'
 # subdirectory in the gcc sources, and build from there.
 HOST_GCC_INITIAL_SUBDIR = build
 
-HOST_GCC_INITIAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK
+HOST_GCC_INITIAL_PRE_CONFIGURE_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
 
 HOST_GCC_INITIAL_CONF_OPTS = \
 	$(HOST_GCC_COMMON_CONF_OPTS) \
@@ -49,6 +49,6 @@ endif
 
 HOST_GCC_INITIAL_TOOLCHAIN_WRAPPER_ARGS += $(HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS)
 HOST_GCC_INITIAL_POST_BUILD_HOOKS += TOOLCHAIN_BUILD_WRAPPER
-HOST_GCC_INITIAL_POST_INSTALL_HOOKS += HOST_GCC_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
+HOST_GCC_INITIAL_POST_INSTALL_HOOKS += HOST_GCC_COMMON_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
 
 $(eval $(host-autotools-package))
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index f5d1b50..abab6ec 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -8,24 +8,24 @@
 # Version, site and source
 #
 
-HOST_GCC_VERSION = $(call qstrip,$(BR2_GCC_VERSION))
+HOST_GCC_COMMON_VERSION = $(call qstrip,$(BR2_GCC_VERSION))
 
 ifeq ($(BR2_arc),y)
-HOST_GCC_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,gcc,$(HOST_GCC_VERSION))
-HOST_GCC_SOURCE = gcc-$(HOST_GCC_VERSION).tar.gz
+HOST_GCC_COMMON_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,gcc,$(HOST_GCC_COMMON_VERSION))
+HOST_GCC_COMMON_SOURCE = gcc-$(HOST_GCC_COMMON_VERSION).tar.gz
 else
-HOST_GCC_SITE = $(BR2_GNU_MIRROR:/=)/gcc/gcc-$(HOST_GCC_VERSION)
-HOST_GCC_SOURCE = gcc-$(HOST_GCC_VERSION).tar.bz2
+HOST_GCC_COMMON_SITE = $(BR2_GNU_MIRROR:/=)/gcc/gcc-$(HOST_GCC_COMMON_VERSION)
+HOST_GCC_COMMON_SOURCE = gcc-$(HOST_GCC_COMMON_VERSION).tar.bz2
 endif
 
 #
 # Xtensa special hook
 #
 
-HOST_GCC_XTENSA_OVERLAY_TAR = $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(call qstrip,$(BR2_XTENSA_CORE_NAME)).tar
+HOST_GCC_COMMON_XTENSA_OVERLAY_TAR = $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(call qstrip,$(BR2_XTENSA_CORE_NAME)).tar
 
-define HOST_GCC_XTENSA_OVERLAY_EXTRACT
-	tar xf $(HOST_GCC_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gcc
+define HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
+	tar xf $(HOST_GCC_COMMON_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gcc
 endef
 
 #
@@ -34,24 +34,24 @@ endef
 
 ifeq ($(ARCH),powerpc)
 ifneq ($(BR2_SOFT_FLOAT),)
-define HOST_GCC_APPLY_POWERPC_PATCH
-	$(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_VERSION) 1000-powerpc-link-with-math-lib.patch.conditional
+define HOST_GCC_COMMON_APPLY_POWERPC_PATCH
+	$(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_COMMON_VERSION) 1000-powerpc-link-with-math-lib.patch.conditional
 endef
 endif
 endif
 
-define HOST_GCC_APPLY_PATCHES
-	if test -d package/gcc/$(HOST_GCC_VERSION); then \
-	  $(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_VERSION) \*.patch ; \
+define HOST_GCC_COMMON_APPLY_PATCHES
+	if test -d package/gcc/$(HOST_GCC_COMMON_VERSION); then \
+	  $(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_COMMON_VERSION) \*.patch ; \
 	fi;
-	$(HOST_GCC_APPLY_POWERPC_PATCH)
+	$(HOST_GCC_COMMON_APPLY_POWERPC_PATCH)
 endef
 
-HOST_GCC_EXCLUDES = \
+HOST_GCC_COMMON_EXCLUDES = \
 	libjava/* libgo/* \
 	gcc/testsuite/* libstdc++-v3/testsuite/*
 
-define HOST_GCC_FAKE_TESTSUITE
+define HOST_GCC_COMMON_FAKE_TESTSUITE
 	mkdir -p $(@D)/libstdc++-v3/testsuite/
 	echo "all:" > $(@D)/libstdc++-v3/testsuite/Makefile.in
 	echo "install:" >> $(@D)/libstdc++-v3/testsuite/Makefile.in
@@ -61,7 +61,7 @@ endef
 # Create 'build' directory and configure symlink
 #
 
-define HOST_GCC_CONFIGURE_SYMLINK
+define HOST_GCC_COMMON_CONFIGURE_SYMLINK
 	mkdir -p $(@D)/build
 	ln -sf ../configure $(@D)/build/configure
 endef
@@ -99,7 +99,7 @@ HOST_GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43810
 # Workaround until it's fixed in 4.5.4 or later
 ifeq ($(ARCH),powerpc)
-ifeq ($(findstring x4.5.,x$(HOST_GCC_VERSION)),x4.5.)
+ifeq ($(findstring x4.5.,x$(HOST_GCC_COMMON_VERSION)),x4.5.)
 HOST_GCC_COMMON_TARGET_CFLAGS = $(filter-out -Os,$(HOST_GCC_COMMON_TARGET_CFLAGS))
 HOST_GCC_COMMON_TARGET_CXXFLAGS = $(filter-out -Os,$(HOST_GCC_COMMON_TARGET_CXXFLAGS))
 endif
@@ -206,19 +206,19 @@ HOST_GCC_COMMON_CONF_OPTS += --with-cpu=$(call qstrip,$(BR2_GCC_TARGET_CPU))
 endif
 endif
 
-HOST_GCC_TARGET_FPU = $(call qstrip,$(BR2_GCC_TARGET_FPU))
-ifneq ($(HOST_GCC_TARGET_FPU),)
-HOST_GCC_COMMON_CONF_OPTS += --with-fpu=$(HOST_GCC_TARGET_FPU)
+HOST_GCC_COMMON_TARGET_FPU = $(call qstrip,$(BR2_GCC_TARGET_FPU))
+ifneq ($(HOST_GCC_COMMON_TARGET_FPU),)
+HOST_GCC_COMMON_CONF_OPTS += --with-fpu=$(HOST_GCC_COMMON_TARGET_FPU)
 endif
 
-HOST_GCC_TARGET_FLOAT_ABI = $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI))
-ifneq ($(HOST_GCC_TARGET_FLOAT_ABI),)
-HOST_GCC_COMMON_CONF_OPTS += --with-float=$(HOST_GCC_TARGET_FLOAT_ABI)
+HOST_GCC_COMMON_TARGET_FLOAT_ABI = $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI))
+ifneq ($(HOST_GCC_COMMON_TARGET_FLOAT_ABI),)
+HOST_GCC_COMMON_CONF_OPTS += --with-float=$(HOST_GCC_COMMON_TARGET_FLOAT_ABI)
 endif
 
-HOST_GCC_TARGET_MODE = $(call qstrip,$(BR2_GCC_TARGET_MODE))
-ifneq ($(HOST_GCC_TARGET_MODE),)
-HOST_GCC_COMMON_CONF_OPTS += --with-mode=$(HOST_GCC_TARGET_MODE)
+HOST_GCC_COMMON_TARGET_MODE = $(call qstrip,$(BR2_GCC_TARGET_MODE))
+ifneq ($(HOST_GCC_COMMON_TARGET_MODE),)
+HOST_GCC_COMMON_CONF_OPTS += --with-mode=$(HOST_GCC_COMMON_TARGET_MODE)
 endif
 
 # Enable proper double/long double for SPE ABI
@@ -241,20 +241,20 @@ HOST_GCC_COMMON_MAKE_OPTS = \
 	gcc_cv_libc_provides_ssp=$(if $(BR2_TOOLCHAIN_HAS_SSP),yes,no)
 
 ifeq ($(BR2_CCACHE),y)
-HOST_GCC_COMMON_CCACHE_HASH_FILES += $(DL_DIR)/$(HOST_GCC_SOURCE)
+HOST_GCC_COMMON_CCACHE_HASH_FILES += $(DL_DIR)/$(HOST_GCC_COMMON_SOURCE)
 # Cfr. PATCH_BASE_DIRS in .stamp_patched, but we catch both versioned and
 # unversioned patches unconditionally
 HOST_GCC_COMMON_CCACHE_HASH_FILES += \
 	$(sort $(wildcard \
-		package/gcc/$(HOST_GCC_VERSION)/*.patch \
-		$(addsuffix $((PKG)_RAWNAME)/$(HOST_GCC_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
+		package/gcc/$(HOST_GCC_COMMON_VERSION)/*.patch \
+		$(addsuffix $((PKG)_RAWNAME)/$(HOST_GCC_COMMON_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
 		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(BR2_GLOBAL_PATCH_DIR))))
 ifeq ($(BR2_xtensa),y)
-HOST_GCC_COMMON_CCACHE_HASH_FILES += $(HOST_GCC_XTENSA_OVERLAY_TAR)
+HOST_GCC_COMMON_CCACHE_HASH_FILES += $(HOST_GCC_COMMON_XTENSA_OVERLAY_TAR)
 endif
 ifeq ($(ARCH),powerpc)
 ifneq ($(BR2_SOFT_FLOAT),)
-HOST_GCC_COMMON_CCACHE_HASH_FILES += package/gcc/$(HOST_GCC_VERSION)/1000-powerpc-link-with-math-lib.patch.conditional
+HOST_GCC_COMMON_CCACHE_HASH_FILES += package/gcc/$(HOST_GCC_COMMON_VERSION)/1000-powerpc-link-with-math-lib.patch.conditional
 endif
 endif
 
@@ -276,7 +276,7 @@ endif # BR2_CCACHE
 # *-ranlib and *-nm.
 # Avoid that a .br_real is symlinked a second time.
 # Also create <arch>-linux-<tool> symlinks.
-define HOST_GCC_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
+define HOST_GCC_COMMON_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
 	$(Q)cd $(HOST_DIR)/usr/bin; \
 	for i in $(GNU_TARGET_NAME)-*; do \
 		case "$$i" in \
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 22/51] package/gcc: rename the common files
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (20 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 21/51] package/gcc: prefix all common variables with HOST_GCC_COMMON_ Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 23/51] package/gcc: rename gcc-final into plain gcc Yann E. MORIN
                   ` (29 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/{gcc.hash => gcc-common.hash} | 0
 package/gcc/{gcc.mk => gcc-common.mk}     | 0
 package/gcc/gcc-final/gcc-final.hash      | 2 +-
 package/gcc/gcc-initial/gcc-initial.hash  | 2 +-
 4 files changed, 2 insertions(+), 2 deletions(-)
 rename package/gcc/{gcc.hash => gcc-common.hash} (100%)
 rename package/gcc/{gcc.mk => gcc-common.mk} (100%)

diff --git a/package/gcc/gcc.hash b/package/gcc/gcc-common.hash
similarity index 100%
rename from package/gcc/gcc.hash
rename to package/gcc/gcc-common.hash
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc-common.mk
similarity index 100%
rename from package/gcc/gcc.mk
rename to package/gcc/gcc-common.mk
diff --git a/package/gcc/gcc-final/gcc-final.hash b/package/gcc/gcc-final/gcc-final.hash
index 7ac9361..299f535 120000
--- a/package/gcc/gcc-final/gcc-final.hash
+++ b/package/gcc/gcc-final/gcc-final.hash
@@ -1 +1 @@
-../gcc.hash
\ No newline at end of file
+../gcc-common.hash
\ No newline at end of file
diff --git a/package/gcc/gcc-initial/gcc-initial.hash b/package/gcc/gcc-initial/gcc-initial.hash
index 7ac9361..299f535 120000
--- a/package/gcc/gcc-initial/gcc-initial.hash
+++ b/package/gcc/gcc-initial/gcc-initial.hash
@@ -1 +1 @@
-../gcc.hash
\ No newline at end of file
+../gcc-common.hash
\ No newline at end of file
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 23/51] package/gcc: rename gcc-final into plain gcc
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (21 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 22/51] package/gcc: rename the common files Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 24/51] package/gcc-initial: ignore from legal-info output Yann E. MORIN
                   ` (28 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/4.9.3/860-cilk-wchar.patch             |   6 +-
 .../gcc/{gcc-final/gcc-final.hash => gcc/gcc.hash} |   0
 package/gcc/{gcc-final/gcc-final.mk => gcc/gcc.mk} | 136 ++++++++++-----------
 .../toolchain-buildroot/toolchain-buildroot.mk     |   4 +-
 4 files changed, 73 insertions(+), 73 deletions(-)
 rename package/gcc/{gcc-final/gcc-final.hash => gcc/gcc.hash} (100%)
 rename package/gcc/{gcc-final/gcc-final.mk => gcc/gcc.mk} (51%)

diff --git a/package/gcc/4.9.3/860-cilk-wchar.patch b/package/gcc/4.9.3/860-cilk-wchar.patch
index 1837405..30962bb 100644
--- a/package/gcc/4.9.3/860-cilk-wchar.patch
+++ b/package/gcc/4.9.3/860-cilk-wchar.patch
@@ -10,10 +10,10 @@ Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
  libcilkrts/include/cilk/reducer_min_max.h |    8 ++++++++
  1 file changed, 8 insertions(+)
 
-Index: host-gcc-final-4.9.2/libcilkrts/include/cilk/reducer_min_max.h
+Index: host-gcc-4.9.2/libcilkrts/include/cilk/reducer_min_max.h
 ===================================================================
---- host-gcc-final-4.9.2.orig/libcilkrts/include/cilk/reducer_min_max.h
-+++ host-gcc-final-4.9.2/libcilkrts/include/cilk/reducer_min_max.h
+--- host-gcc-4.9.2.orig/libcilkrts/include/cilk/reducer_min_max.h
++++ host-gcc-4.9.2/libcilkrts/include/cilk/reducer_min_max.h
 @@ -3154,7 +3154,9 @@
  CILK_C_REDUCER_MAX_INSTANCE(char,               char,       CHAR_MIN)
  CILK_C_REDUCER_MAX_INSTANCE(unsigned char,      uchar,      0)
diff --git a/package/gcc/gcc-final/gcc-final.hash b/package/gcc/gcc/gcc.hash
similarity index 100%
rename from package/gcc/gcc-final/gcc-final.hash
rename to package/gcc/gcc/gcc.hash
diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc/gcc.mk
similarity index 51%
rename from package/gcc/gcc-final/gcc-final.mk
rename to package/gcc/gcc/gcc.mk
index c5da163..82db1c2 100644
--- a/package/gcc/gcc-final/gcc-final.mk
+++ b/package/gcc/gcc/gcc.mk
@@ -1,31 +1,31 @@
 ################################################################################
 #
-# gcc-final
+# gcc
 #
 ################################################################################
 
-HOST_GCC_FINAL_VERSION = $(HOST_GCC_COMMON_VERSION)
-HOST_GCC_FINAL_SITE = $(HOST_GCC_COMMON_SITE)
-HOST_GCC_FINAL_SOURCE = $(HOST_GCC_COMMON_SOURCE)
+HOST_GCC_VERSION = $(HOST_GCC_COMMON_VERSION)
+HOST_GCC_SITE = $(HOST_GCC_COMMON_SITE)
+HOST_GCC_SOURCE = $(HOST_GCC_COMMON_SOURCE)
 
-HOST_GCC_FINAL_DEPENDENCIES = \
+HOST_GCC_DEPENDENCIES = \
 	$(HOST_GCC_COMMON_DEPENDENCIES) \
 	$(BR_LIBC)
 
-HOST_GCC_FINAL_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
-HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
+HOST_GCC_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
+HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
 ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
-HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
+HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
 endif
 
-HOST_GCC_FINAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
+HOST_GCC_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
 
 # gcc doesn't support in-tree build, so we create a 'build'
 # subdirectory in the gcc sources, and build from there.
-HOST_GCC_FINAL_SUBDIR = build
+HOST_GCC_SUBDIR = build
 
-HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
+HOST_GCC_PRE_CONFIGURE_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
 
 # We want to always build the static variants of all the gcc libraries,
 # of which libstdc++, libgomp, libmudflap...
@@ -41,12 +41,12 @@ HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
 # static), we reproduce the exact same command as the autotools infra
 # uses.
 #
-define  HOST_GCC_FINAL_CONFIGURE_CMDS
-	(cd $(HOST_GCC_FINAL_SRCDIR) && rm -rf config.cache; \
+define  HOST_GCC_CONFIGURE_CMDS
+	(cd $(HOST_GCC_SRCDIR) && rm -rf config.cache; \
 	$(HOST_CONFIGURE_OPTS) \
 	CFLAGS="$(HOST_CFLAGS)" \
 	LDFLAGS="$(HOST_LDFLAGS)" \
-	$(HOST_GCC_FINAL_CONF_ENV) \
+	$(HOST_GCC_CONF_ENV) \
 	CONFIG_SITE=/dev/null \
 	./configure \
 		--prefix="$(HOST_DIR)/usr" \
@@ -61,157 +61,157 @@ define  HOST_GCC_FINAL_CONFIGURE_CMDS
 		--disable-debug \
 		--with-xmlto=no \
 		--with-fop=no \
-		$(QUIET) $(HOST_GCC_FINAL_CONF_OPTS) \
+		$(QUIET) $(HOST_GCC_CONF_OPTS) \
 	)
 endef
 
 
 # Languages supported by the cross-compiler
-HOST_GCC_FINAL_CROSS_LANGUAGES-y = c
-HOST_GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
-HOST_GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran
-HOST_GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(HOST_GCC_FINAL_CROSS_LANGUAGES-y))
+HOST_GCC_CROSS_LANGUAGES-y = c
+HOST_GCC_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
+HOST_GCC_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran
+HOST_GCC_CROSS_LANGUAGES = $(subst $(space),$(comma),$(HOST_GCC_CROSS_LANGUAGES-y))
 
-HOST_GCC_FINAL_CONF_OPTS = \
+HOST_GCC_CONF_OPTS = \
 	$(HOST_GCC_COMMON_CONF_OPTS) \
-	--enable-languages=$(HOST_GCC_FINAL_CROSS_LANGUAGES) \
+	--enable-languages=$(HOST_GCC_CROSS_LANGUAGES) \
 	--with-build-time-tools=$(HOST_DIR)/usr/$(GNU_TARGET_NAME)/bin
 
-HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*
+HOST_GCC_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*
 # The kernel wants to use the -m4-nofpu option to make sure that it
 # doesn't use floating point operations.
 ifeq ($(BR2_sh4)$(BR2_sh4eb),y)
-HOST_GCC_FINAL_CONF_OPTS += "--with-multilib-list=m4,m4-nofpu"
-HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib/!m4*
+HOST_GCC_CONF_OPTS += "--with-multilib-list=m4,m4-nofpu"
+HOST_GCC_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib/!m4*
 endif
 ifeq ($(BR2_sh4a)$(BR2_sh4aeb),y)
-HOST_GCC_FINAL_CONF_OPTS += "--with-multilib-list=m4a,m4a-nofpu"
-HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib/!m4*
+HOST_GCC_CONF_OPTS += "--with-multilib-list=m4a,m4a-nofpu"
+HOST_GCC_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib/!m4*
 endif
 
 # Disable shared libs like libstdc++ if we do static since it confuses linking
 ifeq ($(BR2_STATIC_LIBS),y)
-HOST_GCC_FINAL_CONF_OPTS += --disable-shared
+HOST_GCC_CONF_OPTS += --disable-shared
 else
-HOST_GCC_FINAL_CONF_OPTS += --enable-shared
+HOST_GCC_CONF_OPTS += --enable-shared
 endif
 
 ifeq ($(BR2_GCC_ENABLE_OPENMP),y)
-HOST_GCC_FINAL_CONF_OPTS += --enable-libgomp
+HOST_GCC_CONF_OPTS += --enable-libgomp
 else
-HOST_GCC_FINAL_CONF_OPTS += --disable-libgomp
+HOST_GCC_CONF_OPTS += --disable-libgomp
 endif
 
 # End with user-provided options, so that they can override previously
 # defined options.
-HOST_GCC_FINAL_CONF_OPTS += \
+HOST_GCC_CONF_OPTS += \
 	$(call qstrip,$(BR2_EXTRA_GCC_CONFIG_OPTIONS))
 
-HOST_GCC_FINAL_CONF_ENV = \
+HOST_GCC_CONF_ENV = \
 	$(HOST_GCC_COMMON_CONF_ENV)
 
-HOST_GCC_FINAL_MAKE_OPTS += $(HOST_GCC_COMMON_MAKE_OPTS)
+HOST_GCC_MAKE_OPTS += $(HOST_GCC_COMMON_MAKE_OPTS)
 
 # Make sure we have 'cc'
-define HOST_GCC_FINAL_CREATE_CC_SYMLINKS
+define HOST_GCC_CREATE_CC_SYMLINKS
 	if [ ! -e $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-cc ]; then \
 		ln -f $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-gcc \
 			$(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-cc; \
 	fi
 endef
 
-HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_CREATE_CC_SYMLINKS
+HOST_GCC_POST_INSTALL_HOOKS += HOST_GCC_CREATE_CC_SYMLINKS
 
-HOST_GCC_FINAL_TOOLCHAIN_WRAPPER_ARGS += $(HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS)
-HOST_GCC_FINAL_POST_BUILD_HOOKS += TOOLCHAIN_BUILD_WRAPPER
+HOST_GCC_TOOLCHAIN_WRAPPER_ARGS += $(HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS)
+HOST_GCC_POST_BUILD_HOOKS += TOOLCHAIN_BUILD_WRAPPER
 # Note: this must be done after CREATE_CC_SYMLINKS, otherwise the
 # -cc symlink to the wrapper is not created.
-HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_COMMON_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
+HOST_GCC_POST_INSTALL_HOOKS += HOST_GCC_COMMON_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
 
 # In gcc 4.7.x, the ARM EABIhf library loader path for (e)glibc was not
 # correct, so we create a symbolic link to make things work
 # properly. eglibc installs the library loader as ld-linux-armhf.so.3,
 # but gcc creates binaries that reference ld-linux.so.3.
 ifeq ($(BR2_arm)$(BR2_ARM_EABIHF)$(BR2_GCC_VERSION_4_7_X)$(BR2_TOOLCHAIN_USES_GLIBC),yyyy)
-define HOST_GCC_FINAL_LD_LINUX_LINK
+define HOST_GCC_LD_LINUX_LINK
 	ln -sf ld-linux-armhf.so.3 $(TARGET_DIR)/lib/ld-linux.so.3
 	ln -sf ld-linux-armhf.so.3 $(STAGING_DIR)/lib/ld-linux.so.3
 endef
-HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_LD_LINUX_LINK
+HOST_GCC_POST_INSTALL_HOOKS += HOST_GCC_LD_LINUX_LINK
 endif
 
-# Cannot use the HOST_GCC_FINAL_USR_LIBS mechanism below, because we want
+# Cannot use the HOST_GCC_USR_LIBS mechanism below, because we want
 # libgcc_s to be installed in /lib and not /usr/lib.
-define HOST_GCC_FINAL_INSTALL_LIBGCC
-	-cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libgcc_s* \
+define HOST_GCC_INSTALL_LIBGCC
+	-cp -dpf $(HOST_GCC_GCC_LIB_DIR)/libgcc_s* \
 		$(STAGING_DIR)/lib/
-	-cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libgcc_s* \
+	-cp -dpf $(HOST_GCC_GCC_LIB_DIR)/libgcc_s* \
 		$(TARGET_DIR)/lib/
 endef
 
-HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_LIBGCC
+HOST_GCC_POST_INSTALL_HOOKS += HOST_GCC_INSTALL_LIBGCC
 
-define HOST_GCC_FINAL_INSTALL_LIBATOMIC
-	-cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libatomic* \
+define HOST_GCC_INSTALL_LIBATOMIC
+	-cp -dpf $(HOST_GCC_GCC_LIB_DIR)/libatomic* \
 		$(STAGING_DIR)/lib/
-	-cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libatomic* \
+	-cp -dpf $(HOST_GCC_GCC_LIB_DIR)/libatomic* \
 		$(TARGET_DIR)/lib/
 endef
 
-HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_LIBATOMIC
+HOST_GCC_POST_INSTALL_HOOKS += HOST_GCC_INSTALL_LIBATOMIC
 
 # Handle the installation of libraries in /usr/lib
-HOST_GCC_FINAL_USR_LIBS =
+HOST_GCC_USR_LIBS =
 
 ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
-HOST_GCC_FINAL_USR_LIBS += libstdc++
+HOST_GCC_USR_LIBS += libstdc++
 endif
 
 ifeq ($(BR2_TOOLCHAIN_BUILDROOT_FORTRAN),y)
-HOST_GCC_FINAL_USR_LIBS += libgfortran
+HOST_GCC_USR_LIBS += libgfortran
 endif
 
 ifeq ($(BR2_GCC_ENABLE_OPENMP),y)
-HOST_GCC_FINAL_USR_LIBS += libgomp
+HOST_GCC_USR_LIBS += libgomp
 endif
 
 ifeq ($(BR2_GCC_ENABLE_LIBMUDFLAP),y)
 ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
-HOST_GCC_FINAL_USR_LIBS += libmudflapth
+HOST_GCC_USR_LIBS += libmudflapth
 else
-HOST_GCC_FINAL_USR_LIBS += libmudflap
+HOST_GCC_USR_LIBS += libmudflap
 endif
 endif
 
-ifneq ($(HOST_GCC_FINAL_USR_LIBS),)
-define HOST_GCC_FINAL_INSTALL_STATIC_LIBS
-	for i in $(HOST_GCC_FINAL_USR_LIBS) ; do \
-		cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/$${i}.a \
+ifneq ($(HOST_GCC_USR_LIBS),)
+define HOST_GCC_INSTALL_STATIC_LIBS
+	for i in $(HOST_GCC_USR_LIBS) ; do \
+		cp -dpf $(HOST_GCC_GCC_LIB_DIR)/$${i}.a \
 			$(STAGING_DIR)/usr/lib/ ; \
 	done
 endef
 
 ifeq ($(BR2_STATIC_LIBS),)
-define HOST_GCC_FINAL_INSTALL_SHARED_LIBS
-	for i in $(HOST_GCC_FINAL_USR_LIBS) ; do \
-		cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/$${i}.so* \
+define HOST_GCC_INSTALL_SHARED_LIBS
+	for i in $(HOST_GCC_USR_LIBS) ; do \
+		cp -dpf $(HOST_GCC_GCC_LIB_DIR)/$${i}.so* \
 			$(STAGING_DIR)/usr/lib/ ; \
-		cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/$${i}.so* \
+		cp -dpf $(HOST_GCC_GCC_LIB_DIR)/$${i}.so* \
 			$(TARGET_DIR)/usr/lib/ ; \
 	done
 endef
 endif
 
-define HOST_GCC_FINAL_INSTALL_USR_LIBS
+define HOST_GCC_INSTALL_USR_LIBS
 	mkdir -p $(TARGET_DIR)/usr/lib
-	$(HOST_GCC_FINAL_INSTALL_STATIC_LIBS)
-	$(HOST_GCC_FINAL_INSTALL_SHARED_LIBS)
+	$(HOST_GCC_INSTALL_STATIC_LIBS)
+	$(HOST_GCC_INSTALL_SHARED_LIBS)
 endef
-HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_USR_LIBS
+HOST_GCC_POST_INSTALL_HOOKS += HOST_GCC_INSTALL_USR_LIBS
 endif
 
 ifeq ($(BR2_xtensa),y)
-HOST_GCC_FINAL_CONF_OPTS += --enable-cxx-flags="$(TARGET_ABI)"
+HOST_GCC_CONF_OPTS += --enable-cxx-flags="$(TARGET_ABI)"
 endif
 
 $(eval $(host-autotools-package))
diff --git a/toolchain/toolchain-buildroot/toolchain-buildroot.mk b/toolchain/toolchain-buildroot/toolchain-buildroot.mk
index b30cc33..e1f51e9 100644
--- a/toolchain/toolchain-buildroot/toolchain-buildroot.mk
+++ b/toolchain/toolchain-buildroot/toolchain-buildroot.mk
@@ -6,11 +6,11 @@
 
 BR_LIBC = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_LIBC))
 
-# Triggering the build of the host-gcc-final will automatically do the
+# Triggering the build of the host-gcc will automatically do the
 # build of binutils, uClibc, kernel headers and all the intermediate
 # gcc steps.
 
-TOOLCHAIN_BUILDROOT_DEPENDENCIES = host-gcc-final
+TOOLCHAIN_BUILDROOT_DEPENDENCIES = host-gcc
 
 TOOLCHAIN_BUILDROOT_ADD_TOOLCHAIN_DEPENDENCY = NO
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 24/51] package/gcc-initial: ignore from legal-info output
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (22 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 23/51] package/gcc: rename gcc-final into plain gcc Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 25/51] package/gcc: add licensing info for host variant Yann E. MORIN
                   ` (27 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

gcc-inital is a pure host package, and just an intermediate step before
the final gcc. It uses the same sources, so has the exact same licensing
terms, so we can just ignore it.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-initial/gcc-initial.mk | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index 02537cf..4c2f098 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -8,6 +8,8 @@ HOST_GCC_INITIAL_VERSION = $(HOST_GCC_COMMON_VERSION)
 HOST_GCC_INITIAL_SITE = $(HOST_GCC_COMMON_SITE)
 HOST_GCC_INITIAL_SOURCE = $(HOST_GCC_COMMON_SOURCE)
 
+HOST_GCC_INITIAL_REDISTRIBUTE = IGNORE
+
 HOST_GCC_INITIAL_DEPENDENCIES = $(HOST_GCC_COMMON_DEPENDENCIES)
 
 HOST_GCC_INITIAL_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 25/51] package/gcc: add licensing info for host variant
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (23 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 24/51] package/gcc-initial: ignore from legal-info output Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 26/51] package/gcc: create the ./configure symlink as a post-patch hook Yann E. MORIN
                   ` (26 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Add the full licensing terms known for gcc for the host variant.

This has so far no impact on the target variant that is not yet defined.
And in any case, the licensing terms for the target variant will be a
sub-set of those for the host, as only parts of gcc are installed on the
target.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc/gcc.mk | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/package/gcc/gcc/gcc.mk b/package/gcc/gcc/gcc.mk
index 82db1c2..11f643e 100644
--- a/package/gcc/gcc/gcc.mk
+++ b/package/gcc/gcc/gcc.mk
@@ -8,6 +8,16 @@ HOST_GCC_VERSION = $(HOST_GCC_COMMON_VERSION)
 HOST_GCC_SITE = $(HOST_GCC_COMMON_SITE)
 HOST_GCC_SOURCE = $(HOST_GCC_COMMON_SOURCE)
 
+HOST_GCC_LICENSE = \
+	GPLv2+, GPLv3+, LGPLv2.1+ (w/ exception), LGPv3+ (w/ exception), \
+	BSD-3c, MIT, BSL-1.0
+HOST_GCC_LICENSE_FILES = \
+	COPYING COPYING3 COPYING.LIB COPYING3.LIB COPYING.RUNTIME \
+	libiberty/COPYING.LIB gcc/go/gofrontend/LICENSE \
+	gcc/COPYING gcc/COPYING.LIB gcc/COPYING3 gcc/COPYING3.LIB \
+	libquadmath/COPYING.LIB libsanitizer/LICENSE.TXT libffi/LICENSE \
+	include/COPYING include/COPYING3 zlib/contrib/dotzlib/LICENSE_1_0.txt
+
 HOST_GCC_DEPENDENCIES = \
 	$(HOST_GCC_COMMON_DEPENDENCIES) \
 	$(BR_LIBC)
@@ -16,7 +26,15 @@ HOST_GCC_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
 HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
 ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
+
 HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
+
+define HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
+	$(Q)$(call hardlink-copy,$(HOST_GCC_COMMON_XTENSA_OVERLAY_TAR),\
+				 $(HOST_GCC_REDIST_SOURCES_DIR))
+endef
+HOST_GCC_POST_LEGAL_INFO_HOOKS += HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
+
 endif
 
 HOST_GCC_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 26/51] package/gcc: create the ./configure symlink as a post-patch hook
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (24 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 25/51] package/gcc: add licensing info for host variant Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 27/51] pacakge/gcc: drop custom patch command Yann E. MORIN
                   ` (25 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Currently, running make legal-info on an otherwise clean (but
configured) tree will yield a spurious error message:

    find: ?/home/ymorin/dev/buildroot/O/build/host-gcc-4.9.3/build?: No
    such file or directory

However, creating that symlink in fact really prepares the gcc source
tree to be configured. As such, it rather belongs to either the extract
or patch steps.

Make it a post-patch hook.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-initial/gcc-initial.mk | 2 +-
 package/gcc/gcc/gcc.mk                 | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index 4c2f098..cc978a2 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -25,7 +25,7 @@ HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
 # subdirectory in the gcc sources, and build from there.
 HOST_GCC_INITIAL_SUBDIR = build
 
-HOST_GCC_INITIAL_PRE_CONFIGURE_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
+HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
 
 HOST_GCC_INITIAL_CONF_OPTS = \
 	$(HOST_GCC_COMMON_CONF_OPTS) \
diff --git a/package/gcc/gcc/gcc.mk b/package/gcc/gcc/gcc.mk
index 11f643e..9a9ee46 100644
--- a/package/gcc/gcc/gcc.mk
+++ b/package/gcc/gcc/gcc.mk
@@ -43,7 +43,7 @@ HOST_GCC_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
 # subdirectory in the gcc sources, and build from there.
 HOST_GCC_SUBDIR = build
 
-HOST_GCC_PRE_CONFIGURE_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
+HOST_GCC_POST_PATCH_HOOKS += HOST_GCC_COMMON_CONFIGURE_SYMLINK
 
 # We want to always build the static variants of all the gcc libraries,
 # of which libstdc++, libgomp, libmudflap...
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 27/51] pacakge/gcc: drop custom patch command
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (25 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 26/51] package/gcc: create the ./configure symlink as a post-patch hook Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 28/51] core: include arch-specific definitions Yann E. MORIN
                   ` (24 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Currently, the gcc patches are not present in the package's own
directory, but shared in the common directory. So, the generic
package infra does not find thosee patches, and we apply them with
a custom-made post-patch hook.

Use symlinks so the generic packag einfra can find and apply the
patches; drop the custom patch hook; keep the conditional hook to
apply the PPC patch.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/Config.in.host             |  3 +++
 package/gcc/gcc-common.mk              | 12 ++++--------
 package/gcc/gcc-initial/4.5.4          |  1 +
 package/gcc/gcc-initial/4.7.4          |  1 +
 package/gcc/gcc-initial/4.8.5          |  1 +
 package/gcc/gcc-initial/4.9.3          |  1 +
 package/gcc/gcc-initial/5.2.0          |  1 +
 package/gcc/gcc-initial/arc-2015.06    |  1 +
 package/gcc/gcc-initial/gcc-initial.mk |  2 +-
 package/gcc/gcc/4.5.4                  |  1 +
 package/gcc/gcc/4.7.4                  |  1 +
 package/gcc/gcc/4.8.5                  |  1 +
 package/gcc/gcc/4.9.3                  |  1 +
 package/gcc/gcc/5.2.0                  |  1 +
 package/gcc/gcc/arc-2015.06            |  1 +
 package/gcc/gcc/gcc.mk                 |  2 +-
 16 files changed, 21 insertions(+), 10 deletions(-)
 create mode 120000 package/gcc/gcc-initial/4.5.4
 create mode 120000 package/gcc/gcc-initial/4.7.4
 create mode 120000 package/gcc/gcc-initial/4.8.5
 create mode 120000 package/gcc/gcc-initial/4.9.3
 create mode 120000 package/gcc/gcc-initial/5.2.0
 create mode 120000 package/gcc/gcc-initial/arc-2015.06
 create mode 120000 package/gcc/gcc/4.5.4
 create mode 120000 package/gcc/gcc/4.7.4
 create mode 120000 package/gcc/gcc/4.8.5
 create mode 120000 package/gcc/gcc/4.9.3
 create mode 120000 package/gcc/gcc/5.2.0
 create mode 120000 package/gcc/gcc/arc-2015.06

diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
index 78eb50b..b7c0f67 100644
--- a/package/gcc/Config.in.host
+++ b/package/gcc/Config.in.host
@@ -6,6 +6,9 @@ config BR2_GCC_NEEDS_MPC
 config BR2_GCC_SUPPORTS_GRAPHITE
 	bool
 
+# NOTE! When updating the version, be sure to adapt the symlinks in
+# package/gcc/gcc-initial/ and package/gcc/gcc/ to point to the
+# corresponding patchsets.
 choice
 	prompt "GCC compiler Version"
 	default BR2_GCC_VERSION_4_8_ARC if BR2_arc
diff --git a/package/gcc/gcc-common.mk b/package/gcc/gcc-common.mk
index abab6ec..73e3b72 100644
--- a/package/gcc/gcc-common.mk
+++ b/package/gcc/gcc-common.mk
@@ -8,6 +8,9 @@
 # Version, site and source
 #
 
+# NOTE! When updating the version, be sure to adapt the symlinks in
+# package/gcc/gcc-initial/ and package/gcc/gcc/ to point to the
+# corresponding patchsets.
 HOST_GCC_COMMON_VERSION = $(call qstrip,$(BR2_GCC_VERSION))
 
 ifeq ($(BR2_arc),y)
@@ -35,18 +38,11 @@ endef
 ifeq ($(ARCH),powerpc)
 ifneq ($(BR2_SOFT_FLOAT),)
 define HOST_GCC_COMMON_APPLY_POWERPC_PATCH
-	$(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_COMMON_VERSION) 1000-powerpc-link-with-math-lib.patch.conditional
+	$(APPLY_PATCHES) $(@D) $($(PKG)_PKGDIR)/$(HOST_GCC_COMMON_VERSION) 1000-powerpc-link-with-math-lib.patch.conditional
 endef
 endif
 endif
 
-define HOST_GCC_COMMON_APPLY_PATCHES
-	if test -d package/gcc/$(HOST_GCC_COMMON_VERSION); then \
-	  $(APPLY_PATCHES) $(@D) package/gcc/$(HOST_GCC_COMMON_VERSION) \*.patch ; \
-	fi;
-	$(HOST_GCC_COMMON_APPLY_POWERPC_PATCH)
-endef
-
 HOST_GCC_COMMON_EXCLUDES = \
 	libjava/* libgo/* \
 	gcc/testsuite/* libstdc++-v3/testsuite/*
diff --git a/package/gcc/gcc-initial/4.5.4 b/package/gcc/gcc-initial/4.5.4
new file mode 120000
index 0000000..b758df2
--- /dev/null
+++ b/package/gcc/gcc-initial/4.5.4
@@ -0,0 +1 @@
+../4.5.4
\ No newline at end of file
diff --git a/package/gcc/gcc-initial/4.7.4 b/package/gcc/gcc-initial/4.7.4
new file mode 120000
index 0000000..70712b0
--- /dev/null
+++ b/package/gcc/gcc-initial/4.7.4
@@ -0,0 +1 @@
+../4.7.4
\ No newline at end of file
diff --git a/package/gcc/gcc-initial/4.8.5 b/package/gcc/gcc-initial/4.8.5
new file mode 120000
index 0000000..a7c371f
--- /dev/null
+++ b/package/gcc/gcc-initial/4.8.5
@@ -0,0 +1 @@
+../4.8.5
\ No newline at end of file
diff --git a/package/gcc/gcc-initial/4.9.3 b/package/gcc/gcc-initial/4.9.3
new file mode 120000
index 0000000..f277184
--- /dev/null
+++ b/package/gcc/gcc-initial/4.9.3
@@ -0,0 +1 @@
+../4.9.3
\ No newline at end of file
diff --git a/package/gcc/gcc-initial/5.2.0 b/package/gcc/gcc-initial/5.2.0
new file mode 120000
index 0000000..3ceece6
--- /dev/null
+++ b/package/gcc/gcc-initial/5.2.0
@@ -0,0 +1 @@
+../5.2.0
\ No newline at end of file
diff --git a/package/gcc/gcc-initial/arc-2015.06 b/package/gcc/gcc-initial/arc-2015.06
new file mode 120000
index 0000000..4543211
--- /dev/null
+++ b/package/gcc/gcc-initial/arc-2015.06
@@ -0,0 +1 @@
+../arc-2015.06
\ No newline at end of file
diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index cc978a2..6c7ec67 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -19,7 +19,7 @@ ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
 HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
 endif
 
-HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
+HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_POWERPC_PATCH
 
 # gcc doesn't support in-tree build, so we create a 'build'
 # subdirectory in the gcc sources, and build from there.
diff --git a/package/gcc/gcc/4.5.4 b/package/gcc/gcc/4.5.4
new file mode 120000
index 0000000..b758df2
--- /dev/null
+++ b/package/gcc/gcc/4.5.4
@@ -0,0 +1 @@
+../4.5.4
\ No newline at end of file
diff --git a/package/gcc/gcc/4.7.4 b/package/gcc/gcc/4.7.4
new file mode 120000
index 0000000..70712b0
--- /dev/null
+++ b/package/gcc/gcc/4.7.4
@@ -0,0 +1 @@
+../4.7.4
\ No newline at end of file
diff --git a/package/gcc/gcc/4.8.5 b/package/gcc/gcc/4.8.5
new file mode 120000
index 0000000..a7c371f
--- /dev/null
+++ b/package/gcc/gcc/4.8.5
@@ -0,0 +1 @@
+../4.8.5
\ No newline at end of file
diff --git a/package/gcc/gcc/4.9.3 b/package/gcc/gcc/4.9.3
new file mode 120000
index 0000000..f277184
--- /dev/null
+++ b/package/gcc/gcc/4.9.3
@@ -0,0 +1 @@
+../4.9.3
\ No newline at end of file
diff --git a/package/gcc/gcc/5.2.0 b/package/gcc/gcc/5.2.0
new file mode 120000
index 0000000..3ceece6
--- /dev/null
+++ b/package/gcc/gcc/5.2.0
@@ -0,0 +1 @@
+../5.2.0
\ No newline at end of file
diff --git a/package/gcc/gcc/arc-2015.06 b/package/gcc/gcc/arc-2015.06
new file mode 120000
index 0000000..4543211
--- /dev/null
+++ b/package/gcc/gcc/arc-2015.06
@@ -0,0 +1 @@
+../arc-2015.06
\ No newline at end of file
diff --git a/package/gcc/gcc/gcc.mk b/package/gcc/gcc/gcc.mk
index 9a9ee46..dddd361 100644
--- a/package/gcc/gcc/gcc.mk
+++ b/package/gcc/gcc/gcc.mk
@@ -37,7 +37,7 @@ HOST_GCC_POST_LEGAL_INFO_HOOKS += HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
 
 endif
 
-HOST_GCC_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_PATCHES
+HOST_GCC_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_POWERPC_PATCH
 
 # gcc doesn't support in-tree build, so we create a 'build'
 # subdirectory in the gcc sources, and build from there.
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 28/51] core: include arch-specific definitions
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (26 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 27/51] pacakge/gcc: drop custom patch command Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 29/51] arch/xtensa: add definitions for the Xtensa overlay Yann E. MORIN
                   ` (23 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Allow architectures to define variables and helper macros.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Peter Korsgaard <jacmet@uclibc.org>
---
 Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Makefile b/Makefile
index 947f941..bfb6379 100644
--- a/Makefile
+++ b/Makefile
@@ -408,6 +408,9 @@ include Makefile.legacy
 endif
 
 include package/Makefile.in
+# arch/arch.mk.* must be after package/Makefile.in because it may need to
+# complement variables defined therein, like BR_NO_CHECK_HASH_FOR.
+-include $(wildcard arch/arch.mk.*)
 include support/dependencies/dependencies.mk
 
 include toolchain/*.mk
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 29/51] arch/xtensa: add definitions for the Xtensa overlay
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (27 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 28/51] core: include arch-specific definitions Yann E. MORIN
@ 2015-11-23 14:47 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 30/51] package/binutils: use the Xtensa variables Yann E. MORIN
                   ` (22 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:47 UTC (permalink / raw)
  To: buildroot

Currently, we have four packages that need to use the Xtensa overlay:
binutils, gcc-initial, gcc and gdb. However, they all use three
different ways to check for, and use the overlay. Furthermore, two of
them define the same variable: XTENSA_CORE_NAME is defined both by
binutils and gdb

In order to sanitise that, have the Xtensa architecture export the
appropriate variables: the name of the core and the path to the overlay
tarball. Packages can then check and use those variables.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arch.mk.xtensa | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 arch/arch.mk.xtensa

diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa
new file mode 100644
index 0000000..7c8beb1
--- /dev/null
+++ b/arch/arch.mk.xtensa
@@ -0,0 +1,15 @@
+################################################################################
+# Those two variables can be used by packages that need to extract the overlay.
+#
+# ARCH_XTENSA_CORE_NAME   is the name of the Xtensa core; empty if none or the
+#                         standard 'fsf' core.
+# ARCH_XTENSA_OVERLAY_TAR is the path to the overlay tarball; only valid when
+#                         ARCH_XTENSA_CORE_NAME is not empty.
+#
+# Example:
+#   ifneq ($(ARCH_XTENSA_CORE_NAME),)
+#       tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gcc
+#   endif
+################################################################################
+ARCH_XTENSA_CORE_NAME = $(call qstrip,$(BR2_XTENSA_CORE_NAME))
+ARCH_XTENSA_OVERLAY_TAR = $(call qstrip,$(BR2_XTENSA_OVERLAY_DIR))/xtensa_$(ARCH_XTENSA_CORE_NAME).tar
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 30/51] package/binutils: use the Xtensa variables
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (28 preceding siblings ...)
  2015-11-23 14:47 ` [Buildroot] [PATCH 29/51] arch/xtensa: add definitions for the Xtensa overlay Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 31/51] package/gdb: " Yann E. MORIN
                   ` (21 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

... instead of re-computing them over-and-over-again.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/binutils/binutils.mk | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
index 2074fae..4a67af2 100644
--- a/package/binutils/binutils.mk
+++ b/package/binutils/binutils.mk
@@ -90,11 +90,9 @@ define BINUTILS_INSTALL_TARGET_CMDS
 endef
 endif
 
-XTENSA_CORE_NAME = $(call qstrip, $(BR2_XTENSA_CORE_NAME))
-ifneq ($(XTENSA_CORE_NAME),)
+ifneq ($(ARCH_XTENSA_CORE_NAME),)
 define BINUTILS_XTENSA_PRE_PATCH
-	tar xf $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(XTENSA_CORE_NAME).tar \
-		-C $(@D) --strip-components=1 binutils
+	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 binutils
 endef
 BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
 HOST_BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 31/51] package/gdb: use the Xtensa variables
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (29 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 30/51] package/binutils: use the Xtensa variables Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 32/51] package/gcc: " Yann E. MORIN
                   ` (20 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

... instead of re-computing them over-and-over-again.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gdb/gdb.mk | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk
index 15f394c..44e8240 100644
--- a/package/gdb/gdb.mk
+++ b/package/gdb/gdb.mk
@@ -41,11 +41,9 @@ endif
 HOST_GDB_DEPENDENCIES = host-expat host-ncurses
 
 # Apply the Xtensa specific patches
-XTENSA_CORE_NAME = $(call qstrip, $(BR2_XTENSA_CORE_NAME))
-ifneq ($(XTENSA_CORE_NAME),)
+ifneq ($(ARCH_XTENSA_CORE_NAME),)
 define GDB_XTENSA_PRE_PATCH
-	tar xf $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(XTENSA_CORE_NAME).tar \
-		-C $(@D) --strip-components=1 gdb
+	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gdb
 endef
 GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
 HOST_GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 32/51] package/gcc: use the Xtensa variables
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (30 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 31/51] package/gdb: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 33/51] arch/xtensa: add macro to extract the overlay Yann E. MORIN
                   ` (19 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

... instead of re-computing them over-and-over-again.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-common.mk              | 7 ++-----
 package/gcc/gcc-initial/gcc-initial.mk | 2 +-
 package/gcc/gcc/gcc.mk                 | 4 ++--
 3 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/package/gcc/gcc-common.mk b/package/gcc/gcc-common.mk
index 73e3b72..b78dd84 100644
--- a/package/gcc/gcc-common.mk
+++ b/package/gcc/gcc-common.mk
@@ -24,11 +24,8 @@ endif
 #
 # Xtensa special hook
 #
-
-HOST_GCC_COMMON_XTENSA_OVERLAY_TAR = $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(call qstrip,$(BR2_XTENSA_CORE_NAME)).tar
-
 define HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
-	tar xf $(HOST_GCC_COMMON_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gcc
+	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gcc
 endef
 
 #
@@ -246,7 +243,7 @@ HOST_GCC_COMMON_CCACHE_HASH_FILES += \
 		$(addsuffix $((PKG)_RAWNAME)/$(HOST_GCC_COMMON_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
 		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(BR2_GLOBAL_PATCH_DIR))))
 ifeq ($(BR2_xtensa),y)
-HOST_GCC_COMMON_CCACHE_HASH_FILES += $(HOST_GCC_COMMON_XTENSA_OVERLAY_TAR)
+HOST_GCC_COMMON_CCACHE_HASH_FILES += $(ARCH_XTENSA_OVERLAY_TAR)
 endif
 ifeq ($(ARCH),powerpc)
 ifneq ($(BR2_SOFT_FLOAT),)
diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index 6c7ec67..709b6a7 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -15,7 +15,7 @@ HOST_GCC_INITIAL_DEPENDENCIES = $(HOST_GCC_COMMON_DEPENDENCIES)
 HOST_GCC_INITIAL_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
 HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
-ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
+ifneq ($(ARCH_XTENSA_CORE_NAME),)
 HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
 endif
 
diff --git a/package/gcc/gcc/gcc.mk b/package/gcc/gcc/gcc.mk
index dddd361..57f316b 100644
--- a/package/gcc/gcc/gcc.mk
+++ b/package/gcc/gcc/gcc.mk
@@ -25,12 +25,12 @@ HOST_GCC_DEPENDENCIES = \
 HOST_GCC_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
 HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
-ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
+ifneq ($(ARCH_XTENSA_CORE_NAME),)
 
 HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
 
 define HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
-	$(Q)$(call hardlink-copy,$(HOST_GCC_COMMON_XTENSA_OVERLAY_TAR),\
+	$(Q)$(call hardlink-copy,$(ARCH_XTENSA_OVERLAY_TAR),\
 				 $(HOST_GCC_REDIST_SOURCES_DIR))
 endef
 HOST_GCC_POST_LEGAL_INFO_HOOKS += HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 33/51] arch/xtensa: add macro to extract the overlay
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (31 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 32/51] package/gcc: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 34/51] package/binutils: use macro to extract Xtensa overlay Yann E. MORIN
                   ` (18 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arch.mk.xtensa | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa
index 7c8beb1..2843333 100644
--- a/arch/arch.mk.xtensa
+++ b/arch/arch.mk.xtensa
@@ -13,3 +13,16 @@
 ################################################################################
 ARCH_XTENSA_CORE_NAME = $(call qstrip,$(BR2_XTENSA_CORE_NAME))
 ARCH_XTENSA_OVERLAY_TAR = $(call qstrip,$(BR2_XTENSA_OVERLAY_DIR))/xtensa_$(ARCH_XTENSA_CORE_NAME).tar
+
+################################################################################
+# arch-xtensa-overlay-extract -- extract an extensa overlay
+#
+# argument 1 is the path in which to extract
+# argument 2 is the component to extract, one of: gcc, binutils, gdb
+#
+# Example:
+#   $(call arch-xtensa-overlay-extract,/path/to/overlay.tar,$(@D),gcc)
+################################################################################
+define arch-xtensa-overlay-extract
+	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(1) --strip-components=1 $(2)
+endef
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 34/51] package/binutils: use macro to extract Xtensa overlay
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (32 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 33/51] arch/xtensa: add macro to extract the overlay Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 35/51] package/gdb: " Yann E. MORIN
                   ` (17 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/binutils/binutils.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
index 4a67af2..0e488b6 100644
--- a/package/binutils/binutils.mk
+++ b/package/binutils/binutils.mk
@@ -92,7 +92,7 @@ endif
 
 ifneq ($(ARCH_XTENSA_CORE_NAME),)
 define BINUTILS_XTENSA_PRE_PATCH
-	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 binutils
+	$(call arch-xtensa-overlay-extract,$(@D),binutils)
 endef
 BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
 HOST_BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 35/51] package/gdb: use macro to extract Xtensa overlay
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (33 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 34/51] package/binutils: use macro to extract Xtensa overlay Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 36/51] package/gcc: " Yann E. MORIN
                   ` (16 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gdb/gdb.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk
index 44e8240..987dd5e 100644
--- a/package/gdb/gdb.mk
+++ b/package/gdb/gdb.mk
@@ -43,7 +43,7 @@ HOST_GDB_DEPENDENCIES = host-expat host-ncurses
 # Apply the Xtensa specific patches
 ifneq ($(ARCH_XTENSA_CORE_NAME),)
 define GDB_XTENSA_PRE_PATCH
-	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gdb
+	$(call arch-xtensa-overlay-extract,$(@D),gdb)
 endef
 GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
 HOST_GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 36/51] package/gcc: use macro to extract Xtensa overlay
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (34 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 35/51] package/gdb: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 37/51] arch/xtensa: add macro to install legal-info Yann E. MORIN
                   ` (15 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-common.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package/gcc/gcc-common.mk b/package/gcc/gcc-common.mk
index b78dd84..35f33e5 100644
--- a/package/gcc/gcc-common.mk
+++ b/package/gcc/gcc-common.mk
@@ -25,7 +25,7 @@ endif
 # Xtensa special hook
 #
 define HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
-	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gcc
+	$(call arch-xtensa-overlay-extract,$(@D),gcc)
 endef
 
 #
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 37/51] arch/xtensa: add macro to install legal-info
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (35 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 36/51] package/gcc: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 38/51] pacage/gcc: use macro to install Xtensa overlay legal-info Yann E. MORIN
                   ` (14 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arch.mk.xtensa | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa
index 2843333..3001538 100644
--- a/arch/arch.mk.xtensa
+++ b/arch/arch.mk.xtensa
@@ -26,3 +26,16 @@ ARCH_XTENSA_OVERLAY_TAR = $(call qstrip,$(BR2_XTENSA_OVERLAY_DIR))/xtensa_$(ARCH
 define arch-xtensa-overlay-extract
 	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(1) --strip-components=1 $(2)
 endef
+
+################################################################################
+# arch-xtensa-overlay-legal-info -- install the overlay archive to the legal-info
+# output.
+#
+# argumet 1 is the path to the directory in which to copy the overlay
+#
+# Example:
+#   $(call arch-xtensa-overlay-legal-info,/path/to/redist/dir/)
+################################################################################
+define arch-xtensa-overlay-legal-info
+	$(call hardlink-copy,$(ARCH_XTENSA_OVERLAY_TAR),$(1))
+endef
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 38/51] pacage/gcc: use macro to install Xtensa overlay legal-info
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (36 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 37/51] arch/xtensa: add macro to install legal-info Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 39/51] package/binutils: " Yann E. MORIN
                   ` (13 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc/gcc.mk | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/package/gcc/gcc/gcc.mk b/package/gcc/gcc/gcc.mk
index 57f316b..ce6402a 100644
--- a/package/gcc/gcc/gcc.mk
+++ b/package/gcc/gcc/gcc.mk
@@ -30,8 +30,7 @@ ifneq ($(ARCH_XTENSA_CORE_NAME),)
 HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
 
 define HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
-	$(Q)$(call hardlink-copy,$(ARCH_XTENSA_OVERLAY_TAR),\
-				 $(HOST_GCC_REDIST_SOURCES_DIR))
+	$(Q)$(call arch-xtensa-overlay-legal-info,$(HOST_GCC_REDIST_SOURCES_DIR))
 endef
 HOST_GCC_POST_LEGAL_INFO_HOOKS += HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 39/51] package/binutils: use macro to install Xtensa overlay legal-info
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (37 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 38/51] pacage/gcc: use macro to install Xtensa overlay legal-info Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 40/51] package/gdb: " Yann E. MORIN
                   ` (12 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/binutils/binutils.mk | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
index 0e488b6..4740305 100644
--- a/package/binutils/binutils.mk
+++ b/package/binutils/binutils.mk
@@ -96,6 +96,11 @@ define BINUTILS_XTENSA_PRE_PATCH
 endef
 BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
 HOST_BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
+define BINUTILS_XTENSA_LEGAL_INFO
+	$(call arch-xtensa-overlay-legal-info,$($(PKG)_REDIST_SOURCES_DIR))
+endef
+BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_LEGAL_INFO
+HOST_BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_LEGAL_INFO
 endif
 
 ifeq ($(BR2_BINUTILS_ENABLE_LTO),y)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 40/51] package/gdb: use macro to install Xtensa overlay legal-info
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (38 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 39/51] package/binutils: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 41/51] package/binutils: extract Xtensa overlay as post-extract hook Yann E. MORIN
                   ` (11 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gdb/gdb.mk | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk
index 987dd5e..8455f88 100644
--- a/package/gdb/gdb.mk
+++ b/package/gdb/gdb.mk
@@ -47,6 +47,11 @@ define GDB_XTENSA_PRE_PATCH
 endef
 GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
 HOST_GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
+define GDB_XTENSA_LEGAL_INFO
+	$(call arch-xtensa-overlay-legal-info,$($(PKG)_REDIST_SOURCES_DIR))
+endef
+GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_LEGAL_INFO
+HOST_GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_LEGAL_INFO
 endif
 
 # Prevent gdb to build the documentation
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 41/51] package/binutils: extract Xtensa overlay as post-extract hook
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (39 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 40/51] package/gdb: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 42/51] package/gdb: " Yann E. MORIN
                   ` (10 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

... like it is done for gcc.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/binutils/binutils.mk | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
index 4740305..09c1d1c 100644
--- a/package/binutils/binutils.mk
+++ b/package/binutils/binutils.mk
@@ -91,16 +91,16 @@ endef
 endif
 
 ifneq ($(ARCH_XTENSA_CORE_NAME),)
-define BINUTILS_XTENSA_PRE_PATCH
+define BINUTILS_XTENSA_OVERLAY_EXTRACT
 	$(call arch-xtensa-overlay-extract,$(@D),binutils)
 endef
-BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
-HOST_BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
-define BINUTILS_XTENSA_LEGAL_INFO
+BINUTILS_POST_EXTRACT_HOOKS += BINUTILS_XTENSA_OVERLAY_EXTRACT
+HOST_BINUTILS_POST_EXTRACT_HOOKS += BINUTILS_XTENSA_OVERLAY_EXTRACT
+define BINUTILS_XTENSA_OVERLAY_LEGAL_INFO
 	$(call arch-xtensa-overlay-legal-info,$($(PKG)_REDIST_SOURCES_DIR))
 endef
-BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_LEGAL_INFO
-HOST_BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_LEGAL_INFO
+BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_OVERLAY_LEGAL_INFO
+HOST_BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_OVERLAY_LEGAL_INFO
 endif
 
 ifeq ($(BR2_BINUTILS_ENABLE_LTO),y)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 42/51] package/gdb: extract Xtensa overlay as post-extract hook
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (40 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 41/51] package/binutils: extract Xtensa overlay as post-extract hook Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 43/51] arch/xtensa: add macros to generate hooks Yann E. MORIN
                   ` (9 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

... like it is done for gcc.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gdb/gdb.mk | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk
index 8455f88..e50bf13 100644
--- a/package/gdb/gdb.mk
+++ b/package/gdb/gdb.mk
@@ -42,16 +42,16 @@ HOST_GDB_DEPENDENCIES = host-expat host-ncurses
 
 # Apply the Xtensa specific patches
 ifneq ($(ARCH_XTENSA_CORE_NAME),)
-define GDB_XTENSA_PRE_PATCH
+define GDB_XTENSA_OVERLAY_EXTRACT
 	$(call arch-xtensa-overlay-extract,$(@D),gdb)
 endef
-GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
-HOST_GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH
-define GDB_XTENSA_LEGAL_INFO
+GDB_PRE_PATCH_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT
+HOST_GDB_PRE_PATCH_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT
+define GDB_XTENSA_OVERLAY_LEGAL_INFO
 	$(call arch-xtensa-overlay-legal-info,$($(PKG)_REDIST_SOURCES_DIR))
 endef
-GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_LEGAL_INFO
-HOST_GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_LEGAL_INFO
+GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_OVERLAY_LEGAL_INFO
+HOST_GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_OVERLAY_LEGAL_INFO
 endif
 
 # Prevent gdb to build the documentation
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 43/51] arch/xtensa: add macros to generate hooks
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (41 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 42/51] package/gdb: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 44/51] package/binutils: use the Xtensa macro generators Yann E. MORIN
                   ` (8 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

These macro generators, one fr the target variant, one for the host
variant, work like the package macro generators, and generate two
hooks:
  - a post-extract hook,
  - a post-legal-info hook.

Packages that need the Xtensa overlay can then:
  - define <PKG>_ARC_XTENSA_OVERLAY_COMPONENT
  - $(eval ...) the appropriate macro (target or host).

This will allow to keep consistency across the four packages that need
that overlay, to avoid them diverging again in the future should we need
to change the way we handle the Xtensa overlay (like, allowing it to be
downloaded).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arch.mk.xtensa | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa
index 3001538..d2f4f59 100644
--- a/arch/arch.mk.xtensa
+++ b/arch/arch.mk.xtensa
@@ -39,3 +39,38 @@ endef
 define arch-xtensa-overlay-legal-info
 	$(call hardlink-copy,$(ARCH_XTENSA_OVERLAY_TAR),$(1))
 endef
+
+################################################################################
+# arch-xtensa-overlay-inner -- generates the make targets needed to extract
+# the xtensa overlay, and save it to legal-info
+#
+# argument 1 is the uppercase package name, including a HOST_ prefix
+#            for host packages
+#
+# Packages that call that macro shall define FOO_ARCH_XTENSA_OVERLAY_COMPONENT
+# and set it to one of the component to extract, one of: binutils, gcc, gdb.
+#
+################################################################################
+define arch-xtensa-overlay-inner
+
+ifneq ($$(ARCH_XTENSA_CORE_NAME),)
+
+define $(1)_XTENSA_OVERLAY_EXTRACT
+	$$(call arch-xtensa-overlay-extract,$$(@D),$$($(1)_ARCH_XTENSA_OVERLAY_COMPONENT))
+endef
+$(1)_POST_EXTRACT_HOOKS += $(1)_XTENSA_OVERLAY_EXTRACT
+
+define $(1)_XTENSA_OVERLAY_LEGAL_INFO
+	$(Q)$$(call arch-xtensa-overlay-legal-info,$$($(1)_REDIST_SOURCES_DIR))
+endef
+$(1)_POST_LEGAL_INFO_HOOKS += $(1)_XTENSA_OVERLAY_LEGAL_INFO
+
+endif # ARCH_XTENSA_CORE_NAME != ""
+
+endef # arch-xtensa-overlay-inner
+
+################################################################################
+# arch-xtensa-overlay -- the target generator macro for the Xtensa overlay
+################################################################################
+arch-xtensa-overlay = $(call arch-xtensa-overlay-inner,$(call UPPERCASE,$(pkgname)))
+host-arch-xtensa-overlay = $(call arch-xtensa-overlay-inner,HOST_$(call UPPERCASE,$(pkgname)))
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 44/51] package/binutils: use the Xtensa macro generators
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (42 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 43/51] arch/xtensa: add macros to generate hooks Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 45/51] package/gdb: " Yann E. MORIN
                   ` (7 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/binutils/binutils.mk | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
index 09c1d1c..30d71f9 100644
--- a/package/binutils/binutils.mk
+++ b/package/binutils/binutils.mk
@@ -90,18 +90,10 @@ define BINUTILS_INSTALL_TARGET_CMDS
 endef
 endif
 
-ifneq ($(ARCH_XTENSA_CORE_NAME),)
-define BINUTILS_XTENSA_OVERLAY_EXTRACT
-	$(call arch-xtensa-overlay-extract,$(@D),binutils)
-endef
-BINUTILS_POST_EXTRACT_HOOKS += BINUTILS_XTENSA_OVERLAY_EXTRACT
-HOST_BINUTILS_POST_EXTRACT_HOOKS += BINUTILS_XTENSA_OVERLAY_EXTRACT
-define BINUTILS_XTENSA_OVERLAY_LEGAL_INFO
-	$(call arch-xtensa-overlay-legal-info,$($(PKG)_REDIST_SOURCES_DIR))
-endef
-BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_OVERLAY_LEGAL_INFO
-HOST_BINUTILS_POST_LEGAL_INFO_HOOKS += BINUTILS_XTENSA_OVERLAY_LEGAL_INFO
-endif
+BINUTILS_ARCH_XTENSA_OVERLAY_COMPONENT = binutils
+HOST_BINUTILS_ARCH_XTENSA_OVERLAY_COMPONENT = binutils
+$(eval $(arch-xtensa-overlay))
+$(eval $(host-arch-xtensa-overlay))
 
 ifeq ($(BR2_BINUTILS_ENABLE_LTO),y)
 HOST_BINUTILS_CONF_OPTS += --enable-plugins --enable-lto
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 45/51] package/gdb: use the Xtensa macro generators
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (43 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 44/51] package/binutils: use the Xtensa macro generators Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 46/51] package/gcc: " Yann E. MORIN
                   ` (6 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gdb/gdb.mk | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk
index e50bf13..a0380ae 100644
--- a/package/gdb/gdb.mk
+++ b/package/gdb/gdb.mk
@@ -40,19 +40,10 @@ endif
 # also need ncurses.
 HOST_GDB_DEPENDENCIES = host-expat host-ncurses
 
-# Apply the Xtensa specific patches
-ifneq ($(ARCH_XTENSA_CORE_NAME),)
-define GDB_XTENSA_OVERLAY_EXTRACT
-	$(call arch-xtensa-overlay-extract,$(@D),gdb)
-endef
-GDB_PRE_PATCH_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT
-HOST_GDB_PRE_PATCH_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT
-define GDB_XTENSA_OVERLAY_LEGAL_INFO
-	$(call arch-xtensa-overlay-legal-info,$($(PKG)_REDIST_SOURCES_DIR))
-endef
-GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_OVERLAY_LEGAL_INFO
-HOST_GDB_POST_LEGAL_INFO_HOOKS += GDB_XTENSA_OVERLAY_LEGAL_INFO
-endif
+GDB_ARCH_XTENSA_OVERLAY_COMPONENT = gdb
+HOST_GDB_ARCH_XTENSA_OVERLAY_COMPONENT = gdb
+$(eval $(arch-xtensa-overlay))
+$(eval $(host-arch-xtensa-overlay))
 
 # Prevent gdb to build the documentation
 define GDB_DISABLE_DOC
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal)
@ 2015-11-23 14:48 Yann E. MORIN
  2015-11-23 14:47 ` [Buildroot] [PATCH 01/51] core/pkg-autotools: align host configure commands to target one Yann E. MORIN
                   ` (51 more replies)
  0 siblings, 52 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Hello All!

This series essentiually improves our legal-info output, particularly in
regard to what we save, and how we organise it, in $(O)/legal-info/ .

The series is not completely 'logically' organised, but rather tells a
story, that of how I got side-tracked from just wanting to save the
patches alongside the sources, up to when I eventually cleaned up the
handling of the Xtensa overlay, after reogarnising the gcc packages and
defining their licensing terms. It was prompted by a discussion we had
with Luca during the last DevDays in Dublin, when we talked about the
need to save the patches as well as the source archives.


The first three patches (already submitted for master, but not yet
applied), are an indentation cleanup of the ./configure commands for the
autotools infra, as well as an alignment of the custom one in gcc, to
match those in the infra, and also explain why we do need the custom
commands for gcc.

Patches 4-5 introduce a macro to copy by hardlink if possible, and
fallback to a simple copy otherwise, macro then used in the legal-info
infra in place of the hand-crafted construct therein.

Patch 6 also uses that macro to install the perl-cross legal-info.

Patch 7 introduces an already-qstripped global BR_GLOBAL_PATCH_DIR and
uses that instead of repeating the qstrip multiple times.

Patch 8-9 add the ability to ignore patckages from the legal-info
output, and set virtual packages to be so ignored.

Patches 10-17 actually implement saving the patches alongside the
sources. Even though we suggest users to provide their Buildroot tree to
be compliant, this is by far incpomplete, because not all patches may be
there (patches can be downloaded or can be in a global patch dir):
  - the source archives are stored in a sub-directory name PKG-VERSION,
  - the directories with licenses are similarly named,
  - the full-path to patches are stored in the list of applied patches,
  - patches are copied alongside the corresponding source archive,
  - legal-info is made to work in off-line mode,
  - the legal-info header is updated, a hash of saved files is
    generated,
  - as a bonus, the Arago actual-source archive gains a hash.

Patches 18-27 re-organise the gcc packages. The ultimate goal is to be
able to save the legal-info for both the host and target variants. For
that, we want to introduce a target gcc variant (which would not install
a native compiler) to define the licensing terms. That has not been done
in this series, for two reasons: first, the series is already very long;
second, that target package needs some mor ere-organising in the gcc
infra. Otherwise:
  - the gcc common definitions ar emoved to gcc-common,
  - gcc-initial remains as-is,
  - gcc-final is renamed to just 'gcc',
  - licensing information is added to gcc (the final one),
  - the custom patch command is dropped, to use the generic patch infra,
    so symlinks to patch directories are added to gcc-initial and
    gcc (-final).

Starting from there, the series diverges from its original intent, but
is a logical/historical followup because I noticed the Xtensa overlay
handling was really a mess.

Patch 28 enables architectures to define variables and helpers, that
[ackage can re-use if need be. This will be used by the Xtensa
architecture to provide helpers around the management of the Xtensa
overlay.

Patches 29-32 introduce Xtensa variables, with the name of the core and
the path to the overlay. The three users, binutils, gcc and gdb, are
updated to use those variable instead of all duplicating (and badly at
that) the same assignments.

Patches 33-36 introduce a macro to handle the extraction of the Xtensa
overlay, and the three users are updated to make use of it (instead,
again, of badly duplicating the same logic).

Patches 37-40 similarly introduce a macro to manage savinf the Xtensa
overlay for legal-info. Ditto the three users...

Patches 41-42 change binutils and gdb to extract the overlay as a
post-extract hook, rather than as a pre-patch hook, so they are aligned
with what is done in gcc. It seems more logical to have it a
post-extract hook, so gcc was not changed, and its behaviour has been
replicated in binutils and gdb, rather than the other way around.

Patches 43-46 introduce a package-like smal infra for the Xtensa
architecture, that automatically define the post-extract and
post-legal-info hooks, rather than all users having to replicate the
same logic again-and-again. The three users are converted to using that
little infra.

Patches 47-51 cleanup the way we manage the Xtensa overlay. The name of
the core was only used to construct the name of the tarball; the path to
that tarball was just concatenating the directory, a constant string,
the core name, and the .tar extension. This was not very flexible, and
was limiting the naming scheme for the overlay, when directly having the
path to the overlay is jsut as good and more flexible. With that done,
we can now use a compressed overlay, or fetch it from the net.


And that concludes this long series. Thanks for reading! :-) If you
haven't had enough reading so far, please give each commit message a
look, some of them are worth reading in their entirety as they bring mor
edetails that would have been redundant here (and would have made that
cover-letter een longer, if not too long.

All of that just because I wanted to save the patches alongside the
corresponding sources. :-)

Needless to say this is not for master (in case Arnout still wondered
about that!). But I doubt it will get enough reviews in time to even
make it to -next. Please make me lie! ;-]

Regards,
Yann E. MORIN.


The following changes since commit 917b6e72ea01c689a2376b24c87d7f6f1570a06f:

  fastd: add upstream patch to fix build with musl (2015-11-22 22:30:51 +0100)

are available in the git repository at:

  git://git.busybox.net/~ymorin/git/buildroot yem/legal

for you to fetch changes up to fa19376b4ba69e333bf67f419ba1c3bbfd1f6345:

  configs/qemu-xtensa: use overlay from the github repository (2015-11-23 14:55:39 +0100)

----------------------------------------------------------------
Yann E. MORIN (51):
      core/pkg-autotools: align host configure commands to target one
      package/gcc: comment on why we override the generic configure commands
      package/gcc: align gcc-final configure-cmds to the generic ones
      core/pkg-generic: add macro to hardlink-or-copy
      core/legal-info: use the macro to install source archives
      package/perl: include perl-cross in the legal-info output
      core: add a global variable with already-unquoted global patch dir
      core/legal-info: allow ignoring packages from the legal-info
      core/pkg-virtual: ignore from legal-info output
      core/legal-info: install source archives in their own sub-dir
      core/legal-info: add package version to license directory
      core/apply-patches: store full path of applied patches
      core/legal-info: also save patches
      core/legal-info: update the legal-info report header
      core/legal-info: ensure legal-info works in off-line mode
      toolchain/external: add hash for Arago actual sources
      core/legal-info: generate a hash of all saved files
      package/gcc: add a patch for arc rather than using sed
      package/gcc: simplify setting GCC_SOURCE
      pacakge/gcc: rename all variables as it is a host-only package
      package/gcc: prefix all common variables with HOST_GCC_COMMON_
      package/gcc: rename the common files
      package/gcc: rename gcc-final into plain gcc
      package/gcc-initial: ignore from legal-info output
      package/gcc: add licensing info for host variant
      package/gcc: create the ./configure symlink as a post-patch hook
      pacakge/gcc: drop custom patch command
      core: include arch-specific definitions
      arch/xtensa: add definitions for the Xtensa overlay
      package/binutils: use the Xtensa variables
      package/gdb: use the Xtensa variables
      package/gcc: use the Xtensa variables
      arch/xtensa: add macro to extract the overlay
      package/binutils: use macro to extract Xtensa overlay
      package/gdb: use macro to extract Xtensa overlay
      package/gcc: use macro to extract Xtensa overlay
      arch/xtensa: add macro to install legal-info
      pacage/gcc: use macro to install Xtensa overlay legal-info
      package/binutils: use macro to install Xtensa overlay legal-info
      package/gdb: use macro to install Xtensa overlay legal-info
      package/binutils: extract Xtensa overlay as post-extract hook
      package/gdb: extract Xtensa overlay as post-extract hook
      arch/xtensa: add macros to generate hooks
      package/binutils: use the Xtensa macro generators
      package/gdb: use the Xtensa macro generators
      package/gcc: use the Xtensa macro generators
      arc/xtensa: get rid of an intermediate blind kconfig option
      arch/xtensa: allow specifying path to tarball file
      arch/xtensa: accept the overlay to be compressed
      arch/xtensa: accept the overlay to be an URL
      configs/qemu-xtensa: use overlay from the github repository

 Config.in.legacy                                   |  26 +++
 Makefile                                           |  13 +-
 arch/Config.in.xtensa                              |  27 +--
 arch/arch.mk.xtensa                                |  87 ++++++++
 board/qemu/xtensa-lx60/xtensa_dc232b.tar           | Bin 747520 -> 0 bytes
 configs/qemu_xtensa_lx60_defconfig                 |   4 +-
 docs/manual/adding-packages-generic.txt            |   7 +-
 docs/manual/adding-packages-virtual.txt            |   3 +
 package/binutils/binutils.mk                       |  13 +-
 package/gcc/4.9.3/860-cilk-wchar.patch             |   6 +-
 package/gcc/Config.in.host                         |   3 +
 .../900-no-libgmon.a-when-inhibit_libc.patch       |  43 ++++
 package/gcc/{gcc.hash => gcc-common.hash}          |   0
 package/gcc/{gcc.mk => gcc-common.mk}              |  91 ++++-----
 package/gcc/gcc-final/gcc-final.hash               |   1 -
 package/gcc/gcc-final/gcc-final.mk                 | 193 ------------------
 package/gcc/gcc-initial/4.5.4                      |   1 +
 package/gcc/gcc-initial/4.7.4                      |   1 +
 package/gcc/gcc-initial/4.8.5                      |   1 +
 package/gcc/gcc-initial/4.9.3                      |   1 +
 package/gcc/gcc-initial/5.2.0                      |   1 +
 package/gcc/gcc-initial/arc-2015.06                |   1 +
 package/gcc/gcc-initial/gcc-initial.hash           |   2 +-
 package/gcc/gcc-initial/gcc-initial.mk             |  36 ++--
 package/gcc/gcc/4.5.4                              |   1 +
 package/gcc/gcc/4.7.4                              |   1 +
 package/gcc/gcc/4.8.5                              |   1 +
 package/gcc/gcc/4.9.3                              |   1 +
 package/gcc/gcc/5.2.0                              |   1 +
 package/gcc/gcc/arc-2015.06                        |   1 +
 package/gcc/gcc/gcc.hash                           |   1 +
 package/gcc/gcc/gcc.mk                             | 226 +++++++++++++++++++++
 package/gdb/gdb.mk                                 |  14 +-
 package/perl/perl.mk                               |   7 +
 package/pkg-autotools.mk                           |  12 +-
 package/pkg-generic.mk                             |  69 +++++--
 package/pkg-utils.mk                               |  18 ++
 package/pkg-virtual.mk                             |   2 +
 support/legal-info/README.header                   |   7 +-
 support/scripts/apply-patches.sh                   |   7 +-
 .../toolchain-buildroot/toolchain-buildroot.mk     |   4 +-
 .../toolchain-external/toolchain-external.hash     |   1 +
 42 files changed, 587 insertions(+), 348 deletions(-)
 create mode 100644 arch/arch.mk.xtensa
 delete mode 100644 board/qemu/xtensa-lx60/xtensa_dc232b.tar
 create mode 100644 package/gcc/arc-2015.06/900-no-libgmon.a-when-inhibit_libc.patch
 rename package/gcc/{gcc.hash => gcc-common.hash} (100%)
 rename package/gcc/{gcc.mk => gcc-common.mk} (73%)
 delete mode 120000 package/gcc/gcc-final/gcc-final.hash
 delete mode 100644 package/gcc/gcc-final/gcc-final.mk
 create mode 120000 package/gcc/gcc-initial/4.5.4
 create mode 120000 package/gcc/gcc-initial/4.7.4
 create mode 120000 package/gcc/gcc-initial/4.8.5
 create mode 120000 package/gcc/gcc-initial/4.9.3
 create mode 120000 package/gcc/gcc-initial/5.2.0
 create mode 120000 package/gcc/gcc-initial/arc-2015.06
 create mode 120000 package/gcc/gcc/4.5.4
 create mode 120000 package/gcc/gcc/4.7.4
 create mode 120000 package/gcc/gcc/4.8.5
 create mode 120000 package/gcc/gcc/4.9.3
 create mode 120000 package/gcc/gcc/5.2.0
 create mode 120000 package/gcc/gcc/arc-2015.06
 create mode 120000 package/gcc/gcc/gcc.hash
 create mode 100644 package/gcc/gcc/gcc.mk

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 46/51] package/gcc: use the Xtensa macro generators
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (44 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 45/51] package/gdb: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 47/51] arc/xtensa: get rid of an intermediate blind kconfig option Yann E. MORIN
                   ` (5 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
CcL: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/gcc/gcc-common.mk              |  7 -------
 package/gcc/gcc-initial/gcc-initial.mk |  5 ++---
 package/gcc/gcc/gcc.mk                 | 12 ++----------
 3 files changed, 4 insertions(+), 20 deletions(-)

diff --git a/package/gcc/gcc-common.mk b/package/gcc/gcc-common.mk
index 35f33e5..5f343a5 100644
--- a/package/gcc/gcc-common.mk
+++ b/package/gcc/gcc-common.mk
@@ -22,13 +22,6 @@ HOST_GCC_COMMON_SOURCE = gcc-$(HOST_GCC_COMMON_VERSION).tar.bz2
 endif
 
 #
-# Xtensa special hook
-#
-define HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
-	$(call arch-xtensa-overlay-extract,$(@D),gcc)
-endef
-
-#
 # Apply patches
 #
 
diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index 709b6a7..d2d2d4b 100644
--- a/package/gcc/gcc-initial/gcc-initial.mk
+++ b/package/gcc/gcc-initial/gcc-initial.mk
@@ -15,9 +15,8 @@ HOST_GCC_INITIAL_DEPENDENCIES = $(HOST_GCC_COMMON_DEPENDENCIES)
 HOST_GCC_INITIAL_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
 HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
-ifneq ($(ARCH_XTENSA_CORE_NAME),)
-HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
-endif
+HOST_GCC_INITIAL_ARCH_XTENSA_OVERLAY_COMPONENT = gcc
+$(eval $(host-arch-xtensa-overlay))
 
 HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_POWERPC_PATCH
 
diff --git a/package/gcc/gcc/gcc.mk b/package/gcc/gcc/gcc.mk
index ce6402a..ee56f47 100644
--- a/package/gcc/gcc/gcc.mk
+++ b/package/gcc/gcc/gcc.mk
@@ -25,16 +25,8 @@ HOST_GCC_DEPENDENCIES = \
 HOST_GCC_EXCLUDES = $(HOST_GCC_COMMON_EXCLUDES)
 HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_FAKE_TESTSUITE
 
-ifneq ($(ARCH_XTENSA_CORE_NAME),)
-
-HOST_GCC_POST_EXTRACT_HOOKS += HOST_GCC_COMMON_XTENSA_OVERLAY_EXTRACT
-
-define HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
-	$(Q)$(call arch-xtensa-overlay-legal-info,$(HOST_GCC_REDIST_SOURCES_DIR))
-endef
-HOST_GCC_POST_LEGAL_INFO_HOOKS += HOST_GCC_XTENSA_OVERLAY_LEGAL_INFO
-
-endif
+HOST_GCC_ARCH_XTENSA_OVERLAY_COMPONENT = gcc
+$(eval $(host-arch-xtensa-overlay))
 
 HOST_GCC_POST_PATCH_HOOKS += HOST_GCC_COMMON_APPLY_POWERPC_PATCH
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 47/51] arc/xtensa: get rid of an intermediate blind kconfig option
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (45 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 46/51] package/gcc: " Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 48/51] arch/xtensa: allow specifying path to tarball file Yann E. MORIN
                   ` (4 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

It is not needed to have an intermediate blind option, we can just
hide the prompt behind the same dependency as the non-blind symbol.

Update our qemu-xtensa defconfig acordingly (note: it was using
different values for both options, which is not possible; the blind
option was just set to the non-blind one in the .config).

Also remove an unneeded empty default for the BR2_XTENSA_OVERLAY_DIR
string option (strings are empty by default).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Gustavo Zacarias <gustavo@zacarias.com.ar>
Cc: Chris Zankel <chris@zankel.net>
---
 Config.in.legacy                   | 14 ++++++++++++++
 arch/Config.in.xtensa              | 18 +++++++-----------
 configs/qemu_xtensa_lx60_defconfig |  3 +--
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/Config.in.legacy b/Config.in.legacy
index c5b8223..b892f38 100644
--- a/Config.in.legacy
+++ b/Config.in.legacy
@@ -105,6 +105,20 @@ comment "----------------------------------------------------"
 endif
 
 ###############################################################################
+comment "Legacy options removed in 2016.02"
+
+config BR2_XTENSA_CUSTOM_NAME
+	string "The BR2_XTENSA_CUSTOM_NAME option has been renamed"
+	help
+	  The BR2_XTENSA_CUSTOM_NAME option has been renamed
+	  to BR2_XTENSA_CORE_NAME.
+
+config BR2_XTENSA_CUSTOM_NAME_WRAP
+	bool
+	default y if BR2_XTENSA_CUSTOM_NAME != ""
+	select BR2_LEGACY
+
+###############################################################################
 comment "Legacy options removed in 2015.11"
 
 config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REAL
diff --git a/arch/Config.in.xtensa b/arch/Config.in.xtensa
index a0e18f1..c1c4fa1 100644
--- a/arch/Config.in.xtensa
+++ b/arch/Config.in.xtensa
@@ -2,30 +2,26 @@ choice
 	prompt "Target Architecture Variant"
 	depends on BR2_xtensa
 	default BR2_xtensa_fsf
+
 config BR2_XTENSA_CUSTOM
 	select BR2_ARCH_HAS_MMU_OPTIONAL
 	bool "Custom Xtensa processor configuration"
+
 config BR2_xtensa_fsf
 	select BR2_ARCH_HAS_MMU_MANDATORY
 	bool "fsf - Default configuration"
-endchoice
 
-config BR2_XTENSA_CUSTOM_NAME
-	string "Custom Xtensa processor configuration name"
-	depends on BR2_XTENSA_CUSTOM
-	default ""
-	help
-	  Name given to a custom Xtensa processor configuration.
+endchoice
 
 config BR2_XTENSA_CORE_NAME
-	string
-	default BR2_XTENSA_CUSTOM_NAME	if BR2_XTENSA_CUSTOM
-	default ""			if BR2_xtensa_fsf
+	string "Custom Xtensa processor configuration name" if BR2_XTENSA_CUSTOM
+	default BR2_XTENSA_CUSTOM_NAME if BR2_XTENSA_CUSTOM_NAME != "" # legacy
+	help
+	  Name given to a custom Xtensa processor configuration.
 
 config BR2_XTENSA_OVERLAY_DIR
 	string "Overlay directory for custom configuration"
 	depends on BR2_XTENSA_CUSTOM
-	default ""
 	help
 	  Provide the directory path that contains the overlay file
 	  for a custom processor configuration. The path is relative
diff --git a/configs/qemu_xtensa_lx60_defconfig b/configs/qemu_xtensa_lx60_defconfig
index 42b844c..8326381 100644
--- a/configs/qemu_xtensa_lx60_defconfig
+++ b/configs/qemu_xtensa_lx60_defconfig
@@ -1,8 +1,7 @@
 # Architecture
 BR2_xtensa=y
 BR2_XTENSA_CUSTOM=y
-BR2_XTENSA_CUSTOM_NAME="dc232b"
-BR2_XTENSA_CORE_NAME="lx60"
+BR2_XTENSA_CORE_NAME="dc232b"
 BR2_XTENSA_OVERLAY_DIR="board/qemu/xtensa-lx60"
 
 # Patches
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 48/51] arch/xtensa: allow specifying path to tarball file
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (46 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 47/51] arc/xtensa: get rid of an intermediate blind kconfig option Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 49/51] arch/xtensa: accept the overlay to be compressed Yann E. MORIN
                   ` (3 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

currently, specifying a custom Xtrensa core is done with two variables:
  - the core name
  - the directory containing the overlay tarball

However, the core name only serves to construct the tarball name, and is
not used whatsoever to configure any of the toolchain components
(binutils, gcc or gdb), except through the files that are overlayed in
their respective source trees.

This has two main drawbacks:
  - the overlay file must be named after the core,
  - the tarball can not be compressed.

Furthermore, it also makes it extremely complex to implement a download
of that tarball.

So, those two variables can be squeezed into a single variable, that is
the complete path of the overlay tarball.

Update the qemu-xtensa defconfig accordingly.

Note: we do not add a legacy entry for BR2_XTENSA_CORE_NAME, since it
was previously a blind option in the last release, and there's been no
release since we removed BR2_XTENSA_CUSTOM_NAME. So, we just update the
legacy comments for BR2_XTENSA_CUSTOM_NAME, since that's all the user
could have seen in any of our releases so far.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Gustavo Zacarias <gustavo@zacarias.com.ar>
Cc: Chris Zankel <chris@zankel.net>
---
 Config.in.legacy                   | 18 +++++++++++++++---
 arch/Config.in.xtensa              | 19 ++++++++-----------
 arch/arch.mk.xtensa                | 23 ++++++++++-------------
 configs/qemu_xtensa_lx60_defconfig |  3 +--
 4 files changed, 34 insertions(+), 29 deletions(-)

diff --git a/Config.in.legacy b/Config.in.legacy
index b892f38..1986a1b 100644
--- a/Config.in.legacy
+++ b/Config.in.legacy
@@ -107,11 +107,23 @@ endif
 ###############################################################################
 comment "Legacy options removed in 2016.02"
 
+config BR2_XTENSA_OVERLAY_DIR
+	string "The BR2_XTENSA_OVERLAY_DIR option has been removed"
+	help
+	  The BR2_XTENSA_OVERLAY_DIR has been removed in favour of
+	  BR2_XTENSA_OVERLAY_FILE. You must now pass the cpmplete
+	  path to the overlay file, not to the directory containing
+	  it.
+
+config BR2_XTENSA_OVERLAY_DIR_WRAP
+	bool
+	default y if BR2_XTENSA_OVERLAY_DIR != ""
+	select BR2_LEGACY
+
 config BR2_XTENSA_CUSTOM_NAME
-	string "The BR2_XTENSA_CUSTOM_NAME option has been renamed"
+	string "The BR2_XTENSA_CUSTOM_NAME option has been removed"
 	help
-	  The BR2_XTENSA_CUSTOM_NAME option has been renamed
-	  to BR2_XTENSA_CORE_NAME.
+	  The BR2_XTENSA_CUSTOM_NAME option has been removed.
 
 config BR2_XTENSA_CUSTOM_NAME_WRAP
 	bool
diff --git a/arch/Config.in.xtensa b/arch/Config.in.xtensa
index c1c4fa1..83d0d91 100644
--- a/arch/Config.in.xtensa
+++ b/arch/Config.in.xtensa
@@ -13,24 +13,21 @@ config BR2_xtensa_fsf
 
 endchoice
 
-config BR2_XTENSA_CORE_NAME
-	string "Custom Xtensa processor configuration name" if BR2_XTENSA_CUSTOM
-	default BR2_XTENSA_CUSTOM_NAME if BR2_XTENSA_CUSTOM_NAME != "" # legacy
-	help
-	  Name given to a custom Xtensa processor configuration.
-
-config BR2_XTENSA_OVERLAY_DIR
-	string "Overlay directory for custom configuration"
+config BR2_XTENSA_OVERLAY_FILE
+	string "Overlay file for custom configuration"
 	depends on BR2_XTENSA_CUSTOM
 	help
-	  Provide the directory path that contains the overlay file
-	  for a custom processor configuration. The path is relative
-	  to the top directory of buildroot.
+	  Enter the path to the overlay tarball for a custom processor
+	  configuration.
+
 	  These overlay files are tar packages with updated configuration
 	  files for various toolchain packages and Xtensa processor
 	  configurations. They are provided by the processor vendor or
 	  directly from Tensilica.
 
+	  The path can be either absolute, or relative to the top directory
+	  of buildroot.
+
 choice
 	prompt "Target Architecture Endianness"
 	depends on BR2_XTENSA_CUSTOM
diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa
index d2f4f59..e60c0b2 100644
--- a/arch/arch.mk.xtensa
+++ b/arch/arch.mk.xtensa
@@ -1,18 +1,15 @@
 ################################################################################
-# Those two variables can be used by packages that need to extract the overlay.
+# This variable can be used by packages that need to extract the overlay.
 #
-# ARCH_XTENSA_CORE_NAME   is the name of the Xtensa core; empty if none or the
-#                         standard 'fsf' core.
-# ARCH_XTENSA_OVERLAY_TAR is the path to the overlay tarball; only valid when
-#                         ARCH_XTENSA_CORE_NAME is not empty.
+# ARCH_XTENSA_OVERLAY_FILE is the path to the overlay tarball; empty if not
+#                          using any overlay
 #
 # Example:
-#   ifneq ($(ARCH_XTENSA_CORE_NAME),)
-#       tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(@D) --strip-components=1 gcc
+#   ifneq ($(ARCH_XTENSA_OVERLAY_FILE),)
+#       tar xf $(ARCH_XTENSA_OVERLAY_FILE) -C $(@D) --strip-components=1 gcc
 #   endif
 ################################################################################
-ARCH_XTENSA_CORE_NAME = $(call qstrip,$(BR2_XTENSA_CORE_NAME))
-ARCH_XTENSA_OVERLAY_TAR = $(call qstrip,$(BR2_XTENSA_OVERLAY_DIR))/xtensa_$(ARCH_XTENSA_CORE_NAME).tar
+ARCH_XTENSA_OVERLAY_FILE = $(call qstrip,$(BR2_XTENSA_OVERLAY_FILE))
 
 ################################################################################
 # arch-xtensa-overlay-extract -- extract an extensa overlay
@@ -24,7 +21,7 @@ ARCH_XTENSA_OVERLAY_TAR = $(call qstrip,$(BR2_XTENSA_OVERLAY_DIR))/xtensa_$(ARCH
 #   $(call arch-xtensa-overlay-extract,/path/to/overlay.tar,$(@D),gcc)
 ################################################################################
 define arch-xtensa-overlay-extract
-	tar xf $(ARCH_XTENSA_OVERLAY_TAR) -C $(1) --strip-components=1 $(2)
+	tar xf $(ARCH_XTENSA_OVERLAY_FILE) -C $(1) --strip-components=1 $(2)
 endef
 
 ################################################################################
@@ -37,7 +34,7 @@ endef
 #   $(call arch-xtensa-overlay-legal-info,/path/to/redist/dir/)
 ################################################################################
 define arch-xtensa-overlay-legal-info
-	$(call hardlink-copy,$(ARCH_XTENSA_OVERLAY_TAR),$(1))
+	$(call hardlink-copy,$(ARCH_XTENSA_OVERLAY_FILE),$(1))
 endef
 
 ################################################################################
@@ -53,7 +50,7 @@ endef
 ################################################################################
 define arch-xtensa-overlay-inner
 
-ifneq ($$(ARCH_XTENSA_CORE_NAME),)
+ifneq ($$(ARCH_XTENSA_OVERLAY_FILE),)
 
 define $(1)_XTENSA_OVERLAY_EXTRACT
 	$$(call arch-xtensa-overlay-extract,$$(@D),$$($(1)_ARCH_XTENSA_OVERLAY_COMPONENT))
@@ -65,7 +62,7 @@ define $(1)_XTENSA_OVERLAY_LEGAL_INFO
 endef
 $(1)_POST_LEGAL_INFO_HOOKS += $(1)_XTENSA_OVERLAY_LEGAL_INFO
 
-endif # ARCH_XTENSA_CORE_NAME != ""
+endif # ARCH_XTENSA_OVERLAY_FILE != ""
 
 endef # arch-xtensa-overlay-inner
 
diff --git a/configs/qemu_xtensa_lx60_defconfig b/configs/qemu_xtensa_lx60_defconfig
index 8326381..457416e 100644
--- a/configs/qemu_xtensa_lx60_defconfig
+++ b/configs/qemu_xtensa_lx60_defconfig
@@ -1,8 +1,7 @@
 # Architecture
 BR2_xtensa=y
 BR2_XTENSA_CUSTOM=y
-BR2_XTENSA_CORE_NAME="dc232b"
-BR2_XTENSA_OVERLAY_DIR="board/qemu/xtensa-lx60"
+BR2_XTENSA_OVERLAY_FILE="board/qemu/xtensa-lx60/xtensa_dc232b.tar"
 
 # Patches
 BR2_GLOBAL_PATCH_DIR="board/qemu/xtensa-lx60"
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 49/51] arch/xtensa: accept the overlay to be compressed
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (47 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 48/51] arch/xtensa: allow specifying path to tarball file Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 14:48 ` [Buildroot] [PATCH 50/51] arch/xtensa: accept the overlay to be an URL Yann E. MORIN
                   ` (2 subsequent siblings)
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Chris Zankel <chris@zankel.net>
---
 arch/arch.mk.xtensa | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa
index e60c0b2..238ba24 100644
--- a/arch/arch.mk.xtensa
+++ b/arch/arch.mk.xtensa
@@ -21,7 +21,9 @@ ARCH_XTENSA_OVERLAY_FILE = $(call qstrip,$(BR2_XTENSA_OVERLAY_FILE))
 #   $(call arch-xtensa-overlay-extract,/path/to/overlay.tar,$(@D),gcc)
 ################################################################################
 define arch-xtensa-overlay-extract
-	tar xf $(ARCH_XTENSA_OVERLAY_FILE) -C $(1) --strip-components=1 $(2)
+	$(call suitable-extractor,$(ARCH_XTENSA_OVERLAY_FILE)) \
+		$(ARCH_XTENSA_OVERLAY_FILE) | \
+	$(TAR) --strip-components=1 -C $(1) $(TAR_OPTIONS) - $(2)
 endef
 
 ################################################################################
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 50/51] arch/xtensa: accept the overlay to be an URL
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (48 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 49/51] arch/xtensa: accept the overlay to be compressed Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 20:35   ` Thomas Petazzoni
  2015-11-23 14:48 ` [Buildroot] [PATCH 51/51] configs/qemu-xtensa: use overlay from the github repository Yann E. MORIN
  2015-11-23 20:22 ` [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Thomas Petazzoni
  51 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

It can be interesting to get the overlay from a remote server, rather
than expect it to be present locally.

Since that file can be any URL, we can't know its hash, so we just
exclude it.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Chris Zankel <chris@zankel.net>
---
 arch/arch.mk.xtensa | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa
index 238ba24..afaec3c 100644
--- a/arch/arch.mk.xtensa
+++ b/arch/arch.mk.xtensa
@@ -9,7 +9,15 @@
 #       tar xf $(ARCH_XTENSA_OVERLAY_FILE) -C $(@D) --strip-components=1 gcc
 #   endif
 ################################################################################
-ARCH_XTENSA_OVERLAY_FILE = $(call qstrip,$(BR2_XTENSA_OVERLAY_FILE))
+BR_ARCH_XTENSA_OVERLAY_FILE = $(call qstrip,$(BR2_XTENSA_OVERLAY_FILE))
+ifneq ($(filter http://% https://% ftp://% scp://%,$(BR_ARCH_XTENSA_OVERLAY_FILE)),)
+ARCH_XTENSA_OVERLAY_URL = $(BR_ARCH_XTENSA_OVERLAY_FILE)
+ARCH_XTENSA_OVERLAY_FILE = $(BR2_DL_DIR)/$(notdir $(BR_ARCH_XTENSA_OVERLAY_FILE))
+# Do not check that file, we can't know its hash
+BR_NO_CHECK_HASH_FOR += $(notdir $(ARCH_XTENSA_OVERLAY_URL))
+else
+ARCH_XTENSA_OVERLAY_FILE = $(BR_ARCH_XTENSA_OVERLAY_FILE)
+endif
 
 ################################################################################
 # arch-xtensa-overlay-extract -- extract an extensa overlay
@@ -54,6 +62,10 @@ define arch-xtensa-overlay-inner
 
 ifneq ($$(ARCH_XTENSA_OVERLAY_FILE),)
 
+# No need for a conditional here, the variable will be enpty when
+# there is no URL to download.
+$(1)_EXTRA_DOWNLOADS += $$(ARCH_XTENSA_OVERLAY_URL)
+
 define $(1)_XTENSA_OVERLAY_EXTRACT
 	$$(call arch-xtensa-overlay-extract,$$(@D),$$($(1)_ARCH_XTENSA_OVERLAY_COMPONENT))
 endef
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 51/51] configs/qemu-xtensa: use overlay from the github repository
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (49 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 50/51] arch/xtensa: accept the overlay to be an URL Yann E. MORIN
@ 2015-11-23 14:48 ` Yann E. MORIN
  2015-11-23 20:22 ` [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Thomas Petazzoni
  51 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 14:48 UTC (permalink / raw)
  To: buildroot

Rather than bundle the overlay with us, directly fetch it from its
upstream location.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Gustavo Zacarias <gustavo@zacarias.com.ar>
---
 board/qemu/xtensa-lx60/xtensa_dc232b.tar | Bin 747520 -> 0 bytes
 configs/qemu_xtensa_lx60_defconfig       |   2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 board/qemu/xtensa-lx60/xtensa_dc232b.tar

diff --git a/board/qemu/xtensa-lx60/xtensa_dc232b.tar b/board/qemu/xtensa-lx60/xtensa_dc232b.tar
deleted file mode 100644
index 77080e07b8a50151e71e511ff9348107d4acec3f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 747520
zcmeFadvn~#kuU0hk77Rru2017jCVX{ck`v|^+r$<J?2 at B#1J)}@j4uget=@z{c@uz
zQsd+M*>7f66;M?`Wxdd?ajd-?BMFtrU*@kevmQXBCiB(9Zoa5~^|Sr`?+E^Pc5?DF
z`t$VI_!F<e|9&<&IvX9G9Su(g!=D`uMn}g-KPyi5XHuj2q1uhNMe(ygPnRDjf0<01
z7V~euc2oKv=3f)l|BKn)LI68Bvj2}qXaDT~Lj;lD|K;*wu^Dg2%bu%2eE*-E9-aKN
z|372@Kkdp@HU8yvy}Fx!_`15!G6nnp^w_NXXL20CwxiP%v;GfZB!K)s%0dmi`G0u*
z|KG(A)YXOP>WA%kH(#%cs@(17s}I%J&z^mI at x%4SH<ve8|9$zJqo)CM*Rw!s|0(v<
zXP~bCle@i505HWP$N!VF(Ld||A)?3Ve_8dH>)FGitiE>6g(D5a{&&^?!EkVLX4n70
zDJ%y5S^pzxP7?psFFFT+UsjuPI=`Dwi>sT9V!patZ<jPOeEqB_ikIunr|ta1{jL}u
z9gV)i{~ptSPm14e%d)sx-|Zg9+p_rW`e8Mr`@Sl!R#O;F;O_VL^QyR;FUkV`g!$&K
zSl<;de*5aHVs~E_FXpT9_EYg&Y=2c&)9rk-TW^cSe6oe>nug7G{Q>5xsN at boD+&7R
z;?w$}n2uM)ww%qY-F7~C*a6nA7_Vl(T5r(=i17K{C%gvsm0JSdmD^>7rl1wyy!o#9
zrd*ZV at uIkXm@I&Z*YhdNiOOPJp at t1!tnSNMG5JJyxE%j=QO-f*w)j|XD;!#f5(BkJ
zonIB;;TPi_TD~pT8ytea1am(Xi!qp`ZtZry at o@$nMYi0pHzoW96oQA3^Tnc=l*L0;
z-aRb7LRcWA`2Ons at 7{j*zPNbvhvNH-ckeFVy#K?mL3nq+hSu_9DOAmuo5dWwgznsq
zSG!MOJZkv%^4-hd!7Udru3lfg{{!0p+pG6)E^ls%- at biUTol(A at 7`a%{O<L|yW;x0
zch_%kF262{8|Ws<E-G;l46z0s1kp1qcVpO^5N`hgI<*4Z7PI1h{IP`2otE>DVA&X^
zE*rE<sdnf^#PMRi`an*CFh-w<p<fsCyJEH8eN{Ye=MXEqHR&?C6mPe~`K#h&01-c4
z{bd2n-|Qd^cf~IucJFrg#cvnu_4cdc#k$(9S6>z1UZ94f;b3s|OW5BSd{umRa{-+E
z;#bd}{qOl|x_FqC#m~p9YCbEci?8p0-dz0;S(oS4`0M-sY_9*jx&F)f3Ib&{rW>FA
z%QHypn@`oYgc+QGfL)Fq1hKf|wxYIMbyFe!UH$P-#cztgft`OVe*XH!<u^b7syKrG
zFaC~EgV!$Kyn<_ByLRp6+wb1IhpR*V>cz{Kuiv8Rsde>tS9tYIzxwSFTpAg-e>=cS
zP+1zBZ-;mZ%8YhtgqKeAOV{r&e}D1n)jMc7H*f#;3Qa$Mu1gES0T!=D>)`AZ1mVB>
z#o^I8T!jDX7q8yDzkK)ZyKC}(Xvjm;%h#6|Xvc79c>A*E%XH at Y9T_+@{kdwS4gH|y
zTS&1>q;7a at bdqX93Wvu=U#TXfa(HYo{`<?9FD`B_v0-G~b9wy|H4V-TFW at RF8Jrn}
zz*X#$!I{A_Ts_9C=Z2YZ^@Oh4XvF@xVI0Vwk*v|Bmp{C`x%mAh`FUg_iWYKnV4{i^
zv=TB=?@Xx;EgcR_ba4+_I~;UbfEEu2Mi5DDXf;f544ms5V(z&qe|<yDJ-20vx#vdT
zUtZr3bI+|FxgqABTRn0^%ssdHd3o`j>}|u>S3ot`Ja}$g1#eVV4M&Fl at 2}pxdi%YM
zoHOGl(RA}31_ID{W)OEnnPFUlVMMAiD7d~s3P(mKetUKEQUt!iAzl_iZ)m_QeRJ{R
zHO2POu>RGHcb6Ccb%DAD$A&J^LMVe%16<xiIdN<N$$O~f)QGJs4ac-Vw$MF8qmM*O
zZMhi&qAa|={Qc!?qQ{7YSC=oo`=;q%gXMP@H&kYx8$MmVfBoX+Z?W7zH|&1ZTsOM*
z<#lb>aA@#$BkPiINRRvXzXPscUB7=v1_R8X9#$@YxP~x!FNzNs1})G2{%aT(XXV{|
zRTgi)`}X$c4>#{Fzqu*Sj_S*>F>!lyefje0;`J at GK}9<;+91H+iH6bOnHUqVx9e$H
zRWQN8@er0cor5DbX=5Wv8bhNh%I2U&nPXn6%eQ%1j63Evb1>1Ft49p;h9BPF{NW8H
zt1hh7aihy1udz=|6>t%2QR^a>qSi&MM6HWhh*}r14z(^~8L}=m^}Dm7!?dP)ciz!q
zVpF?2 at 8~d9+|gmKEZj!ULoKGdZC|9aZC|9SZC|9KZC|9CZC?E0rAldIFu1;fz)^+3
zNX6@$@4f}jjfB3w`Ti}YnRW5q)f-HHBVev?pz602$nl}Yr5Ya0hVSRA+4}LtxGJ&p
z^)MAJH}L3f2Tev%zP@>R@%r@@g|=l8j5Hu^cqyl;Ca#>Pnis{GW00rUBvY71Bax;<
zqf}zU<r}cVpiqrSrV=$EnO9+Ij7}I@uU2ngzWR1OL!J!9=HR6>sEu8wer at P7c-023
z&Ks~i7&mC6mU)9VXmvF-V}ow5Ib<1qXbf0J2fca$wIA8iHK|!_d)c5`+LcbVv}+0u
zh?v5L>v$1GTNm3Ty}5aR{mspPU%kSVH{$ix#rq3K)3uuGn6p!DTs4sOQPpHz8#=M!
z2bk*IT-?%VdV6(q3(arey}x|bHK5{%3*+hN87>yT9Z$Dw*hqnqQ7sX1*eg~K%L(jT
z6klKq>>%I{!+g3JS5;ZTrowcL*I-GHYg-yp>pO7!2bR>u_#>?0#}nAidAwJ93Z$Ue
z(N$Q5f1r()T{-(wt%v2nFZ_5-!)?(F{NnQU%VJQE_tIk_IkYZA9v36)T0Ptr$5x9N
zZi{9vA#{u3wm7w<<#=11S=VvAEza8)hsE>u#ZfV^y at UIYi-GMRTs<iUwtsN-v>4bP
z!qqdF*4k)t&@BeGgL26-gf)BjJz!<aOQ8)cZMiB3URX+WYdeM2ba%@cESc;U7<*wM
z-M%`4wL$ypG0X+qS5Jyz%jfGGu%qSg^$pn2;VX^6#nAS(8H0<V?JbVN#mM%Q#^C~{
zrD}>RL;40sVwfhiuH#q?8zR<q9F1X5#JZ|hYp^w9wKU^#F|wW3M&x2-`(BU9#i;E(
zjLOBx_8Z4#800Jia9}QuZMR`$E{<)V>#?~ww%t~Pb8&3DE=K1<TL=hZX?!k at ZJ%j?
zE{<()VT3M@Z9nTFx;VCdtq1Ai#CBMX(y&ozQK5$E;>7k`4b;Vn?YO*WP at LF~tFgK`
zvHM&N*2RhKy=W1mb#Y>oppDnXiA_c`VizYi8#HDYr#2I61U at QGZ7NjLpg6U;P))<)
z)Fy)l?&8#Df`;zm)TRM1gZ>r=&G22E+7xI5cyVe|AcpYb)OKHu;rdEd1Ytdj7iTsD
zY8WrhhH|C)+j$8)-82r)@o|8)RDFPb;t#8G_Kf6icegi-^$ymo)$aBK>_LA4PxGst
z8p`4FYVvRgV|TUs@)_>$s at sd*yu97Prti_O;i~$_7veAf at gK$Um&N}rzW4%f{NvG|
z3b-<aOaJ+wPy@fjJGSNSVG9omP|L5M{r%Z9xy}4>J?}CN-YO`*kn;=OsIQ6#*oqzv
zi;v at lG*J9oD%MN`2{Pkcnt at g*^L|s*mi}w;{~bNu9g+E(H at c0AgEobO)A3K3MYQf8
zhRDfJn#jpdn#jpye!Qo=9<=g$@SGBAGziUW%ewv|5=_7fGa7KIjjth@$vqf?<xK^$
zvKy at ZOjL^M1EonTL)k^ubf-V=p{$GQ&T-#WRy!*6*&e!azFZE5`|8MHD=8!!N1-`k
zo7ZE<K(ynqOXIY2yt})LObamhd{1-&ch=NFvUwcArfyu1WXd_rF&pK`rCnoAxf)aL
ziOG&hn2d(tNtkY0k35D|3yVZF+F7SHLk}<u%b@YI%)*kH-1{^vi^<P04U1uts`}(J
zC3k!J&`V(*40VTkED2eqwPO~c0*fuxcAaKR40h+~o_cd|>KOH)0X+y<FWctz*EeV!
z%pnG+ESGmUi7=<uES<|eQQ4l2$*qS`@N`T!tv?z8pVlYrRBUQd$W9zqhoex0KsbfE
zX$Phdd4?IJwrpbN4ePr*FmF#h4qPR75ImP{+1DSLU<9SLXEu9x7ZsE1&C#CN?3m7~
zd1PpfG>z+z%CP0H8J1X$oYPsu&;v|pvxxj0Q`&Sc_dcb~<nr*7+9)mu2g`2Qn4_(W
z;Kk~CqZ@bV?2cXauQ&VJkZKpo_>k0X`y5PKWB8D*mfOR{q?iYVKgH5b`wTpqsm*V7
zYo_jh#F1-?BqBe at c+=j}V;>tBT<&|s$>Z|y<4q)&)%bu<v(z)B&>5v^Tz?rJ{4mR2
zbMuw58kYwo^F%CogC7lA)_o2(t%Auezrox+4Llu>Sq(1Rn|tjs9|9q6`eeG(ANgU6
zBRh`8tgm)dy}l9paL}4R&^DTLwN;H5hwDhA!qon0yA}51ujn^tOm`06k!A{sosQbi
z=zg?1(pTQLANIDHLw?mS3c)K)gZQqD&q>pvgLkGye{NP<>U_Of9d581s>%{R@*CFm
z*E4}be>=^X`ldY|?e)c~_CRIwSm!-g-{O-(cc(w%Kf^#3(}~)eqSrobPaVt!#eVuw
z_vR<sg+L6wvC2O7ie1cTejj?3z4wm%JPUI(ha4l+{`>N<tNa7><>%NK_<Vi2uW4hu
zx|$2KppI108$37By*YSwH9OI<08lP@imRy$liNMZ(VX6YX+3Z+ewNZ|lK+`Ha^H3J
z;2rrH>gs3eNcdFNXipm}BXUV!jjL^v=b=T?vaZK6DSi?$e9qOj(pn0iaHS32?b_E$
zxII3Zv;VL+&vfg0BvL)M<cLgobzQS|{{uxPou8%f+ncfcgF`bq2dDe4*x8JJh6)_V
z=u&@uuFv0P`d*G~&qh1$h<z8(@TR}&5cED}*UNw%Zwre;GwScvOzl@=eV3SyJvT9#
z4*w0FWnGVbqPE1jihXVkeP`^@*GwS#t}J~M*=Jb^+60axa=AQRtaUc`{bS{nI^8m{
zzt{}j-nF9BJN8*7{}e~RmWlrWtlnEiYR|)9?4Smdo>SYz{#Z>O+nl>2ZF~C-)E?#u
zT_*m-DLwn?SJak?{ZYEFifWnMZ=m+G;BA at s55THjuKKK~9s4ojjiq7mehj4lnQdZ^
ztcGmLoLOT(Zh3MQ)v~wWK-~+aea=y#Yv}<gyU!Ix>5u!Ho_0+3jaTXd_PH$U`isq=
z$^Nkwo9wHJhN=CAW#2^h8Ik=HiF1<u1*LD&)ZUKiXY{gM>MxRWW&|DEGHO!J?Iv{X
z at NhNT@V(#E_(^nUpZW9;(4A-d%TC__yszxET>8mor<&k#*%>wb;|x&m&VIA=C()fh
z;q2_aJGc9K_}iX>$gRfk9dN_8{xU3R0&?DdXOMmRyPeE;!zM3!efhJ4%Gej7ZSxMy
z=5d=%cG<So*O<L>*&hB?SO$N2#5Ar)CSmb_-$wL2;A%akWSQI at F2B_$T!Mc}X4uvv
zkB~3OBm0fXsK+w9gC_SdcFk*>cVH@`7QH)tGj`9JJyc7R;J1wo<9ehqB(tN|NRN9O
zYC6iJdh8xbqHfy3DQp!-_7~uv_QYa)z>dyo-LxKA3 at MFK`TTS+3J0-s9^JHqQ`ibb
zc9eeF-9ApXgOgiWUG0ld7*#sI*$TYk;xJ%u)nR3S+{!K<oN=pF_=a6+vy0C!ocl@A
z?DKt+3q`V<T<rE3a&0SnBv-tEH0bwJVlXp;bHGYH*ZO>9)lo at di-2Z#L~O|Rj(X`>
z{OTwm&O3bSuNwll>w?|}R~3;<7x<XEsf+!6M%(oRyczd7di1lrvTJsPC=GQ4NB-*G
z)D_*S{chX+MA8&rKK!4Osnuw=)<31zXVvZ4g%vB9@D~Ma^Lp%-kSE%4GX%@nzDr*J
zboN}m4!~%?^=2Q8_F6i6V3dwox>{})^XYtdD~^J4Wl?eQ{{6eF7vH_Vy#4MC9F6?y
zt7re~f5EAZ+R;lb5pfn191r<wjb}OD&sQJB35^{SY0Hf9_Q<n!<3N*>FWBJ>0XfbB
zfq8BS$axmXc^C+sYr at xOp0B|$1ZH`NURiDjd9H+clE+sdU85{dM&!xA-~p?@eOOKL
z95*<=>|r(ES;x7_Gturq=sRd_4j)%nDtZ1mor_Ki-<2Qc)vnwYck_kgAoFec0UH}_
z@`6%U6n`sze(?^@t^N5J{sSix;~BDW4BOwof(0qGeM at aiXoEwEvF%tMBuf at ttpNUR
z3<s)r9-|H?xQXTlzrJKxaP{r=_gC-mSZX@kmJIo~`M>E<FY!3L at oFc|j8%9*E1h#!
zHx%Rf at wE8GuhcPg;uJh}6jbr@Eu8ju`~Jo2Ta>#!s?T(XqvGWM(D9?Ef%s!6{uqfr
zj>R7*;*V4D$C>!!T>SA|{4o}POvE2k at yAU3QHnqA=nv}6wilByCqQfuK1k!G)o?yB
zF#?BR)1Po`HT`)m|AeKZ$CHPU{s31V3}5isszAb%zT{t{`y;~_8R6A#`#^bHtT*L$
zyqc-llLs9_L_d2gT5c=xk at u(L+gUk<v%HHh<f(?gfOXr(I(V@WhP0Dkho`4{>hEwU
zBi&d0D+J^S!xNYA+HH7h<I{2R?{GdNp3u1avQ~o!B-USr|B{YNq@56<?>D*<ZRg1t
zal8F0S6;uA`Cr*6rsZS`f-8CO=8G?MnO~xJ;>FZ2O%9YB>ee_P#ydF4+US}3^vTUs
zbdmu0C0MkX0yLZ?InuZ20*Kn~*5e?Me~$)vfc at XW@aa4x$ZA=LF}m%RLQMYEh%gyn
z%^lFH<RF}2Br9Y*{sv}@(gf1hHDS}kr<M+g9*KxOqC+(QQZ}PG$~=r5O#*lRM8tqk
zM%>FAg5m{a!}6E}fnWG_EYX2~Dk~{&McxWAXpp%|VtAga{@ZvJ*_DtEH#C4+1can)
zG|Rs#TM<m!{)KA7(qmGH5+P=dx7*GD<tMSAx|xsbF@);eK7wRXZnx_#T1J0Co&}lW
zAlNU9|3{v2E2CA4yU?nBjjs-B{H|Z)cLz28s9)oca*Q9`#l}r{$w&_R<HK6tJ*FgE
ze|}i&VFBGW?@Bfw^ktNs_}IZBvD<#?*9oQcfS$kzvkjXAOGy}(wsKVI8akB}jh$cA
zOEsF;($6U1W--ad@~?(abyvt>C1u?l)hkGVqL~yrNaLV_(MM4bB3tV=n32FsGws1t
zc`Xi6cMg7wYJMC>sFd^&s-(b3G!-WyI&-QyggGf2%ABrR{k at C1x-FAAoX4DXCX~Gz
zBSF!(XLZlQ-;{OKduR1jPPE{{>zB0pLYO0b<_xcs{cAD!690><vidr_SwYvS1vVIP
zJqNQ>id%R@`+spVD}hx63*&=kTS7FT7nGZtZuwW`DE7KE8|F}|5o7nvoC!7thb#b2
zLwW%x at uxDw;7 at 4^{7o50y)dF)kh0KHFM>rCfF2+=;WlIPFK-BmY9Sg%C)um%ZtS9d
zG<={{3c4fLwqj+EBC5{?0pT{rEM_;;aJ@0>*D$@f<A$4fA#qU4LPG9D9Kat&5Ks&>
za?sY=+{0U_=Ke`%xVa~UjaoV&7y$1p+JGcCDSGSMYvU2LdYtd3_r(`Y>z8m9HeBhy
z({WYevP=H&|3wBc%70x<w&nOQsGumM(4cO88g#V}oAzN>`>1Ijb+sQi?Z;j1Cr$fF
zSNmzxe%jT3*0i5>wVyZb=Uwg3oA&2j?c=6>+|@p5+9zG@)24me)jn(5XI<@O(_R|w
zv+{2Iu-G-tcSiHyp_5fffbI{8RM<fcO)n+tnI_a?MsmSb*r>&MLp!(XJ7NqD$Sgqn
zsxXw-|4>B%5mjE*jci(>3+}X%t<JPk?XI*^?XI*^?XI*^?XI*^?XI*^?XI*^?VV`_
zX`|XZ(+bi;wRfh~;HVMk%&Va$(3x1rnm}h}oofP))KVt8Qwt;_BK09;=#sGq4>R~h
zO(SP#7d{6;)1B!B0#Q~+CYV%j7+6nbtP}&;jvT{hH+29QbxjRh_(-Rg_-BrFar8ed
z$8g%*z5QgZ)Px{p7u`UaApWLC0+BfN8sVJEd?T!eRjDT=lZ0qM8VMBf at B(mAw}er~
z;icMKS`MInl<KY3mDCWjx;lUA-uvp}4n!l^LuoKx+KkT?(FKD<6bYsggky<R`iV+u
zPhF52G6kE|4(o7u+q4H(ySH;YSv`(o6{HPTjSU##D2Rl!%54<an^#77stv3ftUE*{
zt7xyb7n2jK$4`Uc%>a^xXvH&ji4FRTvQ+dil7vnOS!fe75UTVm20c`TNGPi$9T2R9
zCz8GaFf6L0RhciIS4xY4SJ=j+Xf-x0NI1k;+ at uMrokB1y`=u=KDIZwMOvBwm`B>iI
zSIURm8^EjzSWS0hR!yojOzu`?*Hc1x8lD6NX(JrLDk;bO#~ng^Z=-`++8Bg42b)@}
zK?RdcNU=l<^AJOWR5^#28^URS5C$J0i|PYB%g(C02sju{LMGZuRPc^BQGt*OkX at 1a
z!k&8LmIRHU7FRH=<@@WTN0p5lCX{nj7sfaNizo8*SH-w6NZK#?R@aDd@ek>kQ8JYG
zA;vD at c*)HuXx^YifonXIk_e)|7%UHn<XRTmj-H0N*ID1ANUddJ><l24fZ$CG_!B)N
zJL`WaTZv}$0;51$SPO~x6`m+-Yx8|GF(}w@a(&k`NNdI*1cA-E#M57th0VAo1))I*
z{5w!;Ou(c-2#-QEfJK5L+rS&*P@*XN5RHV8LDhy^+G^5;0*XBn46$!9o|KEAVN6Pf
zRa_+uw$={{oJChRT-_L9djPqjc79dp+ST86euW$oT(@cu4aB>Eiee!fVQ2qO4WyC%
zKQ?%fngg;*iH5~REv*NJc!ESf)D@%})wRAQglZ)m5fkbb%DMU<-BHmr_Yf9JS^sgN
zH1{7E6c>(HKCE)9L`7i0Jwz~cF#c81D<>{AhSfLdv7w3v-K0+!j2NkJ4T%vY92O%8
zEDMM7K`E%cK-9)DQ9H<BBTC3gt$HYRz5!0b^&clnbN_K7Unve5mX#>5tiM{U{%%By
z{X#Yck~zTC_d&2UZ)0N*De7y$kYG{50l}h>>vyo_lucb%o*=AtO}%~%zG&f6d#bEf
zcf=Uof5a#{`i~e~x(`mnUbv}cWo?0V5Yj>#+O>u9uDJ!e0ak$GQ7^6c at H1od?gH$P
zbiC5k+!;cBEgcXr(q8%6HTo{bAjL$hzTkQftgkW5-J#a>1pSG!IVN7dz_;}OUA*%h
z{HlI!c})ByAuXReYfs{9iJ;BhpWgSN;l22n_n?>EFC&WKRg?qx{Q~V>`i2fr6>GQt
z0=G0A(gQ!CBA{^r46oJw1}65#5Ug5hp(O2MU-w=<_S!>_(Vi-cDSG322!7AmH8oC+
zE>IWSO*zJQua=XI9~{*9?yZw#<GBYTy(cz&HnrEV86A*$7?gtEA|p8%mv>_9fj`u|
zr`cc;GH_iAiD0JZUGj>ru#pCL&eRWIKpj1^lxk~WLd3BV8o&;Doi_LIsxm0tn(m*j
zSW6;+sn8(!52C;yo!p4)Qb?I1?hP5vNiu*N03dE8kN{8yHTKEtEpFs(zMk4`f?fqi
zF;CQxhzJ^(c)**nMo;1WA?%=*0CFgB2oaSkXe(^K5Z7_q4sR2;7z&J@`r~c19P6wQ
zRvcM(0B`jb=q<s6c|~<A8F>aTIigp!hycc5G}ltK0BNP)w~7y2$uHBX*sSHGqL6;D
z?g{9U`VO*2^I1c!Wg3_2KC9b=H!zW|uPAA40j5Z5`B*dTi+oFa%;Y-k<z5RQW=<Ui
zaDFTJ=^DGbBU9bcM5g$99%ZOBTV63DvtISqGOA}Bp{bNO7yGuNh|p9{gomcIrVdS|
z!F0QE$qr5BO%s~626k_tb}}|LmHNHKrUK|EHs$v^<TnAD4_v5^1k_)afRAX%or<Sp
z{EP;~;V<D^8uUSfqWIzc<(r#}+qc)3?=IfFy1lx&y?*)b^7Y00tKVPZ*AI%K{cQme
z1YdQuh^%nkhs<`}MTDpie$cWQeq4^<;xH_g1}k%voE*R!y>)|b3^;vMe^UgXs3H}^
zQx1TnTH3``r)v0>FmilMUl5^hcyv+x?(&<foA;OROrn}!7&p!|KVlZLh9Bc?1z;y>
zSn3DCI+mKabzuDhz#zyz&a3%kQHI09Zc;nMuHO9q>gMXjYb(MK!j3Jx#<0BuOOO-%
zJPbu^8_Y$v`cbh?fST2J5CC730<7cnFt9kc)sj~?MXjnkO~L3re!dS=)N5S2De4`x
zPE#;ZPXfCjjurLeUELJ*bhgu!!4Pes+U5_3I9uTPL_0F!A`_bOcduwtSVsw;RDBc4
zfWO9V154FzbSQA}`%r+!N~BeLtA+}(7J$6$^iBLW(yLwmgwi%&UUq873VR01N37{2
z)v{b%b*jdp;S^PyBTKtxxW+(I&_WegbyU@fqQxBd#5H5gQ$NE3(;$=F{iWnu7Ss*8
z5tx+qm?vMR_ja0;YayuXK7fZ%ga;Rd`jJCNiX(McZ`jBnp_X!S)oDF7KVkjw>#koQ
zZVHpU-JOs^fXX)4!BVW-`ucg0gBg686WKR|+e&#v&|WJwU7!XhN0?k*_DQH^zqrb4
z#&`I9{F5H-mBPmSriDd;7uNv8JMY8y+w8i92zcG8U%tYHT>!HLcNVKxy=(w=-3dT1
zI(d6oybfh67gwFCX&u(?-0;dM6tqZ_mvvlK8)cJO9OXr$I?6XVTCovsoO%buCPiKE
zGEcRc_Nl9efn+pIKFrh$H&ANmrq7yY82mw-X`s?%7%10&7&_+o5^kY-*lkm&u6I$W
z+Dr at 8Rl`CoOZdbaOguAkC)`4%qD5le&}C!YXc}2xHmqDeVGu$m!yMDQ-sqfQe)s0T
z-n{+(jXBk;pQtwFtbSzMQR|nV&<gkzX3ti%XPWiX*Dfm_(F!ub&xPf$dOoT7s~&)M
zA<@d~B*$ULf)l?*YX>x5(*wnrMZtGv!RwQp2ymLB9vy0=z*lS;Q)smV)0N~faGKIy
z>@2s;T4%W(AuF)V>ED!5M+d1VhaIs3Wn>4om{rc20-;PxD_wMw4Xtvk#XYQ}OqW__
z{{kMF_>9G;Dt3tCHK(a^|MNubQ-k_rb4D9pP)$uOE39VSAT>l;B4&xT8jV6L+vJWZ
zIsw6 at Q6KGu+IzLBG=U6OEhm(QPA62O;e-*0a+eCLiLor3%yG<vyb<2H#Xt%wAS(qC
zXwE_$+Ca{j>N&)Wh<C^kq%oyt1aW#_kM0gR{L*thdv?gIKn6CyST4jXf*{z;cpTc+
z8{F6%__|=d!O}nQ^#RPYQLLT_IzYE5R41lGs2Wpj)S>SbD at m?i)wtyl)z<^?V-pnf
zbwV}Xe!vJH_<EumS7;u5zM1bakV7$FKU7HF(ANzWnl|+H0vsoRBiGQ^5fJ6%g0Cl*
z7@5se1xG*3QOMT|0C~Dtqol7RQ1YI1`g#H+&q(LU*B2;BI!C_l_z_IRZ>F=!h$f<(
zuRjnL<$V1?^No?OH|R8BROd?!I4T##d|k4`SQ+`cgN`{xL0@mc8KWQuUo+>qQ`2mg
zV6`G(h1BAO7t+r7L-TxHQ4gTdcPQ`c6m at hL%KG|+4!l7 at XU{Ze5nN3d<Ej!L=kGiV
z0LoSKkW@(Dg7I^@?{<4v-s1Pv%Zu#?{bYc at 6*uoM;JlLSn|D`lzJcA;f{q2indjf&
z|5W4U4==x^#wDB?U^ZS}zZ}%}k-hS}?eYPx&#sxzuo@fBD=@KHt6za->4r_miv?~z
z*mNBgaF~Ex;=`xmfAOmtLYX!ok at 0pgRIO`u&_WC|(g42GUS7O at ef37TnT&Ft;^lMX
zVZ1%h_VL^km%X at noZ{lSaIx;>WP*<m;o?(Qv>po=D%DGR3iTMLh<$)Sg)j2A@{#kf
zw-^QBL%7!wrJQ@c#V0&?*|U4%v&*f{8w_N8!r~jA1gj{mv_j7jKzGwlCcIChZmv(Y
zL6_!Jc=54ZRbvbsW_T3#g_EG?QEQCsYW)7~Wow`iH+~NXx2_*w;3p|@^lcBYLf~dM
z-tKCN=y7(r{#b3=*>fuR-zoC2#Hn$ti}^%cj#$h8HhH%HNgcdh?;hLk57B*m?p4?L
zbmg3n*Egw?7>gZ at j_5vscUL=nKSAHkx1LlKq>+Fq90?t+s8G{0!3=a$!o#DUWbrKB
zJ+2>E2aK7n)39~|v$ND*Sb6*Xi at Lf*JH8kV%XVtSRtCif%z7cNAf at 2_oUC{vv$%Nj
z1cR}ji6*5AB1JD&UFEWOQpl{&M#{F at -agWBHG$zOEM}saw?O)GR&|A5YU)8Zso*_E
zve5^~LD)!I=R8HSku;K7AO~S1$<QW<!N%=w@2MhC_Q}UhJ^##%<3K`sK{*T|nfVe(
zNKza&2_sMrLr9XT<Js(X)lQU=SfOmyT*9|PQFY#)za+&I*fj6csDZFbp3|UQN-}No
z<7t~Lb`C-leq1e|W&tnO<Jr7pr@|&Yw4(;p!{VjsEW==l+tpXGc12HE0Jk$p?9R{$
z8BimxJkPRxhNWFc&h)*stKfG{Wk{c6B&!6p-PhYP`+WPbz1`izQ600*Zrjd+u96Yh
ztEOhITE73?yUUAL*YDrOF1#Lj<Lz*bC=RCPaO0E4FDi|#4L#d>J?6Q97*e0nJI-18
z09GyM?TAP=t4>q;0&A{m)x)H1TUWG(<dE%CM4&W}1>tGsPtBrg9=XduIKwG|{QZXB
zMT*5CZIp{Qul4r8nxL at -wsrI%7ud(bxXD}x-iu)m?T+LO8xSdyH9SDPu48+!ZWr05
zU9r6fvwnofR;?1okv5`7yYdxuowMjr!l%1OZE*k7Wr`>Gt)@axD&C0x)B(@=-V1Q~
zwCgC(TnXet;Z*G3k4r^{KF1i6!Su5by*aw4{`|1)cyKbJXHW7yfNcFw?MUeAifG#x
zgVTo&zHLr}M`;RATtdKbnB_DWR{b;$8x8xktA0Xxp1&L3G1KKbazx3Ye&><bTchEY
zeKPX;>ivt0SFf76uqxJKw-uW&-_!$4d>Ehi*e3&eD}aJHkCgSgqb_u%ts-M6kb9Vj
zED)QU;J<!x`3>={r?%{j%QvrFO)uYm_vU at w7~fA|){kMOY(Jd*_!A_Bwg+0X3@&qr
zw0 at UA$IOaR!0zY|d$`5zI at KRs{Mt4rtvFWYhjxV67U at yj3##~hQyaMVosz+6K&jHF
zDIDQ&v;(Yc`WSEFxnZAn^){?kA(cIpuD&Wey!qdbl&*e?E|931E8900VhBx|)PwS_
zKBoME-yUQY64Jdt%kSrRyQ<AOR~Gu|4*?wFSW>a8NdHf5i$z(rU$-N@?xoC=XS<*j
zOY6_Yq9es(!&Hs6L-JXE6(KJ@x8q2=y69GRol<T=%73We3ru5c8_O1F)rr^}$>ZtM
zYRX2(5ASdOAYZ3Xa(P?L7wtM`yQNQW`f!U-xop0^(O->I{Vdi4*Ejkb_UN_UuD at Mo
zw;69)*^S?c-;8wWWZ#Fpdh`DE<?k<F(@G@iVKTmdu_#xwu)c^M$7}T*>95s7D=Cuj
z?V>Ob^3(@;kTf5`cMrlmNb2HReUJx95Y)}n^~0)TEbGeYv^Wv~tQXC?JiW66{m2F2
z{LreaUIOL5MB`+7xCJ_y6b%$`{>}<@GRX#t$Vt}{y1#ft^;|F3drRq|668Ui`XCR|
z11-pdq%Ni~3+{s?2#g|JiU#dUB^5Q)&h>y==qC4Zkoj5KL(FeiF)RC{$-~|c at -3<3
zmG%(dk^rba&3Ai#J$xY%I5+nENP?zkp^hfUVYH*|fYhG7q*uF8N0VZP3SMlFB9gh>
z&>T%N14DOk*6~thZzC&e=R$U`KWIVshDROmVf5x6YX7Y6Z929Pd-D#I^UnR_uCSBK
zQwZTX%EJh6*F1AeqpMwQX>_&KTN>>ebA2PXG`jAqw=}x$GqyDF?xdMP2;oV^4{LC6
zgm?L;?;&-yE5f_lLJ04=FPw0^JDPB;nB`_V*yA*r)bmkZJBf*8j(F_vN{t_ at M*EJ_
zn=s##^ZO9KCns8%?@3{Wsdfn8lZ>O7f0|a~kL6zDUP0_B_J4SJbMgDjjL#BL{3|29
z%jEPNP!I>;Aw3tAkzO8>LXPr5K^%aGBqQZm(DAx(Zxc+Y2}92mGh-|m(zBHGKt<!c
z{hz0PPkn#=Quv-8|3SVdg_Rr&_TKMF#%W_gK;I|PYe4L&|HW948~>s}1 at Mrb0}A2*
zJS26NR;UAbND4Uv;s87(87aqtk-r`$(Oj$FlmFK*N7-XRfbZ#fu$hkbHx3HllR8Eg
z>j2-A!m3uk=YCHzPAk*_{wL9EK<tSFF&5;;zbMoJJf!D<f;a#VNu8w?>Hr>+Le79V
z01rt<%3^)I-?6~=dB%)&!EyFj5a4 at y9&Dz2_dPxS(Kzp#C@HMuSg?2BlZ?{}b%6g#
z^coO*&Hdc?7lk^2hx8m!5C`BPsk5{~9l%3U$Qcj^;33IKIToDwYeEvuwfa5zfBo_#
zdn^d>Jv|RL)06$J3xw}U9V3f%fbU6RRjc1~zb6@|73u*0ljt=d_QZi$7v#pjDAWNw
zr00NwH~<exouw7(03MP;&VV=o4@pMKV!h9|iQsubf3Fjn50>HC at oDy05a4@y9vr~;
z^!P{P_PQ?Ed%vg0yeLos{wL9^jRkw-K#T>s at gK}XdJZUvz1Bd%LsDmHg*qS}l0wda
zH~<exM#{0^%wH3dXs*@o$^Yw@XW3&xfbZ#fu$i9iZ(SgKPwE&7PBd<>W5M2iPmg&~
zpaT3)qE{OW_Qru23v%N>n1}QnP!M~n0Xh#!ouw7(fOtp>IRoMVJR}(@iggw6{5*-~
zTK%5<zrM+Rk75(zdwL$A`aS!e)G=Z#2=P5BtZMap_C3is8I%Ff36rR;)$h&s+~>uc
zD!})gnBU*~5;xiJON98I6jn0k_wIX=aWW_ao`>Yb{QjN~-sC<P+f)I*=fwQpeNXBb
z8I%FOCxun5es8r-^m~$VGUfyJeUqrI)$h&s-2MMe72tbL%<u2{*G=~GuMppp!b-;c
z-hEFpP6lPb{#H)R?`^O1`X+aub5jNQo)hzX_dTg&WKah9o)lKK`n}aU(eFvd$(RpV
z$0t!+tKXaNx%)YrD!})gnBUue*7Z&HerAa8Nns^pe($~~8An0+H2nzY%WVDox#@AQ
zAodjdKfL_C at tO9t-vuipz5CkfIiMg8z(Z1JQLri_y*wm^oB?qF9+Hg2yqLk82z$&4
zQokSnU%`tGdC#`Od{54UL-?K?|6#r-g%!sBA$(6VPL2iB@xxxvKrWxA0%AY055F0B
zdGX!NWgY+KD?r+J%#x$G_P|>p^C1pEQgWh%^N<vea-cX^up}9YNwb_+(~d)@diw>v
z(7&HZ`1b1N<x!n0N%N*a_mgwsFzzR3L7 at 9d(S<2+826LRQ^CK_PpY8%gFQX_#Nf~T
zn2IoOe*?i`+|LUBfZk7vE*1Ry@BJk6F!(py`943zPU`!r`_Z)>9sF2M_x#OMh0vFq
z=5+7(moHyjXp_Nc67Yjb%EbL;xkA`K3CWqRO!ShFluVfG3Ss{wB$>DzPY19sK5lOb
zbRF5F!qA=sCe4CsXpWkTmtxJI)WZ^?qnL5dji_<?DeLT#8hX#p%{qE+L`U2#pL7TI
z&~pI2Z|6FCj&rWZo}10~>>Tu4N7r$2*<aETc1Yi)mlS~L=seE7{yLAa_wC;2OT6)I
zVCLoY9>jlZOgv2LfqP-Om*L(5DQx>k=SwahRo%ofN7YR`auHm$alG`Hv}E+2!x}KU
zI(`qt^qB5s^nQuC?KmfF6v;~TEPeR^2XA+TDIPOA-fly}6engXOnV7M+8hbo7F56^
zLSAl<l*LKYMO?Ei1CVu>TgXY%NLsQ7AR9Ho_Bp9q5!(Sf5qhN>ond?|w}X7P1CR~2
zZRB*e1CR~2ZRB*e1ApvM$M(5kdzjC50J6chjhxPQ0J6chjhxPQz^nE~Y}1+S%k3zi
z?EqwhZ5uhA?EqwhZ5uh6?eTQFShvR$dt6BJ3 at eq;A2JXlv(dvL4gi5JWa<xbA*mN|
zBnfmOQ~%yvkR5&Bae{51fdu+PT*&F@5EnA_hq#c_(IGBm>ff6S+q;es>g9Z0P|R7~
z9IvYnEnUa!cD1XcQM%efjz;Oaul^z=_LZ7hD1%yO(U=0p$sw(#<_Dmyrsj8Yt)}MZ
zM6IUgR~N0O=H>KOQ}Yh5-K70QwbkUd at WySS{A~m#ZcCxtLiwg``>w0i+n2AtUC&BT
zSNvO2E<KLtyY{HtN2HTxKGf^bYP-fBNOOJDio56m8;6SdYFBQz51S4KdK)epjQwx{
zOkBQu_uch-ih<-I0nDt*03LDy_Ctd9idnmanGB_6i3pbIq6|6eG>0Pr at sG)pN~zU&
zvMAd{rPq`a82jM~1Ln=ei`UHyjnUNwmjjsjfmGx~jKnwu6_{JmRN%5Af{LX4G%*fA
zMUt75Z8`o+J28$2xJ@%(E-QWKKur*ik7VmkZ;kE-ft^8(G2|u%tT15}N<gBEE6@Cz
zopj_oiA8Wmo{j@{Ws@?>fXL|4dPRV}slrXn>|ecjcX{z&7n!fAhVzgVPgrDYhy(D@
zo?2M*j_8QRx>bA7dgNyhm`OFqfH(k2XrviSxg<5=zSmd2MLz(<K1s@b@w+zC8!VX_
zbr>G at nNcCZl9^G5A!(l(H4b=|l{-f5>t$j&MrFQDF3WEK51APSRPVF0TnHZanNcCZ
zl9^G5A!(l(wbw(QW%=K4B<21-qc(EyW7I)-*k?wC1WRT{?d_L5qWsEW*-u8z_rH#+
zA@)<7uX<TW)kf|wqiTo)@Q^g2pe>%@ct}o~L-LShByF+^9s=epNmLsUdyR+8xtr{)
z03MR(ZZ*UKcu49jEiVFiND4Uv;s87(8QBDF=%#xT-7T1X^3lsv2&xsKoMh(7exF6q
zSgLW7)PYSfhjNk>jxCr2#YvK}7}T?J^6+8bA0p8}_QS`k%NO5$!+nh8)r&XZeVg~F
zTytW7^DzzNAWUH{ncKDvQ^|RzIpJk0DR42%G?0TZg@(GAN^*jRl<E3m74Z5+QdejI
z`(fzn<=gMx<i3Cs$UyoCB>?urfc1>Sj1P^Tr2eC^B#@q at 2-E;RFFi at tH{rb~Kb9T8
zg|eTcC3S+0vLB*EsJy=X{pIVtL26F%5=cm9P6?F55R%k)O?(Fuk`#wF%3%meG8Kb)
zzn>pP?fW6%)vI at TsS)IOa!TyaadwPRtR&}05GzT+hI#RsSxK^cdpGO&K~ne2TG4NQ
zka8|T+V6IolM3TtRkP^;zahXdvq9y$s;jAf=c=pGc;~7uaGCXGdElA<!G4?P=)R;M
z|1Lv5OO;$zmZ+W!m+PCFV+67LhI!S?Dl5_6<5)5coSkCt<^b%6ftNijUqTs3jsOX;
z9|o)#Fr!DKC#nCi{)f_&RH!w8&r45|^)i2!oAI{X=NqHY1rlRFBte*bdwuclGV`6$
z#!T;)QBE!$kc#$@hCeW9ezTJlH8SQyqoxOpLqrXlX%?RzsL~TG;1O9;jWaR!OI7AW
zQ<Y!=RAeXEzFyE#wZ`?%TMtpACs+Vg*$H+Ss`j2>0blFLPOyEQ%c`QP`CW4KTosoB
zD!~G%$WE}sP_g$BEP$%)1Un2>dr7eQbUeN9_(i4t-8T#;HGB@~M`aK2tFrT_<E&qf
zN%X~f+V$Ht{BhcN+xg42;Sd|qgyW~dX>T_4HM&M8w<Kb|`q=RkHjanBy8<ovY%DD1
z)2FuoUC&rlD0YQuH2DPk*_^I|oYwQN7pDpKvpGHctYt@{&sQDaeC#4uMO%+mM>FAb
zcfw~ZIyDQQvFOY;ckP<PMnP{iSGxaMhd<qh&lZW*Y#Q)}O8+$wVLzMGiy)`<3369d
z#*cQN)oEPCY<6Yf5tYe{m>Qz5-c>_@{5sY9`Wy<qe?+6T;~m{WxZzXV@7<|PUh>uu
zd#6axTR{;#P|7^w6ZcSR54<ELukdP!y_3{l-L*(EW3Z1f+m5S{XN$=(CiL%zyNjEv
zSFSImVOz7+V)BM<nfsi9v?W(BKW$d$n;xb=ux&VPm$in|?zU#bG`iwpG6!;+oXI}{
zPTMKoaN6A_I8E{yN0Iq%F`3?dXismumekR`rX%bp#joDnyubeD=D)9AHQzmqHWOzY
z!9*mdtU}<3*i+KlEG1QIOhM(t{)SV9@DpGuIjLrQPb!7Lv6NopUtPSv=q0I?nci?o
zPAY}K5wWMFvRO(_D&>QhrKEtwv{eW{0hW?{n4<&jF{+ovuF%aflb%Rc<V6om+it(R
z#%49Y>xC16+ZQL%Za;>(tuGpTaa-W_<+kdPewO@m92obN0;IbyzoWZ*+wI!^qx|!_
z{TSwU|55&V-CoRK$AsTfZMM#I=lj|hx_>0*`6C)zJ1fyq4KP^7_6<Yter-a3O`bGI
zF(CS?5@vOLd9D4jK6x@Y4dx*q;s87(brw$d!g)xVjTsOJ;33J#>0-Rxw8u+2|25%+
zxMO;oWVboXdXZ!~UoFQS?=PfUWe<@_VZEw44t%sVV=Sta?Pac2^+-cMowFDX#~tUc
z#4@2+>hBe(YBbyi7^aVvU0t*n!={4(%P at fz`avz at iqnn!#Xz&suS^sZjdpwV6aWX#
zO8)R6;4R*ydT(OHIUMZ}Zj?qilvIvPjBtmN*u$YL!l9&*$ixVDC<$yf?|41%^9(O=
zM(e2K)!NTs%=Te>TRv at w`miZMU}hMKxt_iJ;hL%n)WPE4^g=CaP3rXbk#)=-xgyfh
zP#o--K1s-PY!1`6s=9?^0AAf*eS7`=)w|1f$JzcxRDdr1oSPvXL}xACji+UCC9LlP
z0inB#?T6}*e=2 at c{Ows$(D at qDMVMO#2A))XbNT+ot%|KSLC@(mw8?x2uQ8TS2{YGD
z7>*}p3&puU?DrB5FJHeqgu5op=X3Y_ci-Op7t_6V{Ofh4Ynl}oTNe7BX^@ddIkXxt
z3i0o<$&<eoM_-9#dD`7d>GElcC(`4*4H5~O#s90xX8VTiU0KVIzEXMGD1`QAXUeY(
zj=odq-P&dm>Z(uGbi7#98bkc4=1b2#!wxU;mVp?V1$6_rP~Gh&8!olyRD^h~=Prs}
zN{<7S9>*$u3St1IA}M$Z;Q)kU)rPR}<fNf1KFif^`$^;Wq$3Q3OoXk=^~Xx=yND?0
z>Qo`)P}&uY+x6~IGqlSY5{Xe+8Y+)FeBYvoLuFTOd0ao#*?Zch?+zqf3cGxQ`Lp=l
zm77WuaoE_U67~{&DoMnlva at qw4fO~!jP>JWT<OZY at Nv1S2}i)-x=_0lAC?PRx?n8f
z2pC+g1;bdv5iku8aMM=2+3t47mW}{wm<R!~r6YhEE<%88X$MeO-;Uv%I^q~NL0EgB
zblf%f+}2g9CO at 8Pg{KYGt^@PM;&xTnf%Y9;#x2(4*<3I1?c2JHgF2ev65QouqV3gc
zz2ThdtPABXzMHDudRuy^Xuxp&y}O5V4dI#MR_iC1gd@rtaa{NE3QY-z!md7suoYXS
zkx{!$x~qB+FAKzg!9r2vupNS3UQMdGKHmwyDZxB|dPp#E#~av{Sd;3<fj&WQyVZ3U
z&a1^YbX=^v?t0>H>zbUDPdh#^+BpoBiK$CX5;W_fKR?K4XfB6bH$6r7(_(P?z&q3x
zesEWnaMx(a-_+GlFw at dYj8i0{BrMJo%vi7W>2)V5DB>`q(`=CcQR^_5&L3lx(kRnR
z(%Ko+g#tI}hO}?$GJjQy*VkP!+D-%*%pwy3mI4pkgwbqp%J*;=2{8XoxXBYrU5Q%B
z<HQAVE(u2<ImC6#ogxmEU7cIq&+m4X7Mz_*g^)vSC&zS$KHRzWYQO*VZ-S7$L3*8P
zJMCR8bY|O$(RtHWKF at Y#M)yq~q;@(j%Vpd)9E@FYH_WR~t0|MRZJUf6I{Owh#?-TI
zH5VWE7G$1vt?yC95rkbP;Hqv>$}bGKldu+xP>t)j0M)fvglb&51*opYB2<&7&Br`F
zlnB8H_2jLszN_eHf)VP;;}G?lV1#-iXJU+X&Y(iE2-W1TUv(`Op_+X4tFFZ&R3jn&
zAxud{C`La`#jYShsR+gBrKz~92bENWVv3FV&f0(LvRapn0HCf90?;KR04M;00CdR+
z0CaqCrf=rB=s~GS#ls_gjp<U1Qjv-``qZa;%z+=dS21d_gS={`P=vMEEnc-!C_*iE
zTe*=Zm5KqOYt~YWMW{v}160>y5vtM80M)fvglh8iX<Cgxmg1E%4=GAC0)jkN_ccqn
zF5V5%2ng~#48jnNfRG`fZ{u`%P>V&VmLcI&U5iDimLcI&U5iDi)*{EJ-Vlv|(89q7
zVTeXRXyM?4FhnCDWJrv(RVNcUquAmLg~6v<MoyG!84^C#wOA}6B3pgxwaAIGUJC~w
zgdrN?g%%Dz2tzaiLPn1MB!`I{=fnE0S)mLGpXypH!fF{3KGn5Ygla7ueCiF+2na14
zd=Q3c1cVk2J_tiJ0zyX4Nm$J}NvJtK)iQFTRLhX?sjkIh2 at y5Nr(TPkDC at Ow@Ie@&
z5ngEF;DazkBOqkt=qnqh=0q)RWJvf_*J2S?%aHJ?uEio$YvJHiZ-_=fXyM?4FhnCD
zv~ci27@`pnGIGwsYR*|g&GD(0krSm_hJ;UbEf!0Ns5w6MTI57ouZ4pT!Vrz{LJJ2U
zgdrLMAtI;pO~7lh2-PAaysB%l2-PAaysB%l2-VV4- at LLGi%=~+^{KAKB2-IHeX47*
z2-VV4-*l-Ki%=~+^{KAKB2-IHeX47*2-VV4-z=aOi%=~+^{KAKB2-IHeX47*2-VV4
z-{4k@MW~jZ`c&6q5vrx9KGn5Yglg%juV&X`5vrx9KGn5Yglg%jPjxL8p_)8>nl>K-
z_HK0w(Fh3gI1IuNjesD}!ypXN2nZx<2HQ#j6FCx#P>o&(sIJ8#RHL^6s%x<b)iQFX
z;|Jq~^se{l4ABS(84fl?*V4-njewBh5CUO{MnItV%Xu}`-#_efp^=MFj(&$IZ{#AB
zqsJl28@UMO%H5DBENFywe3to&kZUJT+~j|@60Kah>$AL(i=<_<m7jwa#n|<%lf)ub
ze=Mig6Kq!~D#-`{3^H|_pLZo00f3CE+jsz7(gDy#>vB9Dz`R3ztVOWj6<)PiylQdQ
ziC49D7O)xZZmVZuR)biy)$nVOhHf_@`a#TrR)ft!W|Lg3-EdQo;UpKYJdE)1Z35$P
zQ=sK;&bvlp3f%DmO$z8xA?P56RUc+N*pU$D`YVEAFKNP8GBB&_U$eFE>dGn_p!7jI
z>^2%{<8PzEBK|fqQXhySjEujHjEujHjMO)>B8-f`jf{-Hjf~W{X(Eh_zm1IKZ|kbF
zXykZ0U97ce=H(pO+jSF0Ziw<mE<!mv9HP9Di%>3Ux!2#{?((pai%>4z^(t at VB9u#a
zy~-Q82<6*5oseNCBOnr?@o{YYeywZnNFos`u}|oe6x)Z*P7CWU-KJ~=2=)ztRHcs4
zHG*k^@#?3G()hUt10X~rAe8H?@njM518}5N$VPxj@3k+Ty0?Q&*$5B}<;J>ZRPO3<
zQ`P~}HF!_p2dm;RQ}-H5$T*aCC5yO0|A~?tdKHsa*ts*(KGvrIU5pr_5w>G at bwId6
zv=)tkz|N}gYx=bd!VrysXuJ>FP7&6CXaqz<lmXG at g&`UN(RlBLFhnCD8luMfe9aS4
z(R(biyLAYjD6l5Ni^hAyi!KO5Gy<X_D(D4h8BtMQXkijgRNQ`7<GtYpPgEQP5;YI6
zQMG79Um#KSeN6%B3R*)n0s at H&gfK)SAT*-%?(Xu!5RHJ)y!SyEq7e|9_dW<iGy<aW
zK4`+x5|4mtSO|h@iAO*+Yy?5I#3P`Pky$x;_+UT2=*oLbI06RQ2!^qQBVdq;U>Hj{
z0*1oK{t2NoIg@?>Ik(k!^#{dRw0a7c5cQg15;=?VW2x`7 at eB#+2%yIM5FlGR0;u63
z1jv?-0HXYw!6rw&&FG?R22v4<DWeR<u5gM}jLzaMjm2Gxl~jbq+q;>uK?OT$SK at Q6
z&1X+Y#-S5;-ilxSqA;Xq^>5R=mS&*Nxs}`{kEAY_#$&dw?yAKcmUgMeK$zMo+NE3*
zj8KmzwbXZYoF*8d9=kh8y(So;Ui!S;jJIXTQWs2-vJoKC^A-rhQap(CKM2H>jqpUL
z%Qp=(Wg|dzx^xg9T~Ui5odO?-DI4L5PQg&CYfSc0{|#g7u?kBa#79>Yh)#hI#FTZ=
z)wNSKpN^;Z`etI-BM*7oVm<Zku<4TVcFk8GwLWAVK*0$0i}_Ulc2<{S5{Xb*`Bjog
zgvwc3=g8aOTcIBAG{JbQ{9RM4kLsG)=1wy^EF2|LKsf4>5k6P5ss7lYD_%$>Lgm7*
zl0+OTyQUpj#o^R9`%O+)RjNfJAh5jF_wlnvLo@;cYgq?G*JqOr(Fh1MtvTjgJRa!M
z-^fKM$6m0NcYUY0k&94{9)~Dz<RX-#yLf7$I;q_K<VTl`06>@90Iv8{k`Vytwz`dv
zPF*qr03FBk2E!;)k`Vw%k-CldK$naFK*z%Xbjb*S<`iLf{8*;}``;96j_7qi%(ITu
z^($=-z;#<{9ad{9?JB~}39 at cWg^YvKuEC`_yVb2!$V4b@PDXVr6*3N`?L|7BI$E#N
zyF9VZB{lhMD^#b5);hZ=S3<5CV5eHlfw5053AxmEnS%AfI2Y0#S%#>C;VuZw`#=ao
zGy(!MKM=wYbwG5jy_$m~1w-wLUe{gP$&Rkux`Ixfz39593re1x7;_7JyEf%hkoCEP
zF<9{VQgtYxxUI`?DdgyuuHeF;G*4<1+WoQ-AQ+aRAf{{t2nJ>-h$-s;=?W5c4qQ;r
zH7B*X#2c24BhQ+7K-0;FfWzWOopI1umpVhht4<ya)H*lJj+HJsO?hKqmms_#L}z%Z
zbB0>d?PIwFenXN}YYJ)x(7+(i%xtMQ&!_4lO{zBq9qL;~SqDEc`Yp*803A5>FVA4N
zym-5ruHm?(as_|PS0Adc3mD;^J;Ph()8gZLK6 at ra;Gn+g<L%924W~S<s@*N!Q5Ii3
z!7F2MP%T_rO&;!w3IyQKFQ4HVYVsd{Ji<fOj-KE<dq=;1_V-Thc*0Yb^3l-|qZ|%=
z%F{k{YnKN^<pG>9=F8KhG64o|59Gm9c?_Mnx)!yc=NUg_l^^FRAF#^tq^T at o?wnzX
z#K3`5S=vipdnPqAr*?7vRF>(ZQ&+^m=jP$8sx0LY?M~b2NUALD$56=_{dhiAmj35%
z+fnzb(LOkxq?F>jqruF@{uYkIY5-ESkB%8~?j9d9wL`6R*-po9Wm3=dEFHm>rT+Li
zsCSx=lWFact1P6^F~q2gC!8er1vFrhaHiZB(&>QnsUZ($FK~2MCVS9Pe)f7m0{R%J
zhQ1!4fIkLGoZnTmHaH!p<o?)28lAIbRIVib6PNx;`PUzNsEp@RC%~%g17PX|pcBfP
zuuU%Qr_Rz2<q?k<%kATH7ez2|o9dGWC#U&zc8y_vl743g!1*&hn16RPa(V#g)%1dJ
z<V2uTY7CB&((Jjbi_N3m>PSi{73JutJaZRW<H)xxpt}*^IDx1zW$B+D9SvQ4fp$14
zE=&E4SD&XGC$esC at VL4x+kqNJJ&^O1xxAwJ6xX+K_HLF3W3LC9OSlOO06maP5yTJt
z&lR8ukV#SL1<0i6js+OQdn;L8jEhA#LF;XvcGx;%v_Ivl$Bi$y at h~gOtUg2MGJUct
zGj*T3b$`g!UAlEI;E2YofEl}WPo|l=PmhkyT)8@dV?FaMhg5ZI|4_nFk6Farxrtfq
za+Ocq%FDmz*$oxIP0K2C^B9IGxAG5}%3*kND_>-;f}wP|l|!`Tkq!f&TRVhHo_45<
zZtdgMr#$U2ZE|a0t#d=htsC}?^DKwGIk)yzwtATGxz$gmdA7sOAEUg=Qx4N4w{qNE
z$f}G3ck#k~g)H4CZrvYpb<f<o7rRWmpF4GnBb)O`aSfvM*ySjX@u_n<4QFWPj&qQq
z?g<@k66NsXV&%_STA!Rf`RAuR#bYPa;$-R^E}mf6cP`w;5!PAiVc>VG$E~<5?JziV
z+A~)z16QCd&U542Z8aW{oyE!d(U~(67oa`6)IRqBe8{bdV+MfsKePCO*`kwu(4IZY
zozrU66*_>B-vK^^>``g#L&zReCoBS<o1WFlu!3X;kntpQo&@TlZo2vy_t3MfA0D~i
zn85AxEamPOkSaV9K1(-DPMx_$yYgAufpxcbIAlIcIm|fR%HaWSu5u<Et153k^K^{S
z=nTiI8lPta;0~TE-Vq>kkNo%u>j49h-McuWbn4HXP(F>3f4BN==9=%^qdv2DpL^7g
z^MZfEt6wZK`<7R~g}2MIa(C#_pKJaxtAAN8Ghd_{9<eL6Z0+tB<mT0<Rc7RKWoO%m
z`hhcR%RbZ(o$6<Os2@4iZ>xD`Rlq5ft6<`LMvF4{nbU}yMB(dM`49sZ1K%vl$2c8u
zeh^jSvnE+(XmkX*;OY+|s|OIEi$Ni}dO!if7!)FGlDhz4mls4=HUyBxqzI9fjR90K
z7)VtGpU%w;EbxO1tZW1zih)3)vLS#c27*FrzM~U7GPz=2yrrn>0|oeEU?{NqfC0`J
z802hlcA6Pm_+p1Ewh#e+50i<2Z+379o6M#DsDy#g1%O?i3ou|2u(xv&P6wP1*bQ(%
z*C4YWaF)-}ln*f&aTrKcKE~;Q!yu}}A*{J{&3ttA0y7wKI7C at 5IHv;+M@HB%H^P`n
z112K$ekKG&7=s}rEE5AFjKR<%EE8umV_=9b(es%w5Md0C7Gaq<5Md0CjIdE|gfVjn
z8DW_a5Md04jIc}$h%g32i?B?b(Tsu7A}kXIB8<V&A}kXJB8<V25tjLu=x74lke*R8
z69OWP!H^M_i2)JDU}zDRi8GopFj|CV!a#&EI9h~d;y{EkI5NUca%&hfr<XM>69OWP
z!H^M_i2)JDU}zDRi8GopFj|CV!a#&EI9h~d;y{EkI5NVr*L0o*5zNCfAt1sS3>jgW
z7!Y9$h8AI&IHMT at qeWOI3`7`%qeWOI4n!D(BO~lAw}vr4RgyI<69OWP!H^M_i2)JD
zU}zDRi8GopFj|CV!a#&EI9h~d;y{EkI3mKT%+<tb$}A>CgyljESPT(ixfrJd&JRgd
z=CpV;WoE^as!Rx=iouXnWnutT42GmCbAC6PGSfRrRVD;b#b8LPGBJQE218PnIZ+u+
znR$w&DiZ>zVlX6CnHWG7gCVKP9C1feX26wHWkLW|42GmC69cGXFeFu(L&s>!j2x1x
zObDQg!H`sCVgOYP22u4i6(6k5dzw|kPvO|zh+bge0SALal=XrGk2x3|q-_RElgz0p
z{+OGiEFS_QjKM&<@-ZO77z`O<;&iOc2=jb^2fnD+0}MnMgCirX2ONkn1_x<d&MP>Z
zGLN%6X7t4()&s_1#DO4TJ%F4JI1t5F?t`>DW&l=fWnutZ42WVY69m{|K#;A?7S3JD
z3#}5K$GfT*LVPTzJ-j5reQ5-{q!$#(d1jErPU!^(Ql5c<uhZU+$G5q!51&ECA04|o
zMuOaDzR!0C;pGKc+~-Bu8O-s#AosZ-&?9b;hrT)mK>R4#y at D@zIlI30C6_VS?(m~z
z_Y17B-6+&8v+P{K4=Z{>a(iXu&lT__vr|U?T$$bG_Q{CN73`B)e*HT2_6dOG_Q|QY
zPtcRhJ~{RF33`$X;_s9EJQ at 1?1fnZ*Od0z7BtK7v{yxdilcBFq#=Q*muzX;P7op_#
z${BtT%sHk&&I?~MqxcNJ3g$)0&6P8JgOo$5dg&Kj4tr6u`vu=s^`hjKurt^M at uOt-
z3x1D`^95oozle<j at +H5DjRNu|zl@Cn@+H5HjRNwehkgmjmmc~hAYXdumw<ffp<n#@
z(#J&1pD%sP#Qgcv$5hOpFMZ6#{Q1&HzxeZ|kACszOCSB>&zC;>B_Ln&>)0?LU-IkN
zFd$#@>)0?LU-IkNFd$!g=$C+e>7ic&@}-A<3CNco`XwM=XraHD&C1M&U?%}tBeCYW
zKLE$m4m|TrQ91kYD<Ds4A7cUML}hYFhhXsYXHl#B@GGD)(AG&Geg$E{>Z1?8e6?td
zn_GmH-(LY(RQG!DYY-6g5-Z!UAShV)_Tg4QdQnmDAq<0{V5QxMTLBSIqeu^K1wr+b
zT!Wy1?<cufs2;iqqrp9h^w2MuMQ#AtaT}aI<ULrMvL6B<gengKf5FK=9bV?X*?>=>
zTu(XaS$!tJV8kKNgZfN_(*cJ-?=)n-2Qb3#4Y4F;0su)20+E!703<O8L{jei+e7FE
zmZVGoAc;XBk}?s1BnE*<%6#Q{G-Td*rgX~$0FoF4A}JFANMaC>r15mR$UUkL3m+Fu
zJzxw*90*d?1IX!s1CeaqXMPTCgdiTaaxs7{21K%z3j%C0AltiKp5UWUPMXH^+~YU!
zaivQ=_B0#>U2eAzn_b?dU{o?i3Tp`9RJmUyg;%-!DAPrm`=ukm at l+FJZ8e@OG7qE}
zmGJQ0)jN{4K5)Px1_<+{Cx_rII0k64EysV!i!*##!9|!*Z=C0rbmraN(a?Eh9Hz{S
zfX10KM0%L$as~UoAD97)gI(Vb&glRbPcDBN+Opqz#-*(brlBntW<XD2T{sPGxj3f-
z&Yy<1apqKegx_v;xzo^=3j@){;54-5;y|=9I1O#tU#r3o_WEhdg at I^ea2ncjaUj|l
z9HedDPi@0}4vw~dU<UNshYJU3>j&qQHd<Xc8g02rir;T`!O(O-^iC!W(8l0sv}NJ|
zZ46FBTOTtVdPmkzT^~>b7OSDJ53JJxzSHRPi|SlCdHB%7PnJd{jNdLG8X$TCg1IPz
zM76FbB$$jcNEClPe57_%!ZT=&xOopCKpKNWG1mhM5XPW1ge}UCW#$XPqY|E}`&sJ&
z38-VB8tQt00{$2%%GTL7Z~Zemg`t(>ZI+7w<&A-${LF=bs>VQU?`D}Bb$0`NmBPgm
z=+FFl9O`E_ZD8K9T;~1+Z!kLX6t8Iy89ypv`Qai8t9~CKkbw*eMpPdtkbDdZCLf?I
zH{)%YyKu)hXgr+tfdjuLWq>4YeE`8PN*N%Xxy%XS=#H5W%4j2pGI4-821sWv69|}N
zfOO_E9|Dc;JR6 at Xwli^nIR;2)E)xitV}RzHyS!oY>}cvdq-mb}K;Z1CbSvN7WzLMw
zj%IG{_nB`8z^|7W?ek3S at Ebx-d**|Zv!gpFF^l;$^8p4Xvb(H<{>QwCyklPosCuv;
z9dHdxpg-GwcqHP~Kf8a-JlN~(=-Ao2s69J)PTcC}xyB!#9i6l4Gp#>i_2<{KQ^xpA
z)6b61+{!n1nad$~y2)wJjQO*p0jGVNxlB1b8gl9%v(=9{_1VJ|6Y)I^Q;hZ=hAFr9
zYL-8ez{1U0DHlEH_wBB4c4ZG={el&!=P7tUI4lfKIs1V*9r)bYj;q{N`{;yOgW?LO
z2Mp*J1_TM~0R-4$KyYO<-z_H7yUgQvM<?(~uWQnReD#6?j4?3CST8WZ83Tiy&HCYt
z*`!6zdO-os7#QTN7Z~7-fte#l-n{z+PPKH0*rpEv{B at WshPMcix#4tjgzvqx2$}mB
zCvc9m8{x4JlDHk&Ii_E3H*;?WZTbMfPnbA60RghRnOk9P5h1&qxwioy`yh#XT)CLR
zNS@ctckEW>{UiC1c?|Ihp3>>;X~4jA$j0F2h_rFI>ErqFh)X-#aqR^LcK8{}aIl#6
zf&+W}49;{hUgjQwH^LlrcK&j%y<K=)uBPi*S$y#X?}Aoic!jcBO&;!wYO&tIpI<)v
z+p|Lb<BvywDt=QOJstDv$4`0bfiqmz`pgZ!Q(pi0DO3L$s~<_u`mE*g5f?t7KGXbT
zb{MV7r_4P{{EdUVdl#c&?h)oN&v0%TRHNZGb1w)c8Jzm*AX7i|u2VnO)Ji@8%p68X
zIHh#W1hA;~gagOBGC){Wdjf(3UKyajKCCnI0uP^XGY0x|f04-Q-<Hcv`|(!?Zu>!h
zrv3OR%&i}OvzfV9ch2hHKERQfPn&8t&YhjXuO{FCS!ZVShI7ZBgbP11nBC5oo5%S!
zbGC`2h0`7QH4FT at pda423FmaN?GFb6!P!0AW%ZZ79KwJjAUQW$Z*Zz4XH2(utKzM^
z at C47L#5 at YFR)54<5>A`+W_!s0syKrGfA;rZKYQlUzP-~RTgtIDN4M at zhjM66*Is?9
zrejEZH#JHk17p7QVMvK|3<MYq88@Ur9>Tc?pnY_BcnqO|#~%Idb9CbLKY1xai9C*;
zd?bNDCW4QqryQQj)o%NV=?BrC?!j{XvDz^DMSHsb?Rv*mI%>|)Uh>+pIaB+piyW-P
zU#V)nMHFp;JUCT9zY8nY at W9hu@3wax&qKr03~qnmwYTSp;o4#8#f>!7oK8Qiyg2RD
zoUR=gMvwE=Z2d?lIxsz83Z^6C5-AAL5==+LwNenGC76!bunP0)?T!n*+BPAXj at i)V
z!?Y#SF&n~sn6_j(<`~}Jc2y%eaTFpo#Nc!+djN7eq!_{d^8gH#Ne7vffBn%3(v(#x
zrs2et)yb+10uf?~Aaj_ix_YE>L`Wq<Kn?Zwh?LO~BD)<1`2atJl!g-1A8@nVkA^EL
zmI$(1Zvy-fQi%{S*atuesYD1E*xXdfM3*ueLS&cY?#J#P_Y5{W*ax94{jQ~`DOck)
zWhJn(JO<*Ka_M+f$=q&HbC&kyoM8>rLwlBfUVDb_>OtjgSASz`mfcU>vKM%P_B{RE
zatrn6thVreZow$p)9nX#S$;%&o_>xW)Str--p}zP+SBbHuV!4_Lu<P3HCN`KF<tW$
zs~TI=b;B%(D>T%cp?y`d+Oau9`v+b-HfLyGz&E1Y6 at G%v8QLdPRy#K5Xs>wf(43+D
zL;1j}r}hl}iyg0 at +B5W*f8{zBS~GO7xIG0}HRS02!0Lw947(THVj6-yM>oU+M>sZT
zS<Y&QV9C)wUUA!_6Ku|~eYN()3$|zI=O1=VusK8f%A=mzGxSfUT-ZQsj_!)p-G1~O
zzHLc63(UxY`x6<K<CX%W9h)<>f8e!abB6ZCj<p?|)3xI>r6YzK(VnOO$p-)e=?L&D
z6Fc&W_H_NYRpbsGY)#kwXGZg%bM!uOira7Yh36 at L6`Y&Li1u_w;C^-*CfYOf<3^6V
zJ89c4OFOrs0qr^Kj>S1oJvL|9zJ{GTh8b+m)6N&+1pwsLVbt(}EtX0m-4EIfb+bgx
zS=w=+WA*2agkT`w4N at S>2Y$o?guF2e6!0Ui6iD}BReoSP0bA2`k0;zL3R}~4<2JfG
zc(65HH}0Ribz^I~?rLz#Rb^_<(9YL<+PBZpe$JW>tr@!EfvlVJ3R-h?bMu<2%9+<x
z)%cv(j_o<NkI&g1bHLBpGY9+GPQ~U7>)9D)l{KTRw%qy;TQlt5vV97zIl9%uvd$+U
z+xE{b!so2ODBGLZoMkzyeVZ36Ti$kTPPctoF1a_ss5xCbth_kw)SRw;UVVZC?cCK-
zw5RLedi0C-bp54Azi3a_KlA7p?dkfr)toB_)SRPzd%GyvM^E@(6N#jw;LArIlv*Sm
z1z$JvpwuGiC`5<&4x>9MG@*1PqQr-!38f<uEj}boC>@E2nXuFTS|lBXNa0axk#rOy
zgh#1G(ov9(3XV77gAFCpF^~)%LrJ7#AQe1 at l1Rs((3$T7-fCS)sdOv~ATO3Km5xPW
z<i*mZ(y@@k!P%)N-cTYBV|c{9O@UURL>>nGG at MVHj^B=l&v&tJSp+GN?gREHiy#Hk
z5s>F{1BXoTJdsE`3KHQ#sYTLJkPHt>Es~Bxj6F at O@yF83ni5M#BU+RicOMyI>1afc
zAI%U;N0YHP^vB*XqYlWx;!tXlbYEm(aVWJ&I*Jy19FifHj-~|_hh~VSqiI3Kp&4T7
zXfpOj{@5Gk#~z0wV=o6q1{Q}>i)1n;Y6FL)#a at n2T2OIlhFH39T2OIlhFCh9j6LpU
z)mkJSMFtj!Qj4Uc$iU)IYLRplEvPsoLo6Ll3n~uH5KBkXf{H^k#M04ZV4e8u-bsGl
z<4|Pm<)FyG;!tXlOvXgr<B+u2%kfDIDh|yMOZQC+Dh|yMOGlHj=UZCB6h3EdDFcf`
zsYTL#k%7gb)FSC9T2OIFhFCh97E~OXA(oD&1r>*8h^3>+*gNyry|etf$DzpB%R!NW
z#i7(9nT(0L$02F4m*bNbR2-TimhPJtR2-TimX0Q3ui{oUwMaUO2rL$*7D-1DfyJWK
zBIziS4sI at 9i=?ASIyjVCBppT4!J*V5=_ry8ZU$M4q at zeWIFwo>9YxZ?q0}PjD3T6t
z-cyUDqewb9lv*SmMbg2c)FSC9k`8XPu0_&OBpn<|Es~BR>EKXmk#rPE2RFvlBIziS
z4i2RjNk@@%a45A%IttP8G!<uAxc9pav2-+|#gAr)rK1r&el$ZY9Std(!CJ~Q<0X-F
z6r{$3Qj4UcASE7 at S|lAs29-Ej*&BP^2QbGyJuIK5J~SD7xo9$|d}xMP9+S&?HRXPg
zglr3$bQ~ndhttTU;~*_QoJJ-cM{(kNu!y#_zi1p6dqRgh%oT4rIEoX_pGGE+x6Kw#
z@^QO^)RIUZ%ExjV@OFukO2<O>l at _;Cx>PzA_JAKtmrBQiFB{*E$G7a8*^Nv#&OP_)
zq{IQ4Y at EeC6MD*@`+S`H0347>_vb+w%Mqsu<s-3Oq>!@uNGV}ENfYY9C$5_mQdU1v
zH_Za_h-A_|k~nN9H8R;aY!@k?bK+as%5_j9ljqMYpw0=IY#eX at 08Um8Atz|7k2fKc
z?@s_ucK*OOCB5U2kjeCChTOYHapIO_vT^+V13u^G4{+ighlEU)KjV;zf)dI{@^uj*
z<>rtu*Av`Is0W`ykaF{=3h5^$l;smC@%57u%181glkh1sn}oTZeo{hNK0#Rd3!W0n
zNAmR(A at z_?RM6PsDtyZ9Ct<FqpOjD*d(hebeo{jDNWOj|q}+ZI=6cvuLOu8tf|OhL
z#xx=F4D3oM%O_Ie>nA0YkL0U+!l&$f!YQezpM+1DNL5HbDWNR(NQtkXlu$mBub+fZ
zeX!^2C*e~j5_Gn|?kS-x_DG4ZpOjEOlCPhHPkpfG>nGt;CK7bEzn_#)7JH<`*H20)
zAIaBG!lypi^YxSPDH91gn>HX8vsuYK1%&0NDVoJ(qiW86Ho!nd(R@^hlu%!5(VkGl
zd?nO=e1%vI^|cnw_mxzI`C5zSqe8ZX`dW+jgc{~6q4v?QR9C}%)kJfBm8wE~)kO1A
z>m>B7-f%BTrFKuKVZQd3uRvR93~QqKzSc?TXSf#4N3E04k6MfNgc{hd*co~G>Pu45
zp6->f&rM*i{V at E(7e at I_X%tBJfDkGlLe5wC=xqt_D<(PLyrp*_I0Pw>&Jw--z#&M1
zbOd6FdjUfVq$3as9D)=`M<5b71Syb?KqUCy&|l{M4jmM@Q<_-HK_C)11Syco689!M
z(U|+Y-zA4YEae~&2^@kH$YW_doi5n3E#aLTA(M`SRQPZjnRFZ^#D~+!q~l=l0M0%4
znZHIR9Y=D);xsbpIFb_<r;$m=+1{~?L2J71$MKv!YDToD>&O0_uXg2j`>@$D#nF^Y
z$HRUFJUGdn0n>!Ck*151{dkwe5 at P9Sil5bZvfxf)G3C<nq}inp&y-8Y!#u$_@!^?r
z>39=39`G+rh=}%F{r&?q1&(p#sQMsp$f2g#-80fL<|dhjSh`c#*#T&VSUMVZbpV<n
zmX6j?<bA7M7zJYKXbnXynjw~s)=<Qv8Di;Z4U=PTN^gjzqcs$<XogriT0;?wW{9Pu
zH57S2;3i`-=VkteA{NaMOZTmzh($BR($SE~d03sS#nRD`qFN2VAgsmG(U78AjT_An
zOGnd~^kug+DmNx;HE!QD!gJ6xia6g4u|Ame&UzZsrD!^8LzNe`C7O=fQ07H#iKe4c
z{VXRBAACQHvjo!-k+N9`q9vG)h;#)ZT7v0_6pX%)NozvsNECoRBuywCiGt3DqzR=X
zHN-5+k0tkZnJt-)*-+%ev?bFq8?t<uwq!acGB%rSnPr`lNXI~icnl?xj)9Eu7)l}?
zV|zDa_b;(IOFR2x%{zGJo30%hUM|_6gVrMHC>SeKUro at 2(vi?uFOnvdj)ZaJMbd=Q
zkt8w8&3Ie-wkE(LDVL5X>G9&3a_M-IBrl#RmyW0N$xTj8xpX|8Cl1e)OUKiB;_ytl
zbUd9W?wOh?myW0N#NnB8>3BL%9G)qcjyK=jG2<?_X6R-gvCN at 0L-*#6n}mVkIX@qt
z-*fL^U~7iub5=LB=IG`gInC!ej4$R>?%@nIr&|uUKQe(x&FR`J-gauv($3iq+8;Ce
zbawx!9xZg84M)xCw&U$w%!u|3{d3-WY|hipS`X at TVt&R}Fl^1Sowqzo_vVgUPR+16
z!}84?7w at 1wE8f94Zi$1&=d5wiJdb{8&tiugnE*a#WSX%f6Sihp&W=p8tdXgjv7-ky
zr(3?@wNrDtcAVR7cBSv*cZOIx8qQn;&<wG3G@M5Upc!K6XlV3yT(MgKjZ8WYc7+e8
zkx9ovT6{Q-Ogav7GT$vG(>v~9Ze1!J3wiNl=~C%f$c-OMmrBP%c4k2wDyeiVWJhV?
zAAc#SbSz{?X>nueQt4Q81Y)M?qCH*z#-m at fr|aLMes)_+2xKB~8zE#u&eP6E4 at aUs
z-GezMB-h8(p00o6(J$K5^>0x>+s8s66M^kxM9Au64 at ZyGp6<b724g<c$D%!5|NSFb
z$en3ki)5i-E_hIcNID9R8`F*V`L`jKj)o&g0Gc6|j)tQ`0Gc6|jy7G4m+Y~bQXm~+
zIq!UR^X+E3o|W*aSnY*P8U5iOXI+k;n2f>JEW5c)K`=aLT?e+Y+Oav^_Ep6tAhu at d
z<}3&0IhI%D6St#D&FQu;M#C|;!z0?$^;e_emeViVv-D2~9sm?bN5GO<$!Cb{aB9e<
z<6+SZ!87I3@vv-$;F)sicz=CZbJ;@8S=zauje_>9AB~nv&h{-fr`ry<bGB1+x_0<U
zEw|%G&FR{=53rT{w5fJucFJamrK3HDp&4T7Xz*)}+3kF}d7N*#>8K%=jt0Ljf`yHr
zN>eT!Z at Sn9;hA#jc#qp<1wW4QJ7@_qi2w5JSHCF4^r_h4Z<xL=ieLQd*)xpB`LuX~
zU;e-VzZUZ=`oY+0yeP!Kt3Up!_)YP*XGQV1;^%Or!sE|jvQ>aS7<K0`)vF*S;VS6+
z3S^4nNc<ruYuKdCx5PZH_&dsgy6s&F+6JaJxL7Ou;r->Cn~U4G*Dv3`y1c!*x&1%i
zeS2*HfHbFnh5$nwU>1h}lg?&K#&V(hR87Z=1)z*f6xmR_V)7ze8NKtR)O&2{6%8)E
zqSdVzl at 5kr?un^ZT(7mZh<|zU`n5s4xPb>c2b|M3&UqxvIgfG-C}(Yy<4BZa9_5Kx
zJ8$DaLnIR1;lV=Uo_9dSGWX=6?g_aYSm}&C`xMLG6GLCQ+HF4}kd^6lz2?qL5NdO?
zv|N9zHmK6dZMyDINo{VG+w~4>+rY|WyzEejO^m)$=(F;73zutstu$-bHxTDBzFwi#
zJ)r1|ZmY^|;bAMHSVaRbKg2j=KC^9uJoE#i&p|B^Sg+BTW0fVmTsvY$A~v~u0M=)u
z&niH8*`W`c-1=ZO_4VU?HCsR8NhnB%RdP%L2L`Um8ZB-#SR+|zR at E^D9B8=G3PFPv
zl8H97Dvv4PK*M!b2wFoFOmnt7pmJ!{A4|f4*KkRCLddKEt?JaUNfHjghE5M)Lst!G
z6)#J|0oX9=0UXa}RBeV<wV~?{<<NG^R2FES3!PSN5e;sob584|{OgZGtCi=IA5UwQ
zt>XLQ-Nl=izcXezsE7qxl|2E0A`WQ2SO|x#LPOVUm(0oqZJbIdY?6Ab#4Oh1*}Rzm
zm`d?3PAiPE!ceP{&~=BQ(B at Go3>{hZ0`7wbw^G*7)p|pQj;yKx*Ig>1iL(=icA?Qq
zd$`_cY(-tykk6sO_#xS_lD*okx23b+ at HS2@>^ywEyT>*9X19f6IieiL{fPRigJ?sB
zDUUV)B|L6H_y7zUHvm=)G~7ygyzH<Xn^=8IQfQ?d+_hvhE_sz`p_Ol-uzHxdZFHLm
zx5es%Tip7<k|$go##;EqEND<CE;FKaGAjzyiEE^2oy>X&h>7=|ZgTU9&C$NoO}x%%
z-%%&y`*<}&Hm#C9neSXdxzc}NW=*lzR6c at rt@U?YEmcpEx<KAd9E|0d&d1guGO6aw
zvbuXtz@+$ORrZ4ddKh0m^n?O>7?j1XA74NZgEE;CiZu>nzcfX$HEecu3 at GAYs=i<<
z4(3DoKseSU0Nr8M%3bcDCdQw|t}h_e!~m6l#k8?z8<T1moi+@{3fH>%7%OIJJ^9cN
z#s>~#feX!iKNk8UZL27PAGlAF4+46a9)Y0f1qJjlDB~6G4Cea+dKi?|y07>GMGTI3
z63~M;#-m8P|KZ^bK5)o~K}C!=lW8v~6a9Py+m}hz4~G6=*v5c0Jc3x87L)2nZs)$M
zAme6$^GOg4{5`?oR)8DkLtikUh=Ez`dh!Moxnb~G!x46lwfjTY>&a(p at b7#YrN1p|
zg#bO$ARKFPC>kPxo){!}8A*)F)}j%vyVi_!i<=_Y#X*9sH6vWDtu{AkaM#BfJ%2`3
z*3|sZ56exht3`Edd*aWG_9sw(V$H8n{ZowoCpQ3oRvjl-C)Qk%uGbhQAJoRGq<P_q
zHD80<Dp!wD8>14oTF^*q#)La(E*o)k#@T6bBQB{<tOACY-TIh?(BfQ>Xyx4E+-V-%
zz?ipQ<D<9}E43DIxi+sAR<GZ_y*74QQJlvR_4UL`EWGc>NF27nqQVbU{Q7_bO>VDn
z{}P$AavLw#9+|<6O{_jK)}2@>4!1QNwKTHB8r&+0kJ8Cf3_8W|5@#nnl7LPzGREm-
z2f<bO0lMeZDrj)k(L2!M?wm1Ab;6Z_yjvOUM5AR^8HB4Y%edr%{b^KY6+pQ9u#Mff
zcGj?JaEhURYSl!%>@XRd+yvluHtMr#B3^dsV{2 at 6PU@_Z2v=R&&N<^Mtk<VjL9E8E
za$UhAO*eBDj{h;rnDM`=#^<r>;115Z at j326$JhsVunMUstTGSeIlH1V-q5zDeicoh
zPOTDK-OulKm8);L8C12!Rne(c423?|b}8J$IK0IUIkSokDRk at OdSp9}*QdYy-zE?{
z<jkryz^k)Epo#N$O!};HQ*FmiebB_|TaZ4xvTWV<L6ckGvRvYOKxbBE!OM<#!6vsp
znBJ2<tF+){hdyj_>zh}fRv3b3R(YZ84vp02R=HIw?W6-Fheo=^t+9;PNVm8(&f+!F
zEpCn5YEGGFl?J@*bb8Jt9==YpDCtScnN=QClT+{Z7VmW1if at ic-RD-NP)!cq_%;cz
z8($Jpx~(KvO%C1o;s~#s9H-CtLByV0Dc>|Y^n<|d!u|-LRi4QG8o??8O``*W*zq6`
z2{nRM7Mex}0&(O)AR;C-**v$(glckVCx+loPvl75R>dH8pvj?|xM6jZ^HR4}I#iQG
zH?hL%M#o{$$FON7D782=BO`DhPl!}(WhwFjEe^#<2dfxe7K)!+DJokWijfOeF~z`q
zCtnDBZsn-f>Ht7W7UF)M7AXXrKetkqLPe->fKasfK#&Lx#L8B!)d7N3c|Acw24|<}
zg_W$b#i1N&g8SSQ;qAjCdN;cxOQD5P46VH44Q_-#w=xtFH?C<a+H3p}x1%x&tyXSg
zXF9cFKXO{JlY~|)Ek%Qa0_-?WD>_<krUT@_%1YJb(2OkLoo;r~U8#F;WM!smb0|kL
zc;)DIt=!5?)#gx+obbxY^`~hy{#YV2gCi>|^>zmc(IZuODAIwf%p{s*y90=*@&XYh
zI*^s2db<ONX!8OQHJj;>XzR#UAinw8hPfj~ltHtHE~VT`Ss76-<uale<wSu}Ze^}&
z<EUXR*CIwxV<oZP?f@Zr1pkZ|TEqw-E35T(2M|%^1=1phfb3th=<N<55W(NDVVW@>
z5jC6X2qVh=C5viv01#zxt2d&Aax2S;D!ALBoM>W|%cv2`t;|+!4&_7*tDIaH<Ou*P
zqxE(N2+<=|cqr0=tgO}|ilxd6M3m at 2R)*{C4v&a7FA!0)nc@qAgMpRls?7mFl)<eY
zx|DJ&%Vk8lUh$R@#V98VlyWPxRhz?dqK37cTo>dKHTJJW^mYdb(IZuODAIwf at mq^1
zmMSk0QKAD`8LqcGJR;h>Kt#=EdV&!(v@%__IRJ<<xYa|KQf_6rjHnZbav4#Ka-u*f
zw=!F`Ig}GMtmWjoAWu+ZWwhSz03mv$3J*m(kd@V1M6pzPfrt_v$jWfN-Qf|@<^>{Z
zHd9<p4Te^xt2PG!Q3khq=#t9q-*(7|YJRR`PSRvVG0KSorQFJF)#k9As9`N9*9Cb*
z&B)4Vz1;yq^hgyRigX|=tF?$?sqz95B|4Cm;d;BnBcja<MAU4iXBbf<E7Mh*1Ar)l
zTRn6s<yMx<h&pp9ml4G%Ckm8uE3;LbLpf2yT28JD@&q+jM(gbk5TZw_@KB@!Sy`<`
z6ibyCh$zv3>=*C#c85nqn-_?v*;F+BKejSmwK)KYGPu=4mr`zJxrnHWU+Zzoi2|kE
z%52r<u$-u2Etjs-tlWP2QMEagOIo}OmP#nMvRKl>&cZhpqg=W!lv`P>+8mZkS{UWh
zb(&fpTUo5y9Lgmv%*0r_E|gmttlAvPp&7P=Dn_|<T`0G*R<${lOIjG^(si02*{|@a
zHivRa3p2Zut_$T>hN?D)a!CuLT)HllTN$d_9LgmvjB at EZ4f6I2eX7l&T++f!QKaia
zxi#LZHivRa3!_}RE|gmts at fdNB`u6{={k*6_KSb2&7oY<!i=-hb)nqKP}Sy8E@@$u
zOV@>RD??SAL%F1dQBJNuP3ar+IKQ#qMbq0IAViN;;Te at QAp5m4qDi(pfQTwD5K*E7
zS=p<%JAjBbFA!2QgI!sqt@SFJY;yo0Wq2!3SFPL{XOSvwb0|lec;!ezt=!6D)#gx+
z)bPq>#LyY4M2(fndb<Mz>4EJ{`xw at ar$tJNfUI#>Migmr0Lh5*03js?kd@(jy8{Sm
zQ!3n at j?^sY)fC_RAJ{K|)r}4aB#mx%>qkZ!{nmI~H#+nqS04RHM6KU`Kdf$a=tqh?
z`V|HAXvu!Pt8R4YSNwRMyP*j}zcnx`eg+QxiXTS5qCn`kvbt_`=vVwO`jLXoc8<S{
z9 at uY#sWyjpWCw3`2M;RvSWeYPe$G15S~fEfQo at abEbAy8InASBH+WHyYaOK{p?MVS
z3 at -|Nfb;9|_-lHdb8u#j+{^KFaC$o)JII22q4Ab`uT!eO$5+A<)!#EOhbimt)73BT
z-5ss0&rpBQsDDuAr?7)J``A|iN%SiKj(-KPNMT3;a6O;^?sEXRKA<j`sra{s8yWvI
zF8*i!_@8|(J0M9t$G@^(u#=>oV_&M5<R_{3aX(YF$9 at 4*a6jW}&&*$YK)v8TO}&qM
zw4S(6Q}5#*t<O;J<zB`8xwZU|+;edc-yieUefX@I<UUEgmwT{Ykdvg|%RN}1q29y&
zxEXZq_jif>F+1vFtB-y{ko;S-#83oJ4+tLwM~MiYP7pq1A$a<s%Ib$IpdSb!xgQ9@
z(+|RjRF;Gf%q#^40pUXyf~Oy#r|V*5tvOV*GSvw3!CQ_9LH0u;f~OyZ4}zsc1b;r%
zRVfj{(+|+o8T|mU<n0GSNbUzh@brW5A+;Zb58iyp=m+5gk1+nanHX7{Uos!KnbG*x
zKQ$r**$;^bo_-KMh<->!@a97^LrO&O=0i?DQ~~`^VNWOb10i_&fe_?WDV`<a10Suz
zht!@HKJW+-OLbkcHg!}!u;YV&x=IML9}*Ef{UCf0EF~iN^P#Rwi3t9D$mj>?>45Q}
zSvSP{KnR|GfM^9DQu{&pz(*?~$kjut4?KdXt&6W0vsp<Gch0R%NRbr_C_wJb3pGrT
z5_T7?ft%B>WCwY0pu`V%--mY)3W44cT&{Nn7v$aIzK_1U5A}}Va=nA<vzP^Wci)G1
zP>MqP4&idWBe($Xu>NU%XKl;Zc^5Do1$igoly_NhLEag8mkJk}cQ9NbnYrGD<{j4k
zKKd>&G9_HDccFQQV}B3ch31`v%k|Emca$gigvb8PG9}xs>$?J;^lGB6^Qo6xt1pY-
zYieYyy<h$SA2 at Rl#&8!qCc=l)lC)NCt@yNbNzd`^pH_<&hq3q=cFBCKj~+q`wbst8
zXmO~;hoYQXdiE^TTDy&+#i16Tf^urfReIR{+}ctREe^Fr0`r)gTor1qHJ4~{s3j5@
zwdAT$YfUUgi$g7uz^Elx=}q6R-%2lCui_F3p0|9LLajBB5D6}|L;|ChTor1q)D<lp
z35;4If!>bo`myxV_2Mm&z`PktuA<su*UzM#YKa6!Ex9VxT3IGqI1(7ONWyqJUEsk~
z!>(UOQ=>yUQbFzRnuBaK`mKzs8y)(Q6OVp$zR_=`Uft->5A8nvlAnA0IMVRQ%E7wP
zp<nWI&wM9IQXutPi@Lhep<nXD>6a8p{Z>}ijSl^iA5Q=FPB3F7CS0y{w!T`~`WPxm
zGZ8eN)A#d-N7exQ2n{ue^}8m#$E_0kjSlGCK5TZ_vG&iM4FLxRc5bc2jfH&(VsMTs
z0a>}*v^r3*i^c6;i0PuFFTD)y<NPEDwev6};s#Q*tnl<xa>q(&L%;#0cq1ilENOJv
zU|Gp+2sp4LdqRmD3-bWGvca+v-4JkKVY1Xp+*lJh9Oy5^ot5m=;LuHN9-ZR6DEk-C
zbf@!lC!v=)SPVOKMp9#(iVeHY(NpaX+p)iuh}#A1O(jJ at cCu^j4j}AorNRw_U8$rH
z$o^fl-tGXxo>nT{Kn->D?(DGZ+&rOWdgK6VsGEA`-%1gAWKEYFYMnq0bsSJbjr7RM
ze!bn{Q9~UE)KE9Zx$n?EDNk>A05#N&nR#$SjRdmtUT=2*HPmrH4K)(TN`AfF0n|{(
z0X5Xn8^gn)HRS8<4xolQ-}iuI)QLW_W&jO!Q||3#rNW&@4K>mut1{^A4v!k at IFFE;
zxmN4!-%{)C4j`mXsc?IQ)F>$oZ~N>#z1;zXQKwY6fsh&{ML<?%(AynANS#vQ2GXdZ
zU>I4IL2q{eY1DZVR+=M#x+Vpp54osQD%>7v)CeG}GU)9Nk2LBSj~Z&4>4$yzo-N}5
zY$)_ic$x^)K&?t)%Q!%rNc4d=lxd(=)v#q8pbfP?P^4~FP98p}-~J5k^Vv)Z2Ov`0
zsBwo4lGey!&e^}$HYFTzNNS_T4Tp3!as+2BFiZ&t9MajSal;{1bM+0+;jvXsnpOu4
zk|=I>Lm)jGgjGkHRtE$U=Yv2>GzhDLG_4K at B+Cc!|Fie*&y5_{p|F3|R{n^&N|m#6
zC>aBQ1Q}hYE|;VvR`$V<<Vtc}DHdK_A_fRt47jA^`2OwRdGvd_XL<%R;M!g}S(4MI
z&-<KycWYJ5ryr-d-M{O;&EkLrh-sA(q8PnticTLxD~~_|6txCRC~8G%icSh~KmruC
zLQ5#3$|jRFY17FYq9{NCwFni9wI?w<-3!zj6a_G&whA$$3It~NJh&(dU`DMJVqV`)
zXwuGo#Rb1BoH27RlVw;jfDBJ=b=`Me@Ow2P1*f=B#ft?U5$n3A!)2Kw=1lZ}mauAp
z1b}?3a+dr03;GS01_+?*FhH0D@@SB7dJ4KUKmq_tNuaM7B%H|Br2!J?Ol49CRV-G+
z^_0f??!zq>K!A`?7b7Xvm_f^lXQ4C(2+$IGE2AZpW6*LU+yV&D5(+G%WvYm}jqZtZ
z3m`zt)L}u#(Nq!Ba+-b%AVAC1VF4{uMNG?S`z?R~EmMaDv`iJ at qEFX-?Zg5I&@y#c
zumohPh-o>!0Sh2N%hX{3EmK8I%SjX#K!BF1!vb2f)h%hx$rH2jaC|onpoTi(fSvII
zg8M#6F~XvC1E5CTq64SPz!-1l%kiJXd={J#o!#MLe76SLyMp!j*{m+sSs_+hJ8=)y
z3l+ at nKZZ0gD_Gl@&&IUU;J&Q_-}U=(b|Z>a!lsAPM^dSiHj5EHh7o3hL-#N~d=GJm
zRSFRjht&`ka5%Yp#MgMb?s5J}QT$+~FppSD)~<}Rz}AzQ;M2**%qOfy=suclajaOt
zE0i*?b?_GP%UNXLjOrA-A%~w7Ws=E^d994JD2gVlTN-D$Hx|J6Ku}_h0+p_A*+rf9
zr4V0{hXOU~{a0hKpr;R<JXXi}Sd5WUyn8EyFn2+U2VM$N{Df0{4YWlme!?lf2G*h!
zpG`O$yUz^a_kbf|QP`2@5~0&>;`abTED9sU9?ohrm6t7b-8&)7@&Ezs07(>KLfCDS
zP?TJq_QWg?5W-%aL=h&0{U`~Agxs^*W_f at RcC#dkFd^i4J<NFE>Yk}qg#i*M3snx|
zN7ZZmPA*o30sLr`68xwLjo-<isxW{bRaAl>RWRGkN8?+30J3}N<UXS~Km&Co5EN_4
zq~i3dQBR^cKm|2bN(I$nQgM3LMsa`&>Z_Crs$^nl%n5R%I6wt8CJ+>B%%tKOdyC=#
z71UTM6;z2y#R+$#I6wt8R!U`t5a?a*mR2eVV5YLLepU*nGooH&K>#OJ3ge`zG_8_*
zd8hy>*DAqE1M<pP3r66NN`5!z6tGH_!ko^~_sLF9o}q$(PN^)6bER;)nFR|1IH^(?
z=NhZBohl&ZS|wQ7PF1lM*-6Ro=DY&=AF(XV>3jn19@)vsa8wY`DV2qB-aQggd{DD{
z<fJrNrZDGbtY2LozdiZEdgWSHDkO=%$|Rlq2DPb7k+jD~vN((!)9`qu7cqU?hh=$y
z2<B-C5+;OgmxKc4^?VzOWqE)QrfLZiCWOgYLJ=V+@tNfTLYS>3iZG$^e7K- at uX^rY
zV=4*Y=2~H_i`hMK?W7j?ycmY26rivG;qa+C!r at Z^!r48}AoV&GSuB`60?}%qgi2v9
z?=uXTUdPE%@Ht=@C at I9o3|2u`z+DC}x)OU%w#z~$#tLEf=DjXGq1)@YnGOpA0#l_h
zPIx$bjk6KGj+5r7Ab^v~3UQ88M(QLos0bxttWX$6i%BdSFKI;sTc)17z1ji at 5WzI2
zkc4Sr9#ddQ%iV8n0R(7aCR0elv at lgEFrwwjWeOlb3zM0G3Df$&4@>fJcf<8$7MjVz
z8in}q&{wY#zM=zP(?v!8)=(qNACy+)4{L<+!Bs;zL)1%UR)i1m2FUMz&#k at PE+cRl
z)%pSN!(C;YA$4DRDJ32F3Rm3n*8o}*B#i#iMNc^hzLudkLBi-^Px$0!wpcyR*4X*#
z!NI}b|1Oz9yO(7*muJVPH|K9IemcKA3khM=4^x3N2+;F0l|)%ekhwa$esy#9^TpNm
z at pXufg&|C6JYPG6D02xyC$BF{30WAzgdW$6?9aAHG|Uu~e!6^f^&e$2**HA3Ui|gj
z7cc(l1sLRNzTAABt)}DI?QEPZSL5Ymn!tq&_~Z8Be!Q72@3U_bFw%<`=!pOXCjwqz
zHJFUgHn7QxU|)^_Zj(I0i34arq2zw_a0{T>{Z}vk@*+tx=r51&l9%7jrt`_oa at D!f
zC_YR#$x8zL3LujN;ge)M%%(}_-{|*z{WMVji@&`1Le~5uU#%Oe#&n^ECQN_0DApka
zNLW+OkzNGr3CcEUL3?&9HI{knCx7 at u(n)^%TObWJShx3K$gdD?J>5L4?~}pNw-k_b
zJS7a at k&PsweWu at vKS__>e^Z6F4gGY81ggT&1>hD$j}D0_{KZ5WC`A$)DD6w2M-z$|
z(NKpeLH#%Ol(70=6`Oe(dQHkO7!cv{a6W&+Qw~a2SB#E^>zi<nAZ!OhcW8nU(}uhn
z8?>c`GP5d_8pw>qoU%jOC2Wi3$85#8Oj}2J9U2-v25pT$-9XuR-LTj_()57%nq|M-
z<F)%i)uwENwF~E{Hci>zrY at YL+cae(OkB7_+cVjsaKXIgm}!nGJMdz<u;Fr4_eoml
z(%W$RHq|2*_I@c$rCi--XW{C0sD^EUc9RxVY13;@e*!A8C&{<I#r+w|mX5aA6Jhh6
z1=P1yApBwt>v<+BM^Vx%ZXX{6R8dk85rG;I*$Mjaf?*ti2*36znYc5mv6oT6aYa%k
zap#6bSdB%d&=Ki3CA9-&3n>Z-lKqllUeUt%61<^@%4FElv)Q7Mj8BCJoRS5*X;)}I
zn+a}7g98SNX3MfAw-0!tR#{V}MBoTvwL0*3B8l3-Ka_R*oEnC- at qo(+5Z%}U+-DJ%
zxUbfL!+^Bmn6W1p5S at wv?cj~?an#WhJRQ!ik}==Fg3^*w2z;!EyC-lf7qoFxDyWNF
z_+B<V3}6?jupZ}}nlr$Tv+k4&Y~Do<FtFdvdfqlq1t(fpI(&y)Iv|kuPSQIyJ*IB_
znZt{m)xKWJb|q(1JAw7P%nVP8fvjwJk-r4T{jO++vZ2VX;UL1AHC@^6r}RbQm$TzW
zb`{o at +=(6yuUZ&jc{4@Zs4toWxt!y10!KwDhc>Op7(Cdyt}ptxw18khiDah)5=O+e
z4LtWH&2j{~1?4I*wu+qLHvm&dl^xM%!i56SZ)H1g5rzE@$BA5-^r$Fx3?&?&))q}}
z9hdBI+NEU;6U@<gM+_)XD50gWTcRC&Zt0IKY)-LjL`s5jsG;>Emim7B!DP(_;gA}R
zG6o5Ag at MjoDVtK(9MW+FE+Zb$@-`s52mn6uhyY93rpT`i%jptfc`%}3^GzO$hp;>%
z(XhEzuP>U92Tqe3GS}|)MaFv=<+w%L+uX9RW&rDQt8<G~7rOw$YHms0GGVhyh=$#?
zE?1T30}NcqvEU&Uk)O@yoX(XVq{66PPA92ITiIGP1FBw5C21-e)3r+?=+^N)2PsCE
zqYfvW=c5AehBw5?M+tB$x<(u+BAY0TY;^*pBP&M4*qI^iu`3~HHWa-PQkxy~@HVif
zJ=@?zNd`_Hj48wPd+hgwR4xse;C60?g%gFFuHZ32?F0>r3nu8DXvW#jwi3EWnu&#(
zdV978U?o|hT$nk(XD3HkG}Uk%`K<e%ttnWV({OnAlgwrVhd-_ON7!Jyd~|d=aM;xP
zXK<JoT#E@E693SK?}>DYHjq2e3}%k(+}aa!L<miru}o06NfTXZ0L5k!Hf5Q>wvhdf
zHUhR54zS|~eXU_WSj|i02Kuz)7-e5;kq_5NZKqw)mlHA3Gkj8>LpKq3?Iyn0(_SGD
zd7I#UhmWqo2W7ya>2hh`@sTd4PgFNwTre~}FFkOq)78e87j&4+9M~4>^|XcLwFoBo
zz>cZ3uN at X1UbGk)*h);rxD5FQP%{eBfvv!FU-Jy0W+0 at 8ws`4*<`+Q4v>iEhdT5K5
z9%!=w=)Nh|q3wF<z!D2 at P*lF*#0v1PLKd(NOwc16YuCtC;+aZ?^~m;#^w87*Jxi@Y
zZGV6ZDh&oQOIb&DkfcYZvNB6qM~-2Q3<ysdTgp0e3~MAo0JW5LWE&Q4qceFml?69z
zL3<CK3fT^c-Uqo0zZ-6P7u=R*gB!sN(|y_S<J9!9uG6<p_YI{nxT!d}y~@UZpi_~+
zZYr<qbeYqEAtqxt71&K3V-Iv2Ca{}I?53{4b-obbmLj`0_P&^@K}E{FF@}?N-CQT;
z<PcolBxS<)9K{=nca>RycKCJ0lr19GZwN}S?)GergF9$X5ig!v$ek9;$V2)P0jq+o
zm7d`Md??idw&SK}_#&UWw}9=)=^1&Bf#peeEvp?sU8B_pgVHW|lR)3rc+W_Az&alX
zwcu^V_YCKi at Kz}GZPoXTJSpL=SaRAg2o_~3dZ*Ol#r9qBWeZmDQDLl=iUDM{=Jf{E
z|Hkxze^i)(k*P-bTDInSDaInlBKQ}#CujyPGv<(rCnppIF+37eyCDi_IG2KdtgB{`
zBn2_`0pk)<e~1E_n#)8**t1L)ft?L-8?dU&5 at V1#(A<I$G)Fs@Gc=l-q3uCi<xx#<
z!08sx1RBodxV6Zdcr4EVa(sEf{)XoV4In3Zhy_BxWCGbi+B;$|7iU~#EZdD%Pc*RN
zWQ_!p`99ihP>aGoy?ySAh#M6ErRm_|#f21SLo7V3Q*mhm6-pQPPald<m3wZXhBr*}
z19$c at +XpHP+)?lBMnVPs9=8R!`Nnb3oICf$SQGa+Ij}ir?)SLe1z6XWv9WM?;0VUO
zNe*7^_KIKbT;RSV1)EnB^HW<*Ivd$2VAq&`qegIYEEN;QxY at 2`5`m+i0E;IPgtH;W
zvPlHaKeW@Ya1uep0irCQMBrd0q%o5Sn%&Y#1mOq327ne%B4{RxClNSDA+tr32wk}s
z1L4dDIX8)*twc9HL*!C|b|(?E;-e-JwEiO}5wuccCJ{ImQ3)lJ2)!dt2M8K5iJ*;8
zK8es1fs2?aIYvw(Xf2jaB4|#cCK0q(L`@<Xe8fy5Xmv+TB532sOd^O`Nwko662b0X
zry>s{cnXJ9jlp(qx<R`(47SZ)EIjlLIUAC;NWy7f2P%M?@sgiz(9!{D&t$-zZrInp
z2cYI4FhAX(4G5s-05Hu>H&|j>8pusISYnw2zce at 9paZaUy1~>y$#jGE92o6e%5tY0
z4ozj1OgHG at D4lLF^;$UHkQx~iu$s#1b{uyRb9U&1P-eJ5equtaRSdsPKg>@|=)e@<
zrZ46vCJgn)OiUPhV{p?aa}yH>I>8BMOux)eOyop0eKS8XkrUNYxjQi-_Ijbpy%Q65
zmVgcEG*CfsoS0bSz3HZ%auXTaPogF=jO1T3k)cB{W+FpFgUaa!NRw-4MWNT%sUUJ9
zLpzLTBEubiYv9#-hBtG_&Ox{5sJpLiA2H{lg^Zo^&~k!WO6NR`yesD<%t`WY-x(Yp
zXlIe|R+Q%EJhZb&cq>eEa~|5&%jZ0Faz)tEIS)Mxuzk;-;~kH-l=SRbUj$g(vu8yS
zU|G+eO^l$$%Y*D`gtEM6&&njEF+F?DZfVb6>#DS8ubC+B*>kudv&B7oZYT-Pbh}*7
zUR$ZKXRj3>)w9?7kL=lN at jX5JLuXDzEas4Ka7&_*b8-uboJA0_WDL+33ke7sF$U25
zMvMWpEuzN&THj at 30L@9%7(n|^)EL0vBW4Vs)g3hk&~6el2Iz5yL<@Px0QRhTDz>E{
zIP{jyT%GUP>p%riGhXsNd(AU|TAfw5XMdpi1yHjWmG9YWvjC{sgUa{pb;JUw*?UTJ
zJ$p+mv*(oW+3T!U+Osz`P|~y4{!rGl7n8<pt&*O-cKOnty{Xrdp1qFJT+iOlKd^pI
z{YK)IyU3<@<@@V8h@$%IhSFmC>xMRB`s;?63~qW`zQ3Lm)%3W0e?2Fv>2>hpg*Bq?
ziv>JXWK at 4$iwga3IJIYFes~hX!VO0ym5~5gz7nK5r at 6kp_LR83z1Cw%-(Ck{Oy6EZ
zNA>M>GKlQkYv=Ox?cEN$Hhx5hU2`7WVb{#Zbl8n_Dm&E09d_+465a~aT!&qIfP^<&
zf^M$Eu6@0{!>*k%s>7aNg%Epm at bEu*J+39t9Bh6OqRWi&^%6F4eicG&6 at q&sY{>i?
zgxK%LcTezQ1~Gt6W3Oy<Sz5sPU?as4bwJt0 at YV+#G`D6W7Q*1X+VubaYQyS<S}|28
zR at MOae(J!|E)R=`BlZ&jo^M=WJ#dnkg=ou<A99$ra-C6@e@)HWT-<dwLG;BY2=f3q
z2`zS5_MFivhc!ZP?(o?4YO`i=?+RP->T1k-Po7^94aSM`B7Q}(h~ziF)P=exDcDbi
zbq0(UV&sAMViE|uhi#JztA~17Oilzd6*$w+yH3%Yh>&&w3CWEF+-RX8Em{8RJ=z>x
zZ-c$)M2K0^i at yac`gAgw{av2B?s}K=X#L*<?LTFW&}koB7*Pvp`=ZBf9{U%8D%XXH
zdk!jt``%_5rov~NcO?Pm0_#EmAwn#_sYi$HX`IuMb+3R=<=mcV5kl_YgcFEPgLQ|2
z!;^G-;TC9I=^1Qj;Zb7GB19TxGX)3YFq|FKk#QrDb9+BOG;;;}ri9=Q3T|UD(h2KQ
zg0KOALj!{IfPhFloEfu21H#H$V)Zdg4-5!yRTT~%N<tzrK)5xvRS;}yP+yQflnQfM
zt#`<x;Elh+T-qvjtKAcJ!OL}R&|JTzcgR{stbA@)aggh{^bWZdL$nTTF0=MTs>chc
zZ5DDJm!8;9OLtY<u(_^F?~qLnS2Np?xt>e!kW&TR(`-ZPj*D%X<;tJqtZo2W1#~UU
z-V+;fK_TLNBSi at +*#zQ72JR0gM!1DQ<r*+zbPcxw8!)I;1Llx at 3@_0(fKZ(#5IZvh
zvE2SGJRHq=ZxE|Ra816gG}`Wpp5dOAuA?=vR~GN$Hw1CCHef;EVtoU~(b|BW0j|ks
zn1a4k-a!x8EbzpDBdW(i*_CF7D_Ok+(kAy}WZK~xkeM<@&kE<D7BF%f-twafVkNk~
zSXPJhB at Q2%hLc{%g1}KQ6AwqP01=&409lwYRvzq&a{%gkFVUBwy~xVt`(lz0pw^5k
z)K&m;zr*+&TL?3|_Y@tSNX5*YI>2>%y6KhlsUU>7`?Z-bV?oyiNHJ>&<#)w3D6pAr
z2#+#-GoODmpUlMN8LT4N{ldQtXTm=}6&cu}r3`lwG8iMdPelkZn3aaOD>nq4B0xKQ
zI+ox at SXrW2h<u*n1oL+kUEC~6eNc44g;y%6>x1=Z#7{K3xFM4=P;`~Z at Cinjn0hgz
zt4s)X#!o4_xI3&YfzcHfA|GAcrK%lWx|^a?X4&L{YPueqXt?;MGSwOuG;t1OQM+lj
zhGOd<XqX$rqCnMMvA<t+sC16%xYOI+J$XwHhyH%m!E<-gJMN0SLy!6Xe$~N!d!dfI
zLUs81y?<x9L!4`q+1WT8;)xc$>hO2#9tU=Zwm5rudklYX4q`Xo^TL4f_U- at P6r!3J
z8haLJ5IO^moiTH;^Y^9@)xc!s{SRZ>>+d&*s3wLKQj$ad0XnE+dJ-BL_K at Nn@(<8O
z6;rWNA;BDy9}V#&WTT@Y{~D5B7gM95hNk??p^Mn#fxWRI&f^tzPJMpyth}o*N8XF0
z+&9j6PTs|wv($TGK>7v+&&oTmV+h`Zu|xAxz8?H@^4?c%<*?l0eckP6WnMWvF<<QQ
z-oEj3axZSG1-D_<7y7)nBm1n}E2n4O7jv(dA$2F~S-DrUv01s>d%K9w%Dq~tA?{23
z-q)XdR_ at g#GV8wBb3V03RvdhRsAb)UxX<^L*bcROO5T>E7oHC`do|+bGfFj+VeRF~
z*ws*RKZ_(+dnGZNo;d;r at ru{WczxZsED=r5Xm>!Jcg6Jbp1?l+Jf5HuA50bqPY5r5
z1eemHHKk&m$kkr;il%2y4hc^v5zpVU#s-$reUhFKrkD2w?uOU)1Yc_3?PQLbWyH;~
z5ccd^RmV=x$hm4zk at MpA)HiZ^M$T1$k<LS{5e2eu-1Ll`tBGyWc_HV%w(t2k-*=Ks
z;Us}?%=C<`+bw0Wr+Y_C&&a!-Yd`ske={|Tn+{ZusL<O#fjN4UcX8+oc!$YS>@pPP
zb?;c|`Fuv)swsId@%K-wITg2ENZw2Q-8W8pM!l;Bm3$^RCzkIKaU)f`N2K at EM@=-C
zelCv8J%GZ$8J7Av?8$bQ(Fz9D79DQ*B%NZPtT=IE(cxxF(kb>Ip2oMA1!LvmHbv42
z+M4<xz7UJ0qjmw7o5vRov1HW57LqBpj;}8mOGXXENSeY1!Pjw%C8Gk7q$woh>t#if
z5xdVJbYM2HEOvZdqF6f0I7Fw|I^O<EEFonc7N}5h{vl-C)Qq^}T57I1db~Y@Sc%j~
z0Vb}>Oyq6GV+pB_JrOFg(H03oT;NR&BuZ3lqb*W`xOGqx3fd^&nsG?!rYLllMlWu1
zqaqF}gk30i!f|~!3qwP*fOyqu1)je$k0{9F3C4`iC&xAS|IN+1lIzd`6|gz$)9z0M
z-^{g-rwDb4E2;5qMZWBSbYvak;T8}f_=*{V;HFz3;kFnd_!>fjunzEW)F6a-ST-aS
zG&<W0B~F_CH}&NWfow$upG!st%mX>P+a;C8`E!)JC_vA<N=R;@M!9PObk|2hvWiBz
zI|6j)MM83}8<`gb<b#t5G$pZks{$nELsO_CL$Ua$;7(lr4H7$$If=z$14!&Z<|N)%
z5^Ko3#9XZ@iN$MM)BDZ(7d0kyM7C-9TM+EDf-~`{Nz9m#tc0q>an$)zzPd~3u>)bi
zh`azW(uWuowf_d3$a(<xLEJJ?aB?zl3$6~f5GRq9f%C>-j==p4P|F&j*oK}SqIHj8
z2KDAmSmLRN(f#tC?>sPUBJ?W8^x&*I0kFgpKt$!7uR0+NET;re!N?~w34$AQ2_duq
z8BG)6R#-rYZCIlbALStw*rldlxYH{j#grRBvU?K*H?EQzXV}s3o_&!ZxTh&0xbFyI
zr`Zu*L<u31)&~>9O7voPGFsL^Vrx$L$-O1F=uinlV!PEyJWEKt(t85 at o28_EZd?GC
zMfbQ4eiE2F- at f?kix=<|*k(3P;1;D9>e~49U~~gZ6H9pE`Q><dpKX$-%@p1my_wx-
z_oIhffX?o}dhr*)We4qY)zLi*#PR`deR at gIUy-+B6`AWm75ImX!|0p17@RYqLXMso
zx4_BSZ}?gqRt*iiZT@}@b4R_N!gfmR_ri8c&_U)6TKK2nNu1Qhmdb#Qifc4KVsiCj
z1a_oe#JFVn(NYV0jI9^r9)cWh<fKq9;>87!+z{2T7V)G6fIhmgxg^>X*Nsuf&4t!^
zRChg%DJ)wE>M<MB9pW`Nc%I!r>p3#u8?wg};VFn2oIuofHQ7YU+#xbnhmFMQuqaj`
zeWDvE_ZEl4 at g5D94$H{okVf%$4avC{uflL3F`rtX;!R^XmhM7AUbP`P&*2$&4Vu%|
zKfU<<?~-%KUh9YPX12UfviWk8eUo4|mTB+fayH?-_tfp*e79ULh8xUso0|^nBbfg7
zpkF~b!%2-u1X85Pj{L`;I{%gYf%72#`rD-QbW8tzWv1XFUhww3mkuRNtBMORpB66&
zo@3<yDNd6ANnQ&0I3Cl3p{X$ZGfHP)IAT~#8XR~O7E+g&l|q$$v7NrY3TP|L;K<h1
z=oxk8VddF%C42(93pcm3>3ni?d#}4A7>Vk0_9u)b>_>PfKK4|>Xf*5V<{oiaWuc<k
zVv%+W3J*hNM$2FmBaEX^H7q>{6*_}zEr2sEp$nF`w_wZ=KC6FbbD5iNGH|+&F6$zr
zQ(~jbhC$_L!)Z}ji1%zb4;QUJ1ZB>KSpm7A)!b|Kw9L>rTtQyvX2No-&E2dQDg!$Q
z*;shY*+GI4|8Nwzo1Qec>(Oiz^yl16pswd0m at rC;Fy<~y(e<1I>AK*Tkj|ch1)H14
z(K_9~0j-w692UWVB=CIlG)O1Q-*ty<pD$MMpxkV8!^$77sp0dM^krD&>Kq13ApZ!r
zaw;u?gcj>GSSO6Fhjm{3^;^{)5@{GSh$ju3pNrBkz-i+;Y1l0 at tY;Nb(kv)6)38<1
z3}~x>Fq&yNS8AqVtI+f at tH6v~t00$#?NW1?eB%_E_l`M5W*l2ZW*W8%>@@5YS!viU
z3+diY!%i(b4LgNa8g|Qq<ietvY1l&Nq+zSfNyAo|m4-!0L<S}hPa3vxyJ^@iv=(Hn
zA}bBsB~BW)3$6P%tRgcFTLoqswhGMjXczd?un)#f!xoGu4O``I8Wx34cKoEjda^9!
zUQd?Av5Z+#kZ1)c=31YdvP&BIums-lW2>L&ttR|khpiXN$Cg3H>|+`A1>;718-+%7
zJC*}5UJjW8)ITue#K52d%+T}!49YMJ3NctSl4N<^bRvJn><_%fL9G`Tu*~^b%t`Hp
zqfzce<UdHq2o(UyM+I|9$cjAWGluYd+o}cdMlj?;Hdl?28||s!JCr{h1_f{a`l8SY
zS(62Z$cL;4#w)(6p9@)mK?Aq}=K|zHHV06M!3kNnvJ<jyu@kbQ*wJ<DpDeRKWG%v;
zkQL=l$bQmaD>S0C^b{A71R4qg*09xx7Q%-k(o>C*TM^}f3Oa+}&0k*>S`ld at X9zbU
zy)b4(DgagAiAWEC9Zz`xCn7xng&3 at e%vZJ|GGA;(q$&<-y|{pt;)_UySy;xNS`aH%
z=!Q;2{=+n)qxeRYKr4l8S)OI1IE|=>48u7gSB6}>jIh1Gz9 at 7;)<n(_`H=O%*dZ$b
zRQ+7Y<^bG)a{+Q8n*%7s;DoGO*$G*<*a=xttkqoUH&%*2WG%wEMpXHS6SAV#r}@>>
zh~lanOlQNJy08<4mr2zs%U_Z&aSip$z2r++B84BM+a#eWaPOk&UZ_l{MbxELR%@gy
zDpCQ!>ed at 0-K@oXQ-C8_!v8Y)D;5hjp-W4g@=uFZ?Cly0y!a<i+X{BQ<$0D7EW|aI
z6)}$Gig%askzgEuI*fZ(?0^NSXKXqw!EkZW$2he>hE`c{R5zk1W?XIvVx at m`58RU@
z<rdj*X${@C%r1CDpPAnC<|1b)7+4Y8itsmHthRP3(Gt1DgW9Zu=;<)G+OAQJs-YU2
zs339@i3x<mXc9xfq>~u4>n0qziUF900l_o|VAli``n#3;7DNQ|-+CAd!NIZH+cOzu
z<?SV@^_7UJpn3vE!6CaEM62DZsRS~sqAy!jrJ9|pLPX(Ha&rdmNfV-R)T~Rlqv38K
z+HWTJFdTj*cK=`o5u3AkXAWotcY^TchE|<1*LgbRJ!_&CZwW+w1gcF%wXs!=H(^0F
zdZt71@OA2X(0qFTVRLu08II=DKcxq9mAi-8E#jXp!Ug~NI>q9zQ#1LadIeEOy$|=<
z?8E(Zl8o<$@Vbl{mYW3nNU#7e1C;i%d<(dRmMkd%^uI_<$`aSh)z|as$LTydzdBBM
zTh7CJDmLWER6x57g&&J=i{<2DKF!3ke<y)$J@eUSGoOA9FICTmxV?&$gaydgO*Z=#
zw`Gbv3QjKqLjEF>@Om$?<!4oM1Bk!xA0W#6hXp6iOb|K(jLX$@J-nY}RHfV5OJ?wZ
zUzSbjL%)B35SZgK!30FXdivpZ26AAPx9{KFTwNbupIz;NCWadYM+JYpx;*<HOMc0q
zl0@;B<jwKVH&+*DC+EknZvbMCKD at s=yTrdB?w}O}P9WzX35aU2 at N|7U94qWldi!uc
zet$pPAXfB--{}8F@B-jwHqU+!&r!@DCez>RqQ-vfz<-1N{ol~fgTD0>zrlaMNjrmH
zXVB^Hr`_LlQcz~^H_3iu926jW08^}!<Tw94UVI$=c{C1zmX(L<ed6D9_UHKf8um)v
z&OUr|*97}$;Df$x_kr+(P6uA!N>j)FgWdq_-)Vw)8IFH&`$Mk#nf7 at nZ1IORYz@bK
zlhX}sllYK*16d_GS+0Ir&pzD2e#Dcnk}lW`n)pr!@*DiyqksGK?>_wti4eXIu;zE`
z=`^`o-fkX;>nZd at 9_}ZEe-Ackjs<QwA2J&~Y@q2G{gS*|j*_1s9{~$5N00Q&|3Us{
zu=!&6&3L)^Dj9B)YxU&?Qn|jHWyxy2{IDJ_68QBNsb+%ex5+Qd2iT~356O5kgC>ZG
zC9_Qex%~IbbplPz?DiML1K)tb={nimO%q6?i!52*(jVWyeV=?ky@&iiPc9xtz)bRb
zHU=)H$q-26m+X!tKs;DIB>A_=bOz<?<l}Ump{7BLz{E?C3iw<@6N37u?gXAym_s|E
zV88K7tA(0C_9x<Z&{V-MfD=RlEzXnCG<nFTw-58Z1ayr|{&ar*!@Kv_$?@AiCO;it
zULL=_{^Pd*yt!LGY!Ya*8PyE;y?|t3Kxq6nzko)t_M5ZIlOLeU@vHOK=huHk5xzUW
zetULxm3;T^GC58zjxVpzPu{;izDzFOUtYYsI)g_43haW)0d*phfJUL^2BUz#Os1P5
zxB!d&N3dcByv--c-SFcStT~>}J_2V$aNQO1B~b_PBE{i+dH;cg1Yqqn-{K=n_e&UF
zJ+5aP;BiT~EE{5V(}DL>u<`Kz&vVfE)doCnlY9;P6K^+n$#-xd2|60Dmf2=`k1cl6
z>85Gt>$HcF^Zx2s^nd<&b_?!yoBVuz_V()d=H%Vm@6Nx!`QgPs!^at%Lvg?3=H_cq
z-(omkFEdaNLV-G_pexwKJiY_2m*A3UL=qqyE~d#n{F6z~;9y5tAeL6pHTilo1DGF<
zUnehr7_KK2r^h1*lOb=Qem(qUy8a3nzL-ykfO|c?#Q-4%AsUfAu71fj(}fQ8O9X?#
z#x!{|ynleGL8DHV<A(*D2jdjO2Fs?1g(Z?|!5{>!fP=lh`QiA-vzu3ES|{dL*pA(K
z@#3Fz at TZ_p@Je4LQS`+ZsjniK;OaU(@KqE=0gA`3u6&i?Gw|pob$ojIv$qO-57l|y
z>t6cm;CH*u73vPUi8sK(yVvip&u$=0&n}N&8*GMQ{91i;eBxIP6$He5^Zs?95*CCj
z^}0Sm0b8$IRO#l2^Y4uS(#}FPsWf20)AJwwG^rp!6T;TVCVaNdVeoPO7P|DlN^htn
zK<Mi1=WAaj{2n6p`rW$=!`zw&DhLp|{^9cM`1Io1>u0JkQ2Fxg_1Q5v-PIr8p7^*m
z%L6E`dfk)s+*g at P0@Yr<dk3W7dc~Dx0mFZH;iLB51*p}VT)w-w0hjRC!IE&bOBlul
zh{0$M%EDEz{=ZAF{ec-Q3Rk==s7Ymksz05-J$?7n*{M%XS(dj24rPyVAnR09-$AJm
zWuBD%)A=dndFX|l{BY*hrZ&I=@LT5M^6d2d<ofKi5K$fqvDqx0pBw`pH&^HX>9#yZ
z35b6HZ}K`-PlHvB5`R^J`}H~Wqk@!WsYj85fP`>t;FNmm8}vcj*KQtli@*3{-!D5d
z;6q?=K*d1>=T|pBT|#^H>iFb8{8E?@*uL84BZqnO=Dkx_e)c3x0KS0)d~*RU<;C&$
zUekMFzDU8HJ=9OnUcLX`N1qD(k#qhEa<3~eh7K2e at r4^XSauq!#0B|E#K7ybAJ1Mp
z?CF9pzBq7&I{W$L&5f^?E`WZV^<U4?3r=O7L;vdX{mJ$DySKjR@_~He;z1lY-<@5b
z{BYy*GPn4PFCau6R!-hsp52_g$xVC(_xN%$?)JK)FMZWc&#q1`&o58}M}bt|C<Z*I
zv*BWSKS==FYZxZLkP|xDFrbDW`{nfGH?NYHug|{vQuz;c$zV*SK3roz4nBaSG9QcH
zt|~b>e*L<mIguzpik}sXuC0a^E@Es4^uR-w5^@nQIP-dov!nmZ8JOVYc-cJ5=kiZd
z10TlYHl}<nS#kca+Wc=i=zpI7wRG6lA87v;r~ZlU>h|yT4h}xg|F>mx6R&Ci7N-7{
z{j1IYA9M#`|IhRPrls2X9a{6x^Z%dc|3A<Ff1dyUJpX@&OE913|6gDEr`JBu|K}E(
zKF|MK>vZP)zMf3b3lC;_ehQ4H=RVK>=a)0ZB)?CipXdLLW#atIzE5R&sL%8NtVDN$
z-_f319Gt%YJpX at o^LhS1ap&!QllzW~`9MC;|9_tUZ)fu3GuGdHn2bJ|`Tt($pxZs@
z!2WNT|KI;S|GNwKMEkex1F`e}+Wy`BPWsvYyR<*}KsH^&p5zv?L3R7X`H%i*`#+EU
z#VQaSLRt)0-vrOYRA3J6A71}~Gd~9dI{%^Lf6z}M|9@Wpsi5SVptz$PPanb#?9~bm
ze8540&EpjI{{I;chQqPF+ZCQhgT3vrb0zuy^cC#?{s4z4U<>$oIKG>HgPXVY at en-r
z5j^=I&U|1EI<SEU<M6b`YPg0IhPQ~_f54&AaSqx|PA59*9_K&|=82B{Q2^r{K>j#~
zIEa8)#1Rqi0S{1U8>c&vEFAFoe7a-H(;av`X)mdA#sf9)Kj!h`pT!OfIFe0gt-cn?
z^$z!!sSR0l2ITDZcQ-#@!wy>79rs1|@Wl)3+H$B#r-g4eiF}}gk%>dZ@(3}+^#?e_
zy7ysuo9&HP_%HrHoRWpV_L9j63llmUg1fiyGKD1R!zr$G0LQnIF8s#-z%Ou+7;dlc
zbUS0X2_VCBBXF22Rd*RcJvjH39>PIW(185MsF%XWFNfptd}-DJGU*|bNz^}P9iWMI
z?q+740oFOhI_e*z4j#$<a?vp>09bkiC#;fG{bN=@A`45BBdmZLNYy`P1;Fy<qH9pt
z2bz%epaN3of6NMSI_}FwPgQ_(x^x`7X0~p=n(Y6B6Nv-U&36E6^#2a_yPx}i&09N<
z(PMvbg|9hJ!F$e|e3i;yO8S3r^1Gkw|8+n2|0?UbP6a$1_-}0O7t^N|oRHm2|7|ti
zdxSgEmyaVj@h5)8WAd99y)G2uzi>kt|48{qmw)v5N1uP}^N$1mG2kDE{Nsp!q!Nw5
z1H0)7dnz!c0#zz-!C5jc7uZsPE*1E?0$*41CGd3xzOKO675KUWUsvFR2AA-61-_oZ
z*CTxM(ewkB!xa(}`Z<OZ&7_rVxTX)Y4eAVk)f&`)DJ5oWXlL<zw(fR_<SN5IH+Spl
zaI)GEGS$>#3ALZ%m%ADMvLMzL#MpwwT#%4pMxe8qMs3NK at h>_i;@E!^qdx78#qke&
zJ@<P~{O|X>F#i8M{?j^a>o at 2pp3qef^58$7)5Rm&Kl7~s!!>llHq-G2Zf&76yf8}J
zBLF-SKbejmK75$2dEBPQf#RBg;MD-nJVt!>BmeTSx-me+;e&e#z~Ao}5v47-Q{ivp
z27u5Q5$?@0t^q(%%Wnd(M}gudfFI8;ui%ss489KVB&s`#6v-M!k-4JHWV-qWhnFw#
z&VV<=?9Xsd0CenV>PB4D#wq^>zTPYV07jJJOZG6r4;{V_5JrZ581}&Erl0&3FCw$X
zqjpWIhIcmMO+*ehtXf7gwMgQqGKysCCrS6Km67aPBvTwPM$zp0Y0_0~Wi)#hO&DlG
ztq9Hb{3LrZn(bR8VT2kdW#3N{JfYl}`xZ$YPsfS5 at 29yRL-W9*3C4``*#kexgBX$n
zMY4y}6A&t080BNll0X^wi4J0j9$G{pHsj2B=qGs?L-I(G#OWR&*#mRp^<#MP8T<)I
zB7{C74nRqEb~uXRAk`TOuVah0Zi<)Jc~TO5k8tBuC#8Le8=M)76EzK`rKr4=>coU(
zF?=G)1~L;o8y_RB&P_-bbR0=Fket$}?3C*Cw2xUoI#;BD1O?w?gw-i(A4pap8^}><
zRFX<{mfFX30soJ#h#Z%sj5Ls_;5$^Nw*FGC&*17Ey?d%#BWnGjorf1sR}{_koHKL~
z;J?}A33{bjGMXjXuW(ON0^|J;_sb-?oew``$#|7)epw|S*2{+#&l>ZzG0j!K<ayuD
zUJpb8uj%i>bTP~q(~r)<-q-N?2>(c7rW7U at kRJaBAo72B<(0$+y$3*IV#At<RA5W_
zkM17KLuhmg*IviO2GqfkZEOMo^JZW}%Ei1v=7A({W9tTZL(0Y2IJ9kSy#O|#EdL8g
z3b6xPx3RG?@_GZx^1lE!j6&B6`vKm7vivWA4I0O;YlVXVHlQs33t)r91Y+8f4g%PK
zvivWA4QBm&2M)Hw05+g3|MO$R<&M5<1#*9n_X1`4UjQ3;B&^HWk`4pBA!+en02>CV
zYlTq=n+}EmHt<NuU^Z{#5H=kQ0c_xrkcMq+lMpr?3;}H5kq537rXg%P7y{V9BM)3F
z+=j5}U<hCXk34X!0H*WjH*A%PZ3-SaaIBC9^P3Ka0B_)tumosX0rFjdHysRqY`7=}
z3xhVcP<~5wFa)rHL&B1wjV+YlkaVHmu-%2lL>pTuzje!Ep$iTPD~&d`P<}(w#k_$-
z!ZM_dEtKDobTPL5J#0U1Y at z%{OTUaRV1)y~=2{_?-@0Y7&>a9a*9xKh)-8(#Xkk*f
zbxuS14M>;h?Fg{BRtV)cAYF{D*V#+m);SI3w{BT1^isg)S|OC*fOH9OUBKpAA(Y>M
zbP2ZJUJA};`Wvp18#x3M3fzd<*~1l;GHiXoW?P{P_h@>t!MaQtHi!kMb?(AVwq9(s
zx+C!UV*&Vr%c>!pW2cw<y<NBw*M|*Oh!kruURM7zda5vikUFh%w_{}_tv6n1VvGux
z)$i>=Ea3P8vV-Ccu)DnBJ-&La3J?acK`h`P3A|imv!b4O)7WUO3ugw@{|rgN0;$tF
zcSit-J^U_>7X-G>9xatg%_&@#q<x45r*-a5LfBxvtpppy0<_N98YxMqRwh?gSY;9w
z1Vn&0hy|y0?oF*sPVNH1u%{OP5NQA##Ddd0<F*`WQwU7On_4|Azy`74w9Z|lA7Wyo
z<wq%OfH#N*+|Xlsh|v#mu-(l{ut6+1t#cQ$r%%#_&Tc`yp*@|91WmdZo6c@QY!C}h
z>)eGV-HT1P^dW4pg$T2wl`Wx3_hQp6eGpp;*z9(pC%t#Nhg-RnzsZGSGKAlzkUub9
zEZ+77Zv#6{SDWd_;bg)|E`Y7K*L7Ow?!L$&6C2xNF)PdDFhA9GTIcS*=s7sNt%sRL
z7vODw5B&=l094fPi=KmnZMK<@#<!x`3Sc_`Y!Is!HW8-|wn+rG0bm1E;7f`($e!dO
z4z}3{HW2)IdXIa0b>_9Q<^JIw+(u{H6!M)9n=~gi_W?<d0Grb~Lr(EwW8Q`wt$u7E
zRo88u4@I1MB^`3K2CzXaIAiDTk)O8->8+SIhy}NGKJxP>uodzKvEYoIyFlKjH^w$D
z)EmTtGj{HRY6`Fw@&>VxYn}brrmHbyLKg{G0b;>zokt>DIyMDtI$s8`K`c09=kCa#
zkpP>{mjP at L3r_3Y9f=WTo;L_S at m~NN#Dd#8k3|11kF9KEG=NxeTj!DJhvc!9jf at 5m
z3(nZNI}-hnJhrlt5$LSzw$9+7UVj5Kl;~{$u>h^J)#Cz3 at L`*-vN8`DKrBG(Y-0;~
zNLJ<{gZ;f8w9YoRkcVVt9)jKht+S0S<RMw9hYSFl(^DOXJR~di5NPM2b+&m6c}Q03
zAxD7CX%{Ae9P%{I;6;a`j6`wZ^pPe34`FQVCH^>t7NzHmox78OhcGtwk^nYrOPxN_
zB;X;8jlCp*t+&^6Tjxo at Ll_%-NdO!41l`to67Uel#$FP at 2C?9_&Xa(LFgEs*05<Rr
z96OtRq$z;n7|_W`<CW;qgj<<Ihy`e!ab^v0lKQ(-;UOctZ%I#Ntshn!OiKaYz at FIm
z^<i^*s(=k2UgU-$fDK{+T4x)Z@V7j+F+8-fCVYNu(1Yn=Kgr_F?{6q6cLjrzLJy|r
zw$5^V>R939bW9t9Nz?#u5DU;cTk|1Pf8TQYG#(G(O`0M}Ar_#efuv;ERE!sTwoPd#
zqQn>A4PwD<ou^{FaBE{5m(TnhK`gkf^Hhu%9Nt!IJ@^Rt8;&O3)_E$%3l49y2;LwT
z@R$q*f{X<*)9BcgvC$KKp}CqPhy{1-JQXvI4mPl9*%<H$V!<6d--5v~>K#eJ3Ut(n
zI=)_;;tXQn9XsEORwjUrnwbE$6tLN2=kBe at ApvaQnt>dW!bDcz9XsFp<8(30ME5?7
zt+&^A$IiF@b^)=ePI*AmK47z3XV5=ef!D+-Xi>jnOhiHN_udrdDErRLHog%?Hg&Nn
z#=?>w05;nSI4S7GM(StQLc9$Co83C&n`K^Xx-S^C>ET}AX`MUZF<xvCed at n}6^;O#
zYXxCbS8uv67~&0P?)pyaj0?_Q-gI9uhz(-F89QUM?8T=0f<bH$3(nZN1F_-728m1k
z=hs^bvEYoII~{8-T6?cvM+x!<vEYoII~{8UN at D{Zm+=O%;EbI+9cu;3z-9zPKvIYW
zr*-Za^S$8y1~wxY0@xrHoUwDKW350L*o<HZV1rn2#?GCNwE|^eGlC(24PwD*ov}gi
zdPr&ngC84Yqdv6GMhgg2ti+DogMonoPfx;rqzrmV+yLTMZS@}_{;k+MMf;k0I!!NP
zq%eWp#|dw+BDJ)gCm>?Ep+N+W+ZLjSbcz2n(L>B&D{i5;{L(=GxSST_hXm^4hbV$}
z-I!Gb_AO5}@UP)+fMNoWQ(XcOSkTnl0_epGAZ-wUu0x52AkDf2_V at Oog|a2E{MjHd
z9?s#ZzHzY-kbGSl2S9_&YZ%$`a)Sn(m at CE)urB at q;D>RGbXIaA%kLF_cmR1sGwg+q
z1UcFzakvN1>e_ZNmU&D&Ac^UHu?!GKE`cK;0GSG8pk61+V66O at 1YjMh7(2v|gB=#H
z_n|*v#WGMcGK10(A8RjE4+`!QNPz$_PP_vdV&7`&6aidEpoh6tnxJlnnI}+imq2%K
zA9 at Wo0e?0^0`#JH0fBrd_j*78BF&P(pNWtFJq%tzARo%T{@y;C7lcr$F7 at Xkc#V6r
z`jGuPgE^35OXLH(2LX*!0u~v6N`j-w!#Fbem<CntLvI8db1h9EG0}O>5<$Q{EQ{Zq
zy*;I4{&;BTmfo_oUiicpis0?kb9f8<h5eL{QSuUZ>0*QM&-Cuji>TwAm5&MH`Oneq
zr1?Yt1}8AGh<g7;-~R*me|0{e|2I_F+ON|7+|l_O-a>wW=jt1|_DS)K_7C0v1f8h;
z!NI<J{`a8w`TW1qUz@+c=Kr7hq%WT)6vu$S&Q{a$>=vH6KEFDKw}bg^5O|pS8%*i?
zpfB_oVVnT}V$$w(_G=&Pef8ZbA1i(}yC1H9ffJN)In?Pi8?R at p4ID|H!{RY~|9nAI
z?y>WV&wr!+K3@=p&tq@*{CDW^Z}<^#)V%+KD1Cf)2ru1FrsFxD-Bn-zw at A*jZ1~OH
zzw7VvHYxc2HLYpf52 at mdf5Jn*@FF)H?G<NzU*L at p5Y1vdn^D<~td#KI8K3Y2KL3(@
z`TEt__g~V%J~*0${U7`W{TlcN15)GL$-DP&ui-27+4R at rlatr)5EMG4*4H1-@heOi
z>921(@Cm!e#-|iNL1r;Nb at 3CV8RJtAKfzpp{shl={s<3iUqZp5UH#2DvVI8DK^mF?
zaWk{=5%$*sAYFr{Az>2~e59>|`s4Xqcv1WE{RK&nTa&G#6L^mp`RL*{V_kBh^koZk
zaY+nzZF$Z$w1pqAyt#mfc2RY>Va6svMX16q?2Pmjp(?v{s9Tx#$Fq}H at NzR2;Pzh4
z at 7cu(VoC>=6z~<1qyrdnSg>f4bYN*2VEgzL=VL6`efsKBBkdnr?f at 7D1Z$ZT9v;1d
z$Kgp%n07I7a|wxwoqU5Tmmrs27^vk-kW<{FmM=kWyD;;ZFF}sGspUk1H{=>RI98pD
zE7IJN4S#V(nuAp(6aU2(X$~h*3>hx2NOMPyMXpG5uv%lolICF5#r*p7$;mN14v*Z~
zfp-e3hOcyInnCgB6B$)q*i~#`;&(-b=fGrOt_TJ?mlz+g#ltAOqR6m5!SnP2jirK%
zD`L_z;+ylU6Lx${hxnPD-ok)U`u6zMYmyd+`C2Z1A@>+@(JpScgs9*?<$N8A2|5U^
zLWr?(v>aHz#n1OL9h(DDLfCN2zvh5T6z8 at Ja9W_(cu75$C(z3S+P;>SFORP%&A=M6
zN$dLctCR0A-NS0I@%>bPw at iC-q4>gGjz*0uk(XE?vqU`|PYeSYI0Y at 5m9w8Oz)h~%
z9f2_ at q0zIv8WCSPzWU=8J}aIK^dq(SR>0K-Jev+L<U$!_w0(7(B9?)JUvdFl-o$O<
z#d<lOW*PJ+>4v00<A|3h8Eqr}X*Z2BDci9_kz;>S>D&Iy?T-D;ZcI$gsTRYo at bmT6
zAKy~2n!rXLw at e0cjW)4Sz(>qQxsRBNavw1h<vwB}%6-H<l>3Nj$oZ)Ax3|E<n$F(d
z8Xgw8hKEfq@UY4S9(G0Iwvx-4$lLBmO55&7%G&NnO4{y6%GvfuowBXQ;Nl7#M<xO*
z6fdsczX6?F0ex}x(>n|^=i}x1TMT~7VJ@!lVQ&{!v=2G$%jUr at _=zr&dj%Jw0Uj$4
zamf|lDF;PXQogvtH>c0ZwH=P${qzc;Eh$Ae)ut=@srE;1b1dbVImrg5)`-ItXXbTU
z#)7lAu3BV^WFwIclKmCB#wdh^_5A+b$?2Qr1odRu#%{b!MvS)0#xI&7Y}72hiVFEG
zV6<CS1*6rnDHx5GuRymACck!*W!cbbuq*?ezJlD3+A=YjeP5ftEXm6#OY%7d8$`@^
zmgx8qL31Awv-J at tY%jjQ`p@%I40+36PmiyU14S3IuVeR4jds-{Vz#Qb#75JJ1!6Lp
zTGN~Js~aeOcX@qw>T6K3#fA119_fL>;+x at kz0Bx>H#tPaW-ozTf=APJmb}CpxnQ#v
zOa&#g at qCzNQ@AQ(N*k{5HaHyHQj at A`z!kyC{SxjC|2Uk@>4x#gJGfRHua;v3aKQxL
zI}W4p57YbU8mLXa;tMNOE6#Gfrsg)$4L^UrI7w0ml6@@cI-enq;VmNBn-I#8W4EO5
zlyGyK=)MG3;N~_taG*tdn+%-q*xn|G`H$V?DF3ks_kZNS_LI~V5U}pU?Gt&}g9I+j
zv?T=C0d#BKuiU()30$b at z;j6##_awQ;4&vA*8xs*qH+mvo0FGI4q!Cxr!#;dlUo99
zFASvfUwbfs$$#xbUoii5KY>d>9hon#fRCKK7gxZ8M^@@o!z~sL7TpFXaBZkf0bAh&
zE)jLVLOYy5x77WNEirVHa^JBnh6xepJGRC!C*phsSZa=8YQ!ng?J-<;;Vq*UIqA8w
zt2R05<%Ne<IqA7_W4jEEoI?Z~=A`e64J|WVG3S7)wmIp$V#~%E?!|B_aqA5Ckvre1
zeTIvwJfG8~?@9|TG+dJ5z^W!X>ASM3MmpJd1(vNe+$8Vdlg%_-py4e!PLq9CaM at BP
z`>x=!txon`(Pd)|S8F(QxP)8lWZzYS(OxI}t}=9so$R~Xpf($>-f*bN7PylfxT=sv
zX>#D|LKbzC16LW;aKoh>4jpQ`lLJ=`_!;o$bfBB><iJ&d(SXBs9S$9C!jl76eA$MZ
zBUNreR4bkgTn)%(9PaTDBh~L_)A<DMSG}Fx&o;2`;tW+EV4nEH{dDqz;BGcISM%it
z#;n=q<^w#|@zT0S3O?VD9&VxS&hEdWE1zWbWHXz>eNcZ$I^RMIF8_GRzx?n2o%Fv-
z{wI0)5-a|x^Ir*k>B6Uf|98lNUtx{)6z+wEMjf$y`{J)J<TUfg<;=$#z9aHd^e;@N
z_L2vfiiZ2-J`U%CLH=7HHdq4)V&hP-fm}%T{*Wk6f1CWj&eLs&*f*pxd6YWHt1vwn
ze!^Nr?*3*JIr^j(Ir^j(IU3FSEyZ=3i|h1=0;-qB#<jy;a~=sSV20_XMWGEF)1BZ>
zyTG~5Ku&Z6x6h<X&OVTuj5M@$QnkftPWO=3IlC9>-j`NA8G6uy8E1<{+HK2_-CR%z
zZFFK|!ey^P!+^JAvrFxCu)Vvztr!--@L@~p1l>7Z2cgY=1#OzlHK<I{hv^r3IqK5Q
zF$YCCCTmHPo=%wXhUiY1$y$SYjLQ~|5|Qa(o;DcWK`(3zH9ku(thOdw?}lxq$!F+>
zRna76_0cm0cfR}3NMcR9ra%p*gsoDmrxzg|t1wl&dAcygpg9j(vSxY^X!W1~C5RX=
zyX-Y*8)Odp5a~goE^o0DK~ks=YoR(9EvYi!8xvCxz3A?k$y#%21o|{SDeQ`k9TgUK
z9PW3gLUw_86`HK=ScRx(=s_wk#C~J2->|&B1@>CfV;V}iX>?yU$6s^G1STk~OM0`n
zx0QTyx$3l}O;2}L_9J6+q|ID&s*D@{+HQ&2DD0M|7I)C0-Aa+q(WR}g%htQJTk3N6
zo!UyeOm`ODFfm6{7tw>&<;rAk*U?>d)W2M{H6fKxl+|6*<n1{$>9pb9!fd(TolkN<
zD1H^oWbGOBXoq(3RJXxu`z?+bQ`A!AbF?@4DZRpF151}}w>aDBa`){`MO|jY9j<1{
zHKf=crOjM(5gxsm<&L?FGi5fM?ogTgJm8I98g#gO4sALKvvBwg?6%bKc$Qf$UFIkE
z@@+miLbdLbElzXFj~g7he$2f-C8*rK5xY3(^dD#%EjZfBhV$JS(#kMOK4Z4RUH+=P
zbH)~D=Z3UHh-W&KoR#h97_uzAtv|FjnL~1^jY6=cDXnhG>M>~xv~y!R>fbgh9du>Z
z%y!pUb!BFWZ}~0mnzKw~)1MEsg8XJIk2booD&J7qdQ@>=l;5fcg(*&RihqWNs)`Yf
zF-4;`%y%8^0Yy7DG^P1OO$dsi9jk at QUR4J(hTOXzWw&m~=NXvWF%)Q_+PCFyNBKLj
z<#S97JfAJw>Ne)Ht35D_GNkn0=)Q?5&Cau{ZN$I;K#Ek7Ty0z!+~Ho1A$0qxb;nkG
zmegu1|CtQgc3$1NA)g_yK9eEgs;pj16DvIu$sCQ#X_BMZB<XP1V4CD35#6Jr+%|QF
z!uv(34fb}mH4@IZPj>G=Zs(cFU4x30>y|}|tg&_7;I{pSVoP;COX7DYV~ZCKZSPDE
z+RoTpYxEg1a5arC%<Xecp35xT9GUNpdTLbN3usBxTy}`sPwCqX=-DmIiKf@w)=cBn
zSko!SGv~&g>G(5v4tEXOL{5npW$Z(z=^GR_eYykDbY^K<kxizRs7c^zid-xX=1WtX
zZ68*ylc#emHs_nM)4Ps$mbQHk%b#NFmt*m7K&y97l4`jbtlFqSr{}<Bu{o{QZrg&h
zBYA$Cb<_s>2|gA-ag`1}{fwGpu{o8tl~Em*n|0J?2D~{I{|2<`rmH41s%JiicPw?I
z=VKuJ2QG^ZYBgq3X5h5_IOSQCQ5}Apb<|c=+GHOUOiK%-h4WmMRQhXs-BV9z-`Y|a
zG0)|2*PL%gb@uy?Zx(J%v{-G{Et^(klOEZ;BC$`>o>P`}n)1^z&9q*QNX>cjHa!B*
zw2bVO7tJR4W_XHnwk3PBq47zWv&ne+8!+dfz341!fZK{rN2E_SI%Nm1C^{=O|JVaG
z&Dm^peiG*Vgrl=@bFSN3{LObk#8hMa47kNxa}gHR0XfX?87y4=U5{p)u8xaFH-CCm
zS#=|{%ifN)+0SdUaM-ps$C!=kGT;15w~W4d#AdERO~T*-??x<H;L5F17HV>{yZDw@
zxI`Z%vv_Mzj}R}Y$HF@%D=o`xb{gE>s$*W4y&bEv(x7)^PR6zz*<Cp_iQa8wG1s6P
zV<NlK80oR4rpA*V<+6LM5>3{2uEJb$EIa}JOG{eJH`tY9+GMRkEykqAO7Z-(GZm&)
z`#dIVJ6B=O5er-Cr_IgdXr1og!04(ig+i<1y|Wecii5+5xzzxd&FNN{I2{y?R^bl2
zsjFRFzX;AJ3APX0R4yb*zjD#+Rg~*;*`RWH15(=TRbtRHf_K2CW~?>2WaY`EFhxMU
zJ5p at S^p4zg%%_eb{M;i`b7qK~u8Z0YE;C|LxWHxVHm<_+8F|rnuruyCEcz^4c5Op&
zYET|r@zlMItFlp>owoZ#!W1_j{-Z={*4r%2tJIpzx}I5B9>K(K6mZ#V&@3 at 4+SPgp
z4zo?Cyyn%}aQ51PMw`tyZD_R7)X{)O>6xYT#cDnq&o(#w6jUgRlH=>^%kx+7ug`AY
zzlEofPxoGY at ddovXgs}?1L3!r;CaZ?CBEf&H at pA9FEn~O(heKLb*E(NCO}PezF>wk
zhDd)aBGAu`A#%7Ck;6D5 at UBU5elFHm+KnNz*o9RV>vTI&;w0HlUy<tSZ6!&MB>5+N
zVD-C)`!T-b2G5s0z>99qb8g~Iv|9jr52gC?ars5QKThwW6T-{shgr6nu9Mr at eCkKH
zo_ at eWjZJ)z$dcqQ$(P5M at NVswL-+??B*r&n;TbmhF#8)STR<5+N{nTF at sKQWaDETu
zZ-?-px_Gt~AAp^W6ZOEGDAx4hQ8!WJPyYpv&iw_3y}-fwn~R^$FY#GwdfS#5`Ip(h
zn50hN0ldxde#39ZN_wDHdgo3RB*R&Moc!+h@)<gQ1y4Q&m7KhT*Zyv<U%kFTxSNh*
z0-lN!|KW@Dou`z4boob*fAsmsKL0r29|Qhz$Ulzw$B=)F_{W%kO!&u?f85d!vSwb2
zQJfF})`ARzdBHWjPfQwtN3iK9JX=ja55-RyI+jTC5MvJz<-w8#*H)PlzVs!2t!$4i
zWDy>oZPpJIx5;t^Zxr88r0)q|2akU7j!SMbzU2L>e>0hm;VtjvrFhlwcQ9^SIS(&t
zU<f;LJ3OuG$=@M9s9y40aL69ICl29_YWQm7Q$P7vc%KnpXxx0I(BK1!>Q?x#=($9i
z31NJHFp(HDPgaZTmuq at oDwkw`&!u8>POKnt2 at le|d}+dbjneVP)URwENHJv9YBCHr
z at RGG<8TI<)YRpDr0$&41t1*y<mn3`U6kUX()|=%pipalKCh`FDziIdBFviIgEch5z
zyCD}7zgiw9{7ct>QV9p{1T9%2{P7RaV-ze9HeZL$bRPvB;XQ&PTErxw|B^f-JCZ&0
z90LMp{@7zcCd=<dg(!ak*tj?*K+rFojwN;APst_uEypc`L4k->0>k%I&9m{+vonT{
zXEZ{!NDzWjV-~+kUXhsK{iQ6z)MKj<A!67XuGd}%E$+kuYTX|<eF)KoWdz7%x?V5W
z$Qk{DdS+$vL$F^Z|4Y1aE4)>Jhp1)EGN0{~`AxITZ+6Ojr&;DZ+c2NrR`nZy%Bb!1
z{oQi!Z&PY>f4E!jVF2yxchzPe at NJQDs{0NmiOu?#W`&SQcPI(8FzdKJuz-YSX)Rh6
zU(+d}sO@~IhHBKWrDGIOnLD|d{$&#?YsEBH0yeB8HG%|E)RRI1sU4JL%vKbDh*wnx
zJrdY7lW$C=)clBgu<@H`vwoaH1!RdrB@{4;tYRm`)SN7i(VT#d)trf1{_fM9D%(<X
z*pC@_1IitZ5g^-kpezf&N$$vc1J#w|5*&DaO`|U))4?@o*iQD_B>f8i#Zj614m&I8
zJC(o$1CHmQcS?Q>OSJ!komoLxdN4B|)!Smw2rEc24cy{aDJWW9unm1ES%|(nuzP}<
z;g|uyL5vl!6MrBg41Nk$;5W$}S)oT(5U^092Em*KzyhRAsAhHkMTHozX3#iw62As+
z%@^6xl7U7kD2^E0^2i=Rq|I3Y at jO-;%&x}qc&m(G<M85)8&2ZI_<@3jfZVVjzz@p_
z$OkkWl;tM(unOhe|1veK>%?e7K}R?P(A%R4ND`C0S5;TcBhl<}wi(|gFLmix@D-*)
z>EH1%o8qub{P%CD0rc{3lhJxQ{4*j*5&@K|(x=o{-qqz at UwKcL_k87jUEcSV@9Xk?
zU-^M9Kk$_gboszneyGb2edR~G{K!{6)a658`AC<KeC1<ZKK7MQbos<rKGo$@t9&xO
z9X`xAy7<;A{wo++rUWp5jHkj3YHWB((2{O~0<(e(zQRN;_8aoCrD{}RI3luu+FoKI
zSAWQ)fD~n1slvjrLJ`7YB}#)~CCfu$CCfu$CCfu$CCfu$CCfu$CCfu$CCj~G1z{u0
zy<r7mA<MmCm3B0MH?Fz{fH$!E27ouR4h?`nXh{~sp#=~XJoO=_=@PyNiy6g(8V%=0
z7p{XK>%s5>fJ$6f3^0M-Vo-HuoDc(8PmJN(jdB1hugPW$mvj`w=NR+p=pQV`u-ojP
zesV@?3<%Lh6(|z;H`x+!;HWXeA*Fc@ESpt<Cnk~@G$M?c3NKy&UBoTONapa9VwZ*k
z$RCAzZgeFu#Eh;EpZs%QKHULm1??d;FfVw<bww1xQX+yxs}X>!DpKMnRSJGoLek1)
zZBjXm!(q2+16uV@=X$l;ucTFgwzO(Zz_6eI60g;wiDET*Wx1!Ez*5BgE-JK&{2FsH
z+xTk#DUF^CAXxBLd}EiiLBB{&*}|wK6oO%)jA6i4=@f(MstgjVRf3LiR-(s2uL)Qj
zDQ}hR^LnM=81xF$nB=Y2garY|FpHBkQMr==<Dy@{f<DE9rHC|~EfmZ0mVO0%Jiif|
zl@4p*)@&)I3dY22)z<lxC_HudqnuO&SI{aU$N0w?Lfp6EQ7ugj!p=dRYYkG-N+wEG
z70v7+4TGeNIsB{@PV<A%_<*t~Kfqe{R#_Jbrrl9YM_Yoj-mwxT2!Q~#%aPCgsEJzw
zw49p1pj(Um>x4(94Miqa=ZG#&<3yNO<mp$bab`&HFZ3<Hk;3^8A()jir1UY&F5r2|
zRWGXFAVERb_$DPOh<>rOoRX3iER=Pgx;WRV>PV$3m at 0fmD3u7oP7L^ok`bTk56LU3
z8Kpok5F9EX_FtAna;w-c>xn_ahL`JoYmiQlfdN6AD#g<;l0)6D2|y@dfPV#*S{*O}
z5Ti#1jnE>IBHln6(xIRt`9o?1gc_7(IHfH+T?inxM}RT>&4;7uJgONJkZ~DT0t2sV
zp&*!aO~z%#3cN=smviS{Vq%xSoBCxqRIn;F77chWpj0u#R^YSwRRh6f^UDSg0&_%E
zNzgdIP|&7h at Cp(g)Mcew*;Q4EQMClF;1jY6#hm)X?-jbZ0k at FIn)eHdxp~JRzX)vk
zaMG;=WygRzq+l>G{wmcgIxf_PsS2iV$fQA)%<h8aBdThQk4WG+A3?$*aYz{?0wo1f
z)q-*EAcie3At8<IA<>mJaFSf}ej+h9?<ZnQaZIx;K|#yr)?)d)<tgrlY;q*Kfl>9q
zS at dpfw2)N2A{gT=5;($HBxSV+TXfmvcPR;yHNMI1*C31GE=p3#wX9Kv>E=B~s-t<2
z!J&J45Vzq*!HV1h;~-QEVaVqeiaT8e%m5=mUh1Xs9$qs>dlz7a#IvPI*NjoUf{t()
z!LQhMjk0qaBsG!CFF4)<?iCGtb|}|9L3t|iT*Y5r;x7Gv<vrigTlE#^Rs5$GrNxss
z_te~$2-w2*EZqkU`{JwYgI@SIBXaY~=>X0z(A;HN(*dZe@@;P57K}r9;1w!N8VA6z
zt?m!dvA3FFSxN&X!B^pS at 5N)I7J95KspOcvx0;3EJg2W~T-Un*T~#w}!@PgAT$}lH
zr_B4OPHHn>v at p_mV8gYkjk-;5hnj~*DQXuP!9lyc;kE~U$bOHWU||^eE`ZpXX}wE)
zDNAgGAsjPm at deP)nx#Oi2optY8=(OB5Z`HX55G!=;<@o3U2%p)Kqf<m;2)#{KfJo(
z?*d4&!gXVsbApV}4G<vR2trIiGNkzv-*dVV)ygcjSw(FHMz9jEArN*N=y<@+Sj$pa
zKSn!<B|<smI7AVVO45$oyyWlLZHL{&ISoa6kGi~#hGX6g;rNkL1N5f8fVEf;_7`bZ
zVsZeR98oF-!i3Qo?Xi>sAgpx0l`pmuH`7VqRB!@Oj2)ah5hhVJh#Ny at gQ|kjA}O1x
zGL{B9(&~$ZHU?l)NjVvnhRZzP!Cs|v9k;pHAyB1HU5UWq4eQ6(cKJP1*3h2Gx93rW
z3bw@;%QMxeSHVcj1YA=h2 at dvML={|93K8#`f*a+U5`!(a7Rhx at DUEhbg`se6KnYpZ
zHzoSkd{Yu=#y7<k7vfF;eZhsiBtYFP0oPlInTn at AUZVki_%+<6K^Gb%$<NnkZ?BGT
z-d&ts9=|=kIlsEOIJrD~eSCfX;~Cz5kR<uL1=tDpJS7|zp?auUUoBFIyzqmD#c;SB
z at 8YmH6%0#uB%El#G+tF;G6O<))SV)@qKc~M9uyHEs2q0w8bl4Jgi*(Rx<Q2Q at bIbl
z^6dNbtLw8%TT%Liu@*)jVrE!Nj^R23V*B-I$pgVAE!lDN(E1$^11I}9%VwkbG@dNX
zCgol1{OynDSLd%@J06B4T;IZP1=`*KC#Vy=9)`R%Pb{Qtd8pV_fb7+K6acqL0j>UF
z9I<L*%OS7HiX2sYSwZjZAGN`X+{R_HBKM$qS;0Wvk2FCwt;oZ>CM$Av*2_xTMP4Yk
zmAgYVUSNG9 at 0swiz%|9WS7a&9P%M+oZyXGG8aGc^pbk at q1PA9sfiz|!BilPUl)-WY
z#OI)Fd^WNayEsDWvM)Xdv15iE0P<cT>jahKoWBN9W7BYesO^>|pEE*jAR)+6<*z1H
zX+$ou+dckfwR!Rw7O)196t<Uy%W<FzOeQcWRhuU^)0Y}ez~v~&?_~rYVkta?NXSDD
zo)AaXVZJH!3<Am_=dVHTsrU)=M>%e_fmkOdQ9T at x3_xkS$iM>3&%Ig?3TOs5bE5Wb
z=XOFKDHz*IZ4sy-s3Q!nQtcB^j(`4Ij2ZXvmFb`G7+VT8`?{o%3T#{h8m0X{+~4Nr
zEu?_ogZRZ3E;Ir362eg|w|cn*<o6%}+UQhjVcrhqBImC`)HDvu8#g{PGJ>4a#AlPP
z%#EVRPLATEl^w+nj+}4AGbi_exJr at VeeB6Hn?L#0Vvv}o&W9a(@eB$Ke)T!s3`>7d
zW-}-;SqzHtAG(g+zQl7V7rR{*%I`iE$}*cn`PJeO(-N+D1B(MIcH%jdC~`_v1wI~C
zq0OZFY;n1GLMH?xLm#tryy5L&zJL24Z{Pj&*6!-56;++i)RL_y*DroSF5oK6hPlZ1
zG}Y>>kBdj-f><cmg(I(ApETr^3!pwqH1gWtM&Q7J6YrvR9U8xxj$-wq;9gmfdVd=a
z2(luV4h^NiEw%-$&}av`E4AGq$Vz^&vsf35br$O$Y6XTl&9l<;7)Y)hdVB at a$Od?^
zvz*ffLYN#@`WRF;l!~dAaI=muKC}h%7qDbf#w@O?xGsv{f~<=9&wZY!2K0TqM;o6|
zZA>{XoMMw9*+e-Yc8YZhtwbxz#EdBl0nTNpzOoQ<?$uSLO~}%!BZS1@6+#wTLRgL{
zW~nfnSi`c>4BI at 28<s8%22hXz3!%UR?OsR#8^Bpzy#Scy@c|ejX?3X!0I_?oTK51P
z-t??`&jFZwfPu-cLS66{K>*Y}o&dJx3Mcl`G7~IUnEKN)8$drB!Bj^uKy-~jDlh{;
z*^qogxqc9AN^oja6NW>oWfp+LCJ0t$glxF}fF7QfSt1)|$R1qZTx>CbL$ESCWT?7s
znHe%<ty^XVcuoLYu5Otjz{^R5GD|GbGxe%Mzz#D6DzgHRJeV&Lvdj<&c}F<QECG-M
z!r3dc1ws<eUYR+51s3tn^ul0777?z@9!M79%Irb?jb52G=rv(PR~8uXR4#&*nPh{$
z(kn9uJ#&hHW!8W<Mga_NGcVSi>}D4#SdIt^f#l$&7|3|z57{d-g=#>-b_ic)6!~-)
z!j{>E9=t)opk?%11n1-VFw6LIe(zfVkgoJ1DMQ}?^E0Y<v%a0);C<@T<MjvgZGyif
zSJ%hzUdhGP<@ww1VKz0PX92M1`4{+~EIj-9<P8-r;LQNL@a*CwRrQEp`;CG!z9wai
zDcbm6fla%R>r>#YK4atIe2$Y3uDUu2JSHH9_;5A+?|!dHNY+vU8Lrc=EM3Zn7OH4Q
zFi>o?ljGN~&)>3`wW%D|k at 5)jFkByQE#qN{Up69QzmAB9ETS at UZ3XvtA>xzITl*|R
zCaq+KP=kJow0GdBa3g;%9*ZPw%twLnF2wVAX_0u1`6n#Av at 9N9yPPv#nhO7f!8fb~
zOE1lgL|>!;s!cPQu%AX&R<GKiNcyRq;%12Xi&ugfN4YlASNPMrvs^>L6 at P+<TbGZo
z@JdQ-ee(@016*x}>y3h_+|DkRAG1|HdJb6s8>u`@ak3rrX}%`iBE>rL=auKmU(3Mj
z<>oOjeiy~ZbuX3U>mx6c@#3m(C&tkZdPij&z}{7l?E5IYz3WMOK|LiPl_Dj0M3Js$
zMuP3=HbjXY%^<6;rQ65lL!kgxPdCU|K7b2*sf}pm-A}JncBw4*yw{!PL!)YDkotgL
zFZdON6ztF0%Abg>B7Z7z25UT1St(hRQp{xKOP7r+h1hyFrL42{%_B8eBWSMTe5SJI
z9U at H$D@|dh8rA65N_dYIwb2BTooJ)hIOnONHfptG4w0Q`qZXsuiGj!Uru9%^DsAfH
zO7%at^y5f{G(u%J3fVGVA{A204|TvWmE9<$7OTU_<mNsfC_NsbtYu%KY=k27yxV`N
z<xjxVtVyO)=1RQNAVsRh+UVDVys`@WAk^W<(elAogy+lQWagQva1|bFsFW<so2Iv7
z42HNqTUF(&a)$-zdY!~IhN+O03UTB)*h*#?+IeE8>7iW)=bEN5Hb+mE0qBZvmThVC
z^~3sRa|cg#Ojet9J_>v(Bhsoi=AvwQ{ln$i@#)3&Wz~V#V=?otyH-dJHs*NdYqejL
z8gmnRF88L-7db?iY({&Ww~7bgYB9 at uL~XWIn9>cb+p?BDjPktsyfr3<T$w63ie46k
z)yhweqij}jmOmX}7eSogFij-2*rkbb-g#}7N9F`WTfm#gf<=zqXXZvTlW;4HJ>(5p
z#8^s75n96s#8n<^fxAsbllpwS1-5>LWvg5YD^gmImUhJ!bW>-QT?torJ9*;etIOn1
za8^@Nua&%!`jdxzk?f5So<40n>A5Hc7P-O!&)*NHQW<6+qe~3au@JMkvZem}Vc}Ug
z>CxJg*axsR{-?Yr_)Jlm_j!8o;L*3M)96;3+!Kco&>U_hG%%KZnvC_jP4cByC=a)v
z4fphPiwxPL;E?A$wzF2RyDnTAd3}EU>iG0j_l0G$=Gj&(K6|SgnCfnP*q}{P+7&=f
zyq!{(OHW?#g{@RZmnk>U5t$?Hq7MG+S7+aozRl1U#yER>8Y((@_x|m*Dy(iNVC&bo
zRMw78e*FZMLem4eUPe*mc4_=Bj$>}+qd?nZ54X9+={jkTBL8)Ht~KJgpMJ=Dh|7`b
zwT)2a>znd~8=omj4<b^P*-a@@I6UnDBbz4LTUa-2lCQ>^wJavH$EvHT%nm#M^Pb|f
zQ{@DSn2XZ()iF1rwL0~H+-GBoA2 at rkRU#qW?QwoLyWM1YofoBrX6(U)V+5;}>@vdt
zsZFs+uG$s5qSTF~d6H}s6=L=5IiGt%tg4&Jwzf+$i(3)43(xhiB40jrOTG>$wjks`
zsC|L;w6(6Pts<`Wd2VDoJ^gY&F7%F{udn_nw$s-Vd7aJX`8?)|Wp;0x5R0f5Mf1g#
zxiwDOna2YcSLP0Tl-eyfcbB<k)-Efz@I9Xy@!>4o4|)Ff`t{k5XRm1_Qfo08_g~DX
z_menVRBp!=`XZ&jmIJL?o`k!L;w0D(eUt>X`XjjaAWni>CRXU9B&bD#%sgH`+<V$G
zUrg8YBPLKNg&vpJH+G~P+Y%^}!^o~?3Ka7aTFCnD7Aa&cZy<*&H&(2WwRj+p9QlUO
z&G{puFS4SVTdMCWQ4(y2K1zc6jus_BEfbTQMcbej3G^Zyibl;!)k<oJy~qM`pj+F<
zQS5JpJ%;^!7IUJ%vhvXSQL@!Cyu=<OTP*^VpJtnuw};OKg(5LpUXq~hS*)P7{jjp2
zd51LCUg~GNSV3#~3?;m(7DY<-aKjL^78~fg>A<t8vayyGu@|{)s|Q+8yl%&{52G>h
z5c{)=xAIIOHYOb)FBa}^cZ6L#J;f+|8{}~c&*waQO2bz!r!;(JYDy!YV=k`5l!mXK
zn$qyqv!*n#cCDU4jKXUrKg_|=9`2LRoI~=JONIN&VifMH7q4)vU0LCnF{i6>+G01E
z&=-5T5)uQ+Zt)7wm0E{YE6a}En>g8P$M-H|uN`P{ve$Ae47FXzUW+;M`KNI<{5WmZ
z?<I+reE;W@tK%Qfwz!sv{9iIzI!vw~1CqoJ^iV$*B$K6jsO54L50b<V^iYdQ(H3~N
z3pdumgq+YV>0)lt7IbMXrM{ygbEWp*4t-0uzc^vp>-&F{?6urVv<0o(y%uvuTM%LU
zTI#h(v}Av73%2!tPEZkgs2>B8#18aO%UDLDj?hCbm$OLhKo7N;6m3DTJRjClvqImJ
z{1+#^t=obK+3Ux_YTRqD9c0;S8Ac at Q2-$17l|tXL-D@#tB<cwHYpK^F(UK0hE!fuo
zIZ;RGp?(ZV5<AdCEn^vpIzkV%T+Sk~13lDYQY7nsyKO<)^^9AL3;J8P1rf5>kAu~?
zb=m9tKQdQ3CaUFDqAh4$_FBvti8 at 05TI#h(v>N-{`adV?2tCw~0ZC#9dZ=YABT+}_
zp_a>8BzB;OT1<+zV81*k)KarT-;(?nC;MBs1rf5>kAu~CzrAq*%U;VcB3VbsUdyc%
z`j+ipi#a1vN624Gy%vd<bim_+ZT+7Ub%Y-3$ABcU13lC-mXW9<^ia#?ED}4=LoFsn
zvTk!X5v&(9x1GpdScbLZgRR?w2-)k$!471v@BheLtK)*!?OxyKIYC9pUrW74ThN*g
zxGmV$|D*L#KL#X;R&yZhp_Z|XL>=J|wOr03u>(ESVp6mPgYukEOU(*>OY&cw47P3y
zB4n>02dnX*y>S7{Udu4#oXA|OZ9(g@*Y|l&P!aOiQm at e#w59`Y3%2$DXg$=A0ZF2z
z9AN69ma&XP9pMkPT+Sk~13lDYl9P27v3_1l%?f=>@?TtSyN_ZOBYXWgK=dukUdu4t
z7R1P2%dHgpmSwNSoN&sBb;4SzRp?ujecScoRTd%pHa_3peu=BC_e;dcUdye7&$ljn
zE#`z%My!Wy<MZvU4_<A%F1E@dWZ%Z;TbI3-VT4mg$X?5>6#CY39oxMYbHe8%=6!3a
zR-tcA_HF0?S6PJY+xUEY>t9z}uYbkJUdye7&$ljnE#`z%M$B(*<MXY}bzWR;JI}ew
zB4ppj=UbP(mSKcbM#x^vtrYs!avj^f7IVVqBgXNyRIAXpCi}MYIjbx}_HBH=wfU@z
ztF7lVV`Q)8R>J37m%SEq<dje2kMO?Cx_myjzTZm{E&2Y>CqG)(wAVWqESW5w*RCG}
zlEe=5P|H~4tdhx6J=AhJi^LA}P>V^7iwW#RXfY-TeLM1>!bXSf*0$nguN?=wkiEA5
z$H`vHt<d*(A$u+6L|ZT(KD7D<^7LuUB--(PI5Ti^{Ql}p`M<pd$hgO>w)ZLtN)zPv
zBzB;r+JO?Uhg$w98j77cOD!fbXcn_<?0Iymu at m%+za39_bAENwQL$31-xMi+?O522
z__d=TQv6!pg(0vT@oTXsoxja1RZ#r2rL|9V{w*(4VfNZ<2zDd>R?Z(`{aW57oxgqS
z*J2Nyf3=>qc@;aMZz}Is&h04R$LYA`J5MErro^<ndq19?ygD{IgO!zl7bZy-+lz8Z
zp?xLPj&#XlsS;`h6UMrv(7qCCvA7tHQ<xVY=BEUFPxeSRbUT5ydO?bGk!p@lc+6kR
z!h(V)nH34wqr$~6TfJSPNVhE9#ACT0J#n*mG6iVCazMIm;XIZr60SkZO(rc12X^zA
zuE;N&3p%15W4rn(1xR>|S0r9@#v|Hoi}!qiH at u0Aylt!p{-0|TcN2ObUR>;LA>JHS
zn3s><ms~u`yoqg&%$u&~B5_$(q?ZPRmY8nYt$~Km at GU5&!Eh(0+f~es=bf-#MXgls
zr7s at f;cbtb;xnVe^*Y8)v12CPv=LXN$&tuuK}onrlo#uc<hWLM5yvcx2+F3&Im)%V
zku+qFplsy?SLRyTinJXu6Jchm-T?h$u}-(wb_8Wh+b-q$+K!-XY1^e-U)zy~J(O=B
zvbMY1YdeCnrEQmTeQifjwzTb1uCMKgt at f60)0^yzb#HrZM^Lu3?NY9<?Fh=2wq44#
zwLKh<=gWM1;<gL5B*RR__+uJk)NJME5F3C<5w^r1BSI}JU`rAy!j|}36G0gI&hvt8
zla2)VV?@}-&@m!xi9be!Z44bF!j|}36JdSpaiK=u*9F8yT<hm`&8EfoysocYK8 at ll
zi+LKwS5MstiMEnG3&~LKEgBoZdO0Llqz{1Riu5_TT#-Iblq=GwE^<YBb9$~w@8NZe
zj3cVKqA-V7VGhOF2n^gD!Z3$or)|F0`Te_-(>Ke>6woFAQY)4ohqFz-)osGl33IWl
zE7!`4R`?*z#Z}JlDmU2JRLt%-)Ajmc<<UT6&4s4XjxInGXP1}nFRsZ4YBveMW;Tt`
z!?pz4QG&6>ET6(`4b_Vhc9!vc8uQfYHacPwf16s8A$30-&8PXK(r8FAjdt{e4)gZ-
z)oZ<>v2u37;Q&T{q$;-Y7(rtfs=(N)tO^`fR8U2&__S&4LKU^x9IdCrKj#CZpW-yl
zY_Z79nFHBD=yycv#w at LD2By7*YOE%=mcud&_pu77DdK%e|GKc#vAvL(1ScfvFk)7=
zRzz7Owy>xg5ui1tyK&F{^ws6r at qZj|xlJ`*54HRWldK}K13l!s7EZsTvd3cHQWE5r
z{M-h!R?e|V>_AD#r0q-FDoMM0t6RR=4nU$!C2hO$TQOPcEL%p at ZuHP*M8!DEmJziZ
zCAAq*!-%!4ZQH1}HWQ0BYRlc^BK=0_VatdDRkxX0j#&?FMpTTmY#C9zQBs=`)#@Y9
zBK^1PN!y;!P)xSoM(sooZAMg#vuqhrt)1lI^eddDors#XKaNr)+R4r5jf|rdlkG*6
zBC!KK)ap>s6i>82)DD_m>Y)~sG|9?(i0HG_Qnf{*Re#vB?<R~Dp at -UiH$`FxdZ=YA
zBQ7HJP|M{k5<AdCEhe?o#!kA|Qg at C_oBC*E6@qd_tWLI!lXll4s4X>gQp<qanPYWQ
z%N=uMcH}3um_?_aOh*qN+P;XyAkvOLPS0Mw|GwxllG9gj-@n;zsoW5vz5bX%WG9-!
zShA;WwWeyvnIS}}rfNAZMwvlmCz?V=Lz=231T`t+<->i%_KRAkFbK4xq4Se>@852_
z0VPrc^;;+=(2fS2H4fW94E5BqAGIZs>Z#>{27%{QPc81Xd(WpIr=GJ=?mAj6Be+!B
zQ53t%>$4xvUT at b(&B$LO6|!YaF_qmYq?YZpe at 7~$mLIxQcB7D5tfDiwd;KV4Z$|;A
zr<dD>MwH;SL!v#w3)>i}mD=$UrIlLFhH>%CTB*hN`gY<ukmTR2Re9$JAukG${N8T6
zQ(--<Y8UO`3<0{COH_=jd_`){m9Nm+bCm};+v;X{&~x#D{k)zl+ma6dE@G~ws-0C9
zh`z{OF0Pc0k%()Xf~{UoTB$5Owk6}p-YHsl8v^ZU;G}`!ORNTJdw?L&js_ebu)W7n
zPc8dl{*P5ptwe1QcwY6?;$FnhVl`Y(+uSh<CJ;2*Q4+Yxn~USivn}_GYBo!!jJAoT
z9jYSVq~QSreP*YY*9f1F^_m7~?80l1O*{ECpei%KB9_Q%<v5#0yQ<o9(NqRlgetZU
zu(men$XpZJ^VWdZm;n}{s;vWTH>zqqz#?wz*gC-4dY4stl|GkTxvz>t0U2Nss at OWf
zcB6{cTd)XKZ5?2{QB^AeHX9Gecb*fK?!9m5PO|yz(xI{kI8}D|)Zgmln4msij(um>
z at Nn92?LE2H?P4La(0 at t~8snj<*0pkQ3q{QCKYEU^73raAQy>S=riJ-z{FIm9x5gq}
z(dVX>l}}`!P3SC2XfysA5t_(8o6wVIO*?}6?A~+dqffcg+ZxO|1`E$^gl9}TN(;}J
zbSA6Ye9kHKg2r;L5dT at 5Ka+=N^Tcd2j at Y5nd=5mi&nEOdN@%l#?DNX%t=+Q<jiZ>=
zW*YfKW$i(XBGHs}WfLH7r at B_}P?+}NLTARivVm~INAX`eQ(1e+t4Or2A~SATMX;c>
z<rAMchoU4XRZ{H{o+8n@lJcXwoRVxGY{Jdf!z^ZPv9^yf{&sYCe06>rx+x9I^i+$j
zH!Rz7o-<NywX;{b+8pEC64qa^)jG|mHLX*BnVvAMobfQ2BXwFkl0N~R=0jZT)L+Ir
zttB(IBD2kWG`{_i@80@`)RnDfQfMc{&);5MUwnV{pXaCg-owglVvi$Q5w$~BQYcbH
zOF`>usaCee5R@{s*PKcUpMaKX2i2tYppq1dv{XOGpB`TyHxg8m%~E%%9aNG+ks?|O
zDpyOjgG$O!s-;>EiD4@#d;(gkCBqB_$hT3A40aiJk!I=#lH+-m8>Y2iZeQCh`*)4#
zgy}Y=lgeU0#))kX8XFOt={6;{v`8~U{uwrmZG`~gZc6UT=3e_nYv0SCSM0|)v77hu
z=M{TCff<wHDOEjnW(wcbywKevX}<W0#@x(GWv>P at n8w;BLwmngv8Tyv^-(MmO=Sr?
zJDyw^C+ll>2FKBQ*q+1=^ia!K*xifQL#^JJMPdhfsKw-XK3uHw?IpecTH}SdKJ6yi
ztOi?cBw5Vv7emkfg}Pk1O=K;%zRx at lKDwCE7iGvc($~rwR6{eynfJOw&$}yCH6gXs
z+!m;;*Ih?2X10|+6SczFIE~;816WeuDQ88==}Md!&=dWVMeb<i%PV&Qu;I+a!H0-l
zytVSZO{1E?l?B3y(h36AN=G)0c!6qZ51X<I0@Z4XY#Q+b)gm^TdA0{WPxAtAwDvq(
zYoCFc^~3sR`m`d|$8`xJBf~;mWZAQyFDR=(9!&nlOw^of>UMu03k7pqt_tC3A&wTz
z>?CX_*bKUFS#|@@0G!^Ozq$D7{PHYsI9I+38Ni3XNX!@m(OXNm!|^mZXYPGO0O<C3
z{UQ6)e<goN{_-M8=zR?#BJ?dI9Z#UXI=g;#BYi8cpd;FbHkxf<8{_n;M$gqtrbthc
z7xHtn*>A)hPF`Q`LR_27^NIV@<(sSjC@`<<|7KqCb+fAZmP5T|H3(0m7`h+M6aIUu
z<K!<%XODyBX>%i>r%z*ikskYP5J*tW|0g?}`3mdXse<qA$vD*rp<K^Ql_P_v?<93U
zwn+ta*)Q36IG-zwG4f=yMM<5mM@p=ca?8xBOT$3Q?6x*SXb&j~6=OXNsW^nRAAz)A
z73ouy1`w*E3Z7zg06<mI#%SRws0N>ZPVYDCUku&ud)$CwD)72ke$05 at g}uOMRE7y4
z^*Q5uxp_1g^$9~DRZvbXlzorvYXk|P^yQYv<%5de10TLyfCwS<$prmpK6e#XC4mHZ
z^r3{ggff%_5<uxS4ve85p@*@291SxQxsN^$R}J6_WN=())WpSdR*R2}16+X&j@F{d
zIKUOiXgxrsHScT>i{nC9Afz=BL&$}$KuGH%hL8&#Amp>{5bo6BXWUp}`Gzu3YgSUt
zm#Rj;9vF!yPb!}WX7l;Yy~+dm8b0Rc%i&~ZCir|cA9IjLYlsB3$~2Le>VCN at 63Uww
zrkm<!$~MdOv_ut}7>>U;ckr$utSPPyJB1(uUZ%lu+*^#$h6o_^*%;iGr%Ee&?V?t#
z?1486R3QcfMMH;q7xYOr%4TMNC%#e*_JGtw4F)&G4Eh3Vl>M5T9pt=NzFOF?<~wvk
zS`XEFDz4`1oJ^lK#g37WVaQAcc}WL>9uNKZgIGfg2^6aIRM}4R^x&abAfNj|t*l0^
zUbncC&rZ<OGE+<tq(VxVAJ$-Fxiq`iUZo&NfDJF(0RO9Dun^8)t01LTMt9Qk5#*x+
zl}twRm3-{qPkH-#$Vc;m0F7D2K!BmZ!@5RmmL3#a*rx>Of7hr~;!3_i&BSx!thf+F
zz>xyrCg(wr07{>6v%A^tCNrGVi<E%^XuUe78fJ4B#%rAaET04+exvXP(R%rv&rQwd
z1H)TsE!ML`k>RgYLMb0ki|L};G#s>D)hf)gU+%{RA)DvPs^GOPV62kQ*4d0N_hw}d
zeB*lr2{@sT1sv7Qr{acza1bi63aD`$7lB%VRX~j+w+Pe<tO9D1RA1&<q7nwIfS#mv
z(fg8)0ayV&NgRXT0IYzXlrys0x}Z}bSOwH1Z#ilORsl81T8>(QRX~jjDR06gR0YH+
zr;Rw|BnVXjF-mD8_E}IuRX|L>G21xvZ$7R~$O;6=^ic#%$O;6=0ip<)kQE4^;OW4e
z%n7Lnp(-NocFZwm2r)ucM7%P)KK?cb4!LJl(4v7#(F&jn+ at e`Z(F&jnXwhubm3XO?
z8w6jkMS)d7jWR}{R$vuSqnr__6<7t-B<a&Q8-ASfma-D1NYDx-NMcz}58-@zw?He9
zAj#uMSfCY12$wLYaeNXeunMS!OO&BjU=>gcmncK6z$&0NJf{r31zLfG;SOaaEYJ!h
z40k9aVS!d4AzY$oj5-TEr&l%kLSiUGEj*_ZYT*)Ps1;aMg>bZ%p*K9I68DBXl##GN
zD at b9uLm3GRv;qm?Ip#`Ef#(Dl>wUdK;Sy!26<7tXg-ev7R$vuS8}3ks-U6*a!f=N&
z5*BC$5{5gJk+483kPx1;AD46XYvi0V)WUNrp%yMthFXDDRS4&tGW3S$RN~%nhcXft
zXay+@cPJxafmR?PJjWc_6y%&rLmS}|WvCTc1+Illl%ZB&6;K=QP=?+Dtw6$XhcXft
zXay36JCu>IKr4_Co->HcIfEKGrwq05oJy#LOO&BjU{w{uIj0Q0;W?GKH{79&gaukb
z3d0 at BNLZj1NU-N*WgTz at Rsl7;L at 8<oRsl7;L@8<oRspq;w5(sLz$%~?l9r)XU=>gc
zNy|_xunMS!q-EVD1y%vIkhBc70;_;pNLq$kfmJ{)BrWR&D6k5sg`{Pu6<7t-LeetS
z3akQZA!%9Trobwo7Lt~sR$vuS3rWjRE3gWvg`{OUTY*(TEhH^Nt-vav7Lt~sR$vuS
zlcY~$eGzc!R40R0AVCtxk+483kRZw9NLZj1NT8x7Fs&5Pkt47Qs8Q+&)C#NuYLqqt
zwF0YvT6oTQ_+V{F_wA#zKr4_C?%<N}4ZSST3M7O(#E`H+E093x7qe_^?mzU2py4VY
zN4aB=Yq$!?QQ{cn8m<CzDQ?UP3o>CmpJi_m3eDtkrSi3v%E+a-Wt?lcifUP{#dXk}
zj6-Xk1XdCC$LZKv!4A2igseaSolI6M*SmzQKmau=s}&P4Ap-<_YF!M+DfBz|vKH39
z&%G2_b=3UUNhxaMEnwT*!(30|xCXGwT*GM)t?sZw%!imGxdxu2*e1BDd_$!u#tE)E
z@;HSLZ)#{9Dn)W0*14}GCdVDlk);TOGGIV4h3Mm$2R>@}xw%C!Zj&b5l7UgJPP64}
z`J##%D6`Ryt41wt^=i~uRIf%%nhj9}CaYH?CaYH?Ce4Yg3QSh7Mod<(MogO1G!>Yv
zUX7S6uI9_L$mDQ5o-Yk=E`|$4udfn%ZVYk_R{=Q+9D`iLRX{G(a%b+}_DQJWDj*l)
zmLk`16_5*YOOb213dq;Drb4=2jQ~gmjE_U>{F<-tNFWtZqD|;ZiuJ>4W4N^sw+&l?
z2-*gSWK)xZuLUyztD_&!r`B<g0s;(LfrJ$OemI)P8~{g^GHeARLVDw-)9`eV4O at W-
zy0Yd at x5_?)+pqy5zQ%h52Uhtp)9 at IIVFE~f!NL{HBT8Y?_f^6QjXNRiL$eFu(})FH
zfp;{QheXIl6=($#Xe?Dv+to+H0<AzoOCL3z!rTC81rl0O773pe7H9<$TKZBF7H9<$
zT2Vu@zgFT=mFHN5xlIzqiUMvbNTH>-r0|ijKr4{Yii+9*Ej+4{6o#9`E2`RjmzLg=
zqF7PYNT8x- at i|I?R<H#sO4ZW|#OJgYXay3es7MkPXay36qD*uD|LnbKmmJ5DEvT=+
z=^qh8oznyGVacU7v_^fVP$-bq!q%vQNIgxzI=NL<lDRP>3ss;-^V{c|xkvaC;pUOy
zDUnYtc8dhk&F#8hH#6To>T2PLZUJG{J_g~4ZUJG{J_g~4ZUJFx-)O*55#IvJu+Rvq
zBEAKbVWSaLMSKe=Vq`oS-d_9L7j=H`32y;IY&3 at PgtvepCK|(d!dt+w8TnTTgU;FN
z0_4<JU)LUNV_U0db7`X95^P1zZ1Q<xue8YwDd{bMOzoQh`O;ee86KJd`O;eev44%R
z$WbmchA10DY752eQI6t}Ic=$!Doa^RiR%;>Qd^XGeKmF#sIZcDrk-mx&z`VMKqsxd
zWzWCP9O-d+H@$9Z26e%u<T`mGbv}2t+3K3B6bqEJPBj_A$am2?<(A+U>ZwQ-^>qzr
z32vdDn!AyDOK=PIy3X^}U_EIv)kRUX>=q!p<`ocurR_m<{TqR}vRl-|rYklKb7i*x
zvFWlwVsvda39>1Ofw;0;)WoKsXT>$a`?&pj+s5O<ENze&U0Z?J6vRMW*#KR2D^=6c
zV02?ICN|sh(Aj3oQEY|HmfXHv)5T}24TTDj;1=p<(~<plR-IxN*+OL=SIHt<s2sOz
z9Gwksg+{ou1h+3$ylG1HTQ$vib!8R1nK^2t2Igo>Zc*oaJhHb9>g<I@woo~Xt7MUY
z%DQ0(MR9!f%|FQ*ib|#E77!F(%Y5>v(GlGOf?`<>MBTH=j_4K;R5bIMbG1ECr{BnJ
zp`2R5S6=r{v60(CIn}s{awE5ea;h$UwXpb7d3fi?mfQk>s$2yK*=HfS1prmM$R=B-
zEx82%Rh+&z*o>k=ati>WsK_SQz?R$sfGXY$z?R$sz<fnGY(L)Dfa52{%qM!on|a>n
zbmL0R2XMnB^*&bXDy<8`<_ognk}8=1r*)l+`F3kqsgl`3srfQ$SgDc;D6LM?`KzPl
zEWNHK-gik|KC23guZWg9>nJaTLL<Ohwd4bXm|7MJsjVvt#RuoRkYUSmL<0=hL6F}!
zgm6T+fFRFr2;qnZAnN8`=EISSq3S@dE|>LX$56I9qbt6>7|K%zrN5lGO%}Xe+vX|A
z^1FlEVBz`F;-i2nTV1`iP at q}rjEjuY{ZgCK9+%w$gv_!jh%37V2pMKm5LY$;QfDN^
zci<YeocU5)NZhdOeDchU156`30)Y}6b<T&z>eM*`QFZ#mK$Y)?`L<FgXDK)3s}sZl
zA^wI}@tvWHboH}b3g3{V)w+UK0k~t(-^{G2cfU_nN19ge3I^0y3gvzHNzm^}Rsi^e
zQ~&Z1tL54I)o6*&B~2Fi&vbE}Kg-a=J$y)6rlaihayovfMDU@$(cR_wY>BTtE%MDJ
z=a^)V?r~%cAF9P~i{b56mO}vlef*HVp{D=x=MH^Tt#gle_By|N_}5zP^o6G+<^4`a
zP>v5irD^Ylwd)T=r2*^<#n)exN(AVJYoI?omB!G1sA)<2QCi`9qVl~o<y}!ZeQ7F*
zn5&>!5;6GTRFd|ItUZyMaZtPZ{!~)Y`v)P5!E^KYR#lR6SbMPS{7I at L?R$u1f`0lw
zRg(S};j)wNh0)$U7`6$;SDo%S#Qqwe!!iJEwD<P}a<1-f6SX5&hRV*L-AbfhXj%RQ
zSCaa@7f>H8J`JX=k6a}o_4i<-A)aWEyeputh(sghT_GKGr8*h%FnYnKyAs($L&e$K
z0TSpFpbULGfC7I4l=^;G$y)bd(8l)%A=3CeOHSl!rGFUGKb-vZ^9~~8(I^P8nCt>z
z6a?Telo_*a9oi3qp&j9oJ~5Ws#z!HF&~dx!TXjys;`6s_oZ`3AA8Y`8e`W{8zv}dZ
zHNf|3c7o6eBJfvg9FAJK*^5vUyPtL|EvZeYnDjf7!*GywKKYgebkzq=5Qqa)lKxSr
z(+lwh?f6n$lKQc%K213dWW(Ih=jxKm4r&DTAm=`Ddd1@@scrG?-J}`}qBTgI!VN_L
zv_L9Fupj&rGEf3Yq-YWaNTldW1Q_7lN>UTkWHC(8a-F6fOGkqC`&9L`@D(mRMn#Fy
zrx%>24;Pa}-3MXa*QvTEVcj!)qA|%}24UU9QKIgHPUkS>t3!O&Gp*!s)v)&K2|o3h
zM9fu~nAs*(`7o?}@>5#55dp%qED{%w(M5%oUneR at _Y_t>OPmEGbcL0}TGB{I#~0QP
zb4k;VxER(xSbRy-j$u<+`(l}DGGX0VGfpcx*5<<67s=`|;0voCj?&7Gl|Mmwo~9hb
zq_A>YTu6$H-Ei=tb%i9|`(fSJsk+Bu-Lp+%xnBfzt4}tkkrL`edE2Fv#`q{WoW?ga
zQ~No1Xm~(Ji$p2Bgjo3 at N$Y*EC4ab2Q#=SVt-eg1!o at wh{our1eZo3PJv#oddRmH0
z(vHqq(w;bL>4pqtc9d%0;ZoBFvXeMD>Kq0waR%+lq4q at t;5s!X4g>&R|4iZsqs1Wm
z(4O4O9r0{5WI8}dZ-5v=a<4RqAtd*yLlJ?#o1WCjm_Z61$Y7W_PJ(*G%}^WD8hTRc
zd!6u!30gi+QXW2ll+!2SlXPQn8uTq*l~2+R*2CKIk@+O$7;%J^V*@u;xnPcYo;IGj
z-y>@bnq!_1j*<ar1utap1dzB!zSp66AOIw{E{!OI`V$9~_XFZTtbUz1=R1n1Pi);6
z5%q&K;~&cEXS2k%mDR6tx;)8udlCJq#orV4&nNT5gH*kaI8#g39zGy9&A%)XEnf;d
z>s_et2EBH&3-!IA`tdH*_k-%!`7|*q&=4vVFzKApY?8X?)RzWPbUZ5^qAOz1$)a?O
zgRWE$rb<0)k`#ve9r!}1J(#Q=fPgLmh3VP>3J4QWn6P2$1VEf#FkQ(IAWLu&CMy{O
zR0$YFRgR}~6AcUXkPIss0YnK9L{u^acoHDkq^2AGf=41(!ogd%s$HOfF9C)PYZox!
zOn at QIx`zjewnYa!LbgQ+xDS(vKqosSgjM2Hzdu1o7y_UsPX*|T2-MoC2nSuM4%7_z
zKvy at h9cYv<(UcC+?MoO$R652%SHfVb)JIrT=^DrA+6hdzFX1p{JHa{VN;ulWdZ`vB
z3>wH0(fWxHurL8bTUa6nEKI<#EG!YHKNet^F4gjhFt9KI$Fi_Q99Wouqb;nTYGJ|{
zLR(lO1T0Lz&=!`60Sgl_EDKA->5l~%%fb?2U||A|WnqapurL8fTUg>L(f$z2kda<8
z5dsz_U}y_V#DIkf7?y=4;`GM?jAdboFt9KI$Fi_Q99Wouqb+PdHHHaedL6?OAz)zw
zhPJRo3|N?eVOdxrPJb-GSQeHD0}B&yEDKA-frSY;+QO3Obdd=W#$kyNurL8bTUa6n
zEKI<#EG!YHKNest3rmE7g$X#8g(c#^!UP;`VTY+POt`9~V^|^tEKI=A7M6$s3llIb
z3roc5j|CXZ!V+O%VFHe2VTm}fFabwdSe`hW=#PZSgtD+yh^~mCEG!k{pexlwQ<XR@
z?vI2~v8E~!0#peYnyN$$P$gh!suIU{{gE)d(^MrwfGPn)Q<aDTsss#8RpLOUKN7|%
znyN$yP$gh!suD3km4KnCO6+m_Bca39R3$=yDgi at Nm52eV1Po18V%O0h2|b6VDiH!y
z2^gBHL<~?RU@%qpBlTc)+HTeaSK-9fh at HS-gG0b!%65W-Z4Lp4Xd7c{k~lP_%iI!W
z=@76m0fXpD$AE<i7}~<r*Rc{UEb;&kUewzG3@l8*(H6D?99WouL$uAOIlfJq#@Ut7
z`%)0w0Y<kkfe>Lk06FMNAO%~g8);WU2VAg~hyk_)kb<p55U?eH5L>G?zPprWS`+NY
zhoToje4dPUa7aRWX at r_&Cn)fFp_8OW*$E6>UVy>tw3mayW$N+aLwI~=FVrv^<R<Yv
z-yzH^3NpJ%v#>*q at uDC%sUT>PFv#t$8U-M6l;l>S175+VFYA)Z7?wNYD9P=D8Fm<j
zn`NBrEA+5p6eP7(`f*=DO%fZWANQ5<Won!BMPH#d8K=jugJ_!oB(+TrqHRJoNo<pY
zXq!+?QbFQvlI|zHc$>hw68n^1yiL;mq!(|KbU*3E+GMbkjvmtoF?cabYO5U5gJ8iv
z1wOCpl4!+;^eR{sCDm6B=>(~SlJBHlXgVB4Np2T9s~SZ~4Pl2^1c{?0w+p>TCe;Nt
zmLA0V4g4iNiuD`#OL`dVH}IGAIM#3AFFR<L2L7^xc4^=*J7|{%{<4F1iTleg24Zo4
z*~LgK?k~F-ipBk97h|!wzwDx2;{LLWc8UATF4`sTFS}@$2L6&B$9fI?B|VPy8u&|k
z9P2gkm-IN+Yv3<CXqN{5vV(SM;4eF9mj?c_gLY})FFetojmMM3O|bn2UZb(5sTaWM
zYX^~Wriz at qs8<6&<#mi1z7v(mA%6rz9zUyCy^DG^hzz`RvWt2(!ouuh7xjw8q5&;#
zF;;qeHNfJyw}X0h8`!+YO0HKUC`^2JQLP5<#X)@sX4nV{GwoeetAWLHFS3JbHG<lW
zb9EaT{BE2}gxWz9ku`)nksY)Pc~KYuD{kF`+q8|fk at ye*Bjjlabc0jg9iFG2Y at l7J
z&@LzM)h7aU`w{|g)F&bwbR`5n(~x)$pil1&i6kWgfFuEdNlHWjNdf|slzM)<hh`8-
zN(2B&0s at nihyaoV1STo*$aB9ZoOot;O9TK(0s@nihyaoV1R`lL8qHEa)klF(GNv71
zbo&wrQMCh*gRTUk*}6%54y{ih5w=n>z?J}_*-8ZgTLQ at XDwQWZ3KgVjFirjZ25nb{
z)Kg32L(r4;`gXNR8x-^>LXe^u0-QYcMN%B)ildBXlhl`vfD?%(#M)vooF#scqCdgr
zd#H6ZYrDWfg#;k-lO0tEr{Dyj;d(OoG0o2CutJD1rQZ3TTdQy0U3GfFPsWkUj2UQ<
zI6~yj#86eJ?RNvy6>+HPcY|}#rO8vMK8CjBQ_nQD4Z#@NQenEh3md{Qw58%4bfx+j
z+6IY3?LNKT8mf+=EfogVCg2#_QgL8y0*;|A`L!x~us2RyDh#Ymz%jI?;=tMj9HMQy
zo7hI{91?B2f$8$Gj}Q*gwi}!SUT6*BShS@&DZSqug5lwSYMn$F&?ewmv?bzzHUY=b
zwu=!CpOKAIw+pDQh-K*81=c~A&NPPV#c^&jyuIGRm8Jd!{dWk6JBS?tVJs>jaje at B
z5(c9J65HPn9;xk5um>#>H{AgUNE1-l=5~Mr!UPmU*lhB7l6WAvKf#`QoV6VwfjR-o
zP`3jp at FzgAw~p6o^Pm0!x>kv|aVi4Bn*hQ7nF at iZCP1vO#)%7cS6w<v5n>7Y6R*dS
zeqqrD<Bs_}^$K3MzaI%+qaApBe}d^ph$xEsy8wX)3MgbzyFh{S2`J=zK$))w>q+Xw
zolek1INJpdZj%Z?nzmg4;YO(dWHXmIAnacW<3Vk0T%kl9Fed=n%q0SWIRVIKE^!m6
ze-&ByENnXw2h0gTHgkzUU`_y<uCCI$$-~Yl_>rb*>W08!XA)Mvx=I`w9d^cH?Kg?1
z18{pu&^}Gnjyr^s_QZ{n!_HNZnAvocxPd{A91iQyf0t&FSK@(yd<W&H3WT~P=ua*`
zwnT#Z$2WJ0AND%z>;+qwv?m+Sepvl9weWj~og-0wV(Irq{ps=SKq!1-(GNR^Vdbl<
z#OV-rHzn<fHh<XZO4`?n)0D$bPf~xEtiCU)Pwu7!i{C*vC1~G4Hx<^NkJEb+Ox%Kz
za<&8gvDNj}X0n4<zc2%h?1JwGM}(mv=WbvQy0Pl42YKqOy}vKaL1~7w0}Ql_078WA
z00e9aAT+a?Zf3*LRpRG&`};W38yd6_UpqkoV*(5@wi6g|CcqG9<K1v3EYcEZJ3#?w
z0t|7s6BuwNz)T4vZQQ+&uUdvpY_$sjx*Zm>;WYsyE;#LX=-j)AkhqSqkMBr_5$<+D
zlC&Z_CHG5hX6a<mY8L?Xgh{Xw2q3wcr5V<m5R#i&It_TY3zDSm%Gnq_d0I1HiA$9?
zcU*_W&k*m^S2}|&4GeOJWDIGH$P0(7UF;wCCAZ@h*PXy%g<qhII*ZXxaInTN;EZO2
zdFm(d`s9Pb#-C5E(}kCl#b`O6WRLD~7BnB=2xYz)-d<(-Y`MXIA3yxd!>strpF97R
z{XXm5 at 5$;1_i64yBV4ici3 at xOvi`w+qW(isKargDtmR%uG9Rc<EdHL at jpmd4#5GE~
z;}CA%S-+S133H4yf=dQ@zqd|Y3&J2nQa|b@>PPDa^;1mE^#)*KH`=EmWoRToL3Kws
z_`ItCL{W7|K={C`0QA%CGSM&S;}c=Vpg;9SqNsm8nJ1Q?ZXJZn5B-Vdr>(HCe%#qi
zT&p`0^{;R7NzD6Iz8R#B&Twl2ACL`t#?ElA#4q9ElEL_LI$zyQ*NLM|>MerR!EF}Y
zF4zrk(tvX`Tkj4Bh7fF?^*sM^R}~_IV<0^?TCQlQq(@AbSBvbu{^1_`QfeH9U-LiH
zD2awmcCz2)Kgl}y|A&A5-NT0w?dvNGvZ9<)Q*_()sZoyP_S*9=`Dg&Q4^vY}Bw$SE
zF$^uy9)ke7J)s&}APwOt0#N;Qcyk+~0`5ihSHGjPo&NhMMI at 2N(S3|02qYrJXu40~
zX|mX?zX<K1(%aWyzWki81pO+#z5exbBSkt+PS8G)wNrAU_C*~z6p5b{(RxiN)&#kG
zP+Y%j7Ob)18IE`BtD61L=5B`Ux3c!?7_qr_OueL at hLhXVkC~UGos-*Zr-{+sbTMAu
z at fRJ07H|dIBhnP95uzv99+BosjSxM-_K1d6jH}lh$@I#yDarPjhOQW<FWDZ`5EjGq
zCEH^TaDF=!jr71#iIfoCgMn at V_;izCg#6P67$nmkWH|Zh=OBm)t6I#$*(R(G7n4RH
zN~|Tw6hqZei<pWisg at 9kq0tu6G8V#?&5lmKK|Pd|g|bb1Aal4LhAS=B5@fMlHK>P@
zY6*ePz5#@iY6*dkElibmbS+~cY}w?r`mwp8HG|a#>ma<OUpEzX<w`sgRvJc at yM}nK
zTzfo@WZ`OYa+3D>RA3G2k)EVq)}Ej{zb*W>uDvNWsoeL{v=_V}Jx#wf-6H)dvn|Rm
zO&C>r`|^Wbksp<wreETR^r!Gc`6Yf-di(MZ7Gufok=kDOQVMfOY_IuVR86Vvbz>AH
z1sYCH(7u?6+9^3f`?ai{k`uJg at J3WP!Vf7qLHlqdYNzBB?YXQS$qCx8C%2+{PEXK3
z+sOJkJwgBEC#hkPnxK0jttnvEkfQrq)Q!}Ha?hm6G>kn(H|#+ooRX7DE^3Fdq-Y;3
zq~*~eB`1`9v5eRYr6=f at H#>%uoS=OXQP1fK`iCRQY>=9wI~R3Vx1O6XTk^_+&~woG
zL_*1FNkPy~$qCx8W$l!lpnbLx%TCGdwbPzbN1#Tfr|G|s0YIQV0**3?J)cT%ub-BR
z!lpy1?REbkX#OEZ at 4ckBda|#%pVF(~(l|z?w`T<T#bKCAPtZ>bIpOByWxFKp(u at Y$
zQ|2ABBbj<iPAK~lD|G@hl$@qr4#G14q{U&<a4iPQLZW>=cri505+^5Vr;bk4pVkwi
zfO0cvfuuUfJr)qs`Yb4rdt5Ehz7C7Ywa^HZ+FtiyD2<{hwY_dyMh_bgrMA~i>*rzJ
zl-gc*-aU|_GAAc!mt#J!+b3v05{r)11l`z>4Rf9&HAS~HuF3P1aZR2Nj%4kWo>KO~
zk+@<G{FF6wlwWLAN=_)fIHJsxMwIzln*UL1Lb=ysn<6zucd=Pky92VWUbkpIW(A{S
zYf^Gj$wlq!G+SBAWvAr!WuH&x(n&B*Zm%6PFG)Kmx7R++zu<#*;pnK++v{IP^sDst
z`X>?nD!sk_aYVmLZ?AuyPo;3c$tl{`m$Qku^+e~ISfo7)9X^Vnlp^g>=(te?r4(t8
z!gQ#27{g9s3AIOJN at 7TsP<te%C5B`PwMSxNhT^cl6lssbq{t|xNP83}L`Eq^+M^I1
zIX-V98yiWq#~?Cfj6$M422mkn6cX(**mS0w2B%tQTB<!38&DL>mTHg1W)#J;rP^Z=
zhuy=2h`o_S8b+ at pou;5tkVF~=u7=BQQ*(E``FNMwRz%PO?dw1-Dk5ls_6WrDWQC7R
z$ULz~dlVuff>MgKM<FsID5Xey6lUyxln*{nqO28S?a`Q)LQS}h9I^IjOivum5o?d8
zZLb%%y<S2b(1s<Ulp^ixq76$zDMi|&Shgo2Ib!Y6ETfXp9I^IjmQhJ)j#zs%ZF~K=
z?e)`bPeReQmx7`VOF}6{5*bsmK|-=@FQrbFQAucySo^wJMkS#+V(rni?Ma7KOOf^{
z+OQ;)QlveKHY^FH6lsrQ8I^?Oh_y$vj7mat#M+}-MkS#+V(rniVeQA`-hO)AlTftn
zrJ!iTl2A&KM8;IylaMUiOR1A(R1%sa*1m3*QAucySbH>Wd$Fk{hVUtKOKn&ZN-5I5
zF50jplv1QUie*$1k|Wk0%`z$p%@J#lW*L=)=7_aN)3$dQk9&vdaZf_gwwHpU4NF2P
zMG_fPaZf_BY%irwmQhJ)j#&G;Sw<zHIb!Y6l<noxtfmxckD?4qL@7nuqbS1?QA&~a
zD4GswEMAJVN6~ahD5Xey6itVOQi`-k(R4^7$Wo*|il#$CDMi|&XgVa6QlveKrb8O{
zlp^g>G#wI3DbgNA(;=ahBJEK$9a3*yinK at 3bVw+rNP84bhlEm!v`5i&NPSEx(jG<A
zA)%Ba?NKxx5=tr39);<+AE|Fygx9+rvG!<8OB~G+YmdhC#L*nF_Gm=W7;~w}h?hm$
zqYyO_lv1QU3Q-b4DMi|&XroeJR*u?U{Rf!0+dZ7zk78)r_EOQbQN_?4u{0*<(|jad
zNFuhCOnV$6Cx&BW+T#!{F&rb)9;e_Wwy{WMslI5uo$V<dVKXmyOTj5Pk?Lb)(s)~~
z at g<*db%<IPNkjQO88tXvQb at JOBK8X{;Y!(3?Xjo@;#js+dn~+cd^s3giYK#;Oft at m
zbaYbVKqeVyb|aWxQJ<T1oSOzXkZE6^+oG@%ah6azlGsEAQc@cgO2kI8gmzFTshJ9-
zq;}$F8aMDGmT6xjjUzUakx9l8o2aOBihUPll^V#%q}6BKAkHb7WSnUG04K?Zh!ZMn
zj5j5dUY`ay$^L^kC8Pb2l1Z%3n79x3;><0}B;&-}2X#*MA8-=whm=fGeFjYi3WZQQ
zQmly>Db<HmaU;fE2<@OwO^{OkC~wkEg-}wRSV^p%3ZZnQm@}z5C3=%8Zls+Gp`<#&
ztl|N$5K2diwG$)lz@IpviNRIXDY2bYaU<<i2qm$H#*VjBA(W03YbQoZZ6{US2z!Ol
z4(ikdDK+j5ct8~C*bAYgI<b;iI~79dNU^x5>XhtHG$f6*ld4l9Qr at JU3ZW$SSV^p%
z3ZZnQSUagY?Sj2nJE=M)BB8P4ajy_cVvm)?+NlsqM~bzRs?#pmi?x%gQz8-?JKj!(
zP!fBrB-T!aP&!hqom8E6!CtJLRGku$(Ac~HF&mF3(k>vTpRQ;UlSb84d^W&ACDC+L
zSW45nmZCdCZB|!C-A!F#t4-@#il*0<RW++?DVmN7Z)sZBQglbC&FadiyJ%OAtIg_a
ziKf<7t7=kLOEev|bi&B&jn<M1*WM9ov%2ogUqM?_8@5E#>smTtoZ(V59kq1AIBF at n
zBh-fNN{x}`uQ4Z8>FsN!$`>XuwfyLQ at xrLQC`|(GYrqJ33?bzeK0YlGJz|pb<}IIr
zkPx&$dzSe0gM^?3+9NPa(g6%D&>n$FkPx&$djuvyLeK*35txM73H^EMJ#;7tyEL<u
zg1{t52wEVKCFvwP)0leicP=3?ODPCUf`p(2(pVadMl<o-mN;{xWZL5p6)_wm(;kNi
ziQyQT_Bdobz`2p0`7<)@aWp3)j*)4Pqd5_Aj7)o+^_9pNQrqjk8%)Jd&8YPD`l&sq
zi_K)czFlpE;ONS=$D?)y9=_x*fLTJxNTb<Ae7s9zDY5ow1wV_ya3+0;#g%K1r;9y_
z;kk0{@yJiePGWejTzkABJ`eb#U?M6#Re$^gnhMAH<Y at 6AZ<CLjQge@4$3PlnI%4fB
zMUCA6%@J#lMorxS%@J#lW+;lDYFCAVSbH=>k%;DqwMR1)iD-^kdo;u3KpN6JV(rlk
zMIxFb)*j7JB%(QD?a>TH(FfeLO{N^?Hx!9zj#&G;8Hz+SN31;>F*$7(Crh#RXhcz|
zMxGFsV(rn0qEby5%@J#lW-%G_Ze6HUn=I9Y>t+$2f at V=9)y)yx1(VTHk0D))wnsHo
zMNuoF?NJS7QPhfPdsL2}li}@k>{^^B*dCE68#h7p1luDLU5yYu!S;x3jIqb0Eur>E
zY=AK&OQ<~(8(j>^5^9fRh?z}3Po&djzGQn$Ls1OVmu!z|$ckb5lI<~xvGI5<OzR4X
z_87#Fj8RCm#~?;zj6$M4#`<b3u3u7el6LX3<`wpQ+iNF==X3EoXerVjg=}RMiwTxc
zdn77s6v+~5k3@D8MY4q2BWYshtHF8_Tbe+Lv|M{UO-~fhm1~cuNs8jRa_#YKKBd8_
zE7u;+=1IbH<=W%fJV|)2Tzfp5CuvX3m1~b@^CaQ9a_#YKo+Lb1u07s#btUw>l$xMh
z++vv`H9`04N*aWr;3?O~r#I3W3`$KX`Bc=6)D+#)meX{a!uV`Dk~U{JxqZoz{Z24M
zPHwL~m&?w{N!q2dL;GDqn~rbpimipZZ^LnN`?6DZ$!1h~g8r#odP+{yE|wnZQ*3 at L
zMlecEDZ5<qB;BhkX*xBg<b;y1t|WVh_9S~p;iM@J6+UH-L&b~eM|u)FQqKhVl%8oU
z_DqzTP;#+n8YlHk`B>~dIJtevXR>xqZm*rjcB{=K_V}G6)*g*Ut_{!}vG!;*j%<MD
zh_y$fLazt8xCCHi+T&1D#BhvEdmN%AhGS&f;}9p)&1^Wjl0M9BOSQ)$UgB7`RC_Gq
zCXQuGwZ|fM#*H{Eq}pQ<JB1c``>T*@k45YhTEbYiRC}x`0SUu&mEK<eDxzPdx7WWW
z{o=Bg5=cal7DBiPDZ8C_5sp-P`x;EiA*D9v^!EB!5&bH?z5X@n7u#3~BqE4yObAJB
z9O3AW)7#fzHb$Q>w6RKWum9$bODKKQyc9`7Azz4~D3SIk)NhPd(fw~ntUVg_91YMM
zvG!=xD>OiJ#M+~cW`nu-*-S0a9$`MMJ-YdRHCm1*cq-O9u&J%T`Qxnf!M)%yl$um-
zX;BabPnp-DY@&8bZeR9AE;%5jCh3++4&^B&&nNfNiY6zwFZ-<D8%QfWD!sk_yx&_(
z`c-<8{!upqKmzR%C}ie(4^iw+9l7>+6f~RQxpM9CC~P*tbLHCO{dBvOyoHmKv`g1U
zp*`u+=wvRHeND;j%Z}_)**Uqrc3i2IR{S`*z4rAjmU8b``DP#v*&MO<Xm`!f9I^Ij
zxXm%XoX%Hw)3r1lb;R1E;dT)wHgPIlx%POY*}4&)E7u<HZavR&IVN5~Pf$Somxs^4
z&eZTJ+t3}RXIb|3^M?<~8mFV|9yfo`!7tVLiZ6^U2D424J^%B6Wxvn<@-WN(l6{3w
zD%^dA!Bz%+=yj(U>g8}r{0e<fAd_Vs^&dT0qa<s*rN(L5Ur7e))>ji~>$=+TW2x->
zi_>@K$CvLvoV<T^dU<w!`5&L&esBOFE$JT<K+gvlZ-;<Er&*Hms*r!lM}yf6D18@2
zCzMrjdC{qY-sxQH-ShOSgpgj98rDlnyFC<l-&L!AFSS;PKRJH$#vxv1kb#bXb5O-O
z+7jkSM%e?(VHIU>OO!ns<(^qPs^TDFOC;ooU=eXIYM{1d?mj}@J#p9d+?iVTep~kL
z1^On7&H4)gd7jR{m)yAy!f9ca=F89did1^O&A$g!a#~pBdby$4*7f|Dehw(4BthRq
z>GS+|jh{<>6*sHKH;Bs^&lXhb9iZ5gZZFEMvDr!}UeKVQZ?~z8yJuSkx!nzjJqGna
zFkj<7#|umJb6FAB5-BO%0+^q%J}&^#&jEdu6xN5?)U&(kV!XVgFQE_}UdV9;0vI$W
zGg`uEm?L>;Ues{~0%$bTYJ!Ftl8e^!B9AK&K%;q96Es5<hB at mEsO)+1$CC))87^5*
z6EaIcFFF}ESt0;v=!^gwx=KJVczF^5K*MMRa4;TowCQ=#hJOzzN7|(jS&%$cI=$GU
z62eNSlGfqmr=OKp&(DWHACxL9!T06I<98?DI-?v?BmylaI|70t31~W-sS0_4hJP=s
z<VG%}Nh%T8H1%GHnJow7sTlycN-3A56}_w~s2552_dr3B7E!4R+V|oG@*yFtR4nLX
zx#EKMy{LfSLn@IZl@ndN(&)K8em5E`R#(^MODO0+G#j3?=bPnv5^OihCaJ~B!?Vo|
z&CyqzHG*ZIeVo=K%3lLSJ2FCe^a0r6X$c|*;K+mlC}L2-J(s7S10|;<QQw>udM<}t
zb3x-=R!JrF{0$28+hMqj;UXg2w)&7ItPdr*r^(^ACA=3VG^CTJ8C&ZVW)!58=15!X
z6y`%9X8XExrZAtBymj3<ldN;=x|2?!?t{gc*z`j7aJmT@<-)#T<_)oz96lQBTH0q^
zJyrKx>VkZjIP~S@&U;=bGR&vKw7PywAh`H&G1(0Y^aypi-VqA)2q?47Zt4O(0?Kg2
zC|*BI?P7vrrQ57)7$}lp@?F8?63q4FmT|m6098krE7w(rGzs;YZFU7jngpQ9Pvkb<
zXk(afwsso<V?lG>bc}^CwH{vY2IE at 7n9)Qty&f}rOWO;Is0Xc+q=P_@&>}F3ouELE
zfHGLn%3yk3phrMiEO%vJP$b}}oq!$G#@UMW+aH at VwBe8rLyCmj3`aXb8QR}R at ar<n
zcY|SX4Eq?E!xM<NXfe!xmR9cT0x~TI1b2ea@$U$RmIA^s*Sms&A^~Q$*->qvC=5e;
z4IOG6Z}o?NF9)BM&cAjy%04aXnE-ETFpf7lR0&%G-3v%KjHG&HZ_<e0Lvu#X5~c{N
zI7E;)XT+~%soez{TJ;H9&kv-^8=C)cJ71N$DpXgNCw>sL-$VVrH at +tI_uJ^d4+GG%
z>NL38_r{9+dx_!l!D*sO9vAL=<27W<LoLQ>f=Vp4P$9h$6Rn(u%1Dbd!A3(yno{k1
z0gQeQ>k}qIvm-^K=X0~8VDXSaDBf~OTXFlIYt8U;S-gr_y?OusgR{~~;xdMcult^3
zQNEwI#1R85DZJ+3w+kp}3fGF(FNrzNx9R7yMy at ealBiGhb^D%+Bb(u<qEYPDkW~}E
zl}?dj=v3XycI6a%66jPt<90g5PH-`~M)Mqa0S&(fS_diN#u@NXr@1o7hm~O^no8z{
zLHrsjndDqppC)Bq0K~7i>uuMqgE1`c9+0UYcrlTF4iuS^!UWKAHtF+XBK;iFC&t+P
zh}C%^5x<7C9Z7}DDPA9V0Wlwh!gY=<%`kI0_5a%_6Z-!=9~^C~4mqUK4UT9HdYkeg
zhp3QS!VB{tFW3~hb3)r2`sF-)I`Belelxw=<e|2eMo{^hW<>{HFjV?N%caO8RCrAd
za_9vaRv6YNwa9v~y*~T!f0aOLkV7xlfY)GyAW5q4fc1IdCSMPN`j8~)o3TDWvaG}9
zLsD4Zd@`qVK!;vrp`QcxLP=qL7~Zo!FSO9l0ezGd);G<+EXV{8z3{@n2Q+e8SmnA<
z={p^e0vb6>SmR`SjhrQ{alE}o&JxzR&Zq2oUTC17gO#2Njz`ByW)t2?IrPFqkrdRs
zzNDPtveL;Bt^3G}6h%@%H=QPtb<-h{LbvDSMN&XF9UPH$bH(`?KUnOM=kg{opdSL4
zGyf4lFFbMeO9U?nn8W}AvlBsJ5=sOwESSUq0&^5WU?PS**gW#WM3EHG&I}=E#B#K5
zFJdq|NDAm?ZbaQ&d9B+E9Ys<=H?tz@ri!D}C$p(ID5nH86C=nc6QUJ+UP^o*C7_t-
z5EWCEmEsqki|UksV&Xzn%r-FH=mUW-JRh}E0{}$HOy!qp(L&(-h3BelDoRBFgsmk8
zLPS^~p0`@50T7}pS`#9qdw4*#@SIhr1e6m^$QP!FviCZCHoL}4ks>HYs;qcL3*j$3
z4<*D^XqZanbuQx8L`J36^G#~ZpjK)}Nh>vy((1XTN(fLu4JT=(icVIeE^**_Wswxn
zOe|2&FuPP;t-IUtJhMm(C?_&x<y7lZx#yWhT0l8*A}i;r-;eUa=Ls>>?RZ{krw2fo
z9<3rmkqzW|Cex(T13*kw6o at IYfjkej(*r<ETNH??S&e#3TaCAZcyn#TT@ho-kQ||_
zQ0}>`wy2PDZBc at 9rl3&nd2W#=Q6rYzvKU2;=frk;0EFpL{0p_PEJgu&UTvobfS9T%
zkYzCp<lkno(*r;dp*w8kW<rgan$@UJ7Ukb$DbfM}Oc}C9ElMf(yqu{*?tpTpNmQ<_
zMk)6^yGRQtXKF;{Ty;gB0`NTAP7i=EJz7PCA{)r_YRjTTs-i$li4Ej=xSbxT5z`h0
zVro_+Iw08XdY)dS1pt^bWR1{ODEGWvTU6+Xx3(xjIa5$5_dL5u3zVFx5lhZhSL87@
z{w)zZJpjV=XcZBPY#^`ywk%4dDhkAu*g&3#+v$NCF>O&Gre-zTCyVNNo?fH{0GKjl
zjnGvn_q<$N)P6v at wkSb4Q&1@PJiAB>C}(QKl5^D+d5Rj(qwVwn2-BlgL at 2U>Jg>Ga
zN~9_Z#FW at To`>7%ff_MwQ6Q#fHKN&6x953!krn`8%8)femsalI?a&rwuIspiG;L9W
za;BhA?s;~R7AQGWBbJ=2uE=9*`kqJI=>ZU?N2`cXWCM9#ZCR8^RTPLRv4K1fx6=bP
zV%nlWOwDR^NEX%iJiSN at 05E098lkID?s>VksKbDAZBc at 9rl3&nd3KQ&P|nndCFiOu
z@)R|mN89NE5T-|~h)`q$d0uT<lt@(+h$*pv{Db#)dZ0#3TNH??S>-(Z-}5}ZNDBZk
zWyl(#t5EKFxw5ESp6f}<nSw&O=h;PCpyW)ASaMx;9+mrtAB(hra!pHg!jdcHo)>Fc
z#8LPv7nJL&E9IUS7ioc#Ygz>5y6QZ%-1EG+NDC;}v<L%ZU3I10^WY*apd86q4$1}P
zy6Q@~=e0#zK)I$xP_C=a<0JnFUy&A2u4xfQce?6Ix#yupT0ps`MNqD*u9SNoTBHS(
zYgz>5y6W7?`v>}pw19F=i!emdRaeTr{<cU9DA%+I%5~M1a?eAHw19F=i=bRroqH<(
z;9rpzP_Aha`dM9drQGw-A}yd?(;_I>RaeSA4=vIH$~7&5a<2OQh~Jo}@r{2L%}x)1
zFg;pDq*t<l{9|QIlTHr+F;!6 at ro;yFyw^?-05NS*AfjfBRav5~auiLc1ptUL$|}=U
zD);(XqKeW2%84dfIZ;q5_q@1B3n(XQWaZjo_#3KBjpxaBdH{sz!Sbg68P=NJqC$#+
zyna_(6l)0pX^V;g5hV_g=izpG0ElQSRD>IysF_dm5uN+*`Uk+u!~g`5#+k$Vi4mjU
z>yOLCfPUgCqMwK;_50_;%EW+vq9~%jpn$iQ{Nr6^VnBbvPh{VXilFp+9dp4?H=w`Z
zN6=qTp!9oQT_y(f7yJnNiGtO7N;jjs{%NoxEufv)p{!x!AqAf&qvDaD!y32N$pVCy
z2%`|oHcE|8%P7<gQ553ZMyYXV8HE}nih>6?pA81j_&8_x(CfM9gHiY3axe&xg}g|-
zl+JZ(^*3}Rtfl%J;c!?{`kVIZXE))7E=r%E{zg!LTNJ+yJCr%begV*m{sKVazW|uE
zVW<F*TA%>9Ndb`BfSX`k*uU4^X!{>a_CJo>|M;11fL7`y{)^Hpc3P>I*w^Yc`K{E)
zxE~j>$3K9nxF1WgXB>|`P_MXer#{9#m7ck8r#{9#l|Dgzl>5T&kG$!J=3cUUygwF;
z`*_w&bKgpRlzWt3k<&_jlzWsuL4Ab#f$4Pp^Sey`K<srXHAX)pX#TxXVpD`j3#d9M
zj#?r_8bQ?|2_e!Bc~U#%4cdVbTDJouMA|{sp)E_Q4#Fq}oq(!C5<;XM(9&fv^5z_c
zwF=P){tyjEjG)`0B|@YfR2>vcEfM1WP)4Pe2$6O`ODD7gY$@6fjL^Cr7$MRQst#@2
zLDeDZ4+-s{>L4Qwo|%D>xA>*~K^hqiF5^QZM$qlh5+TwKst&3hS|UXK!HkevB1HWm
zr5*AH?T}MTw{8bUh_nME=%Lc~EU7xk)~f2zwxv}aWCYk!8JE08ox&f){vkeGWdz+0
zEfFH^pz5GlYKai{hcYg;M2P!CLOY<P8}tum-mrZg7$MRQuvXNeZ9Aws$kxgTdiKz^
z4l;s at t+Qvd@p!_UJ4fCkr1FXx0#JDIqUa`AiMR@8;HG>_wwneAC2_c$UDOVy(6Dw4
zms&f9YgD`0%`V#RrfKaMF12=uKC^M7+THA;b_hjH+m7H;YsYX6YDe+UYCCUPzVy2W
z-BF|3X}F?xNpOv7=lES)xTb!G?uy7vtzA>Uqqx6|wrgma8ZNbVP5qAg{vFh=so!b1
z)Y`@Uj{Ssoc>Fud>};2zcLgHuWvs4t*DI_w=0$i-jSK6qm*3)nvv6mOTw<SyhtpbV
z&BI!0w{*_?`2N*ul@cf{ZNtum$NG2^TB-F`W>rc+Ep3WQYI*Njsr6PHRZ2iD?Se{b
zxvIR`{lZ&PQ7HknOoFh@%~e%uy*Zak38-Zf1hrgMrPdo*s+53QCP7fkRppbub$6xb
zp`*A=LgbY1T&eXs5+)&}mPruQa#fXD&vjLbM1r7}N#N75b(f{*p at X+ff^agHt4eBn
zb=RbWYMBH<Emu{k^}I}_NF)eqiG;yuG@}nw_3Ca$b7DX_QNiiqm_uwB{hr5_i2?n@
zNkl(Y-stySuS^W+M|w=Z=I4eUN9uJvA1o6C`ZYf{!aGTt0<GVh)Rl<={hA+1zotOz
z_q?)94CvSVNcz`TiW$!_ at pGxO@@i$}F;qwk7Brah`}w_&*TLQ)p#<^nHBp|hN@_R$
zK<D~)wV{UfuRA*e0Ss!~Qb`z#+7M#+jw%CrzH3qgDAdF%dlX_coA667J^yol8idnj
z7#0Zw6|^kq>!(~D&!HWG093&nD+y!iLQf2q=iH7!086u{l!UR!52z^(mgne>Kmd!J
zrBo8e8sg(XKQecovvWc~H>X8(s_#YlH=sFZ at as-Wukc|pYS1xD4QMFVtNV^#ksc^J
zwRa&Bt^&1YA;mzxvs>u_AZqMFMHq;hvXCMm|6a769sr`2E>whp40U{VwpaJvJf&sS
z2>==DMv?J%p@?hb4VMkIK_Ek&1Z1euHS)aQP7l<`P$vNy>IO9S?fGBIv(p1WhPr_;
z4mQ+iAkXjZ^Z<~dP69I2Xdut|?eqYUp-uua)bNSnUeD|D?eqYUp)U3wkhVJ2M&1a(
zP&blJCl@Nheq^Z8HS!{ZogS!>p-!q1Q8Tq-oqw0wP7eSPb%ly>jfk2;ip<;pcAlLc
z03xd^RD^+unnH?!yvSgu2Y`sWLPZ$JqK1v3??nbXJpg1;7jal!90gQ2C{S%ESzVzb
zTqBDb1>{8rJ3UY%i#nl3h8i>c at ISui%LD)og|PvTu`mnNixj?00MuAw4Af9&fqGHH
zmkEFxYGa^8-FPy*y)N$l^!)F$xe at _DqSmMhn+=g><jCjz``WHV0FFpCYQk_tmyu&Q
zZ-U`U1mK8Hqb3YTR85OFJbQayG%=|G7$Q++4?_?=7K9f^Olkmvh>JlGB^HDiK}>1@
zg2;+N7%FCy&l5WC-}ArC;)w*n3}vjS32z3`8)F#qSR{aG7>pnqq70%JLOhWGq9HVb
zNR*AoYi84n8#*a~KrAAo%wD0{8(t7=ND62swnWWDf!6Hb2iHjf&BThRd3`nJMLYj1
zF7$h;v&q`aco`-J%IM}+&;PCq{k|QDaEps5p3nJ;SkJ#5UZj;^-a-#pqO3v<pnO!u
zEdT2-WH%}`06?ar1i}zhMhn6lDVWp%1O%cGWGfbg=h-GT071qStA(awz8b72JlFR>
z+~NoXfHYl7Nt7`Q%kyVVni2?LY2IR3nj8zu^KeHXfTanHVc8V%u+hI!?g#|1Yz~Ei
zqfL>*^16OUAb at 3aC}7zXDJ-w=cLV}hHirV1O%ZMS^!%@#I06AIn?qp>$fihPd7}YG
zAb at 3aC}7zXDJ(BgI06AIn?nI>y1HWKyf`r(4MsPUfNJCkJM2_#Ao$-Wkrhh&20-Is
z(SbK)P#Q01%h8YFatb#@r#G}2-)o`vM%a&^PTOjoiduQ^#J^OpDVQ!khZvX&dmFRq
zh<6(NZ>!*U^Zhut6QwNSrbp@>Q|g6HS>at+VXjN)U&hDpp%PLSQ6ZObJB30C$2WKM
zHJ+Y-oqsI(4`m9Mky5#}x7I1N^?0hw=|y8zPV7dQF`C=rlu;-vQdL>o=#|Q=qR62)
zt1F8eGWf9+NybxE)~%IFUNl}^@jSzSu>ijZoRV?~l&-FniF*Bus86y`pz-K`y8;R$
zeU#*GdyRLpMh@}*s|>oig%FRj2qAu~LVOFgQiva`5Z^+p6yo!-ipKtDhUoWzAyHD;
zkY<HKuivEK0}3fAtdK at HtIec%Y^mqJ31O!P0B8VIs0ahmu&t2d;Og}!c6tDaMs<aX
zFc6KS3Mm5e?`qrW0U#P?6)M6&RO0m@R})wNPIZ|WfS|f?=CFRE-styYahVv<PmL1M
zPed5~Ui>T*1Nw=gh<>7Ax|t0}SM&kM-jNsktmFU&aikT<EZHdDsG4}v$pI8%DvCmM
z*eKq}+DZ<f5MNOgqGW6_<~g~Q96%w)v;vti8>MFMt&;;N#8?!CD6vsIcej!QD8yJ4
zWl9ocUH*|)P6%k`v at k!bQl~egUQ<FqCua)l<gC1`Qu*?bpj73GXypm{)>?%b_+43l
zKjsKU<xJs{PRaJUoxC{12?0(yEv$1@>hvQEB?NSGrm)U6WmWC8g;JF(qE)riwpyij
zD(mmZJfZ$~lol at OY>a-7+sTV?oDkrY)51D$?iiFlsM&krg|s5A)LdDye);kE-O0Dk
zSFVdpA|%<Wg7o4Wa&uY<>CTOc<gjuI!=shi#H>3$T%-p;C{7n5VIb<e3Mr7+uRBm&
zqz8Z~R2L#)APUBX6a#sI&rS~jQM4{pgn>r0!JNN))%VXDb4ozB$`#f+pDwu6UTDG3
z^Fe4y0f~ab!Tt6M2ls-)>4H{}`kgI{D6Af#YAsYEQ at E6ioE)a#@nRHy4m1o>L~W{o
z+o%&tm*b1BTs$w@<)J2~4B_I<`aS-HZolJ4I!Xvsm@|cS;=|c%T8-#;yfDWJ0iB#C
z>Kt{IQZJApBT~Xzkr-A>K`b9Fc}IhKroMl?+7SqVP#7zfgs~`&m12bDpSN}d0$3Eu
zN+n?|3RR^TW7Wj6QXqgu!K{=CWBqiyWDEBXT#u)rl`P63>Z40v{jKy#7rrL*Ez7q?
zj&S*qx at Gw&M_3=88ln}Vez%B<_yOMl`TDu)?cIKvgu|-VxAY$FD&Guv_|ork(7~^G
z;#U0{P-}~X)!+H*IR@d^n0i|ztR82=$CuOj>TbHG!B-y_2cLhPP0{b=`Q^vc<5!nw
zZ$Er at _VF}S2`hgX1$PiI^0P_eD5YV}PcL3xo__z~{Nnf`gyU!k1C3^D4~Qd|20D53
zF$&~p2m{@%=lPFrm3W$|k-q!*_WTdAI=MP(upa*PcMl)_%R@BC`E0p)ny)6K>D6?U
zEmx!Ec#`2k2Kvv{?P9c<E*JT;42|^gAz31Xa3kO$Wy4~8zQG|YmVGpW+$OunjRSO`
zNLdVTuOON)9zXoc!z{}&ULM_Kk6uqFv+?C})wwh(t|y!95sN;CWR{V9mW>AaB<uVe
z|GApK8_56QFApCSIUiKB^+MScE^-)P{)?|-9a2ER2Dt(~59ZUzF0{s;UKNbxwfVE(
z|32$v|N5_hMh?a8A}sls<kpkT?Rt?NzW5zG<cw|!<98}Xmhm~$-|4?HkG+2 at 6Wunf
z$6*Mf!r}tDHRy{Y2F2eLs1oWDgc0iQ6+(Bm6c@xu9d%ji2O23+_P>_Jtk$8w%Q_q$
zGVo|Ho88kbhqA7IH9AIa&zAElqS}Gg9ob at BXsf<P8~ReQ&WehX25v?!T-grY9&4K~
zKj$l@%WmsNR!0p at 7DH`K|MeYZQ)`B at d33u6T&`*UWkJvG2dV9<Hdy;|9<|-BvbTvZ
z=W*NZszw<5a!0OZsuslq^NwM5E2zqV=aacBS3%w9+G0rW%I&+TFH~h0OWjnZsn@l$
zHg(rk!)-zBR<vLlHf!6nJ^)49lk2y>qVpMLTY79MOT^(jM`+KbK-<L{`+2r1kEp^b
zuI_HNloS-SM-T%#I$;d23rsT*ZP#@qbLp&X%F5W`R7R$fOXs^qm`157j7QctCHDi|
z7DZLKBKen`;)<zEU4XZE*cwI|dOn?tFm)6jsF19S+wE!Q^QkT^GkB<k8W+oHOVvNn
zjoPv`%aDi?k*uME{>+fX2K}XM-8~f=27K^9rLiEHu_L&zs<5PUwU!(?q${TicJB+4
zQ7J*!d7F<o+VF%=hbvRbRk=}wlBJRm{Mb%+U+XSS(ACYMpsj9gd->ofpk0T;b|qJ#
zIfr&yb>~>%mR-jHOZ&~VU)$%E&PlCX7<@<dbO5MYC-cr-kIhYe<fv7yXkRajex=f;
zZUEcsslup5G1OHxypCVG#Ctv64dnwJUBga9Ia`{tJ5JftfxlQCx1y_V-J*1QM5A^s
zEU{`cHEyFl-5nI$IW<P$QPfqg&HFJ{8QfU6r^mOvfnZ7LU{_X1HzMtA(7mssSzdr!
zkXwqWRw-8aEy1owWk-*hXrn-nTU9$Jc;Q}0`AM-eSwm6RYbb5_ytinV)-%bD3cI|m
zVT*Z;cl3mUDy3Npn<ceFomtj<7ImjIG-8r454Bi-p=!ODT-!x+MU+bohPe_6mx>%+
zm8xu0j+z6$j-b-G4Ak<jpfV8%-m4h_rK&ci^18ArT#~Gsj2PK!m#3;nvT8<RWGlVi
zp6)(wRhTrAm40teN4(o%rL@%cZfTXR=8*MEYhp`5mofp8HKk>`i-4^tVGOrxU9PrX
z53qDmiFFye+Vk_-Ooj83hk`K9SK*|q!&bi5-9VYILP at u)JJYof5j5-OBZs0IJ>_+@
z;5-`&){Sq7vyHOgL=TOWr|4)>YE-Sxf_!Dg@)$QVbo<JbNHibl(FoJ#`aHf3Y_O*r
z`cRUkQ%%OohS}>YyJw}v)_^VU#%64sl)Cu|9$VB6(AZqCMQ?OBuG-lpq4&ZRVs3}t
zzRLi1l1r6yJLdP@;D}9ABd0uHao=~D!q%LTqqm=mXm;q8&k%oy1GdXMkJCf1n1+8P
zj&;GcUeMv{AGz{<9WJR2iW6v7VP3egwXfHRNSY60*`j`zriaoHrEU_3vTR|ul6xJ~
z2-I76!k!)M8HUxxYPB_Psqc2YM%gzks>^i++ufcX%W0qJTQ*tTL$?+8+%CS~H&#(x
z^0vkIymIuca&QD3*e2KA^K7K2!Y9$K9xfQzme)P-TBm0kzj&a-F3f at 3LjAsJq2gHt
zTl~=VsqUUJSbTWVDafHqVpq at 0sN4{>y`X#O64>20WrnEj2;C#Mdffw4UWn>tJ2vX>
zkz2LyfoT?q?%UNma!s#$=v0edP%Lf3^A(i6bXjOUv_)UIT6<Qk(x0g;wZ3p|qI+aB
zz@McyqOLvQfl8|YxkJ_q*GalBY_f8PtQTIxS`iSRGIq#%;Wexk1R?5>^}=mfyhdl2
z)g}usYoWi#prYu9^yq`lMSVBiwl2Ju<%(O*jOD(3 at OffeSkD_<clRyQl(<bCUaxYs
zADB?2wcF(NydiV<(5j}=ZWGw+dX0T(`Y^5CCb8G`8{EVTE$$H6bG7g3l^P<lI2&Ub
zY0r;!dQFbR%a^2V`MyWI6?j*<Bj~zcPcPY$V)G5b!m4|HmvNYbu@wEqQ%AYiV_9*?
zJR;y^a9QbF2B0pbI>N5s^etOdx9%Nb*K_(-oKwQZO?OjQ*MWLgua5 at hQ}8yxp38XO
z3VA5Hx(@2dyTtb`<1OSJSK4!_?^|)Qkav8^>%ZVEWmEBYN}aN}whLQ!WOX^Vm}_<Q
z1TtT%{f2V<P2q$7vc(Ea5o)xp<!iMrrL+`t5&E0zPpBDGnze=`FHV#QdU~Xnc0&l%
za6Ur)T(?|BDiHM22j(SAe+Yq^TBYfXIJ3+xf|Ct+4Y<s!YD`Y%Nvj@&rIoi+x{{`*
zR?_aIZR=T0|4@Znx)W#_lV{dCYSOhlOUSe3LuGGtf6x;0f`{H9geF_ab<+L|W##&g
zOX16Ir`6XTtiD-O2o>?ZvDpxdx_$clYAB*#RDep`z{8shU0Mxs^e9gCqY0c?n0Wp2
zp?1~c%q?=%x at mRdu58S;fh{KP#Je&hO~GDY^#yeJ#xu~0Iq&JYCY^EeWGlwJ*H`^6
zWPMYn&cZ8$@?bif<mokLUzS%5F6i7*DO;sUm8UgLCK|aaaB8gnphj?Utg9D_>9Ad7
z5kYxB3(AWK+So{AY!N}lA3o_PE+S|@AeHe&1m&!(w8<iZDQ<KTLE8a}0a1Ao!4yJX
zL{Kq`3M(xl^op|>BxiTXl|=;8O8n9 at JeLEszldOnZ?uSD_;0v~U`TDUh at gCtNQf*V
z^k1lOK%xy65lkb*7ZLi}aY-`=#|DcChQ-(-f+<O(MFe9NjTRBCax_^)FmyLsL@<rt
zWD!BHN>U5eE+V+Y>#mN&B;Lg(Rco?cS#B_<jmfq>ip7V%5wj7rbrA0E8ApYv?Jw2k
z22(qT_U!`r%MJU+_8 at 9c0;|gnrU4;pPXN1><p!r(4g;0t2B%u~#IIXfZZHlQU2d=$
zh%7f4%fW2lA<JKGII_u#EH@bEh%PtSyo$>WT`OWjt4&s~<C%+Ivm+Zsnq>mjg$YBe
zo_^bQSY4Pfj;Y0MTdXcjSoAhon6P+L;<imz7A6i%fYXJs?XtQsQK_nJo7IJhN>v at o
z{e=mA){7{wU6^pA1P-M0M1{m at VPZ}1rrYgQS;#PU(r6*W3jUFW4C8`L7BY-9DCZX-
z?NWO?3jIA33K}kC7=x)<$ndA%MtHTJ(#ssh;Goy{=-xAJ-(bzdRI=%shp8uMiLQBA
zakp5LuouaDd*0;mz!*y*?|5lt&BGW=A@8_pWzEBwdVI~p1Xq%cu6dYMfb@~Q@^`x0
z5*gVmzF1Hm*(;)0FgCJRO-!Ql_MoyfRv91JD>7MWlaakCZggaCxQdSKO(Eowy>d4y
ztUR(;9VN at zW>*>6n^qD>_J;UIBYVSt!;!tIe$B}K$XgT9n>k!Lypm|eoXSR`iXtQ#
znFH+UjRX>HFb6Q at Z7>HgZP9oRVEB&B0Zd66%>j)4G at 1ig<!CYoFmyMX0~j-DG6(3Z
z2uUqeI|p!A&Aa+o3W;O1Y{%;A$lf?AL~Vbmj_ggDA?gfP{gM5FDKA9rQB-wgZ<+<7
z_6VvvvNs+JQG4{%t&HrQYS|;F>d4+iwdly+W*{=MH}()4+3Q7P)mo8}y)pUd$lm5P
zGO{;bS{d29 at dx|oJZ|K&sv)v%UDffraiT`!b&Iqn<8_OTCgXLhno8WZw(5AjQdQgH
zs^j%aRc))o7cZO{^`73qBO)7(*G*M1{>H66EAr!$5RPtKl`I<x!o^pD%E4)6Y;P>3
z+1TFj7#Z6eCu}mdH`0y9_9hrK9NQb?su|n+19sE+4F>F{<V^?crtnP$>{d7}2GsI^
z-B?Q@@3?7Yz-}y{khgn+US+^;Y&||;H^$g#z+T;j&}Ve$@;_TW?IrLUY;_Z&rwXQ?
zmvDuvyAb-Q5Z;Y&C98W7`n;cddqQnyZ~@3 at +?|b{sx5Thx=P7KJyB(1^y-5vTG_MF
z8)3MwHu>piSJrIQ>ZLlpvj*A4#FOPy9!?ovC_91hY~u@?iBq9jS8e(Ex}w>T>&>$2
z_tc!j#Xav3#GXC`VP62}O6wDreQ$QE+?u2}H+1cKwOK3i+8s7|ceTlWPqn<-8>}1U
zQh9Z-XjtCrRu^&2wNQ4dTjx-zg^%2-vzRQR%)@PyEp`vhwpg(ctWa>LU!6K7YhoZ{
z0EMLLB=Dkzk#y?v*V?Pi!TmOzMQ0#YB(wP|?CA5&U}f*cz3X1>b{_Bl*GSjjvL@;7
z9!!{2>)P(=5x0HqUps2CFU+M^PGyz8zgdP+)ZOO4R}EAwa2^EERcKn?ZViWjJH}Nw
za^4lFqg?eTrV1hR--QwAL4)&#fmf!&?6p}?;}({o8d_VFKC=i<<7igOp*l*=b?SzG
zQz%#c{p`q&70NaX2{k~WV=PuUQCt=xssT_!OG3o~Ez#|$$e15l5>C|8yN`MIz>-kC
zYN<m_B@sw05!IWz6a>2(;tS!Uq_7gz`bVlN^y05>F4HP*uie+}LXYdZqLpz=|46Y+
zTGhSXvILcZOaDmqVx-oStwh$o4)yc^wOfSBz@@Lx)AC!@u54xK(mzs7j;EPj$;!y3
zf22YM-f4Cv&A`QNndPcJ#yP_PY87y;o4v0O;(`!;zmdI!NVbJkCxiEcxge^CAaX4k
zJ-fzhz?KY=YRMca8>2_GEg_=Q7E;DcLaN^NM|hMsSFJ(s7U7wEmoz@^N|xc at m2ShD
zJ}XOa at mm$~SUXe|!NdBNjK|ucG6p=8uVjR=RMkKaRI}g{171~Y3{;uY)G{S!l)!AN
zQA`nbR1QR at T&Y)tE2q{n#WB3)XIsPxaC>@N9pOt~KC&CGutHT4Tm`fBDDTxGdaw$S
zxh><w!99HspnTp-k7f8Qa%u8=dXW!OYo#jGS3r5a!PIxQa5H!G)Yv--#g3fD!A*a<
z=|{#?a3MAP+RT<sMc0B-iW-{yo_+=ehuH at BDATjq?AdHQ)sJT=ii+VE{mn8a`s=Ty
z4$7d5I@~m<gEf=;wNye+W{ZZni8ln_BA|Bo^|XZQgv*wYD^ZP8D!}{$d6()I3qIJp
z at ZeP$)Xl|uYQ$fucd3r7r~`Xfqz=DA@6t;zws*xUp^Wj@<XvhwT($&xSGW>Y?@~jm
z*4|}?DJEpb77xm<>uwhvmwKtJ><xu3&Xbh-O}jVLNB_XE>I@}EHAAs~Tsq2dPITOu
z<L)(a%S?y<ap_QNcZGG_NY-KIeE+y~sIk4K<3^;TZruA17CZF4wjw%PmqTj2#q2u#
z!<xr|JD`=LN9~B=AI(7A?t3OWOzqhIAB~W*d*QjK96|UFG!4e=$<99-A!P at X$HyPm
zve!Ru3@N)9CL|I={u>NX_3|V-8D$}I4Eb*`MAb{N1tGy0Qk at N{MaZ4bhU)i_%)VGT
z8`{y5pFMTaXFO;$HlTGpX>eL+7r$uPOE;&o%U)hL&-f+FuGgFk-bIJ3n-u(_Wmo$c
zy6i#U;dQCH5&SP%_Pw&N9K;R2Zn*u67QQriF1&2<wPWL7vh@0;T9}QZUbOkzf$T3@
z`qJnX_j2jYHl!J3{i3BWS7Y<I+1Cycf6>yHJ2hPTh~3wX=YG-Bmy5`Xd)ab+ZJn&X
z_yVt0+=ohE9Vw}HXgyM@?K%44^<aBcqhCJbP%|F1-kxl_8>-)DDd1Y~BsRvgXTYeQ
zykDmF*Xy<=8sl004(Pm*@v4@fZ2Fh6gfj49u|Qiwc=IE;mDZT4($^WT^{!WAJbQ6S
zTSBCI^*w7-$Fhb`g(ZaXs+ORJ;jJy9F0}uB7jx_=qhF4N+bh%BcJA~Gmb~mxspN8h
zS~qk01xsE!7;_%#jo6Xv=1sp~$;*Xp=3Fd!UElZ1m3-d|GU6gZ-JIzcEV|oM%9dU`
zWBLWl?#9|*{ldQ;8ud#D<%meM_Fusoy<K*F=?i7YVkr$7q_|!?SNi2_M!%|Als#ha
zzpn07zjjfSJ!0>5^Q2#p_p(D}n+dLoRYydslWIL8GH2==Ei~A6uCL79g79a9sGZ|X
zw!e)gOsX9m)$tWLvQ2KeaN^*oZmPhM?ME%+yW4_I>!bRV0w>tkJO-(Av8FiXDZqI1
z)OkZwm~vr at VC2@R8w)mtDJNoF8?i&E8 at M%vDIJk(Bf`{;vKqqZ)8}v<tOmw>r*25p
z6sK$)#*tg6cKp&5sB9ipA(6QHDP*&y8U4m}!JO<pwIhS3H7aKcSh$KcQEfNg6sR27
zGf<?B5(0vLz?(Zrs*&7A2_ZqhI#>V&+o;-`DVH)`QRps>+1yl}ioU22HlfN5$MwxL
zERAk~^p>|3)cTcuMWMK!V6FK4>PoG~|Mp?sqST=aDrj at Xr#qeqelyp-o}%f}Pg2vj
z71d)0%#m}6NA-Xtp`Msw3DtFLC8{qb3H1yiOE?#Jl-H1i{;+JQQs{KjE2VFm{lH^+
zt3obO!OtaA0qhGoX4qAbrsC(Y@=$<TcP%7U4>hbj6JUlug`}crSa~DB3|<OJ73+rf
z0|8a%Q~<lGvHn&CYOF3z5k(fU^jBRv{rER(>`7K?tT!7_V^6YD<NdP6MzUICm2Fow
z)?eG2EH>*e<($x~vWr#UgV3NA#-wgdQp7~C(p2f|sIz79)m>Ik0|-k-#|6j~Hl$Q>
z|8L3Zs0X=g{mO)JbF$hNDm&Uj-$X7OxY`)1L at +-~)M<^7Z)2oKYW*viLEdTumj2Yk
zaIsvdHxH~f(Y)$8J&e@^09E5cKzrp(J$1qwR6PrU(izpwOqNicc_E=$KtwYjsu$K0
z`WV)5sIKy`3K~-LAJm{%OX?*zNGkJY3Dvn4Xez=E2McA3ETKl4g@hVA!tG3P^boO-
z&_V0kmT&^SKAlW0YbkM=({{3O>a7P<8b}|v8tTsya#{I%0_sl=N&BjEfvl=}jp@)&
zT65=j5C8h`AwC7RnT|5NqV%wQHoki>yu{YT5?^?JG+Hk5O?JPT;9H}Y(?z}*-d;gE
zUp#*J7wB at GcDd@9kp*eF#;Z?{So$$rD`hES9jKtc_&ThyiLb%C6RPXc*Yg(KoPDOA
z#ZlDowA(G;&*9SXs7LIl^m#Apr!)=~-om24>N4q at y3|uyvW@(jnx8cJyjYIikQY5K
zS$=kCQ5NI!V!cC9(M=^0dC^~7K+UbH*3+UtDFM+tU$zoN`}(;t9=Q3^CXSk+r?rIT
zR)R;&)^dmbnj1dPZmF%gGEg^VZw{iCAf~v1Xx?gaL1O06&{qdL at zsIks|cTD2BmrH
z%i;8nhN>N<ag!sA(w~i_ina6<h9^n!)DhL+G{&`bUlMWEl~i$#?zkJ#3S0m3@cGx-
z8KT$vcC?u;7g;`AZt`atMdKpueO^w-D(>C)_AXy9*Ym-KqTJ at PqxcAhzb6=1aLn*R
zBY_}9>gcHc^5 at QfWxrQ(kpB3uS?B(W|9NbOV5uzhdfp=siNb1GirR8IWg+oOLH at t8
zB-#I)J<{^c%Gf;^*o4tv8*%o)tA<lZs{}QKh3Kj+ib&amG`=1O*a{bL=yEmu1-Ysz
z$}i59wh0UuF0ZDO+4%BmVTL2*iRI7vpUIbK98tUQ@uW-`4ySvjyC)q^S}18cpLcsg
z;!!Bg>KR-x);J7hqtt^?qBp5F74ViNOv3W&3XK`k=Zw$XQdX9mES>&Gmras2C~?*0
zgCP0&U?Qc3%AOBq;iUC-u+I4)7vO at e=0B at v>Wt3e9C2NB6OLJJZl?WE8rnHnjCoCS
zb_lS+zmymFhn`Gn*Td;1XwQ|EK$FkEFkz)g8Y>T`n0(%abd&HU#Myl?VRLymTzB^`
z!D>Y2NRmNK at cHCP5GSv`bw|ZMo3HRex#{Lokv~{-$5)%OSGYwb&rvW1 at kg7LmuVgZ
zny<UTJYj8p%JcBAzbl7BIt)_;sR_gO&r%qMoM~Jy4Et$T>p4jrG=)Sv3_BTZhjtQJ
zqaB7TsdgB45^WoE5^TS95-MTXO|_ at VmtK<n?wFTk`>~T`hhZnd4Z~iN6Nde?5ch5v
z_Hwyl*h_T6u%8x$3s=n!!;U&H3_EFF7<ST}FsxG=L|_)F3B!(VKMcEx&W4PW<b+{2
z#S6o3qVxWSlVpcsC&3QGPJ$gC-GuruTqom)VMnGW3_Iz57}kkibo^ESS`%dvduyUB
z&1LKqA<$}3inVoSs!Y;~hY@+pj-7F0Z8mN1#%*h*>WXE-*kdd!zb?4t-&UfP-Sy>w
zOl=7j0`ec&eqw1b0=8?`2^_{W9Euv86-jP+({)n$<l-OJCI?xU6I7k6zF4WX=Z;po
z=aK(S21Y~xf=}tp5tr3*s;)7#<-4sa$Xm`(aoI{XrQGUIb-6?F!z-XJTYY|==(((2
z1SL^**&3PJ>X-Q|E~_;d0pH<#fr`sk1Vjy<%ler;m-Ul9m(|H0*G>Pb>Rj)#4seaj
z>U7U#f7QQk(TVcbQ!|fb(U21;hMi7Sln;AkO*W<6 at u(W9pfTvO)#ulVjz_x6m4xq+
zwKBFxmI7sd&m(IDTz{$xcph0JAZl<tvYOfP$ZE3Vk!5m_bvZ$iQs<GSX5BLG(t_Tx
zA~W<n^1n?dI&9vFvglSW8;i55QM^vH21dzwE*Dd7Oh&hTeSV$jxvZ^RNmO07M#gnn
zEl}pKxNJqhcQ{|5;<6P1QG@5QerC^Q{bbK&b+Vy(t3N4H>Rr|Wu5_ZMeRwXbbNxDh
zt?5K**A2_r_@*vSqNr`sa+l>V*;llO`qh){D{PVCKg?~G at e+9Lrs<PVnx;kP<y}^1
zrmHh@0%T3^O`dM&QfE_8B5dJ*mHm~Hbulrd<&vuZIz^??uC>8Se^tx2y12FJ)gqHv
zsMM4u6`az`vik)e>VngMy at J>5*r5mo&(w7|6{F3?x`J~LWU;C$PIQwBx!}ctAVvDK
z1xn9`RM}*|;yv`bZFXHovYE+39WL^=f>9KGtcd=kHmjXeO1wp0=pi<@QFMP)*=;wf
zhTEwc*{a|<S)mD)BX81Ez^s#5tLwHLn~Eja4GW@aEWw^FsQJ4p&MjyUR)06sP&kM3
z-To81po+XFS=afM!AhsPM?qnbJtJahcXE~$va^ycJ6Q{wy{x*5+NO%b8FVI1S50}%
zI(i(9P6P3Iv*HZH(PMr3ha!kRoTX0YfDt+gq8>MN@{ClT`y+K`P3KZa0*Q}6wu#O*
za<ZvISjfho=_t$awCh{YY_hoC++1!3!`bA|-GgG6yHC-r!M}PW7yQ@LE+s$h+QFab
z)u0}|w~Kswy_k%%(aiu~m$BV)lVOa64fw)A`7F!tpj)%#)B>Xa#nt2}aj{%IolQPZ
zX4%>Kai)&t+^#43Ku!?~_>`fxWBuEFIli4ua=q=}$#AS^Hr;Gylc)Gn^>jeTtC%E8
zpmJU2)1T>BrjDa9dhHO!A9N62KgrzsE2>ooNPpfxAeD>TxeA)O26_RF%hhB(Sd4Sd
z((63Qrucwgo=^CPy}bjHpct3yLcj~wlk2M~>OooFeR_L&esO$pdj14V3^t`4C;aLB
z<LNh)@+C*6Ld9RQx5wXKo_{z!IXixH35h5C!>9ApkMuYA9eP2O1Tlvo;MHj1$@*$A
zDzzi^>UJ^uw3u#4D_O&D%s<!T;d6Y6Vs<;8JU74Y_D>!BbGX0%8~*RXp7US&4gdV6
z+d1s_I|seqLFYG}Zohxn`AxRJ+hWvfyG2v1v+OrNjOL$*KMqIrQoo6&hw}Z(f4AFT
zx!zM8le(H-KfBpk$*F-4_S|+q)OOJ6;Okr6uGjtteV9bn*;xq$MgPs)AF=LxKIfgO
zX1`tIXgHmloNRDR;yQnZsFIy5S6|lC>l>U$Jb9e;&}Qi3I~~L~{JYQp-s6Ao^S==Y
z@%tg=e7&Abvh(HD=5DZ_U>tJ07_<H-IHWn!x^X{bI=tPW>luE at UM`2(chgypB0L)2
z at gM$gD&G``F9y#>%lYGMu*ojUUmg<5#mzL&R_o>UdN9xM$16h3HR|uOFUwmTR9zq#
zkEiH at 7%ZD^GQ{%d%XNmXW_tC7^x!uXaI(%eH<Juube?C+EB?zj?>=SUOcsd$v+Tp|
z5QWL!Oh+iiBpU#le#vjR2Be3whid-2Y%)dqI{Q3X=fpHvL?IrbRw(BhT?p~d!wI^p
zFhf64%08>Dt*O))(VxL@&{g3N(1|L6#aT9-WViX`>UQ=d1J_i@@6Im1egEkqJAU`4
z?7QQSACKQ%{ONZP-rOv2HyQeDrD{s&UQjbMAUeOz7cfG(-=2Ov`4(A at U!J`=yZ94T
z;q}?YyVLXY?DhMP*>U#a_~XUd$)`8RAF~giK7M$Aeu_^29PL8nfKE~pU=%$!8U^+;
zo@@p%0afikp%rtKZ8pws2A?Nr&Cz7~86_LQbXQcaLUlkdAr5BC#WhzF!p3NRM;}>Q
zEHS;hTTeGA<C1kbZAjT|1K#hVjR%V#XW;yN1B=^aPjNo+YIBpl#)TvdG+r+A&2m9K
zcGl^2yPc=qK6%ck^J6{!`R()y=602Re{uTm{P^<Z{kzv^-&}tC@VEGJihC&j?{v8N
z0`$!XqxCWeJtPG>Cg2K(m`67#^%5pYjmQ<q2lGj`z`ydsGL*AZUEoVA3{9SHrjYse
z_)Yfc+rfIwetJBFn+((e>NkTgll5a1_`_^6fbR9=iX4OqA~iaCoPWtTleuyAk0gf4
z#w2??Slq&Es8Pqu(d``f!BmJ*4VF(xi>gsU3ppWJfq}ib{Py^dr<X5J4JY=mIF8+U
z`0%$C`B&f*R#}%xCp~!3t;>ieIKSu~)MeC30mS2%=XIIzGs;*Cb^Pkp_qAE at dnnJF
ze(z&l9{SzQb57i0n0Sd2ynplQ;`9=3diwGBjaAIBOg*b_k5B5U;e<dn-+p=%$V3U@
zO#NP6MWL<VlQLa?d-jdxK*m@&C#MEl@YUHL>oGYYfC;y)D<*z+o5L!{**gsB>oUFN
zlmO8A>Gv0PndtWr)SLJ3KUmFe%D at Q$po?!mo*uvYa8YY#Wnv)n$I~~b$1u9{KfODt
zE3KU#P;uVxopjIYGOLt8wwLeU1NvQUb&Iq>!@vGehxYmdXsrz{uRmPEB<k}}N;um`
zOydGzn9U(Aob~)aKi0NC3PVZZj30%ZoEFIX-PyZW@4q{JRaeg<t=bkel|813te36)
z9i+m`YC`sRXRi?FF$y{P_SDbKeSjlS-!dOQp1wLexj20#DymA6Hn&J;C&wtq<@wqF
z^m`sF1=T;mH+j9RuYy^vl=`e%_nR|}qk_mqY7LPZppfv|z)P*kZ{dUO3qOwf$qydv
z*Vmm2P^Z8u0Vf9)oSk2O_YwWo%j1(j)Yrn6p#IfuJ~o)QZ$Ei?i=S%(CWJ2$fG<Cw
zr~GjIO>NWH$~@@8oNLfuoxc3^O&vZb)O*g^OT=Ek!sI$C;lTsnb13aqD3eO4X5s?8
zIsN158?SgK;lYCgzfz~)pS-=S%ViQUj&uI$d%Vz6))~fEA3vR3oV|Zn=UsIo4}3kO
z<MQ?C#mTpqbynslKX?Ea^@?)x{^RN8nIGKruP~3V#-m=pH~gwD+pE*_laFT~s0to|
zoZm`@o>$Yse7P8B(Dnw?1WY+G$i{>kBleGz&(B_FkKUX<{;ISe9+F{BRsL{6<2d|)
znila`k9NzHljApUI;JFr3e@8JQpV&irxw0q>Iclkqex}t+Fxkp^@>(U{||3sLW|?V
z63ai6e!UD}_Ii8&H(U8t^``Z|!^6n>Z?C_1uy@!!=wO|&+v^|n{<;49_pln({)6@C
z=5J>N+qZwecX;^E_WwJ#zgqtP8<@fN?Z0=>>Hf3*f0_3GJXm9Yb(8PT5VmjsgT4Mg
z_y7JL&Ho!K{%ij)+g}ZVcVGt1+P~XBJUqbvsQ*9Q>;2RJe<kgoemY?5_V0B&*e?F(
z{{P>>0^<H(w7-rEE#g75_V4W<b`A~?yO<~Rdi$OJKimKB(EJVJzu*3w>14~ZA=Lf{
z-nk#^{70|T-}_CsXT^Wa1@|!j`{((Ozr6)K|N3D at o66V=znKi^>;s)w!`5;>!a)h_
z8}l}KzM71tS2*;bcYATx0td|U<@*23vx~FSY{Fv)oLk6A8y`I2pKzpOkeh5HTK1yD
zXmrG3fb)D`u;Y7%Lkf8|!a1Df9B25(YHxYUntV9-kP6O^n9_5xp(wu{{xBJBiY<I~
ziUZ4Tly!`!KTyW-Q2{EwKG%Vg6{i(g^;akFKm6(J-8WwqJL&TQHvY#`97EVF@xUqX
zW&@w5(m0ktnyTj*RC(RwG~E|3UOc7qGUil^J{&`DmK8??F3Tl1EL?(e>y$uEl3B>(
zO}~>5mslyLRlEmSy~EkYA=()Q#<_{2A?ciBH5Zm+k?V+Z%?J0{$%pLhRrWu!ZuY37
zPE0It0Jc8k`5%z8bAQyK%(!SVALKt0COvz3@*$_QKG0Q{_rv>-7ng63NkL8i<zn_F
zTP@cc)<P6PfA*5iY&F0Epb46sn|Lz7fe5RL|HiMtl}ntOnZwI>$8S$j)~~+DitYz2
z#TF~1r2uxO-q9v23)H0J=mu at qptw|5K8T8n@)6H0r=u!3`@{!`tE!Rp_|4fj?{w45
zVN&pm>jj;XAhyKpSinZxqtFi?91^lsSK{_j=h?GEZXTxSHI4zH*{6%EC0pk00%uqC
zkzdOWo{;C{eCp at w3rfBoe95!PW>n7}p8hN=Utxw5i|SQU@#aZ5D<=lC_N1(w7|e>d
zn!>1 at 7|gmSW#z<R)_o}}CkC_PR#dpaoLFY%W<D<sj=~S#_{Dk7(#!SfG91U at h{!QF
zdxUWESea{GBfmrRD2q@zA)!-s8L-hp-gvRx(48WuB<ft7i>zGa5p*D^oP1b3uEW20
ze}OF!s{~}~e8Q=F at O1bEr?uE)vK2iIiNjr$kWwlr3P}oZx`|FD!QrO!+qva*Dxy&M
ze#NKH&>^Acz!Ag^2bHo?bTabm?A`l|Qxuw>WruIgL8v~J#mBGI2__Vsj%xD}r|c0<
znK=iyaMBO)ae~I0pc`GGU8oXtNKWOxzsFN7$2h%ne(~sWaZU<(D4VVSQT}9vPINMU
zG8j&O#0ytX_+Oy?2^|1?a?LC~(f_6(g#+VXKX@=6qCa?oZhG<r=g#@hI4J%z<X8Cj
zdP0|q?w>t-M&+aobR>U8r{2dnX1Sc}GJLHHm_L4!O|GAD2${^N8@^fI(ce_fD8DKs
zlt3}{Ayj1Q4D at ldb$J4j#~f%PWjG*z4Vf`@tPgYzp`?S`A<X?#YM3$L(Kqoglkyj2
z>}8KOHwePxr`NOPa4 at 6FJRp9QiUJA*C=E2GLBZBI?MA;S4fG at a&Z7bPophjZx)jQn
zNTwVNsUnxorxc-lr7IL#sDYqnw!E9H`9)PE at UcBIm+Yt8CGH9^oN7dfUayz8E6`S0
zKlc}pR-}Nsjo#zzk(T}U-z($h{K`{)Pu0LlSjY+*m}u_INW*M7!b#Mz>fO*wQN|pn
zR!QLNBf4*cK0f~$e$0l0|H2>hpBXh%R<9-!WZiVI70Fu3dh*jPhEY85(}m_iCxtI?
z$!$P|VM|5bZx_>_ZgEC)u*QYBVl;F0d^{Q6UgJGe95MaB)Kb>d*>pG_KGkOnZ~mPN
zLzWID#4t{it~bp6-SZ_nMm!3K##v|i`uEx*o at BS{-#f-Y1wmf;iB_Vrff4*lroq;t
zvp+}Hr-dEql9B>N)$fb4Q$LT6m<HHbcx589M_L`+VZ6CvrMK(nIbsZrqey`^2zV(<
z!nZzfWS7{bMBD?p(k()NrL(Pw at Q5)gnoX~7m$&&0hn~NF@Q51<I=Dqh7{`XO)tmj<
zGWh=@TgLD6oYnpLcKsw@<426=$O5=594izn%DB`Ip9eFv7V*ksM&7;VW2;cd5}f&-
zGs5NQL@)JRSGOBn6e2IA!RGB^Go4XXq?6Gc`_ReIRE3O~&MS{5Yn&D4R$y>2FnOjT
zk%~PT4;(43QlF^8094T>Cglrx8Hz}#2uDxK)8k_di<TH&-Vn#L>5p`hd79&uVpSY>
zY^P$riODO9pbySZ-<+KM_O~hoK3Y*#vaHC+iJeC*Sxx9ZD#CiH>i7 at 8{jL77M%VEl
zw5|sa(EHR1bQM at wpjT5GQpP<C)&a_%Wr2PL|3il{!vE|pg*z1LNOIkcWd9E;_uv8e
zxTEvwbT<EvtiJ3dkOB#s`Zxn|J<y<e%u#(3caizy2LSLo#_p32{trj5%YO!=(QNr7
z!>tAW|IR%QXyc+3T>nY;AbXPadz_{7n2Os(+s)L|Mrfq%5Zbb%ur?~0TQ(GOj<VQg
zqswNbt>253tzH|-;%L)l>-Sq}!-WM$8~)B^+iRr_*GC*}_&aOc-%49f{)%aqSJTdk
z(uPmw#M-n6`ygKEA2n83ZE%L)DqH{b5b20~y*>m>3-Jy0<O9!p$WW~VHF`41Nrj<e
z7&@7+aHXPZ?I$0222`(vlNu@Exlp|lPHLotXGQf&IH{2mo*&gK;iN`Nc&1dZgp(R6
z;W<;i5>9HQ1dmZ1^O{Pvi8-lO3EKN5jo8!$RO&o&bG3Y_o=4Nv{a#HGEVIRQh)cof
zH*xj$ik`>D at DcY<v)6CVzE}4o-1zt&W`~<MZ;vl<O7Gn_7vG*g=s$7)ulL0KA5vhr
z#fh%!5)zr at -+uM+p9sG+1KaQa&?4 at 38vye9|6c!~v+u9}AJG2qKiB{N_ST`+|7+IS
zG4^(EgwnzxeJTSh=rlm1A?gKf8}NMif4hZuy!X&z;a%O(`}Fac&o7(v@lO2og=kG|
zhySQ=HGVKl-JkegCr_G=F|j_uA_-kGJpD*>whtfA{&@E0^c!5{$aYu=vr3k|!|DW<
zz}~7miRjd5`b4Ip$IX1`9?<I6<{(q^LCAG!j!MF6Jp{WzWK*TpVI_-KDXkoxYzg`G
z-882cBra~SIHgy_Xo(%G6nC^(t)>lQJ&OSOPj~VUef#ABUa@$HH#K(hPj%GCRK29l
z2)%1^UA%U|>om(X_UCB!iJWfd&l!s|-g+<L4l5H_4;ot&TupQ(J4Qq5)(((yy$<6P
zTHinut!}<x`;HcE$75a$tJx+hGhe=W{|)Zu?Nk2Q^1Am(&6~>fnw_Hh<Nl<8wwri#
zRID`hpFP97E|sEl&5J7)lu<1Mg=(tB`F5!0iB^$uOWGQW)l`!671!nn=I6<J`E-dp
z+_Y<o>MmEIT>35`Wx^ky<A0x;fR(oaDI@;!99%WYS6m3BZ1iV4Pk_FYH^*;3;GQb)
z4ywO2$i){sbteAv`E&kHv)bu<oLsq2Z{9S+>-UNaoI2m9Zwd4KTRVHG9g1t5l=VM9
zy+41Be|>uX@$~IE{i{)_i)*%|g8pp72Dq(UztwxNScCd-@^p=daUQ9iax7jeo%JSe
zZXXl4{#z4#eVdqa(T(HZK0p8T^84S~IYWfuZjHH-ry|nJub+L_J)(Yv|Fo~v;1EE4
zq3dqiQ9)k*`Sd at ZpZ@3neE#kf|NlS#OB-oW4_!jpJAU`7OILqM!K39cU(T at 8tNV^n
zV9?jEx$-a1?MhRLpMPBwML)d%aDw>z^>fNZe`%EK<fF-iKl^!VaJ;Lqga(s3K6{R9
zt{=~A1tE6J`>>Q({l(4}XcKx%2(L2G0H)Zm#^DZpn4Jc8fjqC_q1eMZKgBLM^G}=j
zSU1g|s~tSG&|9$qiu|zD3q+wJy41?NJv%?4Eiwq%oexf+ at S6q%#GBcBp=Q1~{y+x?
zaKBww=|3)xzsc|`4JJ10<xKGsv@Z;jUZLybs+HR{w1r-*4F`C!uR~KKlz)$9v~DC*
zzTpza%ny_lOVJgcxC1(&JIN|ae>i=2{PGQNNYMjnWvOc@!u~D#j+58lAai+?gLZUi
za4=eB({Z+%-C~1HefhM;R*U=nR95~o_6kNn4%By0YvliUdUEmp<LeKfaI9rtMUKyW
zOeVXUEn#Sj>!+(Fwk)#MkD<Ygx_(W7MHU?Tkh2i#$K$Rxfj<IpJ;=^70Yv3^gEKBX
z-qKm#d at p4A_U!c;q7ch}JAFOvWyiPU=`uTAT+@pkx<WMM-^m#9DUUkILH>rrPV!TA
z-S*S#*LYYAr(Hgtot`UW;T=E>1=YhS_{t$Y|4}i|nmd=&c08zhdWGX7H)<mbzvuy7
zMa8S*i(_ at 46BjlqGhPZB)Z{`6&PQbz-OfH%#Rn^To(9L%usg#$&b-5g$p8!uPs3mv
zi?_Y(z=&W%n}it3<Gewo7@ywpF#+5mfAjwM)g^AXp7K>s<##wVL&tLfLi%xRZ9p4T
zll###Nz*yJ;WVs at OK9stp}Yb9`FEFpJpFjiLHiI-W_36U<agyOLOk!nEL<Prt7@p;
zZ6%Hev(*jWXPF~Vf-~9+WrO3dTt1>(s%NioG=z5Q)oVa%p}@#|D9(@RH+QhbNJMz0
zPq-KB>;b*}boS=e<)?RN|M`h-@4^l5X>IA{>FH~#Os~fyd9X6Po#L4wb-oO)$n#1y
zU1WXw7+`V8ktd;e^-w*2qxO~2!Z?(``_RQhQqQ2KGV%IOzuI&5szb#&*~immhp$hm
zI4As$8VYeU#cl!b#!C4qaNT!a?UmIj^Us!2er*@}7~5BGzVAKjKI?u(CBSn}v(iF%
zqr0vEg at U)o|M4CjXb(GKlzBe*0gZ_n&TnZZSh8|+SIa`F<m??OVe`b{n(Z~H0x0|D
zB76;N{~t<KUFk87x<s7;=^5R(-(gI_X_uf at N)4o|bsU_rgPJqyY@r0aWM|l}FJ3fL
zv|!6T`x<XST~EFyu1ZtVPkdo78p{@l6SPQyKcT<JE_hxOd{Ab3grFpoTf}P+LYNHJ
z6!oxcdW|DC^)2Ek;#RR6rG*x|WlRD16b8H{R0`brk5-2sIg3=rR#RJ<t#sH`DKfeh
z*>MlfZ-V>{yKw7i4s{e&E#sU$9pMlxIzt+pa8EAuzv|tR;_;ATCFs=_Dy&iz?|V=r
z;l-e{nnKhJR%@OJDOJ1*sqj2s7ef)jPqdJVf(w at h1gK6mpy^V08VV}vHF$;4D%^KU
zs2n_y8e;sMT}=jj#sy)G{@Lv+G3{g5FA|$2;q1}*E%p>YPjQkTC)n3m%UwME<8)0&
zBk3sqV_r<&`NDB|s9m3Fr?)2F;XM#ju*>)F-u&r*GZ*9;+K02(#T1PWx#46I$NCJv
z<AF-_0hshqbL)OY|MUdoNODuxuyCgC5ie+CWb?lskqh%#FdVJJfQ<k6nBL_p)V(vu
z`jxT?_LAZ5?0u9Q?^I&w4vn?PYzwD3z0j_ESZ~l+1Skc#8YcxBj)LXO(G>H$&$!uv
zGk;})s1_3FcgKIi+<&hgut>DPwBw)$t-7uigD`?W`GfAb-C3#?Wx_&Q)9J|xUIfBx
zM1R5nt-gq^2p80}hI(-wGi~N+u-V|$C2jNDCl#OH3}(-6{+;)5)VtgmenP00w3Fk@
zmuIx1!tdJba-w;LwVIEZ|72&+Uu7SU-#-8N{w>Bfm_&X5=Iz<vu=}DJD8CH!9=B9@
z^l6NTXC^$6e3o%}Dx<(M_i-fmF=|tro93R-U60N4&@eLR4I!(%L0s%4(zTqr8sn5J
zj(v=&8S>gPQ<DVpQWD>h;p*--j<St>{Pf}CoDJjR3@^c+{|!xp!>R$*Qwu)ty1vEf
zYjLNC9)m=$0^5RNbD{OjWHNq!g9nYDuGZ6M2$DEOO3G at igW=yX(>#2p!=rQrmtO2Q
z8LL*M*6U8*f1;a1ob!bLLMwyMa2g$tuHxXTdh55En=D!}i(wcI8jL$Y&0B<{Q$Ffi
zQ()x`Wpy!~bMs4;b@QtIJl@X3OS`j2+>y8<k84J7B!LxQi}D9uzMh0S@T>!ev-z7d
z4NAiAjUmz<1nPjJRQR?)Zq_6CdWAV?u0B0Ldv!GhH4m3*l9e>IuA2RSIDbYm)I5a$
zNbfIW-+GaKe|n6MLnwG$FL?GWGwOJr_thM)O{2!JuqECU{_+)<fcu8GK;X+H76WwV
z8XbgXQmnhShkJLyymZS;a##*}ebjmV+UuRr1T5II1hHI#`E)?AZwX@Q_B1HCX9=>x
zkj8yS5IRGG2aX`E>IBMo=m_qSV3bsznrGc-&lY5WCF{ERWR9`z^z!u0drZvfMj|aZ
zMYyib&<!?D|FW8)|N7{4FvDJLh8N)s`?VQfhBF*&o8hoF0{~vDwt2%}0O55D+r$IJ
zchob3)ioQ~b5}^~32A*HZBIzs7t#)dv_m27s7Ui)I7a<m6lwjc`FBfV>Jm$4>Jm$8
z{4q9BT5_{rgISW}PX{Qc#7<YDrz`Q(EeY}$?Fh4Es3x&jGE|osWXO5<k|Mo2L*m7W
zYA?-wJZGj34<lz9XQ<Bp{mCo72gV)Ucxc6(>R9eA&S&8<PK at Qao5Wxv`-+4ASJ@-F
z2}3&!bl=hRa_DN#@htlD(+}tP-^nH3nE&|tEL)f^=Hd%J0MOjwF8=i4G}F&Tq7L-e
zqDox08pF8UK2NVjo_>owdoA+px5#r)n}^43Rl*Kyh0ou=zQD&9Dvu1myEv+q*LD_Y
zlou`XAga{0WS|z^Zmo2<8r?RHj*zrXnd;jcepGD*gseKvn%2`--_*1OBH8wN>YH1}
z5t}?vHnGX;^B_uYU7uckyW8~%j>0I0 at z{2wgHjn-0|Njm9S^s#)u%RLKH*_+jJ;mJ
zKB19e&Ct+f`TyIy*4{RXDEis`75fP#qIs<Ch7?gG$7zd2Tt{&VMFd$Uaob2qYP<<;
zB*bs$+;iu#yR)<2l#~K8QYD<dcjnHW_kEnPLy<={(C+TmlIL1L4jjFfRA4xC%~l5_
z-m9uOdwZEUnT$Z~Znst--ZiyY9&U?<E4w($VN`wg6I^WJaZ?T|haEAncUp6Ggc--8
zJ&3E^;<>o4fJ^IU0Zf;wE}{6_{t|8OWA-LmVLvBFn&(iTqGd_L&6F(d0t;`xmZcqG
z>Eu}y at R&sv#!hJ=fR6KADZ>roH~WY}Wn7yJAZ~B(-=5=a%Oq0?r16S{Q{D#B&(5mU
zi$3LGYAZ-fIlIw*?&@d2jR!-5?2pX%it``81L#CBVA3v|vj%s#giPb#rC6$+ya4-<
zdnj7Owyk9dlt;GP=DJ#%!Ax)Z)8G~lSFs@BWLv6}&79L+Gq7>2Qcxj+0t6`sP69h(
zSpYK3&2QYvNrDKBi(7>mz&#w=QOgdkQS!^hMQI+eCfQz2=bB+^Y!7<_J3qd;`Zk%v
zyvTO~;hmNDbDSvUh;(`ENy0UGtXpG4H}Ig;n>WxU!qsPIZ}6Uu|1BPs;b2`=VbO$w
zhKr355n%8Kfxh_ek&JnEmxN+?v8;yBb at Ms&BDu5DX}UDQe(M at wD657Yh@q}+9Tl`d
z;z3M2uqcl;rj_Orp-;^yqCunqy&2RrLNzJBqvdnzH=#GPf-|@Yy_qGnYBizXQF$0Q
z=jnm35S-&xpJtXlF6yTfrQbFBEGeie)KM#VY#2%{R-m8a%AgE5;OWF~+-4l|l!InB
z-|CuCVY*ojeT_IwN2evt*3 at Aaz>;ojI80}^n~!eO-ECTIeLJ-O?$?lxOPofQsUcls
zCO at Sm9VSZ~ih=kC8K7n<divpXMoV<k6Y#QYtmA-Q@YhW>K7Wmb9k?XL at R_W=Lq4h@
zXu;9kHeZ0V0xxC$3*L<-&nt~{U+5jRI8J$wmU68-qgo);A51#SiufPBct=<(P7jt<
z5Y9M2+?G}>qaw18tiJzD)ibBYTA#%5DeU9kr^u=WT?Jr7Gpzo%2|jKimtB0Q)$P at x
zG67%&B3`xGNF)$|7J4PjJ{)J>>y43P#39~@5A_L)Mu1O#KpKIZH}~bRiT at IL5yFtb
zyCK1Xn&K4*Uo7X)l%u5thkAyaW4vnBBg7CL^bX~rp5oYXWC*d`cCtN#>017)CAI=I
zAWmJ$`*J;aR9kWicd at F7GSm~hf*VNT%8k(SRbXgr^b9T&b0O#iw+%}Lg_+82XV%kd
zqvGX$4+9wD?aK8Bs`7MR0yCQM>T9XTio^xIhQ#}$mx$8CybOfsm&+}XhH@;YFNzY-
zYcAeo^sHN!B^;H8_GJZa(0Q)h-Jsmyp6kjDY2)(3USoRD44}|k<jM_cWAdU%D0%D#
zyIng<y=_Xi)CC=fdc$ed+?z^cE)7&sAPu^^0ewM~IDN+|&rXvx(6kkWq@gIw>5HO7
z>4Sj>=UYkLRuqy3qBNi{h!UrNRMtv67$;T~l7^xzr!R^UrQZoeiH;SLhN3K|FNzY-
ztHZz!S<R8P&9~x}I?AzlaVq%S$2x8mF2c=^C2p~mSYgeQ&<+NjA#xJP_QN?|ORBQi
zsS=V}t$gJKFd4;8q>`)!1}{v3%l&y7Z(dWm_Nk8U_bSk02Y>1y8u+B_DS33&e|tXP
zCt_aguqtsJ?%g at LE%+D|{c~LeihFym$f$pgG4faqDe;Kr5%STGdOztQ_4Slkh2m55
z!rpTa$YX)`nb;3~5kFd@*AOrS_~ZHJTbrFj$c(_+qXxF(@s=t%KG0W$MVIGSl2kz7
z9=|bYyLWti6glpX4|^|O0JeI9FiLaJ5%VM>GR1h5C4(>blkW399N8tqKRB|p4&omp
z{t-5Ld7)IqP;y-D02&BB6B$#@?nE at a?zhB3DN<lAG`6Ds!@+RSpEx#^KzNa`io{2`
zuf}s%UmYCRux=*rw~!`yl_3itUdG`uQYeQn&7Fx^HTa3>TzO}EE_sl=dHEaj&(j+L
zTSPx!{6fQ|7t>yjacjQGcwdu&faFh<xFO(_XUS+R9U&tKsU|Q>v$rL01ZF~@Nnc<(
zBwd<raoGaW<24dn@d&y>AU)V~_GY%J3M^`XA%z+C%%=Kjs26PljPmm0bEHUIa)kwJ
z|07E&t-NUXq&G&MjYhT7AmrB?#>&FbD-;#sZo+(o at y&49;$kCE83?mQ*iV%;%`%!=
z*>)45W~-EP6?;qi!=q)n_YWh1>!i++*P+9Z_S3`sL~FP^{u6K?H>TO;9U!3O8eH at K
z!*)0Al<=SM{14uLTj4)NyY1dSMBaapym`Q>(rY-o{Pp5?;{xezH?q{_GbrJm$@p1(
zHR|Po7v%aB-XdAmG=0+g8q1CktXc)QWI9_U*jzXH3=3E6Z3t_*bZPIUB at g0=ME_xY
zs{TjeQ$e3tN{4liL+EGjE at LK4a~HK}Qfj&bs26%q5VbepAe{35wqV+mJ<W8pdX!|3
z8mZ~{ck~ykFL|2y0PVOpmM1Ippii at -*{g_rl8FGQE(c;Di=sORxFSY}$65r}Y8@o7
zny$%^5qx88fh8OS5%0&hfb2!AHKM4H4~}hFAj||I{8kctEzECB>=&bcUn?~};%kQz
zY*}%FFb;JH1F5ntfhn(Uf-Q`D93{%hz#uQdGPZE!g~FsQcn28CrB`QIv;m at hx_FnN
zr_6II#Go&`@15>|prSDX>W3#n`a%)XBa-%z?<)5_b)JyHK&n?WJU<xik)g{2q5>>e
z3z@*Ng0(^L*m<gurVY=t(_%J{lO5nMC|IIN^#FW&aRdDd1PPX+>CMG;A`b}2ibarq
z*{bO at B_bJt0r(IB=*7jK8zXc{ET-%3=rnlB!<rjfL^qLzq!d;jf<L*VY_`5B3}g59
z0Z?QC&;itWyt#smIt(=V3yvkkK|nJICqOUtI1hMIVwzs#95cP{f|D@@3KD8=w)(!y
zq<0J$Ct#+}&QKAgK-l^w7v<!`DH4n(SEuud&SA=cBH`w5<6j5=P_n2H&jHV#0B7xW
z_GBYPqM3mBKhdxXna1dg2Q4ivo1(Dk;<|NW`5q=G;6tV7uV=p{Yn}@;H~Ay+zx(~-
zPYllW<cs9b6Rj^-1J%<yArvpr9 at 6c0cVkykc^|YE*`jrVRy<64{r<tI)!N!J@FakD
zzPS`kn|BLG2AE=yeK&Z}$~x_H!>A>19%z#w{RHWC+nxkWl_XuX5{K_rp7UXn|AlgP
zK}3Yr1}c$-=I<ya-3hfa1SEk|iM?x~e~jMHwqfd<3N=<XwV5`2UkuxY8am5sfSzoZ
z#Pp4*mj((?cm6?*8)RtLSm<wTa&zFwgx)bN^ua0Y3p(v|Vezf4QTg)GB}1_3=qimZ
zS*!0b;e1PP?1XbjM{KFX%Qi>1PtZcN^iq^sTFF)meQcp8{>}emoxfPVUR#pb`hm&v
zzS(YJ$WV~kEtb#3&$G_kCf6(?mZXtZV!MS`i0l@&$XKn=g(ZpADr>p#4B0MnRbabV
zuJF&Z&f9jynvRXqH>>GZu)MLKVV!T%(#BiC-C7u~^Rkf1iQZiZ`ILe at 2O=H{o_SmC
r;Jd=}`_FNxdtQj;(r|A!l~qA24XiY<(!fdsD-EnPu+qT4Sp$CoJci>J

diff --git a/configs/qemu_xtensa_lx60_defconfig b/configs/qemu_xtensa_lx60_defconfig
index 457416e..a491fec 100644
--- a/configs/qemu_xtensa_lx60_defconfig
+++ b/configs/qemu_xtensa_lx60_defconfig
@@ -1,7 +1,7 @@
 # Architecture
 BR2_xtensa=y
 BR2_XTENSA_CUSTOM=y
-BR2_XTENSA_OVERLAY_FILE="board/qemu/xtensa-lx60/xtensa_dc232b.tar"
+BR2_XTENSA_OVERLAY_FILE="https://github.com/jcmvbkbc/xtensa-toolchain-build/raw/2de2dbee44ae96f17b5a028ef398aecadcdd9a76/overlays/xtensa_dc232b.tar.gz"
 
 # Patches
 BR2_GLOBAL_PATCH_DIR="board/qemu/xtensa-lx60"
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 07/51] core: add a global variable with already-unquoted global patch dir
  2015-11-23 14:47 ` [Buildroot] [PATCH 07/51] core: add a global variable with already-unquoted global patch dir Yann E. MORIN
@ 2015-11-23 16:18   ` Thomas Petazzoni
  2015-11-23 16:30     ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Thomas Petazzoni @ 2015-11-23 16:18 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Mon, 23 Nov 2015 15:47:37 +0100, Yann E. MORIN wrote:

>  		package/gcc/$(GCC_VERSION)/*.patch \
> -		$(addsuffix $((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \
> -		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR)))))
> +		$(addsuffix $((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
> +		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(BR2_GLOBAL_PATCH_DIR))))

Should be BR_GLOBAL_PATCH_DIR, not BR2_GLOBAL_PATCH_DIR.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 07/51] core: add a global variable with already-unquoted global patch dir
  2015-11-23 16:18   ` Thomas Petazzoni
@ 2015-11-23 16:30     ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 16:30 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2015-11-23 17:18 +0100, Thomas Petazzoni spake thusly:
> On Mon, 23 Nov 2015 15:47:37 +0100, Yann E. MORIN wrote:
> >  		package/gcc/$(GCC_VERSION)/*.patch \
> > -		$(addsuffix $((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \
> > -		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR)))))
> > +		$(addsuffix $((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(BR2_GLOBAL_PATCH_DIR)) \
> > +		$(addsuffix $((PKG)_RAWNAME)/*.patch,$(BR2_GLOBAL_PATCH_DIR))))
> 
> Should be BR_GLOBAL_PATCH_DIR, not BR2_GLOBAL_PATCH_DIR.

Good catch, thanks! :-)

It worked in my test-case, because I was using a single directory in
there.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 04/51] core/pkg-generic: add macro to hardlink-or-copy
  2015-11-23 14:47 ` [Buildroot] [PATCH 04/51] core/pkg-generic: add macro to hardlink-or-copy Yann E. MORIN
@ 2015-11-23 17:15   ` Luca Ceresoli
  0 siblings, 0 replies; 86+ messages in thread
From: Luca Ceresoli @ 2015-11-23 17:15 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>

Reviewed-by: Luca Ceresoli <luca@lucaceresoli.net>
Tested-by: Luca Ceresoli <luca@lucaceresoli.net>

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 05/51] core/legal-info: use the macro to install source archives
  2015-11-23 14:47 ` [Buildroot] [PATCH 05/51] core/legal-info: use the macro to install source archives Yann E. MORIN
@ 2015-11-23 17:18   ` Luca Ceresoli
  2015-11-23 17:21     ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-11-23 17:18 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> ---
>   package/pkg-generic.mk | 7 ++++---
>   1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index 357a5c7..e69c970 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -805,9 +805,10 @@ ifeq ($$($(2)_REDISTRIBUTE),YES)
>   ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
>   	$$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
>   endif
> -# Copy the source tarball (just hardlink if possible)
> -	@cp -l $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))) 2>/dev/null || \
> -	    cp $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))
> +# Copy the source tarball
> +	$$(Q)$$(call hardlink-copy,\
> +		     $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
> +		     $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))))

Doesn't seem to apply on next, where I guess this patch is meant to be
applied.

However I tested it on master and there I can say:

Reviewed-by: Luca Ceresoli <luca@lucaceresoli.net>
Tested-by: Luca Ceresoli <luca@lucaceresoli.net>

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 05/51] core/legal-info: use the macro to install source archives
  2015-11-23 17:18   ` Luca Ceresoli
@ 2015-11-23 17:21     ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 17:21 UTC (permalink / raw)
  To: buildroot

Luca, All,

On 2015-11-23 18:18 +0100, Luca Ceresoli spake thusly:
> Yann E. MORIN wrote:
> >Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> >Cc: Luca Ceresoli <luca@lucaceresoli.net>
> >---
> >  package/pkg-generic.mk | 7 ++++---
> >  1 file changed, 4 insertions(+), 3 deletions(-)
> >
> >diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> >index 357a5c7..e69c970 100644
> >--- a/package/pkg-generic.mk
> >+++ b/package/pkg-generic.mk
> >@@ -805,9 +805,10 @@ ifeq ($$($(2)_REDISTRIBUTE),YES)
> >  ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
> >  	$$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
> >  endif
> >-# Copy the source tarball (just hardlink if possible)
> >-	@cp -l $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))) 2>/dev/null || \
> >-	    cp $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))
> >+# Copy the source tarball
> >+	$$(Q)$$(call hardlink-copy,\
> >+		     $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
> >+		     $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))))
> 
> Doesn't seem to apply on next, where I guess this patch is meant to be
> applied.

No, I'm on master.

Of course, I'll rebase when next is merged. ;-)

> However I tested it on master and there I can say:
> 
> Reviewed-by: Luca Ceresoli <luca@lucaceresoli.net>
> Tested-by: Luca Ceresoli <luca@lucaceresoli.net>

Thanks! :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output
  2015-11-23 14:47 ` [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output Yann E. MORIN
@ 2015-11-23 17:25   ` Luca Ceresoli
  2015-11-23 17:58     ` Yann E. MORIN
  2015-11-23 20:24   ` Thomas Petazzoni
  1 sibling, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-11-23 17:25 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> The perl-cross sources are combined with the perl sources, so they must
> be redistributed for proper compliance.
>
> Add a post-legal-info hook that also installs them in the legal-info
> output.
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> Cc: Francois Perrad <fperrad@gmail.com>

Ouch:

$ make legal-info
[...]
mkdir: missing operand
Try 'mkdir --help' for more information.
make[1]: *** [perl-legal-info] Error 1
make: *** [_all] Error 2

This probably needs patch 10.

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output
  2015-11-23 17:25   ` Luca Ceresoli
@ 2015-11-23 17:58     ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 17:58 UTC (permalink / raw)
  To: buildroot

Luca, All,

On 2015-11-23 18:25 +0100, Luca Ceresoli spake thusly:
> Yann E. MORIN wrote:
> >The perl-cross sources are combined with the perl sources, so they must
> >be redistributed for proper compliance.
> >
> >Add a post-legal-info hook that also installs them in the legal-info
> >output.
> >
> >Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> >Cc: Luca Ceresoli <luca@lucaceresoli.net>
> >Cc: Francois Perrad <fperrad@gmail.com>
> 
> Ouch:
> 
> $ make legal-info
> [...]
> mkdir: missing operand
> Try 'mkdir --help' for more information.
> make[1]: *** [perl-legal-info] Error 1
> make: *** [_all] Error 2
> 
> This probably needs patch 10.

Damned. That should teach me to re-organise so-big a series *after*
testing it... :-/

Thanks! :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal)
  2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
                   ` (50 preceding siblings ...)
  2015-11-23 14:48 ` [Buildroot] [PATCH 51/51] configs/qemu-xtensa: use overlay from the github repository Yann E. MORIN
@ 2015-11-23 20:22 ` Thomas Petazzoni
  2015-11-23 21:09   ` Yann E. MORIN
  51 siblings, 1 reply; 86+ messages in thread
From: Thomas Petazzoni @ 2015-11-23 20:22 UTC (permalink / raw)
  To: buildroot

Hello,

On Mon, 23 Nov 2015 15:48:16 +0100, Yann E. MORIN wrote:

> The series is not completely 'logically' organised, but rather tells a
> story, that of how I got side-tracked from just wanting to save the
> patches alongside the sources, up to when I eventually cleaned up the
> handling of the Xtensa overlay, after reogarnising the gcc packages and
> defining their licensing terms. It was prompted by a discussion we had
> with Luca during the last DevDays in Dublin, when we talked about the
> need to save the patches as well as the source archives.

Can you summarize what is the motivation for saving the patches as well
as the source archives ?

> Patches 10-17 actually implement saving the patches alongside the
> sources. Even though we suggest users to provide their Buildroot tree to
> be compliant, this is by far incpomplete, because not all patches may be
> there (patches can be downloaded or can be in a global patch dir):

I would have assumed patches in a global patch dir should be taken care
of by users. But indeed, if patches expressed via <pkg>_PATCH are not
copied, this is wrong.

However, files mentioned in <pkg>_EXTRA_DOWNLOADS should also be copied
to the legal-info output.

There is possibly one reason why distributing the entire Buildroot may
be problematic. If you distribute the entire Buildroot, it means you
are distributing code (in the form of patches) for a large number of
packages, many of which you are most likely not using in your actual
product. However, the simple fact of distributing patches to (L)GPLv3
code has some implication in terms of patents licensing, which
companies may not like. Therefore, distributing Buildroot completely
may not necessarily be acceptable for certain companies. Do we have a
way around that ?

> Patches 18-27 re-organise the gcc packages. The ultimate goal is to be
> able to save the legal-info for both the host and target variants. For
> that, we want to introduce a target gcc variant (which would not install
> a native compiler) to define the licensing terms. That has not been done
> in this series, for two reasons: first, the series is already very long;
> second, that target package needs some mor ere-organising in the gcc
> infra. Otherwise:
>   - the gcc common definitions ar emoved to gcc-common,
>   - gcc-initial remains as-is,
>   - gcc-final is renamed to just 'gcc',
>   - licensing information is added to gcc (the final one),
>   - the custom patch command is dropped, to use the generic patch infra,
>     so symlinks to patch directories are added to gcc-initial and
>     gcc (-final).

I am wondering why this is part of the same series really. It should be
a completely separated matter IMO.

> Starting from there, the series diverges from its original intent, but
> is a logical/historical followup because I noticed the Xtensa overlay
> handling was really a mess.

Ditto, why isn't that a separate patch series?

Thanks,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output
  2015-11-23 14:47 ` [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output Yann E. MORIN
  2015-11-23 17:25   ` Luca Ceresoli
@ 2015-11-23 20:24   ` Thomas Petazzoni
  2015-11-23 21:23     ` Yann E. MORIN
  1 sibling, 1 reply; 86+ messages in thread
From: Thomas Petazzoni @ 2015-11-23 20:24 UTC (permalink / raw)
  To: buildroot

Yann, Luca,

On Mon, 23 Nov 2015 15:47:36 +0100, Yann E. MORIN wrote:
> The perl-cross sources are combined with the perl sources, so they must
> be redistributed for proper compliance.
> 
> Add a post-legal-info hook that also installs them in the legal-info
> output.
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> Cc: Francois Perrad <fperrad@gmail.com>
> ---
>  package/perl/perl.mk | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/package/perl/perl.mk b/package/perl/perl.mk
> index f3b7b2b..25294e6 100644
> --- a/package/perl/perl.mk
> +++ b/package/perl/perl.mk
> @@ -32,6 +32,13 @@ define PERL_CROSS_EXTRACT
>  endef
>  PERL_POST_EXTRACT_HOOKS += PERL_CROSS_EXTRACT
>  
> +# ... and as such should be part of the legal-info redistribution
> +define PERL_CROSS_LEGAL_INFO
> +	$(Q)$(call hardlink-copy,$(DL_DIR)/$(PERL_CROSS_SOURCE),\
> +				 $(PERL_REDIST_SOURCES_DIR))
> +endef
> +PERL_POST_LEGAL_INFO_HOOKS += PERL_CROSS_LEGAL_INFO
> +
>  define PERL_CROSS_SET_POD
>  	$(SED) s/$(PERL_CROSS_OLD_POD)/$(PERL_CROSS_NEW_POD)/g $(@D)/Makefile
>  endef

I think this is not the proper way of solving the problem. perl-cross
is downloaded through <pkg>_EXTRA_DOWNLOADS, and <pkg>_EXTRA_DOWNLOADS
files should be saved in legal-info, without requiring some special
handling from each package using <pkg>_EXTRA_DOWNLOADS.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info
  2015-11-23 14:47 ` [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info Yann E. MORIN
@ 2015-11-23 20:26   ` Thomas Petazzoni
  2015-11-24 22:05     ` Peter Korsgaard
  0 siblings, 1 reply; 86+ messages in thread
From: Thomas Petazzoni @ 2015-11-23 20:26 UTC (permalink / raw)
  To: buildroot

Peter,

Can you give your opinion on the semantic/usage of the
<pkg>_REDISTRIBUTE variable.

I am personally not a big fan of the non-boolean behavior introduced by
this patch for this variable. With this patch, <pkg>_REDISTRIBUTE
switches from a normal YES/NO boolean variable to a weird tristate
variable YES/IGNORE/NO.

I have already stated my opinion that there should be two boolean
variables instead:

 * One which allows the package to indicate if the package should be
   mentioned in the legal-info or not.

 * One which allows the package to indicate if the package "source"
   should be saved to the legal-info or not. Of course, this variable
   is ignored if the first one is set to "NO".

This is IMO a lot clearer than a single variable with the YES/IGNORE/NO
values.

Peter ?

Thomas

On Mon, 23 Nov 2015 15:47:38 +0100, Yann E. MORIN wrote:
> It might be necessary to not even mention a package in the output of
> legal-info:
> 
>   - virtual package have virtually nothing to save in the legal-info
>     output;
> 
>   - for Buildroot itself, host-gcc-initial and host-gcc-final are not
>     real packages, they are just two different steps of the same
>     package, gcc;
> 
>   - for proprietary packages, it might not even be legal to even mention
>     them, being under NDA or some other such restrictive conditions.
> 
> Add the new 'IGNORE' keyword to the _REDISTRIBUTE package variable, so
> that the legal-info infra will simply completely ignore that package.
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> ---
>  docs/manual/adding-packages-generic.txt | 7 +++++--
>  package/pkg-generic.mk                  | 8 +++++++-
>  2 files changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/docs/manual/adding-packages-generic.txt b/docs/manual/adding-packages-generic.txt
> index 1c25c4e..aec398b 100644
> --- a/docs/manual/adding-packages-generic.txt
> +++ b/docs/manual/adding-packages-generic.txt
> @@ -390,7 +390,8 @@ information is (assuming the package name is +libfoo+) :
>    See xref:legal-info[] for more information.
>    This variable is optional. If it is not defined, a warning will be produced
>    to let you know, and +not saved+ will appear in the +license files+ field
> -  of the manifest file for this package.
> +  of the manifest file for this package (unless +LIBFOO_REDISTRIBUTE+ is
> +  set to +IGNORE+, see below...)
>  
>  * +LIBFOO_ACTUAL_SOURCE_TARBALL+ only applies to packages whose
>    +LIBFOO_SITE+ / +LIBTOO_SOURCE+ pair points to an archive that does
> @@ -414,7 +415,9 @@ information is (assuming the package name is +libfoo+) :
>  * +LIBFOO_REDISTRIBUTE+ can be set to +YES+ (default) or +NO+ to indicate if
>    the package source code is allowed to be redistributed. Set it to +NO+ for
>    non-opensource packages: Buildroot will not save the source code for this
> -  package when collecting the +legal-info+.
> +  package when collecting the +legal-info+. Alternatively, you may set it to
> +  +IGNORE+ so that Buildroot does not even mention that package in the
> +  +legal-info+ output.
>  
>  * +LIBFOO_FLAT_STACKSIZE+ defines the stack size of an application built into
>    the FLAT binary format. The application stack size on the NOMMU architecture
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index 5414bc6..98db3ba 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -747,10 +747,12 @@ $(2)_MANIFEST_LICENSE_FILES ?= not saved
>  
>  # If the package declares _LICENSE_FILES, we need to extract it,
>  # for overriden, local or normal remote packages alike, whether
> -# we want to redistribute it or not.
> +# we want to redistribute it or not, but not if we want to ignore it.
> +ifneq ($$($(2)_REDISTRIBUTE),IGNORE)
>  ifneq ($$($(2)_LICENSE_FILES),)
>  $(1)-legal-info: $(1)-patch
>  endif
> +endif
>  
>  # We only save the sources of packages we want to redistribute, that are
>  # non-local, and non-overriden. So only store, in the manifest, the tarball
> @@ -774,6 +776,8 @@ $(2)_ACTUAL_SOURCE_SITE    ?= $$(call qstrip,$$($(2)_SITE))
>  
>  # legal-info: produce legally relevant info.
>  $(1)-legal-info:
> +ifneq ($$($(2)_REDISTRIBUTE),IGNORE)
> +
>  # Packages without a source are assumed to be part of Buildroot, skip them.
>  	$$(foreach hook,$$($(2)_PRE_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep))
>  ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
> @@ -816,6 +820,8 @@ endif # other packages
>  endif # ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
>  	$$(foreach hook,$$($(2)_POST_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep))
>  
> +endif # REDISTRIBUTE == IGNORE
> +
>  # add package to the general list of targets if requested by the buildroot
>  # configuration
>  ifeq ($$($$($(2)_KCONFIG_VAR)),y)



-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 50/51] arch/xtensa: accept the overlay to be an URL
  2015-11-23 14:48 ` [Buildroot] [PATCH 50/51] arch/xtensa: accept the overlay to be an URL Yann E. MORIN
@ 2015-11-23 20:35   ` Thomas Petazzoni
  2015-11-23 21:28     ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Thomas Petazzoni @ 2015-11-23 20:35 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Mon, 23 Nov 2015 15:48:20 +0100, Yann E. MORIN wrote:

> +# No need for a conditional here, the variable will be enpty when
> +# there is no URL to download.
> +$(1)_EXTRA_DOWNLOADS += $$(ARCH_XTENSA_OVERLAY_URL)

If all EXTRA_DOWNLOADS files are saved as part of legal-info, then you
can get rid of patches 38, 39 and 40.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal)
  2015-11-23 20:22 ` [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Thomas Petazzoni
@ 2015-11-23 21:09   ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 21:09 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2015-11-23 21:22 +0100, Thomas Petazzoni spake thusly:
> On Mon, 23 Nov 2015 15:48:16 +0100, Yann E. MORIN wrote:
> > The series is not completely 'logically' organised, but rather tells a
> > story, that of how I got side-tracked from just wanting to save the
> > patches alongside the sources, up to when I eventually cleaned up the
> > handling of the Xtensa overlay, after reogarnising the gcc packages and
> > defining their licensing terms. It was prompted by a discussion we had
> > with Luca during the last DevDays in Dublin, when we talked about the
> > need to save the patches as well as the source archives.
> 
> Can you summarize what is the motivation for saving the patches as well
> as the source archives ?

I think I've explained that below, and in the commit log that actually
saves the patches. Maybe I should have improved those explanations...

> > Patches 10-17 actually implement saving the patches alongside the
> > sources. Even though we suggest users to provide their Buildroot tree to
> > be compliant, this is by far incpomplete, because not all patches may be
> > there (patches can be downloaded or can be in a global patch dir):
> 
> I would have assumed patches in a global patch dir should be taken care
> of by users. But indeed, if patches expressed via <pkg>_PATCH are not
> copied, this is wrong.
> 
> However, files mentioned in <pkg>_EXTRA_DOWNLOADS should also be copied
> to the legal-info output.

I don;t think we should also save the _EXTRA_DOWNLOADS, because it is
also used by the blackfin external toolchains to download parts of the
sysroot (as far as I understand it).

> There is possibly one reason why distributing the entire Buildroot may
> be problematic. If you distribute the entire Buildroot, it means you
> are distributing code (in the form of patches) for a large number of
> packages, many of which you are most likely not using in your actual
> product. However, the simple fact of distributing patches to (L)GPLv3
> code has some implication in terms of patents licensing, which
> companies may not like.

Hmm.. That's a tricky question, indeed.

I would have assumed that what a distributor is bound to, is the
licenses of the actual packages present in the firmware, and that extra
code that is published would not have any impact.

However, you may be right on one point: the mere fact of distributing
code under licenses that have so-called "IP" protection (like patent
stuff provisions like the GPLv3 has) could be seen as being problematic
for a distributor, indeed.

> Therefore, distributing Buildroot completely
> may not necessarily be acceptable for certain companies. Do we have a
> way around that ?

That would be awfully complex. We'd have to provide a way to strip-down
Buildroot to just the recipes of what is actually in the firmware,
stripping away a whole lot of packages, possibly severing the dependency
chains...

I would prefer we do not go that route if at all possible...

> > Patches 18-27 re-organise the gcc packages. The ultimate goal is to be
> > able to save the legal-info for both the host and target variants. For
> > that, we want to introduce a target gcc variant (which would not install
> > a native compiler) to define the licensing terms. That has not been done
> > in this series, for two reasons: first, the series is already very long;
> > second, that target package needs some mor ere-organising in the gcc
> > infra. Otherwise:
> >   - the gcc common definitions ar emoved to gcc-common,
> >   - gcc-initial remains as-is,
> >   - gcc-final is renamed to just 'gcc',
> >   - licensing information is added to gcc (the final one),
> >   - the custom patch command is dropped, to use the generic patch infra,
> >     so symlinks to patch directories are added to gcc-initial and
> >     gcc (-final).
> 
> I am wondering why this is part of the same series really. It should be
> a completely separated matter IMO.

As I said in the begining of the cover letter, I got side-tracked.

Basically, what happenend is that I did a few patches to save the
patches with the sources. Then realised that we were missing the legal
info for gcc; then I noticed that we should save the Xtensa overlay. And
so I looked at packages that were using EXTRA_DOWNLOADS and stumbled on 
perl for which we should also save perl-cross. Back to the Xtensa stuff, 
it became obvious we were not handking it in the best way we could. And
so on...

And so, as the subject of the cover letter says, this is a set of
"unassorted improvements nad fixes" on the legal-info infra.

But yes, I agree that the series could be split. However, the different
parts could only be subnmitted only after the previous parts are
applied, because changes added in each "part" of the series are re-used
later on. So it is not easy to just split it without causing conflicts
later on; conflicts either on the maintianers side to merge changes
touching the same areas, or or my side rebasing the series again and
again. At least, the series is self-contained, and "temporaly" correct,
even if it touches many different areas: it all relates to being better
at saving th elegal info (even the Xtensa overlay improvements rely on
earlier patches).

> > Starting from there, the series diverges from its original intent, but
> > is a logical/historical followup because I noticed the Xtensa overlay
> > handling was really a mess.
> 
> Ditto, why isn't that a separate patch series?

Ditto. ;-)

Thanks!

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output
  2015-11-23 20:24   ` Thomas Petazzoni
@ 2015-11-23 21:23     ` Yann E. MORIN
  2015-12-03 17:11       ` Luca Ceresoli
  0 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 21:23 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2015-11-23 21:24 +0100, Thomas Petazzoni spake thusly:
> On Mon, 23 Nov 2015 15:47:36 +0100, Yann E. MORIN wrote:
> > The perl-cross sources are combined with the perl sources, so they must
> > be redistributed for proper compliance.
> > 
> > Add a post-legal-info hook that also installs them in the legal-info
> > output.
> > 
> > Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> > Cc: Luca Ceresoli <luca@lucaceresoli.net>
> > Cc: Francois Perrad <fperrad@gmail.com>
> > ---
> >  package/perl/perl.mk | 7 +++++++
> >  1 file changed, 7 insertions(+)
> > 
> > diff --git a/package/perl/perl.mk b/package/perl/perl.mk
> > index f3b7b2b..25294e6 100644
> > --- a/package/perl/perl.mk
> > +++ b/package/perl/perl.mk
> > @@ -32,6 +32,13 @@ define PERL_CROSS_EXTRACT
> >  endef
> >  PERL_POST_EXTRACT_HOOKS += PERL_CROSS_EXTRACT
> >  
> > +# ... and as such should be part of the legal-info redistribution
> > +define PERL_CROSS_LEGAL_INFO
> > +	$(Q)$(call hardlink-copy,$(DL_DIR)/$(PERL_CROSS_SOURCE),\
> > +				 $(PERL_REDIST_SOURCES_DIR))
> > +endef
> > +PERL_POST_LEGAL_INFO_HOOKS += PERL_CROSS_LEGAL_INFO
> > +
> >  define PERL_CROSS_SET_POD
> >  	$(SED) s/$(PERL_CROSS_OLD_POD)/$(PERL_CROSS_NEW_POD)/g $(@D)/Makefile
> >  endef
> 
> I think this is not the proper way of solving the problem. perl-cross
> is downloaded through <pkg>_EXTRA_DOWNLOADS, and <pkg>_EXTRA_DOWNLOADS
> files should be saved in legal-info, without requiring some special
> handling from each package using <pkg>_EXTRA_DOWNLOADS.

Well, that's what I thought initially.

However, I don't think that _EXTRA_DOWNLOADS should be saved to the
legal-info. A reason I already explained is that _EXTRA_DOWNLOADS are
used by the Blackfin external toolchains to download extra parts of
there sysroots, and that should not be part of legal-info.

Furthermore, what if a FLOSS package has an EXTRA_DOWNLOAD to download
non-redistributable stuff. An example that is easy to understand, would
be a Doom package, where the engine is FLOSS (GPL), and where the WAD
files are downlaodable from an internal server. Such a package could use
_EXTRA_DOWNLOADS to fetch the WAD files. The distributor may have an
agreement to provide the WAD files in the product, but not reditribute
them otherwise.

So, I don;t think we should install _EXTRA_DOWNLOADS (or _ALL_DOWNLOADS)
in the legal-info output.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 50/51] arch/xtensa: accept the overlay to be an URL
  2015-11-23 20:35   ` Thomas Petazzoni
@ 2015-11-23 21:28     ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-11-23 21:28 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2015-11-23 21:35 +0100, Thomas Petazzoni spake thusly:
> On Mon, 23 Nov 2015 15:48:20 +0100, Yann E. MORIN wrote:
> > +# No need for a conditional here, the variable will be enpty when
> > +# there is no URL to download.
> > +$(1)_EXTRA_DOWNLOADS += $$(ARCH_XTENSA_OVERLAY_URL)
> 
> If all EXTRA_DOWNLOADS files are saved as part of legal-info, then you
> can get rid of patches 38, 39 and 40.

And 37 too. But see my position on saving _EXTRA_DOWNLOADS (or
_ALL_DOWNLOADS for tha matters).

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info
  2015-11-23 20:26   ` Thomas Petazzoni
@ 2015-11-24 22:05     ` Peter Korsgaard
  2015-12-03 17:12       ` Luca Ceresoli
  0 siblings, 1 reply; 86+ messages in thread
From: Peter Korsgaard @ 2015-11-24 22:05 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 > Peter,
 > Can you give your opinion on the semantic/usage of the
 > <pkg>_REDISTRIBUTE variable.

 > I am personally not a big fan of the non-boolean behavior introduced by
 > this patch for this variable. With this patch, <pkg>_REDISTRIBUTE
 > switches from a normal YES/NO boolean variable to a weird tristate
 > variable YES/IGNORE/NO.

 > I have already stated my opinion that there should be two boolean
 > variables instead:

 >  * One which allows the package to indicate if the package should be
 >    mentioned in the legal-info or not.

 >  * One which allows the package to indicate if the package "source"
 >    should be saved to the legal-info or not. Of course, this variable
 >    is ignored if the first one is set to "NO".

 > This is IMO a lot clearer than a single variable with the YES/IGNORE/NO
 > values.

 > Peter ?

I thought I had already replied to this, but perhaps that was only on
IRC? In general, I feel that the legal-info is purely an aid that can
serve as input to whatever license compliancy effort the user has to do
- E.G. include the various license texts in the user manual, provide
source offer and so on, so if the data contains a bit of extra
information that isn't such a big deal.

But ok, if we want to do it I would atleast want it to be as simple and
easy to use as possible. I agree with Thomas that splitting the two
things we want to do into two seperate variables is probably the easiest
to understand.

-- 
Venlig hilsen,
Peter Korsgaard 

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 03/51] package/gcc: align gcc-final configure-cmds to the generic ones
  2015-11-23 14:47 ` [Buildroot] [PATCH 03/51] package/gcc: align gcc-final configure-cmds to the generic ones Yann E. MORIN
@ 2015-12-03 17:10   ` Luca Ceresoli
  0 siblings, 0 replies; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:10 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Since 7d6c79 (Compile static versions of gcc libraries) was applied, the
> generic configure commands have been updated, but those changes have not
> been propagated to the gcc-final custom configure commands.
>
> Update the gcc-final custom configure commands to better match the
> generic ones.
>
> We do not propagate --disable-dependency-tracking because it breaks the
> build, and --enable-shared (because of 169141a).
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>   package/gcc/gcc-final/gcc-final.mk | 25 ++++++++++++++++++++-----
>   1 file changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
> index dbdb615..53199c3 100644
> --- a/package/gcc/gcc-final/gcc-final.mk
> +++ b/package/gcc/gcc-final/gcc-final.mk
> @@ -36,16 +36,31 @@ HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK
>   #
>   # So we must completely override the generic commands and provide our own.
>   #
> +# Except for --disable-dependency-tracking which breaks the build, and
> +# --enable-shared (see 169141a, gcc-final: disable shared build for
> +# static), we reproduce the exact same command as the autotools infra
> +# uses.
> +#
>   define  HOST_GCC_FINAL_CONFIGURE_CMDS
>   	(cd $(HOST_GCC_FINAL_SRCDIR) && rm -rf config.cache; \
> -		$(HOST_CONFIGURE_OPTS) \
> -		CFLAGS="$(HOST_CFLAGS)" \
> -		LDFLAGS="$(HOST_LDFLAGS)" \
> -		$(HOST_GCC_FINAL_CONF_ENV) \
> -		./configure \
> +	$(HOST_CONFIGURE_OPTS) \
> +	CFLAGS="$(HOST_CFLAGS)" \
> +	LDFLAGS="$(HOST_LDFLAGS)" \
> +	$(HOST_GCC_FINAL_CONF_ENV) \
> +	CONFIG_SITE=/dev/null \

With the indentation cleanup, the CONFIG_SITE addition might be
unnoticed (it did to me, at first). I suggest you mention its addition
in the commit message and reference the originating commit:

------------8<--------------
CONFIG_SITE from commit f8d4fe3 ("package/pkg-autotools: don't use
config.site when cross-compiling").
------------8<--------------

With that added (and even without):

Reviewed-by: Luca Ceresoli <luca@lucaceresoli.net>
[Tested building qemu_arm_versatile_defconfig]
Tested-by: Luca Ceresoli <luca@lucaceresoli.net>

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output
  2015-11-23 21:23     ` Yann E. MORIN
@ 2015-12-03 17:11       ` Luca Ceresoli
  2015-12-03 18:37         ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:11 UTC (permalink / raw)
  To: buildroot

Dear Yann, Thomas,

Yann E. MORIN wrote:
> Thomas, All,
>
> On 2015-11-23 21:24 +0100, Thomas Petazzoni spake thusly:
>> On Mon, 23 Nov 2015 15:47:36 +0100, Yann E. MORIN wrote:
>>> The perl-cross sources are combined with the perl sources, so they must
>>> be redistributed for proper compliance.
>>>
>>> Add a post-legal-info hook that also installs them in the legal-info
>>> output.
>>>
>>> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>> Cc: Luca Ceresoli <luca@lucaceresoli.net>
>>> Cc: Francois Perrad <fperrad@gmail.com>
>>> ---
>>>   package/perl/perl.mk | 7 +++++++
>>>   1 file changed, 7 insertions(+)
>>>
>>> diff --git a/package/perl/perl.mk b/package/perl/perl.mk
>>> index f3b7b2b..25294e6 100644
>>> --- a/package/perl/perl.mk
>>> +++ b/package/perl/perl.mk
>>> @@ -32,6 +32,13 @@ define PERL_CROSS_EXTRACT
>>>   endef
>>>   PERL_POST_EXTRACT_HOOKS += PERL_CROSS_EXTRACT
>>>
>>> +# ... and as such should be part of the legal-info redistribution
>>> +define PERL_CROSS_LEGAL_INFO
>>> +	$(Q)$(call hardlink-copy,$(DL_DIR)/$(PERL_CROSS_SOURCE),\
>>> +				 $(PERL_REDIST_SOURCES_DIR))
>>> +endef
>>> +PERL_POST_LEGAL_INFO_HOOKS += PERL_CROSS_LEGAL_INFO
>>> +
>>>   define PERL_CROSS_SET_POD
>>>   	$(SED) s/$(PERL_CROSS_OLD_POD)/$(PERL_CROSS_NEW_POD)/g $(@D)/Makefile
>>>   endef
>>
>> I think this is not the proper way of solving the problem. perl-cross
>> is downloaded through <pkg>_EXTRA_DOWNLOADS, and <pkg>_EXTRA_DOWNLOADS
>> files should be saved in legal-info, without requiring some special
>> handling from each package using <pkg>_EXTRA_DOWNLOADS.
>
> Well, that's what I thought initially.
>
> However, I don't think that _EXTRA_DOWNLOADS should be saved to the
> legal-info. A reason I already explained is that _EXTRA_DOWNLOADS are
> used by the Blackfin external toolchains to download extra parts of
> there sysroots, and that should not be part of legal-info.
>
> Furthermore, what if a FLOSS package has an EXTRA_DOWNLOAD to download
> non-redistributable stuff. An example that is easy to understand, would
> be a Doom package, where the engine is FLOSS (GPL), and where the WAD
> files are downlaodable from an internal server. Such a package could use
> _EXTRA_DOWNLOADS to fetch the WAD files. The distributor may have an
> agreement to provide the WAD files in the product, but not reditribute
> them otherwise.

I think Thomas' position is correct. Generally speaking, there's no
specific reason an _EXTRA_DOWNLOAD should be non-redistributable. All we
know is it's a file. Arguing on what potential packages might do is a
bit arbitrary IMO.

I think the best thing to do in legal-info is to save both _SORUCE and 
_EXTRA_DOWNLOADS by default, and to save neither when _REDISTRIBUTE =
NO. Packages that need to save some files but not all of them should
set _REDISTRIBUTE = NO and save manually everything needed.

The manual handling we'd need is anyway pretty limited with current
Buildroot, as _EXTRA_DOWNLOADS is only user by two packages: the
Blackfin external toolchain and perl.

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info
  2015-11-24 22:05     ` Peter Korsgaard
@ 2015-12-03 17:12       ` Luca Ceresoli
  2015-12-03 18:36         ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:12 UTC (permalink / raw)
  To: buildroot

Yann, Thomas, Peter,

Peter Korsgaard wrote:
>>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:
>
>   > Peter,
>   > Can you give your opinion on the semantic/usage of the
>   > <pkg>_REDISTRIBUTE variable.
>
>   > I am personally not a big fan of the non-boolean behavior introduced by
>   > this patch for this variable. With this patch, <pkg>_REDISTRIBUTE
>   > switches from a normal YES/NO boolean variable to a weird tristate
>   > variable YES/IGNORE/NO.
>
>   > I have already stated my opinion that there should be two boolean
>   > variables instead:
>
>   >  * One which allows the package to indicate if the package should be
>   >    mentioned in the legal-info or not.
>
>   >  * One which allows the package to indicate if the package "source"
>   >    should be saved to the legal-info or not. Of course, this variable
>   >    is ignored if the first one is set to "NO".
>
>   > This is IMO a lot clearer than a single variable with the YES/IGNORE/NO
>   > values.
>
>   > Peter ?
>
> I thought I had already replied to this, but perhaps that was only on
> IRC? In general, I feel that the legal-info is purely an aid that can
> serve as input to whatever license compliancy effort the user has to do
> - E.G. include the various license texts in the user manual, provide
> source offer and so on, so if the data contains a bit of extra
> information that isn't such a big deal.

Agreed, yet it's good to automate whatever we can _and_ is simple to
implement. Since Yann's is only an 8-lines patch (+docs), I like it.

>
> But ok, if we want to do it I would atleast want it to be as simple and
> easy to use as possible. I agree with Thomas that splitting the two
> things we want to do into two seperate variables is probably the easiest
> to understand.

I proposed one three-valued variable, but I'm fine with the two boolean
idea as well. Thus, Yann, can you re-cook it accordingly?

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 09/51] core/pkg-virtual: ignore from legal-info output
  2015-11-23 14:47 ` [Buildroot] [PATCH 09/51] core/pkg-virtual: ignore from legal-info output Yann E. MORIN
@ 2015-12-03 17:13   ` Luca Ceresoli
  0 siblings, 0 replies; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:13 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Virtual packages really have nothing to save for legal-info, so we just
> ignore them.
>
> Currently, packages are only extracted if they define _LICENSE_FILES.
> Follow-up patches will always extract and patch non-ignored packages, so
> we would potentially see spurious "extracting" and "patching" messages
> for virtual packages on the console, which would be a bit strange.
> Ignoring virtual packages will get us a cleaner log.
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>   docs/manual/adding-packages-virtual.txt | 3 +++
>   package/pkg-virtual.mk                  | 2 ++
>   2 files changed, 5 insertions(+)
>
> diff --git a/docs/manual/adding-packages-virtual.txt b/docs/manual/adding-packages-virtual.txt
> index a5f17a2..11a497d 100644
> --- a/docs/manual/adding-packages-virtual.txt
> +++ b/docs/manual/adding-packages-virtual.txt
> @@ -56,6 +56,9 @@ The +.mk+ for the virtual package should just evaluate the +virtual-package+ mac
>   The ability to have target and host packages is also available, with the
>   +host-virtual-package+ macro.
>
> +.Note:
> +Virtual packages are automatically ignored when generating the +legal-info+ output.
> +
>   ==== Provider's +Config.in+ file
>
>   When adding a package as a provider, only the +Config.in+ file requires some
> diff --git a/package/pkg-virtual.mk b/package/pkg-virtual.mk
> index 9c68b51..1471b95 100644
> --- a/package/pkg-virtual.mk
> +++ b/package/pkg-virtual.mk
> @@ -57,6 +57,8 @@ endif
>   # Add dependency against the provider
>   $(2)_DEPENDENCIES += $$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2)))
>
> +$(2)_REDISTRIBUTE = IGNORE
> +

Ack on the idea, but of course the patch shall be re-written to use the
boolean variables instead.

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 10/51] core/legal-info: install source archives in their own sub-dir
  2015-11-23 14:47 ` [Buildroot] [PATCH 10/51] core/legal-info: install source archives in their own sub-dir Yann E. MORIN
@ 2015-12-03 17:16   ` Luca Ceresoli
  2015-12-03 17:25     ` Luca Ceresoli
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:16 UTC (permalink / raw)
  To: buildroot

Yann,

Yann E. MORIN wrote:
> Currently, we put all source archives side-by-side in the same
> directory.
>
> Since we're about to also save individual patches that were applied
> on those sources, we don't want to make that directory a complete
> mess of unassorted files.
>
> So, we install each source archive in its own sub-directory, where
> we'll later store the patches too. Store that location in a variable,
> so it can be re-used later on (to install patches in a future commit).
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> ---
>   package/pkg-generic.mk | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index 98db3ba..bb3a6da 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -482,6 +482,8 @@ endif
>
>   $(2)_REDISTRIBUTE		?= YES
>
> +$(2)_REDIST_SOURCES_DIR = $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))/$$($(2)_RAWNAME)-$$($(2)_VERSION)
> +
>   # When a target package is a toolchain dependency set this variable to
>   # 'NO' so the 'toolchain' dependency is not added to prevent a circular
>   # dependency
> @@ -812,7 +814,7 @@ endif
>   # Copy the source tarball
>   	$$(Q)$$(call hardlink-copy,\
>   		     $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
> -		     $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))))
> +		     $$($(2)_REDIST_SOURCES_DIR))
>   endif # redistribute
>
>   endif # other packages
>

Acked-by: Luca Ceresoli <luca@lucaceresoli.net>
Tested-by: Luca Ceresoli <luca@lucaceresoli.net>

Although this makes little sense without the further patches up to:

   [PATCH 12/51] core/apply-patches: store full path of applied patches

which are under discussion.

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 11/51] core/legal-info: add package version to license directory
  2015-11-23 14:47 ` [Buildroot] [PATCH 11/51] core/legal-info: add package version to license directory Yann E. MORIN
@ 2015-12-03 17:17   ` Luca Ceresoli
  2015-12-03 18:41     ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:17 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Now that we save the source archives in a directory named after the
> package and its version, do the same for the license files, for
> consistency.
>
> It has a not-so-bad side-effect of also saving the version string in
> the all-licenses list.
>
> The only (small) drawback, is that the warnings about undefined
> _LICENSE_FILES now contains the version string, too. That's unavoidable,
> since that's what is stored in the legal report.

Is it a drawback at all? I don't think so.

>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> ---
>   package/pkg-generic.mk | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index bb3a6da..07ff820 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -791,10 +791,10 @@ ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
>   # is that the license still applies to the files distributed as part
>   # of the rootfs, even if the sources are not themselves redistributed.
>   ifeq ($$(call qstrip,$$($(2)_LICENSE_FILES)),)
> -	@$$(call legal-license-nofiles,$$($(2)_RAWNAME),$$(call UPPERCASE,$(4)))
> -	@$$(call legal-warning-pkg,$$($(2)_RAWNAME),cannot save license ($(2)_LICENSE_FILES not defined))
> +	@$$(call legal-license-nofiles,$$($(2)_RAWNAME)-$$($(2)_VERSION),$$(call UPPERCASE,$(4)))
> +	@$$(call legal-warning-pkg,$$($(2)_RAWNAME)-$$($(2)_VERSION),cannot save license ($(2)_LICENSE_FILES not defined))
>   else
> -	@$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep))
> +	@$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME)-$$($(2)_VERSION),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep))

Mmh, you're computing "$$($(2)_RAWNAME)-$$($(2)_VERSION)" three times
in a few lines. And it's also computed elsewhere:

package/pkg-generic.mk:156:$(BUILD_DIR)/%/.stamp_patched: NAMEVER = 
$(RAWNAME)-$($(PKG)_VERSION)
package/pkg-generic.mk:427:  $(2)_SOURCE                        ?= 
$$($(2)_RAWNAME)-$$($(2)_VERSION).tar.gz
package/pkg-generic.mk:485:$(2)_REDIST_SOURCES_DIR = 
$$(REDIST_SOURCES_DIR_$$(call 
UPPERCASE,$(4)))/$$($(2)_RAWNAME)-$$($(2)_VERSION)
package/pkg-generic.mk:821:     @$$(call 
legal-manifest,$$($(2)_RAWNAME),$$($(2)_VERSION),$$($(2)_LICENSE),$$($(2)_MANIFEST_LICENSE_FILES),$$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_ACTUAL_SOURCE_SITE),$$(call 
UPPERCASE,$(4)))

We should compute it once and store it in a new per-package variable.

BTW, I tested this patch and it works, but I'd like to give my
"Tested-by" tag after you do these changes, thanks.

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches
  2015-11-23 14:47 ` [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches Yann E. MORIN
@ 2015-12-03 17:18   ` Luca Ceresoli
  2015-12-03 18:52     ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:18 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Currently, we only store the filename of the applied patches.
>
> However, we are soon to want to install those patches in the legal-info
> directory, so we'll have to know where those patches come from.
>
> Instead of duplicating the logic to find the patches, just store the
> full path to each of those patches so we can retrieve them more easily
> later on.

Mmh, storing absolute pathnames always look a bit ugly... Any simple
way to store the relative path ("package/busybox/0002-unzip.patch")?

Also, there's a double slash in the output:
$ cat ./output/build/busybox-1.24.1/.applied_patches_list
/home/murray/devel/buildroot/package/busybox//0001-networking-libiproute-use-linux-if_packet.h-instead-.patch
/home/murray/devel/buildroot/package/busybox//0002-unzip.patch
/home/murray/devel/buildroot/package/busybox//0003-g-unzip-fix-recent-breakage.patch
/home/murray/devel/buildroot/package/busybox//0008-Makefile.flags-strip-non-l-arguments-returned-by-pkg.patch

BTW, in order to evaluate the risk that your change breaks something,
I found myself wondering what .applied_patches_list is used for. And it
seems unused... am I missing something?

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 13/51] core/legal-info: also save patches
  2015-11-23 14:47 ` [Buildroot] [PATCH 13/51] core/legal-info: also save patches Yann E. MORIN
@ 2015-12-03 17:19   ` Luca Ceresoli
  0 siblings, 0 replies; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:19 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Currently, the legal-info infra only saves the source archive of a
> package. However, that's not enough as we may apply some patches on
> packages sources.
>
> We do suggest users to also redistribute the Buildroot sources as part
> of their compliance distribution, so the patches bundled in Buildroot
> would indeed be included in the compliance distribution.
>
> However, that's still not enough, since we may download some patches, or
> the user may use a global patch directory. Patches in there might not
> end up in the compliance distribution, and there are risks of
> non-conformity.
>
> So, always include patches alongside the source archive.
>
> To ensure reproducibility, we also generate a series file, so patches
> can be re-applied in the correct order.
>
> We get the list of patches to include from the list of patches that were
> applied by the package infrastructure (via the apply-patches support
> script). So, we need to get packages properly extracted and patched
> before we can save their legal-info, not just in the case they define
> _LICENSE_FILES (however, we need not extract and patch a package if it
> is set to be ignored for redistribution).
>
> Update the legal-info header accordingly.
>
> Note: this means that, when a (non-ignored) package is not patched and
> defines no LICENSE_FILES, we will extract and patch it for nothing.
> There is no easy way to know whether we have to patch a package or not.
> We can only either duplicate the logic to detect patches (bad) or rely
> on the infra actually patching the package.  Also, a vast majority of
> packages are either patched, or define _LICENSE_FILES, so it is best and
> easiest to always extract and patch them prior to legal-info.

Anything else would be more complex and give little advantage. Ideally
we should have _LICENSE_FILES defined for nearly all packages, after
all.

So:

Tested-by: Luca Ceresoli <luca@lucaceresoli.net>
Acked-by: Luca Ceresoli <luca@lucaceresoli.net>

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 14/51] core/legal-info: update the legal-info report header
  2015-11-23 14:47 ` [Buildroot] [PATCH 14/51] core/legal-info: update the legal-info report header Yann E. MORIN
@ 2015-12-03 17:21   ` Luca Ceresoli
  2015-12-03 18:53     ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:21 UTC (permalink / raw)
  To: buildroot

Dear Yann,

thanks for having updated this forgotten file! See my comments below.

Yann E. MORIN wrote:
> In some cases, the toolchain sources are now recovered and available in
> the legal-info output. So, adapt the header to use conditional instead
> of an definitive negation.
>
> Also update the part about saving the sources: it's not the license list
> that defines whether sources are installed, but rather whether the
> package is reditributable or not. Update the header acoordingly.
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> ---
>   support/legal-info/README.header | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/support/legal-info/README.header b/support/legal-info/README.header
> index 90fc445..08aa74d 100644
> --- a/support/legal-info/README.header
> +++ b/support/legal-info/README.header
> @@ -12,11 +12,11 @@ This material is composed of the following items.
>    * The Buildroot configuration file; this has been saved in buildroot.config.
>    * The toolchain (cross-compiler and related tools) used to generate all the
>      compiled programs.
> -   Note: this has not been saved due to technical limitations, you must
> +   Note: this may not been saved due to technical limitations, you may need to

"may not been saved" -> "may have not been saved" I guess.

With that fixed:
  Acked-by: Luca Ceresoli <luca@lucaceresoli.net>

Since you're updating the README about features that are already in
master, this patch could be applied immediately. Except it probably
conflicts, so you might want to rework it and move it at the beginning
of your patchset (or submit independently) if you want it to be merged
more quickly.

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files
  2015-11-23 14:47 ` [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files Yann E. MORIN
@ 2015-12-03 17:24   ` Luca Ceresoli
  2015-12-03 19:11     ` Yann E. MORIN
  0 siblings, 1 reply; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:24 UTC (permalink / raw)
  To: buildroot

Yann,

Yann E. MORIN wrote:
> Having a hash of the saved files can be interesting for the recipient to
> verify the integrity of the files.
>
> We remove the warning file earlier, to exclude it from the hash list.
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> ---
>   Makefile | 7 ++++++-
>   1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 5e62275..947f941 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -662,8 +662,13 @@ legal-info: dirs legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p
>   		cat support/legal-info/README.warnings-header \
>   			$(LEGAL_WARNINGS) >>$(LEGAL_REPORT); \
>   		cat $(LEGAL_WARNINGS); fi
> -	@echo "Legal info produced in $(LEGAL_INFO_DIR)"
>   	@rm -f $(LEGAL_WARNINGS)
> +	@find $(LEGAL_INFO_DIR) -type f -exec sha256sum {} + \
> +	 |sed -r -e 's:  $(LEGAL_INFO_DIR)/+:  :' \
> +	 |sort -k2 \
> +	 >$(BUILD_DIR)/legal-info.sha256

Not sure I like the first sed invocation... It's written in a way that
heavily depends on how sha256 formats its output, and it's not very
much readable by the average Buildroot user (*). It will most likely
never cause any problems, it's mostly a style issue.

How about:

	@( cd $(LEGAL_INFO_DIR) &&
	   find . -type f -exec sha256sum {} + | sort -k2 ) \
	 >$(BUILD_DIR)/legal-info.sha256

It's untested, but I know you can write shell magic that works!

(*) No, Yann, you are _not_ an average user. ;)

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 10/51] core/legal-info: install source archives in their own sub-dir
  2015-12-03 17:16   ` Luca Ceresoli
@ 2015-12-03 17:25     ` Luca Ceresoli
  0 siblings, 0 replies; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-03 17:25 UTC (permalink / raw)
  To: buildroot



Il 03/12/2015 18:16, Luca Ceresoli ha scritto:
> Yann,
>
> Yann E. MORIN wrote:
>> Currently, we put all source archives side-by-side in the same
>> directory.
>>
>> Since we're about to also save individual patches that were applied
>> on those sources, we don't want to make that directory a complete
>> mess of unassorted files.
>>
>> So, we install each source archive in its own sub-directory, where
>> we'll later store the patches too. Store that location in a variable,
>> so it can be re-used later on (to install patches in a future commit).
>>
>> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>> Cc: Luca Ceresoli <luca@lucaceresoli.net>
>> ---
>>   package/pkg-generic.mk | 4 +++-
>>   1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
>> index 98db3ba..bb3a6da 100644
>> --- a/package/pkg-generic.mk
>> +++ b/package/pkg-generic.mk
>> @@ -482,6 +482,8 @@ endif
>>
>>   $(2)_REDISTRIBUTE        ?= YES
>>
>> +$(2)_REDIST_SOURCES_DIR = $$(REDIST_SOURCES_DIR_$$(call
>> UPPERCASE,$(4)))/$$($(2)_RAWNAME)-$$($(2)_VERSION)
>> +
>>   # When a target package is a toolchain dependency set this variable to
>>   # 'NO' so the 'toolchain' dependency is not added to prevent a circular
>>   # dependency
>> @@ -812,7 +814,7 @@ endif
>>   # Copy the source tarball
>>       $$(Q)$$(call hardlink-copy,\
>>                $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
>> -             $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))))
>> +             $$($(2)_REDIST_SOURCES_DIR))
>>   endif # redistribute
>>
>>   endif # other packages
>>
>
> Acked-by: Luca Ceresoli <luca@lucaceresoli.net>
> Tested-by: Luca Ceresoli <luca@lucaceresoli.net>
>
> Although this makes little sense without the further patches up to:
>
>    [PATCH 12/51] core/apply-patches: store full path of applied patches

Sorry, I actually meant:

   [PATCH 13/51] core/legal-info: also save patches

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info
  2015-12-03 17:12       ` Luca Ceresoli
@ 2015-12-03 18:36         ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-12-03 18:36 UTC (permalink / raw)
  To: buildroot

Luca, Thomas, Peter,

On 2015-12-03 18:12 +0100, Luca Ceresoli spake thusly:
> Peter Korsgaard wrote:
> >>>>>>"Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:
> >  > Can you give your opinion on the semantic/usage of the
> >  > <pkg>_REDISTRIBUTE variable.
> >
> >  > I am personally not a big fan of the non-boolean behavior introduced by
> >  > this patch for this variable. With this patch, <pkg>_REDISTRIBUTE
> >  > switches from a normal YES/NO boolean variable to a weird tristate
> >  > variable YES/IGNORE/NO.
> >
> >  > I have already stated my opinion that there should be two boolean
> >  > variables instead:
> >
> >  >  * One which allows the package to indicate if the package should be
> >  >    mentioned in the legal-info or not.
> >
> >  >  * One which allows the package to indicate if the package "source"
> >  >    should be saved to the legal-info or not. Of course, this variable
> >  >    is ignored if the first one is set to "NO".
> >
> >  > This is IMO a lot clearer than a single variable with the YES/IGNORE/NO
> >  > values.
> >
> >  > Peter ?
> >
> >I thought I had already replied to this, but perhaps that was only on
> >IRC? In general, I feel that the legal-info is purely an aid that can
> >serve as input to whatever license compliancy effort the user has to do
> >- E.G. include the various license texts in the user manual, provide
> >source offer and so on, so if the data contains a bit of extra
> >information that isn't such a big deal.
> 
> Agreed, yet it's good to automate whatever we can _and_ is simple to
> implement. Since Yann's is only an 8-lines patch (+docs), I like it.
> 
> >
> >But ok, if we want to do it I would atleast want it to be as simple and
> >easy to use as possible. I agree with Thomas that splitting the two
> >things we want to do into two seperate variables is probably the easiest
> >to understand.
> 
> I proposed one three-valued variable, but I'm fine with the two boolean
> idea as well. Thus, Yann, can you re-cook it accordingly?

Yes, I will.

Thanks all for the input! :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output
  2015-12-03 17:11       ` Luca Ceresoli
@ 2015-12-03 18:37         ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-12-03 18:37 UTC (permalink / raw)
  To: buildroot

Luca, Thomas, All,

On 2015-12-03 18:11 +0100, Luca Ceresoli spake thusly:
> Yann E. MORIN wrote:
> >On 2015-11-23 21:24 +0100, Thomas Petazzoni spake thusly:
> >>On Mon, 23 Nov 2015 15:47:36 +0100, Yann E. MORIN wrote:
> >>>The perl-cross sources are combined with the perl sources, so they must
> >>>be redistributed for proper compliance.
> >>>
> >>>Add a post-legal-info hook that also installs them in the legal-info
> >>>output.
> >>>
> >>>Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> >>>Cc: Luca Ceresoli <luca@lucaceresoli.net>
> >>>Cc: Francois Perrad <fperrad@gmail.com>
> >>>---
> >>>  package/perl/perl.mk | 7 +++++++
> >>>  1 file changed, 7 insertions(+)
> >>>
> >>>diff --git a/package/perl/perl.mk b/package/perl/perl.mk
> >>>index f3b7b2b..25294e6 100644
> >>>--- a/package/perl/perl.mk
> >>>+++ b/package/perl/perl.mk
> >>>@@ -32,6 +32,13 @@ define PERL_CROSS_EXTRACT
> >>>  endef
> >>>  PERL_POST_EXTRACT_HOOKS += PERL_CROSS_EXTRACT
> >>>
> >>>+# ... and as such should be part of the legal-info redistribution
> >>>+define PERL_CROSS_LEGAL_INFO
> >>>+	$(Q)$(call hardlink-copy,$(DL_DIR)/$(PERL_CROSS_SOURCE),\
> >>>+				 $(PERL_REDIST_SOURCES_DIR))
> >>>+endef
> >>>+PERL_POST_LEGAL_INFO_HOOKS += PERL_CROSS_LEGAL_INFO
> >>>+
> >>>  define PERL_CROSS_SET_POD
> >>>  	$(SED) s/$(PERL_CROSS_OLD_POD)/$(PERL_CROSS_NEW_POD)/g $(@D)/Makefile
> >>>  endef
> >>
> >>I think this is not the proper way of solving the problem. perl-cross
> >>is downloaded through <pkg>_EXTRA_DOWNLOADS, and <pkg>_EXTRA_DOWNLOADS
> >>files should be saved in legal-info, without requiring some special
> >>handling from each package using <pkg>_EXTRA_DOWNLOADS.
> >
> >Well, that's what I thought initially.
> >
> >However, I don't think that _EXTRA_DOWNLOADS should be saved to the
> >legal-info. A reason I already explained is that _EXTRA_DOWNLOADS are
> >used by the Blackfin external toolchains to download extra parts of
> >there sysroots, and that should not be part of legal-info.
> >
> >Furthermore, what if a FLOSS package has an EXTRA_DOWNLOAD to download
> >non-redistributable stuff. An example that is easy to understand, would
> >be a Doom package, where the engine is FLOSS (GPL), and where the WAD
> >files are downlaodable from an internal server. Such a package could use
> >_EXTRA_DOWNLOADS to fetch the WAD files. The distributor may have an
> >agreement to provide the WAD files in the product, but not reditribute
> >them otherwise.
> 
> I think Thomas' position is correct. Generally speaking, there's no
> specific reason an _EXTRA_DOWNLOAD should be non-redistributable. All we
> know is it's a file. Arguing on what potential packages might do is a
> bit arbitrary IMO.
> 
> I think the best thing to do in legal-info is to save both _SORUCE and
> _EXTRA_DOWNLOADS by default, and to save neither when _REDISTRIBUTE =
> NO. Packages that need to save some files but not all of them should
> set _REDISTRIBUTE = NO and save manually everything needed.
> 
> The manual handling we'd need is anyway pretty limited with current
> Buildroot, as _EXTRA_DOWNLOADS is only user by two packages: the
> Blackfin external toolchain and perl.

OK, so _EXTRA_DOWNLOADS to be saved too. Will do.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 11/51] core/legal-info: add package version to license directory
  2015-12-03 17:17   ` Luca Ceresoli
@ 2015-12-03 18:41     ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-12-03 18:41 UTC (permalink / raw)
  To: buildroot

Luca, All,

On 2015-12-03 18:17 +0100, Luca Ceresoli spake thusly:
> Yann E. MORIN wrote:
> >Now that we save the source archives in a directory named after the
> >package and its version, do the same for the license files, for
> >consistency.
> >
> >It has a not-so-bad side-effect of also saving the version string in
> >the all-licenses list.
> >
> >The only (small) drawback, is that the warnings about undefined
> >_LICENSE_FILES now contains the version string, too. That's unavoidable,
> >since that's what is stored in the legal report.
> 
> Is it a drawback at all? I don't think so.

Well, 'drawback' not really the correct word. It's rather a change in
the output, and when a sha1 is used, it becomes a bit less readable
(it's OK when it's a simple x.y.z-or-such version, though).

> >Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> >Cc: Luca Ceresoli <luca@lucaceresoli.net>
> >---
> >  package/pkg-generic.mk | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> >diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> >index bb3a6da..07ff820 100644
> >--- a/package/pkg-generic.mk
> >+++ b/package/pkg-generic.mk
> >@@ -791,10 +791,10 @@ ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
> >  # is that the license still applies to the files distributed as part
> >  # of the rootfs, even if the sources are not themselves redistributed.
> >  ifeq ($$(call qstrip,$$($(2)_LICENSE_FILES)),)
> >-	@$$(call legal-license-nofiles,$$($(2)_RAWNAME),$$(call UPPERCASE,$(4)))
> >-	@$$(call legal-warning-pkg,$$($(2)_RAWNAME),cannot save license ($(2)_LICENSE_FILES not defined))
> >+	@$$(call legal-license-nofiles,$$($(2)_RAWNAME)-$$($(2)_VERSION),$$(call UPPERCASE,$(4)))
> >+	@$$(call legal-warning-pkg,$$($(2)_RAWNAME)-$$($(2)_VERSION),cannot save license ($(2)_LICENSE_FILES not defined))
> >  else
> >-	@$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep))
> >+	@$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME)-$$($(2)_VERSION),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep))
> 
> Mmh, you're computing "$$($(2)_RAWNAME)-$$($(2)_VERSION)" three times
> in a few lines. And it's also computed elsewhere:
> 
> package/pkg-generic.mk:156:$(BUILD_DIR)/%/.stamp_patched: NAMEVER =
> $(RAWNAME)-$($(PKG)_VERSION)
> package/pkg-generic.mk:427:  $(2)_SOURCE                        ?=
> $$($(2)_RAWNAME)-$$($(2)_VERSION).tar.gz
> package/pkg-generic.mk:485:$(2)_REDIST_SOURCES_DIR =
> $$(REDIST_SOURCES_DIR_$$(call
> UPPERCASE,$(4)))/$$($(2)_RAWNAME)-$$($(2)_VERSION)
> package/pkg-generic.mk:821:     @$$(call legal-manifest,$$($(2)_RAWNAME),$$($(2)_VERSION),$$($(2)_LICENSE),$$($(2)_MANIFEST_LICENSE_FILES),$$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_ACTUAL_SOURCE_SITE),$$(call
> UPPERCASE,$(4)))
> 
> We should compute it once and store it in a new per-package variable.

Yeah, what bothers me a bit is th edifference on how we handle the
location where to save files. For license files, it's the callee
deciding, while for the source, it's the caller.

I'll see how I can make that similar...

> BTW, I tested this patch and it works, but I'd like to give my
> "Tested-by" tag after you do these changes, thanks.

Of course!

Thanks for the comments! :-)

Regards,
Yann E. MORIN.


-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches
  2015-12-03 17:18   ` Luca Ceresoli
@ 2015-12-03 18:52     ` Yann E. MORIN
  2015-12-04 12:02       ` Luca Ceresoli
  0 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-12-03 18:52 UTC (permalink / raw)
  To: buildroot

Luca, All,

On 2015-12-03 18:18 +0100, Luca Ceresoli spake thusly:
> Yann E. MORIN wrote:
> >Currently, we only store the filename of the applied patches.
> >
> >However, we are soon to want to install those patches in the legal-info
> >directory, so we'll have to know where those patches come from.
> >
> >Instead of duplicating the logic to find the patches, just store the
> >full path to each of those patches so we can retrieve them more easily
> >later on.
> 
> Mmh, storing absolute pathnames always look a bit ugly... Any simple
> way to store the relative path ("package/busybox/0002-unzip.patch")?

What about GLOBAL_PATCH_DIR or downloaded patches, or patches from
BR2_EXTERNAL?

As I said in the commit log, it's better not to replicate the logic
to find the patches. We already have a non-trivial heuristic in
pkg-generic, so better make use of it.

> Also, there's a double slash in the output:
> $ cat ./output/build/busybox-1.24.1/.applied_patches_list
> /home/murray/devel/buildroot/package/busybox//0001-networking-libiproute-use-linux-if_packet.h-instead-.patch

Yeah, is that a problem?

If that bothers you, I can try to fix that. But the directory component
is passed straight from the pkg-generic infra (the $(@D) as set by make).

> BTW, in order to evaluate the risk that your change breaks something,
> I found myself wondering what .applied_patches_list is used for. And it
> seems unused... am I missing something?

Not at all. Nothing uses it so far. Hence we're free to change its
content.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 14/51] core/legal-info: update the legal-info report header
  2015-12-03 17:21   ` Luca Ceresoli
@ 2015-12-03 18:53     ` Yann E. MORIN
  0 siblings, 0 replies; 86+ messages in thread
From: Yann E. MORIN @ 2015-12-03 18:53 UTC (permalink / raw)
  To: buildroot

Luca, All,

On 2015-12-03 18:21 +0100, Luca Ceresoli spake thusly:
> Yann E. MORIN wrote:
> >In some cases, the toolchain sources are now recovered and available in
> >the legal-info output. So, adapt the header to use conditional instead
> >of an definitive negation.
> >
> >Also update the part about saving the sources: it's not the license list
> >that defines whether sources are installed, but rather whether the
> >package is reditributable or not. Update the header acoordingly.
> >
> >Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> >Cc: Luca Ceresoli <luca@lucaceresoli.net>
> >---
> >  support/legal-info/README.header | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> >diff --git a/support/legal-info/README.header b/support/legal-info/README.header
> >index 90fc445..08aa74d 100644
> >--- a/support/legal-info/README.header
> >+++ b/support/legal-info/README.header
> >@@ -12,11 +12,11 @@ This material is composed of the following items.
> >   * The Buildroot configuration file; this has been saved in buildroot.config.
> >   * The toolchain (cross-compiler and related tools) used to generate all the
> >     compiled programs.
> >-   Note: this has not been saved due to technical limitations, you must
> >+   Note: this may not been saved due to technical limitations, you may need to
> 
> "may not been saved" -> "may have not been saved" I guess.

Hehe! :-)

> With that fixed:
>  Acked-by: Luca Ceresoli <luca@lucaceresoli.net>
> 
> Since you're updating the README about features that are already in
> master, this patch could be applied immediately. Except it probably
> conflicts, so you might want to rework it and move it at the beginning
> of your patchset (or submit independently) if you want it to be merged
> more quickly.

Yep, good idea, thanks!

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files
  2015-12-03 17:24   ` Luca Ceresoli
@ 2015-12-03 19:11     ` Yann E. MORIN
  2015-12-04 11:40       ` Luca Ceresoli
  0 siblings, 1 reply; 86+ messages in thread
From: Yann E. MORIN @ 2015-12-03 19:11 UTC (permalink / raw)
  To: buildroot

Luca, All,

On 2015-12-03 18:24 +0100, Luca Ceresoli spake thusly:
> Yann E. MORIN wrote:
> >Having a hash of the saved files can be interesting for the recipient to
> >verify the integrity of the files.
> >
> >We remove the warning file earlier, to exclude it from the hash list.
> >
> >Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> >Cc: Luca Ceresoli <luca@lucaceresoli.net>
> >---
> >  Makefile | 7 ++++++-
> >  1 file changed, 6 insertions(+), 1 deletion(-)
> >
> >diff --git a/Makefile b/Makefile
> >index 5e62275..947f941 100644
> >--- a/Makefile
> >+++ b/Makefile
> >@@ -662,8 +662,13 @@ legal-info: dirs legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p
> >  		cat support/legal-info/README.warnings-header \
> >  			$(LEGAL_WARNINGS) >>$(LEGAL_REPORT); \
> >  		cat $(LEGAL_WARNINGS); fi
> >-	@echo "Legal info produced in $(LEGAL_INFO_DIR)"
> >  	@rm -f $(LEGAL_WARNINGS)
> >+	@find $(LEGAL_INFO_DIR) -type f -exec sha256sum {} + \
> >+	 |sed -r -e 's:  $(LEGAL_INFO_DIR)/+:  :' \
> >+	 |sort -k2 \
> >+	 >$(BUILD_DIR)/legal-info.sha256
> 
> Not sure I like the first sed invocation... It's written in a way that
> heavily depends on how sha256 formats its output,

Output which is mirrored from the output of md5sum?which has been the
same for eons. But OK...

> and it's not very
> much readable by the average Buildroot user (*). It will most likely
> never cause any problems, it's mostly a style issue.
> 
> How about:
> 
> 	@( cd $(LEGAL_INFO_DIR) &&
> 	   find . -type f -exec sha256sum {} + | sort -k2 ) \
> 	 >$(BUILD_DIR)/legal-info.sha256

Still the output would look like:

    sha2-hash  ./path/to/file
    sha2-hash  ./path/to/other/file

That is, with a leading './' which is ugly... :-/

> It's untested, but I know you can write shell magic that works!
> 
> (*) No, Yann, you are _not_ an average user. ;)

Not yet, not yet! ;-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files
  2015-12-03 19:11     ` Yann E. MORIN
@ 2015-12-04 11:40       ` Luca Ceresoli
  0 siblings, 0 replies; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-04 11:40 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Luca, All,
>
> On 2015-12-03 18:24 +0100, Luca Ceresoli spake thusly:
>> Yann E. MORIN wrote:
>>> Having a hash of the saved files can be interesting for the recipient to
>>> verify the integrity of the files.
>>>
>>> We remove the warning file earlier, to exclude it from the hash list.
>>>
>>> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>> Cc: Luca Ceresoli <luca@lucaceresoli.net>
>>> ---
>>>   Makefile | 7 ++++++-
>>>   1 file changed, 6 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/Makefile b/Makefile
>>> index 5e62275..947f941 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -662,8 +662,13 @@ legal-info: dirs legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p
>>>   		cat support/legal-info/README.warnings-header \
>>>   			$(LEGAL_WARNINGS) >>$(LEGAL_REPORT); \
>>>   		cat $(LEGAL_WARNINGS); fi
>>> -	@echo "Legal info produced in $(LEGAL_INFO_DIR)"
>>>   	@rm -f $(LEGAL_WARNINGS)
>>> +	@find $(LEGAL_INFO_DIR) -type f -exec sha256sum {} + \
>>> +	 |sed -r -e 's:  $(LEGAL_INFO_DIR)/+:  :' \
>>> +	 |sort -k2 \
>>> +	 >$(BUILD_DIR)/legal-info.sha256
>>
>> Not sure I like the first sed invocation... It's written in a way that
>> heavily depends on how sha256 formats its output,
>
> Output which is mirrored from the output of md5sum?which has been the
> same for eons. But OK...

Yes, mine is mostly an aesthetic issue.

>
>> and it's not very
>> much readable by the average Buildroot user (*). It will most likely
>> never cause any problems, it's mostly a style issue.
>>
>> How about:
>>
>> 	@( cd $(LEGAL_INFO_DIR) &&
>> 	   find . -type f -exec sha256sum {} + | sort -k2 ) \
>> 	 >$(BUILD_DIR)/legal-info.sha256
>
> Still the output would look like:
>
>      sha2-hash  ./path/to/file
>      sha2-hash  ./path/to/other/file
>
> That is, with a leading './' which is ugly... :-/

Mmmh... how about 'find * [...]'?

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

* [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches
  2015-12-03 18:52     ` Yann E. MORIN
@ 2015-12-04 12:02       ` Luca Ceresoli
  0 siblings, 0 replies; 86+ messages in thread
From: Luca Ceresoli @ 2015-12-04 12:02 UTC (permalink / raw)
  To: buildroot

Dear Yann,

Yann E. MORIN wrote:
> Luca, All,
>
> On 2015-12-03 18:18 +0100, Luca Ceresoli spake thusly:
>> Yann E. MORIN wrote:
>>> Currently, we only store the filename of the applied patches.
>>>
>>> However, we are soon to want to install those patches in the legal-info
>>> directory, so we'll have to know where those patches come from.
>>>
>>> Instead of duplicating the logic to find the patches, just store the
>>> full path to each of those patches so we can retrieve them more easily
>>> later on.
>>
>> Mmh, storing absolute pathnames always look a bit ugly... Any simple
>> way to store the relative path ("package/busybox/0002-unzip.patch")?
>
> What about GLOBAL_PATCH_DIR or downloaded patches, or patches from
> BR2_EXTERNAL?

Ouch, you're right, I always forget about the out-of-tree stuff...
Since we're not using .applied_patches_list for anything else, it can
be seen as a temporary, internal file. So we can use the absolute
pathnames after all.

>> Also, there's a double slash in the output:
>> $ cat ./output/build/busybox-1.24.1/.applied_patches_list
>> /home/murray/devel/buildroot/package/busybox//0001-networking-libiproute-use-linux-if_packet.h-instead-.patch
>
> Yeah, is that a problem?
>
> If that bothers you, I can try to fix that. But the directory component
> is passed straight from the pkg-generic infra (the $(@D) as set by make).

Not exactly a problem, just not nice to see. Especially after I worked
to remove double slashes from our package URLs... :) Maybe this one can
be removed with some shell expansion magic. But again, we're discussing
about a temporary file, so it can be acceptable here if it's difficult
to remove.

>
>> BTW, in order to evaluate the risk that your change breaks something,
>> I found myself wondering what .applied_patches_list is used for. And it
>> seems unused... am I missing something?
>
> Not at all. Nothing uses it so far. Hence we're free to change its
> content.
>
> Regards,
> Yann E. MORIN.
>

-- 
Luca

^ permalink raw reply	[flat|nested] 86+ messages in thread

end of thread, other threads:[~2015-12-04 12:02 UTC | newest]

Thread overview: 86+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-23 14:48 [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 01/51] core/pkg-autotools: align host configure commands to target one Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 02/51] package/gcc: comment on why we override the generic configure commands Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 03/51] package/gcc: align gcc-final configure-cmds to the generic ones Yann E. MORIN
2015-12-03 17:10   ` Luca Ceresoli
2015-11-23 14:47 ` [Buildroot] [PATCH 04/51] core/pkg-generic: add macro to hardlink-or-copy Yann E. MORIN
2015-11-23 17:15   ` Luca Ceresoli
2015-11-23 14:47 ` [Buildroot] [PATCH 05/51] core/legal-info: use the macro to install source archives Yann E. MORIN
2015-11-23 17:18   ` Luca Ceresoli
2015-11-23 17:21     ` Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 06/51] package/perl: include perl-cross in the legal-info output Yann E. MORIN
2015-11-23 17:25   ` Luca Ceresoli
2015-11-23 17:58     ` Yann E. MORIN
2015-11-23 20:24   ` Thomas Petazzoni
2015-11-23 21:23     ` Yann E. MORIN
2015-12-03 17:11       ` Luca Ceresoli
2015-12-03 18:37         ` Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 07/51] core: add a global variable with already-unquoted global patch dir Yann E. MORIN
2015-11-23 16:18   ` Thomas Petazzoni
2015-11-23 16:30     ` Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 08/51] core/legal-info: allow ignoring packages from the legal-info Yann E. MORIN
2015-11-23 20:26   ` Thomas Petazzoni
2015-11-24 22:05     ` Peter Korsgaard
2015-12-03 17:12       ` Luca Ceresoli
2015-12-03 18:36         ` Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 09/51] core/pkg-virtual: ignore from legal-info output Yann E. MORIN
2015-12-03 17:13   ` Luca Ceresoli
2015-11-23 14:47 ` [Buildroot] [PATCH 10/51] core/legal-info: install source archives in their own sub-dir Yann E. MORIN
2015-12-03 17:16   ` Luca Ceresoli
2015-12-03 17:25     ` Luca Ceresoli
2015-11-23 14:47 ` [Buildroot] [PATCH 11/51] core/legal-info: add package version to license directory Yann E. MORIN
2015-12-03 17:17   ` Luca Ceresoli
2015-12-03 18:41     ` Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 12/51] core/apply-patches: store full path of applied patches Yann E. MORIN
2015-12-03 17:18   ` Luca Ceresoli
2015-12-03 18:52     ` Yann E. MORIN
2015-12-04 12:02       ` Luca Ceresoli
2015-11-23 14:47 ` [Buildroot] [PATCH 13/51] core/legal-info: also save patches Yann E. MORIN
2015-12-03 17:19   ` Luca Ceresoli
2015-11-23 14:47 ` [Buildroot] [PATCH 14/51] core/legal-info: update the legal-info report header Yann E. MORIN
2015-12-03 17:21   ` Luca Ceresoli
2015-12-03 18:53     ` Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 15/51] core/legal-info: ensure legal-info works in off-line mode Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 16/51] toolchain/external: add hash for Arago actual sources Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 17/51] core/legal-info: generate a hash of all saved files Yann E. MORIN
2015-12-03 17:24   ` Luca Ceresoli
2015-12-03 19:11     ` Yann E. MORIN
2015-12-04 11:40       ` Luca Ceresoli
2015-11-23 14:47 ` [Buildroot] [PATCH 18/51] package/gcc: add a patch for arc rather than using sed Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 19/51] package/gcc: simplify setting GCC_SOURCE Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 20/51] pacakge/gcc: rename all variables as it is a host-only package Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 21/51] package/gcc: prefix all common variables with HOST_GCC_COMMON_ Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 22/51] package/gcc: rename the common files Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 23/51] package/gcc: rename gcc-final into plain gcc Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 24/51] package/gcc-initial: ignore from legal-info output Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 25/51] package/gcc: add licensing info for host variant Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 26/51] package/gcc: create the ./configure symlink as a post-patch hook Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 27/51] pacakge/gcc: drop custom patch command Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 28/51] core: include arch-specific definitions Yann E. MORIN
2015-11-23 14:47 ` [Buildroot] [PATCH 29/51] arch/xtensa: add definitions for the Xtensa overlay Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 30/51] package/binutils: use the Xtensa variables Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 31/51] package/gdb: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 32/51] package/gcc: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 33/51] arch/xtensa: add macro to extract the overlay Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 34/51] package/binutils: use macro to extract Xtensa overlay Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 35/51] package/gdb: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 36/51] package/gcc: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 37/51] arch/xtensa: add macro to install legal-info Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 38/51] pacage/gcc: use macro to install Xtensa overlay legal-info Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 39/51] package/binutils: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 40/51] package/gdb: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 41/51] package/binutils: extract Xtensa overlay as post-extract hook Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 42/51] package/gdb: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 43/51] arch/xtensa: add macros to generate hooks Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 44/51] package/binutils: use the Xtensa macro generators Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 45/51] package/gdb: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 46/51] package/gcc: " Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 47/51] arc/xtensa: get rid of an intermediate blind kconfig option Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 48/51] arch/xtensa: allow specifying path to tarball file Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 49/51] arch/xtensa: accept the overlay to be compressed Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 50/51] arch/xtensa: accept the overlay to be an URL Yann E. MORIN
2015-11-23 20:35   ` Thomas Petazzoni
2015-11-23 21:28     ` Yann E. MORIN
2015-11-23 14:48 ` [Buildroot] [PATCH 51/51] configs/qemu-xtensa: use overlay from the github repository Yann E. MORIN
2015-11-23 20:22 ` [Buildroot] [PATCH 0/51] legal-info: unassorted improvements and fixes (branch yem/legal) Thomas Petazzoni
2015-11-23 21:09   ` Yann E. MORIN

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.