[lld] [llvm] [LLD][COFF] Add more variety of CET flags (PR #150761)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 28 06:00:04 PDT 2025


https://github.com/kkent030315 updated https://github.com/llvm/llvm-project/pull/150761

>From 1082e93e75464bed81343af095aad4e294e3b358 Mon Sep 17 00:00:00 2001
From: kkent030315 <hrn832 at protonmail.com>
Date: Sat, 26 Jul 2025 22:12:14 +0900
Subject: [PATCH 1/5] [LLD][COFF] Add more variety of CET flags

---
 lld/COFF/Config.h                             |  4 ++
 lld/COFF/Driver.cpp                           |  7 ++++
 lld/COFF/Options.td                           |  8 ++++
 lld/COFF/Writer.cpp                           | 26 +++++++++++-
 lld/test/COFF/options.test                    | 40 +++++++++++++++++++
 llvm/include/llvm/BinaryFormat/COFF.h         | 17 +++++++-
 .../llvm-readobj/COFF/cetcompatstrict.test    | 16 ++++++++
 .../COFF/cetdynamicapisinproc.test            | 16 ++++++++
 .../COFF/cetipvalidationrelaxed.test          | 16 ++++++++
 .../llvm-readobj/COFF/hotpatchcompatible.test | 16 ++++++++
 llvm/tools/llvm-readobj/COFFDumper.cpp        |  9 ++++-
 11 files changed, 171 insertions(+), 4 deletions(-)
 create mode 100644 llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test
 create mode 100644 llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test
 create mode 100644 llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test
 create mode 100644 llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test

diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h
index 91b6e632fa7ed..95491c51bb7cd 100644
--- a/lld/COFF/Config.h
+++ b/lld/COFF/Config.h
@@ -307,6 +307,10 @@ struct Configuration {
   bool dynamicBase = true;
   bool allowBind = true;
   bool cetCompat = false;
+  bool cetCompatStrict = false;
+  bool cetCompatIpValidationRelaxed = false;
+  bool cetCompatDynamicApisInProcOnly = false;
+  bool hotpatchCompat = false;
   bool nxCompat = true;
   bool allowIsolation = true;
   bool terminalServerAware = true;
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 83040b534be9c..8cdadb2068ccd 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -2145,6 +2145,13 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   config->integrityCheck =
       args.hasFlag(OPT_integritycheck, OPT_integritycheck_no, false);
   config->cetCompat = args.hasFlag(OPT_cetcompat, OPT_cetcompat_no, false);
+  config->cetCompatStrict = args.hasFlag(OPT_cetcompatstrict, OPT_cetcompatstrict_no, false);
+  config->cetCompatIpValidationRelaxed =
+      args.hasFlag(OPT_cetipvalidationrelaxed, OPT_cetipvalidationrelaxed_no, false);
+  config->cetCompatDynamicApisInProcOnly =
+      args.hasFlag(OPT_cetdynamicapisinproc, OPT_cetdynamicapisinproc_no, false);
+  config->hotpatchCompat =
+    args.hasFlag(OPT_hotpatchcompatible, OPT_hotpatchcompatible_no, false);
   config->nxCompat = args.hasFlag(OPT_nxcompat, OPT_nxcompat_no, true);
   for (auto *arg : args.filtered(OPT_swaprun))
     parseSwaprun(arg->getValue());
diff --git a/lld/COFF/Options.td b/lld/COFF/Options.td
index 2a82fb5cd8845..da2e4706fa606 100644
--- a/lld/COFF/Options.td
+++ b/lld/COFF/Options.td
@@ -196,6 +196,14 @@ defm appcontainer : B<"appcontainer",
                       "Image can run outside an app container (default)">;
 defm cetcompat : B<"cetcompat", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack",
                    "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack (default)">;
+defm cetcompatstrict : B<"cetcompatstrict", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack in strict mode",
+                         "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack in strict mode (default)">;
+defm cetipvalidationrelaxed : B<"cetipvalidationrelaxed", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with relaxed context IP validation",
+                                "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with relaxed context IP validation (default)">;
+defm cetdynamicapisinproc : B<"cetdynamicapisinproc", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack in such a way that dynamic APIs allowed in process",
+                              "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with dynamic APIs allowed in process (default)">;
+defm hotpatchcompatible : B<"hotpatchcompatible", "Mark executable image as compatible with hotpatch",
+                            "Don't mark executable image as compatible with hotpatch (default)">;
 defm dynamicbase : B<"dynamicbase", "Enable ASLR (default unless /fixed)",
                      "Disable ASLR (default when /fixed)">;
 defm fixed : B<"fixed", "Disable base relocations",
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
index 076561807af47..5c72cca522feb 100644
--- a/lld/COFF/Writer.cpp
+++ b/lld/COFF/Writer.cpp
@@ -1216,7 +1216,9 @@ void Writer::createMiscChunks() {
   // Create Debug Information Chunks
   debugInfoSec = config->mingw ? buildidSec : rdataSec;
   if (config->buildIDHash != BuildIDHash::None || config->debug ||
-      config->repro || config->cetCompat) {
+      config->repro || config->cetCompat || config->cetCompatStrict ||
+      config->cetCompatIpValidationRelaxed ||
+      config->cetCompatDynamicApisInProcOnly || config->hotpatchCompat) {
     debugDirectory =
         make<DebugDirectoryChunk>(ctx, debugRecords, config->repro);
     debugDirectory->setAlignment(4);
@@ -1237,10 +1239,30 @@ void Writer::createMiscChunks() {
     });
   }
 
+  uint16_t ex_characteristics_flags = 0;
   if (config->cetCompat) {
+    ex_characteristics_flags |= IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT;
+  }
+  if (config->cetCompatStrict) {
+    ex_characteristics_flags |=
+        IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE;
+  }
+  if (config->cetCompatIpValidationRelaxed) {
+    ex_characteristics_flags |= 
+        IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE;
+  }
+  if (config->cetCompatDynamicApisInProcOnly) {
+    ex_characteristics_flags |= 
+        IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY;
+  }
+  if (config->hotpatchCompat) {
+    ex_characteristics_flags |= IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE;
+  }
+
+  if (ex_characteristics_flags) {
     debugRecords.emplace_back(COFF::IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS,
                               make<ExtendedDllCharacteristicsChunk>(
-                                  IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT));
+                                  ex_characteristics_flags));
   }
 
   // Align and add each chunk referenced by the debug data directory.
diff --git a/lld/test/COFF/options.test b/lld/test/COFF/options.test
index 0dd889042869a..d131169eada61 100644
--- a/lld/test/COFF/options.test
+++ b/lld/test/COFF/options.test
@@ -60,6 +60,46 @@ CETCOMPAT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT
 # RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONCETCOMPAT %s
 NONCETCOMPAT-NOT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT
 
+# RUN: lld-link /out:%t.exe /entry:main /cetcompatstrict %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CETCOMPATSTRICT %s
+CETCOMPATSTRICT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONCETCOMPATSTRICT %s
+# RUN: lld-link /out:%t.exe /entry:main /cetcompatstrict:no %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONCETCOMPATSTRICT %s
+NONCETCOMPATSTRICT-NOT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE
+
+# RUN: lld-link /out:%t.exe /entry:main /cetipvalidationrelaxed %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CETCOMPATSTIPVALIDATIONRELAXED %s
+CETCOMPATSTIPVALIDATIONRELAXED: IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONCETCOMPATSTIPVALIDATIONRELAXED %s
+# RUN: lld-link /out:%t.exe /entry:main /cetipvalidationrelaxed:no %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONCETCOMPATSTIPVALIDATIONRELAXED %s
+NONCETCOMPATSTIPVALIDATIONRELAXED-NOT: IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE
+
+# RUN: lld-link /out:%t.exe /entry:main /cetdynamicapisinproc %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CETDYNAMICAPISINPROC %s
+CETDYNAMICAPISINPROC: IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONCETDYNAMICAPISINPROC %s
+# RUN: lld-link /out:%t.exe /entry:main /cetdynamicapisinproc:no %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONCETDYNAMICAPISINPROC %s
+NONCETDYNAMICAPISINPROC-NOT: IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY
+
+# RUN: lld-link /out:%t.exe /entry:main /hotpatchcompatible %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=HOTPATCHCOMPATIBLE %s
+HOTPATCHCOMPATIBLE: IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONHOTPATCHCOMPATIBLE %s
+# RUN: lld-link /out:%t.exe /entry:main /hotpatchcompatible:no %t.obj
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=NONHOTPATCHCOMPATIBLE %s
+NONHOTPATCHCOMPATIBLE-NOT: IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE
+
 # RUN: lld-link /out:%t.exe /entry:main /swaprun:CD %t.obj
 # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=SWAPCD %s
 # RUN: lld-link /out:%t.exe /entry:main /swaprun:cd,net %t.obj
diff --git a/llvm/include/llvm/BinaryFormat/COFF.h b/llvm/include/llvm/BinaryFormat/COFF.h
index f3b5d5e3f23c6..e06fc39b5de23 100644
--- a/llvm/include/llvm/BinaryFormat/COFF.h
+++ b/llvm/include/llvm/BinaryFormat/COFF.h
@@ -694,7 +694,22 @@ enum DLLCharacteristics : unsigned {
 
 enum ExtendedDLLCharacteristics : unsigned {
   /// Image is CET compatible
-  IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT = 0x0001
+  IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT = 0x0001,
+  /// Image is CET compatible in strict mode
+  IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE = 0x0002,
+  /// Image is CET compatible in such a way that context IP validation is relaxed
+  IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE = 0x0004,
+  /// Image is CET compatible in such a way that the use of
+  /// dynamic APIs is restricted to processes only
+  IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY = 0x0008,
+  /// Reserved for future use. Not used by MSVC link.exe
+  IMAGE_DLL_CHARACTERISTICS_EX_CET_RESERVED_1 = 0x0010,
+  /// Reserved for future use. Not used by MSVC link.exe
+  IMAGE_DLL_CHARACTERISTICS_EX_CET_RESERVED_2 = 0x0020,
+  /// Image is CFI compatible.
+  IMAGE_DLL_CHARACTERISTICS_EX_FORWARD_CFI_COMPAT = 0x0040,
+  /// Image is hotpatch compatible.
+  IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE = 0x0080,
 };
 
 enum DebugType : unsigned {
diff --git a/llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test b/llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test
new file mode 100644
index 0000000000000..9807bfe5686ee
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test
@@ -0,0 +1,16 @@
+# To regenerate has-cetstrict.exe
+# $ echo int main() { return 0; } > has-cetstrict.c
+# $ cl has-cetstrict.c /link /cetcompatstrict
+RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cetstrict.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x2)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE (0x2)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 02000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test b/llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test
new file mode 100644
index 0000000000000..18b3ec70177cb
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test
@@ -0,0 +1,16 @@
+# To regenerate has-cetdynamicapisinproc.exe
+# $ echo int main() { return 0; } > has-cetdynamicapisinproc.c
+# $ cl has-cetdynamicapisinproc.c /link /cetdynamicapisinproc
+RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cetdynamicapisinproc.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x8)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY (0x8)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 08000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test b/llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test
new file mode 100644
index 0000000000000..25cf1db3464f7
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test
@@ -0,0 +1,16 @@
+# To regenerate has-cetipvalidationrelaxed.exe
+# $ echo int main() { return 0; } > has-cetipvalidationrelaxed.c
+# $ cl has-cetipvalidationrelaxed.c /link /cetipvalidationrelaxed
+RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cetipvalidationrelaxed.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x4)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x4)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 04000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test b/llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test
new file mode 100644
index 0000000000000..87208d24f9fee
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test
@@ -0,0 +1,16 @@
+# To regenerate has-hotpatchcompatible.exe
+# $ echo int main() { return 0; } > has-hotpatchcompatible.c
+# $ cl has-hotpatchcompatible.c /link /hotpatchcompatible
+RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-hotpatchcompatible.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x80)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE (0x80)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 80000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index dce8e60bda1ef..2f158e1bbe781 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -414,7 +414,14 @@ const EnumEntry<COFF::DLLCharacteristics> PEDLLCharacteristics[] = {
 
 static const EnumEntry<COFF::ExtendedDLLCharacteristics>
     PEExtendedDLLCharacteristics[] = {
-        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT                                ),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE                    ),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY       ),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_RESERVED_1                            ),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_RESERVED_2                            ),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_FORWARD_CFI_COMPAT                        ),
+        LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE                       ),
 };
 
 static const EnumEntry<COFF::SectionCharacteristics>

>From 884e21f4ffb9db1cb61183d11866674630942ee3 Mon Sep 17 00:00:00 2001
From: kkent030315 <hrn832 at protonmail.com>
Date: Sat, 26 Jul 2025 22:23:57 +0900
Subject: [PATCH 2/5] lint

---
 lld/COFF/Driver.cpp                   | 13 +++++++------
 lld/COFF/Writer.cpp                   | 13 +++++++------
 llvm/include/llvm/BinaryFormat/COFF.h |  6 ++++--
 3 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 8cdadb2068ccd..0f064323db46a 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -2145,13 +2145,14 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   config->integrityCheck =
       args.hasFlag(OPT_integritycheck, OPT_integritycheck_no, false);
   config->cetCompat = args.hasFlag(OPT_cetcompat, OPT_cetcompat_no, false);
-  config->cetCompatStrict = args.hasFlag(OPT_cetcompatstrict, OPT_cetcompatstrict_no, false);
-  config->cetCompatIpValidationRelaxed =
-      args.hasFlag(OPT_cetipvalidationrelaxed, OPT_cetipvalidationrelaxed_no, false);
-  config->cetCompatDynamicApisInProcOnly =
-      args.hasFlag(OPT_cetdynamicapisinproc, OPT_cetdynamicapisinproc_no, false);
+  config->cetCompatStrict =
+      args.hasFlag(OPT_cetcompatstrict, OPT_cetcompatstrict_no, false);
+  config->cetCompatIpValidationRelaxed = args.hasFlag(
+      OPT_cetipvalidationrelaxed, OPT_cetipvalidationrelaxed_no, false);
+  config->cetCompatDynamicApisInProcOnly = args.hasFlag(
+      OPT_cetdynamicapisinproc, OPT_cetdynamicapisinproc_no, false);
   config->hotpatchCompat =
-    args.hasFlag(OPT_hotpatchcompatible, OPT_hotpatchcompatible_no, false);
+      args.hasFlag(OPT_hotpatchcompatible, OPT_hotpatchcompatible_no, false);
   config->nxCompat = args.hasFlag(OPT_nxcompat, OPT_nxcompat_no, true);
   for (auto *arg : args.filtered(OPT_swaprun))
     parseSwaprun(arg->getValue());
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
index 5c72cca522feb..103dd7e392ee5 100644
--- a/lld/COFF/Writer.cpp
+++ b/lld/COFF/Writer.cpp
@@ -1248,21 +1248,22 @@ void Writer::createMiscChunks() {
         IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE;
   }
   if (config->cetCompatIpValidationRelaxed) {
-    ex_characteristics_flags |= 
+    ex_characteristics_flags |=
         IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE;
   }
   if (config->cetCompatDynamicApisInProcOnly) {
-    ex_characteristics_flags |= 
+    ex_characteristics_flags |=
         IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY;
   }
   if (config->hotpatchCompat) {
-    ex_characteristics_flags |= IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE;
+    ex_characteristics_flags |=
+        IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE;
   }
 
   if (ex_characteristics_flags) {
-    debugRecords.emplace_back(COFF::IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS,
-                              make<ExtendedDllCharacteristicsChunk>(
-                                  ex_characteristics_flags));
+    debugRecords.emplace_back(
+        COFF::IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS,
+        make<ExtendedDllCharacteristicsChunk>(ex_characteristics_flags));
   }
 
   // Align and add each chunk referenced by the debug data directory.
diff --git a/llvm/include/llvm/BinaryFormat/COFF.h b/llvm/include/llvm/BinaryFormat/COFF.h
index e06fc39b5de23..64fe2160f9970 100644
--- a/llvm/include/llvm/BinaryFormat/COFF.h
+++ b/llvm/include/llvm/BinaryFormat/COFF.h
@@ -697,8 +697,10 @@ enum ExtendedDLLCharacteristics : unsigned {
   IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT = 0x0001,
   /// Image is CET compatible in strict mode
   IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE = 0x0002,
-  /// Image is CET compatible in such a way that context IP validation is relaxed
-  IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE = 0x0004,
+  /// Image is CET compatible in such a way that context IP validation is
+  /// relaxed
+  IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE =
+      0x0004,
   /// Image is CET compatible in such a way that the use of
   /// dynamic APIs is restricted to processes only
   IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY = 0x0008,

>From 9e6664e4bf8bd9ab916a6b8befa0c918189a9275 Mon Sep 17 00:00:00 2001
From: kkent030315 <hrn832 at protonmail.com>
Date: Sun, 27 Jul 2025 01:19:33 +0900
Subject: [PATCH 3/5] turn off linting for COFFDumper

---
 llvm/tools/llvm-readobj/COFFDumper.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index 2f158e1bbe781..96e0a634648e4 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -412,6 +412,7 @@ const EnumEntry<COFF::DLLCharacteristics> PEDLLCharacteristics[] = {
   LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE),
 };
 
+// clang-format off
 static const EnumEntry<COFF::ExtendedDLLCharacteristics>
     PEExtendedDLLCharacteristics[] = {
         LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT                                ),
@@ -423,6 +424,7 @@ static const EnumEntry<COFF::ExtendedDLLCharacteristics>
         LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_FORWARD_CFI_COMPAT                        ),
         LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE                       ),
 };
+// clang-format on
 
 static const EnumEntry<COFF::SectionCharacteristics>
 ImageSectionCharacteristics[] = {

>From 539cc6fe3d2b51fd4982cca58ae3336e1a12049b Mon Sep 17 00:00:00 2001
From: kkent030315 <hrn832 at protonmail.com>
Date: Sun, 27 Jul 2025 02:51:52 +0900
Subject: [PATCH 4/5] fix test

---
 lld/test/COFF/cetcompat.test                    |  15 +++++++++++++++
 lld/test/COFF/cetcompatstrict.test              |  15 +++++++++++++++
 lld/test/COFF/cetdynamicapisinproc.test         |  15 +++++++++++++++
 lld/test/COFF/cetipvalidationrelaxed.test       |  15 +++++++++++++++
 lld/test/COFF/hotpatchcompatible.test           |  15 +++++++++++++++
 .../tools/llvm-readobj/COFF/Inputs/has-cet.exe  | Bin 94720 -> 0 bytes
 .../llvm-readobj/COFF/Inputs/hascetret42.yaml   |  15 +++++++++++++++
 .../test/tools/llvm-readobj/COFF/cetcompat.test |   7 +++----
 .../llvm-readobj/COFF/cetcompatstrict.test      |   7 +++----
 .../llvm-readobj/COFF/cetdynamicapisinproc.test |   7 +++----
 .../COFF/cetipvalidationrelaxed.test            |   7 +++----
 .../llvm-readobj/COFF/hotpatchcompatible.test   |   7 +++----
 12 files changed, 105 insertions(+), 20 deletions(-)
 create mode 100644 lld/test/COFF/cetcompat.test
 create mode 100644 lld/test/COFF/cetcompatstrict.test
 create mode 100644 lld/test/COFF/cetdynamicapisinproc.test
 create mode 100644 lld/test/COFF/cetipvalidationrelaxed.test
 create mode 100644 lld/test/COFF/hotpatchcompatible.test
 delete mode 100644 llvm/test/tools/llvm-readobj/COFF/Inputs/has-cet.exe
 create mode 100644 llvm/test/tools/llvm-readobj/COFF/Inputs/hascetret42.yaml

diff --git a/lld/test/COFF/cetcompat.test b/lld/test/COFF/cetcompat.test
new file mode 100644
index 0000000000000..b2ca293771340
--- /dev/null
+++ b/lld/test/COFF/cetcompat.test
@@ -0,0 +1,15 @@
+RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetcompat %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x1)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT (0x1)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 01000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/lld/test/COFF/cetcompatstrict.test b/lld/test/COFF/cetcompatstrict.test
new file mode 100644
index 0000000000000..31acf13010c24
--- /dev/null
+++ b/lld/test/COFF/cetcompatstrict.test
@@ -0,0 +1,15 @@
+RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetcompatstrict %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x2)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE (0x2)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 02000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/lld/test/COFF/cetdynamicapisinproc.test b/lld/test/COFF/cetdynamicapisinproc.test
new file mode 100644
index 0000000000000..22edd22587bb7
--- /dev/null
+++ b/lld/test/COFF/cetdynamicapisinproc.test
@@ -0,0 +1,15 @@
+RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetdynamicapisinproc %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x8)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY (0x8)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 08000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/lld/test/COFF/cetipvalidationrelaxed.test b/lld/test/COFF/cetipvalidationrelaxed.test
new file mode 100644
index 0000000000000..e5a19f571f051
--- /dev/null
+++ b/lld/test/COFF/cetipvalidationrelaxed.test
@@ -0,0 +1,15 @@
+RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetipvalidationrelaxed %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x4)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x4)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 04000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/lld/test/COFF/hotpatchcompatible.test b/lld/test/COFF/hotpatchcompatible.test
new file mode 100644
index 0000000000000..f705584b26617
--- /dev/null
+++ b/lld/test/COFF/hotpatchcompatible.test
@@ -0,0 +1,15 @@
+RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /hotpatchcompatible %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
+
+CHECK:  DebugEntry {
+CHECK:    Characteristics: 0x0
+CHECK:    Type: ExtendedDLLCharacteristics (0x14)
+CHECK:    ExtendedCharacteristics [ (0x80)
+CHECK:      IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE (0x80)
+CHECK:    ]
+CHECK:    RawData (
+CHECK:      0000: 80000000                             |....|
+CHECK:    )
+CHECK:  }
+
diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/has-cet.exe b/llvm/test/tools/llvm-readobj/COFF/Inputs/has-cet.exe
deleted file mode 100644
index c77060d976d2ff57dd628bc97ce1261aba5ab399..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 94720
zcmeFadwf*I`S`z^WRoRiIYC(nBC=x8XuL!tl60Z$!UoR5M&kvgUSko|YL&t+U=>Z=
zM6)?=OIvO2r?&d({VukOfVT~iT)2Zb5Eazgo^`!MP)I=8 at B5jvn*`LpzOUcw`{$1r
zCue5P%ri63%slhlX14aq6}DWP&6dZLPTOp&dCNba`upGi^zwPwxV6J<PY&69@@ji%
z^U0Upbn{}*!bP{=xaj)tdgfh!+ikapJ>Q=1Sroa=bMtMUz(tpOzI*!(^Urp<3QIGf
z?;cSW`$lBO>)Ge}vD0=}5WjwG&F-n{J$?6c>OFIJwaPd1_1k!ROQ!E0r{2?cpP}A0
zyU*j at Q!;J0SG@!3eaX%9ZW7qX_N1=HX1n3OeA_EKzjJN&TaRtLZD`K0QMTtvS!bo*
za2)Sq753TXCE*;KEng)KylpG_DoEsCuC2Z?TPRbOR0~M<CHXQb6145T%x)`Fq0FBK
zyX_{|poGWxPNj(&yRB+a@|S`$>^7%rXy(f{o6SRezwY1J;rYwLd at O!W{_sfOGyNc>
z{&{S+`m-0^aDDiCo9(0rNCKwq2Rs=Z5mNtrOq;W<Y__g3B-PW9Lf&<Q8>Hq|;_QW1
zM%739Y8ytrE5DS_ciklc|7Cug?Lj`<R`6Z=a?_XdoxN!Ot+&s!DID3rmCZ at M?|doW
zGy(Jf{~N$SWukqP?@~SbfoF{%%UpQ^e{OWxY(|&)=>)<TNqDFE*VAk^l_OSSb}<G`
ziSS~xy})ME<E~y_<~$~id8$=#)L5IXIT5);#m)I7HYdVG<jf&x{!OazNN9}w`G|s4
z_Lox$=aT?rhxy*g#9kJVKV#AZD_ at Vk=((zW4OQ99No3o!X%nq3GgD-$Oz^d=UB%nU
zZ~l*hDT&EW;7Z=u)um277A`Hmf@~F5Xa7l;n-W^n1-yOd9q_e;OFibdiL~xCT<^@a
z+oFATt?3jJn!6*jIvpEHB0`_tliO6+9lXrno~$}pxElItOYX8Vyqi!NHt{mYk)hKO
zr?kx8l+(A$uIg&tXg)@Yc at fRkjh%Y5$`(FJ2O0b93J=HCR3`lKx}3^x-N;S5mkF%$
zL3u|=-VQ6TQ#Xd1hfX2Kw>$!^*Zf_nyi3f7c!!Km-FV4xnng#_X@)asA$pFl=|IF`
z{()kZJD#wc7tk7`JvEvfr&&3?4R at 7#Y~)!?9;011t}gZIMz~Z5xfR!C#^VpUtW9fZ
z9wBIKH2+5K6}+#Jw;GqL0IddO5iQ7!-A@=zX2!|$bt7*=1*p*t-I;Re-mdV7%0!Q@
zJ>k0H3cD at x(RtPYue7HQGM3hS)mAw!;$w67Ga$gG1=?F2Q;D0ur{U(eh6n;9dFLfk
zBTUa3Dl(+9+q{|d)cdVW6`4)_uo|Z1QPgJairmPMFa3_$r)FKata*2&lzIEn<p7=n
zeP$*W6F(sFvs65MHg!}k&~A5p?*-{$S9-s8kK;Kq=rKnJFNw;V=vH1Gj-T__zS3?r
zVGXUdnF~OU!bwTUXj@%-rOmdW+Hw5{>2ze7KF{?a0jAu=^2*)NSS@>3<hs>EDYT&4
zUlO at 2RK8Ao+CM^%UtFT+ZX=kl$BP<5 at uCfSY(#0$yFFZD%qj|b+ZGiX)10|&A#Y-l
zQ;)7IOYN!Lp*Qca at D%-iscpGntPnis^UhIdFKM^%-MY(sm&R7^V8n(t?T!@a_q#jh
z&@Y8bD^J6eXGpQN?h5BM?T8eaYe5l{d_Uuy?QlQN_2`tJk~yt|^#b!jmT5|3j)L6=
zlFfr8NL{)Xcu6<bWd}^nrDxJ$;^59PiGw at SU3@8PSL at p|M>jqogGV<Uq1m+Tne%?V
z=d7QXGc4ZrNLY`~FJbA{mZaS$JtK3irbLg`6sO%zVn#wgSHhpJRpEH8$BMrp at fr`s
ziuJa=9=(!qWlgbO*`}|d75oFzDMTs<s-nqljCS`dn!tL|^@H1p{zIbR>Y8?;xvOQ;
zG67fHeCkcN+h76o^n_Mw+_Y(>y?xU<0(#uBhV=ISx6r)*P^}(ymYV;z0y!2ADihU?
z3Tn|FOi2E>=Ue5r%R4%u5ir0JIygs<|FzV27$A)wBp6d;*P2l>4K-*Bqnl at J+<f{P
z7P8G;PX$bocx{h=^)|kmCo+^0O}pP;BRKq}Nj5$H&`v(;#zqKM+Pzc00B5ouy`i*<
zukpR=tI8BIy7XA6v?2sCiN{U(K(tI?O2AXuopwK}KsR^E$9Sl;PLDN9HPR53=wJP?
z)EZ4d(VJVOoz1LQ-LOi;0;TnxfzmoRM4h*E+m?1;3e0G)U61ocCyP&y*Ys!)f{;L|
zE|pG`N~z74cArC#m0rXwcgFQx^94wjZah-D4P5DsFAB=8VeFEXij=8+NFbC51p57r
zHP#AtMk at 4q`eZ$~E3;-#9$2#@qidRI*RUn7=o;apZQ(ptoweea&WyVYQYG`@&#M(}
zka3f(%cC2kb)&D*J8$uK_eM^P-dU0t8EIVViQl{T(5?TD_U0^cHy*P2er^xDWb#$0
zz0q at ByLm*Rx<ogwbE<t-XD7d8!ZEPpV}EikvoJp80bZ%&*mk5t`Dyp((zj^4Q}^y!
zlvIFaE?;NOC#zlYu{T;}>yIg$_%CIPWlt^<0L7Jw%5Lq~0i&&^a(BSk=x^+~Ej<5L
zf8!@J=ie3y7(0xf%5Hyry1iy-m-cIa<G!13n;(qjmDUX10B-V(K4y<Ic3Ejrq)v~z
zDrZ7kCiF~AYf}>Wc3Ze?N_~EgEqwBnh4MPVv9j;;bhOvAv{Z)`$n5IcZ`u}*2pEp5
zFSgtK(Jp%+=D3((s(>_|z-nPW0&)GYx96@?rLEK+Fm_Ar*}Ap0?+#g9STnSZvTllW
zIv#}~ml+s{xgH^?t^LmkEh=-Cg!@T&hM8-Njcu^Ljaj^q949XR4&d$E^tN|A`p|7U
zy<*q{rJnKa-)N6qXgDq*ceKmd>F^Vfg&K2ACFDQQ?g`7}&E3}NIF$q at D)~HtQ+CB1
zClL>LcSW>lmoGN9h*-=~$X^-EGG+;zdIe)zd>!<u+VSA^wDqAxdwRk*R`t&jJ$7qp
zX24*|=lC!8%fR_`BUx+o1&ywt(Hk<}H#afUYK<G6wZ^2Naa~ny`KJeJ@)r1wrMlMq
z1}zdW6?*Kh(kgGI7HtJP#t}U?Z3GVIg}go5y?-VT5vN3=zmzWAb-383HT~EM7TLq2
z_zXV at 842dT7&Kl<Z);90TYh)Aak)(`i!wHsPo5?_>{Q%k5;9-<lcH_I*2-Y$#^$tp
zJIO}qaIs&};$ZG30GV%q&7d*U7c$lxmmMw+8k++~tu2`Qve1b#zLZJ8lXiQb0_a=h
zPIn|H3YAPG*8 at 3d+~WxtLxbg?`@NrN(Z7*YW3(Bs`XPI{JB+|fRu^Rg5Ron}z9(Q@
zljo1V>j?*HDtFYd-p=<M8}!_6Bd{?~_x3ItOMr#fyLbdeimL+~iz9`EiU<{jo&NN?
z8t=A6oBT$1jdy$Go010 at MHGmX*1*7=nHn3PVSmEzkImErQjUJs=Dz4pZ=<1<N_Vj4
zXzab0(+!1-P#i8VXk1khG;XO18jA_P>%Y!_t^XST)z`7t${ut-gPh^8jx&c at kplB~
z1X3TUz24%-o4O-~<|I<hR{mr at 2tVH39lo*UGNx1X1HG|YjoPKrJ0NDYhTn6R$MKWV
z(6Xh>Eq{fOph^0?y1eEc;o*Aj#Z|fyEHh#1Y$;Fbqyx6%Fci^WrW;Oy3fZ&khL62m
zXNZ{5y6|~=`khR>;hNYvJl2+Jr7gD7m^H#me8s;73$$@f)Mv9 at 0V|^B`u;x$jdqZs
z{tbK&8N0MqJA!NMnSUYe at eRRfZ?SgYK1weLYPYp5(CQPx#@+_vON*1YNb*4W1CBRC
zhzXIOX~XTI+%`Sh28Q1536;0ivcB4q1>q?nuj|@rtj_!EDXN`r*G~5r>y2#<D&~KT
z=*nQan^%Ho8_(Va{OO6j9E|S0$AXd<K3*Fq1#DC!bx<JkDc`kl{xofPz}`dW+O=^$
zn^tbu$_L<=1HasYUk?0o;FtUN^7KSr(f-~mHKZP)JN at _y8rws0*H7P0r>7fDjUvH^
za=U{3H`@K_w->C?V;6rCySQ&b?BXw4E>5>g{L|RQpR=!Ad{7d2?~h%4Sc2NPfY6SM
z_r)$gME)auE0$+Ltj^g|SD5{-;*zeD{-yB|9s{o7veJ?O>$o`B*(Osh<;;xZifn=G
zcuO31^0R+Xb=>`(126*Kb>UM6Nh~qNi+J_oMfti{cP=SdBWjz?r(5epX5?^~u at S<L
zBG)*~BM8UVL{sbNcrwcbcc?V;vXg|`Qm5?q{qm|OI^|v;8(O3QGP8mbX?OcdD2VI3
zq$28F0v*z$8`6~rq;)r1 at Qj|+HHK?8In3|#ojNXD+d$d)tVXkjY7Eyod=t5oPo=uC
z&Aimg#<t(yIei(-4P4J#I&fTuE0?^LJIo5H3Bj(4UKm@`?f}iujSh<=U<;|D8?Xgx
zT|s*L0AiN1ykd at ZQ`xh6)8Pr=F&{1!(e+(EQ1`G-$IT>2eegg9rjtfyBt8YlaNQ?m
z`_kbe(?gM{D?*&Sne{4ogz==hvjMaAF%4?-h6TDX?U+WI0xSGf7Hmd_G{%<lH8qw2
z+8+euM&zbn at N}i!(Z|8E%fV+z=$?M*B{MExwGVoXzEFJ1U*1ZmYmK*qhRIeKG at 8;Y
zZ?W5g(Jkqqw?k{{qYa>2YZhuy>uuAT;P!1sgni?YgAbEaZ{8gq7WBTQHHpS6*(%wL
zXAeHSSJ>a6vDLp?G+SwRDb2HnE;1?YUiEijZm)=(5r|JOAQvdU1!>g$6{7@#j|V%d
zblUv^IVqRQsoYItkG#nc(?3_x=m_55q*{<d1JRz1$kZ6Zc&FXJk%D9$p-0!}1-&0=
z%`;@z+bs<~i5*2{x=&?F2o3HE-v5B=d#bSZ{wGyPn2f98zKvT;=L)+~FLPzkzGBIc
z$b(Rf7oVrY-J!VSp9JX6lf2A(m?F|5<iw3q_A1!pd4h;ccn{kxYsZ44z&u1TrRxDw
zqXp?+fiw|FzyMZJw(tpq0R3G78U*JWfy0!t0Vim|nI&*O{NhV+b_fnK4Z2*xQFA84
zyT4A~$|z~{(W!9)l?5eGhYGk~0Z#NZTcu^rv|I3*g8Lo`oIy<Ym+6Dw=mGG5o&zv7
zI9?^dHboUL6I#R0Ycr=wQxT;V?4bdpBkevd1OCy!X2B0y!9s<y{|4y!6_-P~tsO9E
z?A!m_YqMKmW<O#73mH3P$6In4e?3di*2}jqcFm6G6+`~Cdu3f_Hb3n?jmQDV2Q_SX
zTGJ&kW~s-t;+$z(aVV#UjftHoWbe_9w)TPgiP6y+yJbIlps|kqB$(UHM$%8OwWkXg
z#GEv-Q0GM~pskvgLsFo{m(#ATDr|AK at 7He6K`mozU$7!%<Y-UNa*}CQVJK!>5Yx%1
z7q%OPQhJ=tQ04Pf at jUWN{OM`L7X)Iyy!LEd%I9YiDWBgCT*Cre1Xv4dQKr6Cvz(;0
z=+1%qGgY at sdnjiWk@~Z6o<@J8;83p)plp8!eWwkV3>%aw&{8+7T`SHTp5Y^q4m9 at t
zGBhS{_ei>I{C;it&;jN`YZAs(xCNMuPpa*<C8Lt-NEyJtuoK$pK~<h{8a{~gXdr!s
zRvZ}4Aclr#c#y|PTq%hONfd4*LCQ8s*()hMk-rH at VH~uwwp3BJUBReXoaI$c9K=s(
z!~Lr6EYtF_Vp?3Y;(2z!6*Fyg9{(WzMc5PCThcUKw66kR>g{iLxxaz$$Fy6qIY+gd
z;yx*^xSpfh|4aCuWEHef at h7l0(zhNxnk<$+9B9+RqnNZ7&iO|5!<}gPYRlWR9NkUY
z>GqV1A%(vI8O7S^Llg{Y=U%-r*<g*yLJ(IkAL`_T&*JgwNc2f!g(P|?UO|dSQi`?W
zqT!Lh3&ae1vj{z5(0B^}mn3W6aNz-a6gr)Lt+-HT28&P_!7Lf*e-D(Gy;tdTgr}+!
zp30{iFc59#kKvWl+stQ#WkUEd_{<moYOrWCBa%A6ZU5iEn`Xhg<>-<}*MCec+R=H1
zpFKK%NZK2KCDakpq|tAFCao1E&^FU9r86zhH2Zn^teSl+9{^mBZtOGq%vo5zYD8l%
ze3jPpO~{%^CPKFw6ZAa at 7wD?4l8q-(9P}n4`-9XiS&t`c$nZI9C6Z4B0_upkLQoHX
z-1m9%GbxP at E8;}Uocs?l-M9rNaj`SHEYGPm3oF68sL<m-5*{%H83{UNq3GTXk^PNT
zam<ItoyFnrH&*?CVEC5CsvpYx>c%SaC&IOjRX>vVHyf)EwG-iU8moRHZ%<>@lR3PH
zH&#8x+juSFTMH~(>Vmbvv8B#g+bplLwZg5WPF~w2uM^fb%Io;G_sOehZB$;4wfFLh
zU0S?Gc)XyIfUo!i33nE!iVZzada4qCK%ySI#hE-_c#K4byS!CqP?!nE?kd}k;W){U
zYI9S}HB!BG!#!srjO7Ns(p^MK^zEtoOB>K{iz0)$tH)fQ!NsySxX&UVi%?~Ko3#F{
zkzBO1s4_(5oSu+RJ2q_!8ICW`m;Bv+W7`@ZEswr4wR}VHrS96wu29VNm;e>{#*2Dv
zE(3BCvd2P{%ga2dNh~FaCuH1JTCW(xogrhN?4Z%pY{5=D!wg at wBV3@zP6$RjoWAou
zY?wMeqWPLW^sO52(;i%}r#n-Vg6RU`v<g}aT5@${q30)&Y-};j^A(48+%ezzh-oK$
zB2XeLeGNxE;e7rMiTqZ84C$Djwxs~G6{A;cfmpzH(u&ERaNgu0==IZ`tp%x1B)N^`
z+U5h{f?(_<X<RU!SE>{!l?lu=>CSYbRcq+GI{axv-}uP+P3t05cpyAXk6&bOs2(42
z(9P74${i%qk&f+Vsu+DeEy(Z4y_#OoXw<A9NE5;{#1!SE4O1o$30H%Vvs8aoZ(9qr
z=ex`=DhIln?i`E_>3q5~`E4dk20DsUfu1~xB<Vn2FnX#@S}#+{Cmg6QQwd)5E_hMq
zlVU@!&e}rt)s&Ne<3dakZ`a}}=$=`0!Gmm!U5n4r+uqKt)gEV-w4vM&dfS$q2pgg>
zV{TymtL1N2ohU1`9bP*jRVaItq8oEAzd}t5Wv!^FOb3iln!B~8OPLFCKWa()l9A>-
zz{IZ`iITSZ1h~4xNoK6g44wnX_}B}eD*n}Zq`)m=*7`Tb65W`14`PuX8#`BCblTyo
z`er0oH}<3I*7ewOUnpMdQ|c>`mSW3wI>i*KfiVmj%YBv}OgHA}ND$_J;k6YFi<FqJ
z(u8M<m<*NOG^n1YCBFl9E{x~(Dw7T1jV=Aq&HbOJ)BflYJBsNVA0r+c`w9(?IXd}U
z*`2yskI$*1epd5FQ=35VdSG|a;nY@{dB7I#p08%Fbo at waDorBmR#}qO-w->p&#9-|
z^y;d}r!m)J1yezbxo;z4woxn#;wcrry0jkqCk9Iy<?F5$-TeShUYXXbr+hdC9dRDB
zS~vfF7I^;oc>+Tyc*GIinogZ2O=YQp*G$SVOgdXB#cL%m1|ewGYx<?xm|Ic4Ta at b9
zy&^*rFoAqhdBE6GYjpTqN2W>}4o%VHe!H?BL4cTUdOG2+I^PyK7)&QZxe0%3F;=ym
z^nI<6PqTh>wvpjmLq at N^HJ^2KogUpx!Sxh8J93b~<SF5aS*53WmMYRqFTxY3R~Nah
z%e==WBTLWpU~FnI+UYcxlP{F}S?Vv+Z`cy)-_4{!HH`g)uTgN6Fb5D3<&;pDMRB`q
zfGGAoO7Jv)HcH85q6_g3AYSR|b_t0<p6fCT1!Vjlr*1&$pbAp+ffDIqKOz+kAFLPg
z>Bf|AOqSW6)|y3N7Nl7+W>~Fj9~KH_gz`tb*|~2ht$>Utc$bMaiML03c6<fZ%#%s@
zLIzV?%v at Eq(v4hnEQrb-A)|n$5XNpL+F)}B%aYQk%7WTx-ZW9+t6Cs{Oshj$^I}#^
z@>>2#o)h_)ypV|WNq8t at i0*aW?PVG|%$H>CS=`aUw=1o0PapfuaV{SOW2frXj<X0y
zWFC(;PheTorXglGCHVY4YOH+8YVj{pXWaGKH&`%tNt@!XPbB<+YM+%JlBx{X+oVgO
z<YZN~wAJy7qye;=@DrJ^)c-fanfm_+BB1II4%C02WQ{p~CNHah$;D(F7}tKiittmF
zAL_;-y}S>N0C+4gKGWMi&V`rJwV7Wq;^7kp%v0AqD!9fxmG02J2P6NsCJl3PFvl=>
z>KziG-VNa~85o6W_h?|yrJ)%!SL)p?;{okfQm!f=f?M<`VLoW=!r);Pnq6#6D<Dv&
z=<-(JhA|XMF=*QM>opptJc&$Y)0(NtrZnyMJAOh6E5UH$Vsbv%{K=W38WVoRaNi@}
zyxYRZ>y_*Dm%7wq5<}zdzXE>TwUW=NA{-VXE at Eqmnb#DkrsU#D5;-36|2Zq?PkEU?
zm*I=M*IG$`k)-?72v2uP_F)~4k$^yVKE1eum)fz+3bbY`7 at x{SW1lGLm2FvclL01v
z2|Rys#^_#W?80;rnI-Mh9-)1V{gi$~Xyws{(9!`z=;*8=v^Z-BEns>4F9>4SD(R>x
zW5U$zWp8<zxQDPAir4HV%+jmrVJF$CBns at u+hR2@$7*((bLdobxyKeBDq~PjN9wL=
z2PT-e_3MVrC={NZHe9Aux%GTARy at n!w)dR}*4ZP&)9&OiWE8uMm(uQ!2m)cK<U$wr
z8c}eP8COMLLfDn7m{M`~xBn)qKkZ&eCU7uL#EGg*dfI)1043QeaQ+~8QlFuWsClN!
zM}>FcRU0S4R<0Fssj at o|pO#KG(Xq-MDq>GAB|;mR6XGG1yh%oqH4U$N at fk9sw)>65
z8XtwDd#9Fng{mFr0WNYJ3~{h>n;vtYLR76mvz9p{a4L5s$19)$C*EjFq|<*&PsIo2
zxW+zP0$W<){jTlI5U7jWeDOG3nrtJ1Z~lBZlUYIvoUCQar`;R=hm at Ejbpd)+_j)Vx
zZzBC_Tk&mpiUjdhu-^ST at BT%G1*(q~wg3XX0={Q~Y`F1>|2dl%nLU)eN|L-gVIQh1
z;XI93g}RQMDs|_|N>06MXy*5Yz%v<qvRCP}6W1ktFJwmC at A#IqA!NKE&0a04vfB9U
z;@bFhCo{Y%7{9bcgv4Ncw$r>yh@(ZfvbsTY50fHbH2e`Y9 at 0U>J2?klAJZK at oDN?A
zpIaS0Y!7>)hjYSi^T(hmgRvWn)lQWf>yPgJB8Ba*D<=?BAW{WUS4jmJi~Gf?!{QkY
z$6A;_OQ+6iU*a}r48R(bf#tm4^`HnpXd0A1OxzKZLSIL-MzCWknsq51hKda}FDK<F
zw#DL+`iH{PPw#e~ohjQ10#(@)zOpP*(5<D2LGS?<zpG?qd*z2ARFg&tth&}DuACvm
z{mautzM75nw@<IEtgYOj8&?%$1%(a<D__ at N+Ni&@1$isv-KaGqliBq0w^oZfM{hgK
zj<8cV4znrr3W3Na6zJ8xhZmg`h}W?Bz9u~G+tXzgg^V8aH{c72Aj0l<XP$qxFjAR3
z&-LfI$I7EMZQv`dOP^|IQWU)vjGuTUXdGaM1<Sh;tPAwEWG-!@?#;s76bFrUOxXSU
zUnsPJLjKi0AOz!gII;iwjdf}*Vnn7{^e&+m<Bni#IJEv3WLNzyZ)?RmRzQdKO5{YR
z9y?cz$A<e3$&m%Y_pN#*yBJ9RKH%I}Wxoc>6BPHib_v$No#7N_|69eW+zfN13$KRc
zV{u4I^2zvd47TrQ#8$<mePWH4rFYn>aN<Z!pnJ;XuUC52c6F7LHU%qpO1<%!ER^0a
zwEJbJBU`P}L!OWUKatX-Ddk4O#*vFrB>Zu(G7*YZvcaX at 5B*FK?)U+~bt9jG3UYDC
zDAe&>L)<1W^MJgy-mS=&-u2;?%J+Z?Wr|(n*LpOa76ZXnbImXXYnlZMJcMFwZuu(U
z2W6QMekU2y&@U9S at RXz=a)Pm)y>-TUc3W~jT|pP{Mld!Tt;z?GhUv~=Y`O`#C{cS5
zG{b~mc%T<`(2HW;bIqsWZ&;F50*fs^k3m2Ifkn024mCC$zbO at 3X4hjhDdwj!taI5`
zm7y}TxBA%bNRX|smU&wverxFaYs}2nH;4VO))T8KW2ZC=tqOhD2wi>dbb;<TyGrOT
zO|W>)xGQol%)+e}-`6PNdcs-CEQHY9jjAh?kmX;-9>f(^$m_?2vS>D%1=FneyP5Yd
zKBBLrPwmT;wdhx6ck+`x>{eMguBp at r9(uGkyQs6+B3);a1cBcyHF!5-=sS$KiQqVb
z^sMns+C|puh0%FKJ{zuU2<y=awY+R*mz8!i^piBdN_#Ss&q}N1Wiua>wCDs~BK>`i
zySM+I<hX0Y at 8Hb8=VPp;zNYT*NSsOj1p<XLKYeC at 5w`S4tr8DYLa1)?87XDq*z9yj
z1AS0AWyyIK=_G~TlR2~kr!)u*q?32 at cp5_)3pZj;>qf#AeGpo}$e5PV=9O$P&&c+Q
z<b5`X$NZu;2Gmg~?x(lrIsGm6V7d+24=3sO?MO~|bnc?0M at o*TWa>rL7jvkeHqoBK
zHEQDy5k26j9*_AYe1`G>OuIv9{>V|Fym>dDZs`Qpx@|U}Kd$GPKZjSaJOiT#75|ak
zO_QY0{d>3KjXV6fT8aVcd-!DR2s<$Aq>7_cK4jyzMO<33<E}F08JnNF(EKHPt{y8;
zTX)L}nybgy$6Le_p~o&N7TNGsov at +l@hghWBUadGlr8s<IT07TXG}#pW|pwPMOu`7
zY`_*x^N#s9NZ(w(9Ylw}bFht`*}`MBRrYV>6-KT>$PT8v!k2*63w7&b<lW#i4Vizz
zwdo_)zj$8ZgtTU}P3h&&(uB}UF94oqdvIa^a4yl<IdVixbV^&Wxjnp<6|Rp-Al|F>
zD5G3LlJ>NH0qr<`fj1{IjI!+h>vAY>kG#hx%vj}ZU%Qv<r>XrI3_{f!1#dlR8#{Uv
z=@veiFfcq{#|t>E@|sAmL(Jc^t%?vc<CxN!G5!jEpbPC2yoB1-WRyhzKg7H?1Lp`|
z2e;zu;WSuqtbWAQ__G>L8bm3MgQWd=oREmFaK5?IX|?o`V`}haMG`$$yAyJ`GebH(
zYngr6TA`aPPFt)-NM`0ck_1vktfp6SfUz18CaCN)2tTQNV;76G{P<(i6 at lj@cCs{t
zSZsyNL at Qm*+W4$#Di)tpwjkCbLWM*LuA_b^b&2{Kee5xcab^OZ8 at j%Yc8NGct+gfQ
zj}$vEf(tWOXu=8Vj0Qrh$*u;xjppkGycH$L_SZ)rO!~|tpxic^dvs6bOSXr5V>SO$
zvvnN=hc(tJ at C*tY!G-4Xfyi8Q;XtI`oHr1;$-I0ZqMN~iNS!%(AhOInr#}*FkS>oK
zh$p~-sSyVSo(u{=H7Iyh)ROU9M8BF|@bWK}SWP0GW^)s~2+dLCMo5hTs}ob?19Y8f
zrq7k`{7 at x$U1zb4V26u4{tC5|*)ueHN3k4h*a_#V#~!uH?GCem at NJPaMMnm$n*m>(
zw0mY8GVB^Y7Jh7}xTTCU- at HJID7{({j88hUxDsca)I!6RI*|%-%`tN(Da!hvwOw?1
zjm$*zQKq5c>Xsa;Y@`?uo7Vw_PU<k<QfpyN&2AE)62}>?N6AT!)vB_ssolcmXkdiw
zo5-#k2SuuU;sJsO_Xv?Wr6UaeR1~qF9Gai7J7?u!R|t^Og)!y{3aV0g!QSAgvpn@(
z_T_Bzr>j<kZyMBm@#;2Qg{t{dPBniF`Do8%X}%Zbuvw at IO7r)QQO)l|JqDVk`5VnT
zxD~Ryr1 at f+KwoZ6YIBw}^VoeQ?cQier4Iori~H*pysyIj?c`FpzmF_X*TJ|yMK!)w
zatz at 9TJq7Fd-!JIzE%~K#-Cy}ezK}8gZrQ0LQnQO*}yE^Po#Ag!m|S~Xd_bmOWbu9
zT{cfdMHF*vIRWf5TjbP*+bkA-3^d9?6}SRhDw*X at zyrL9;rf;2SAI~Xl#jaN#IszQ
zg)7)Z{Hf<4Z|U*BmKIw+{yl1PII764S7M`TmXY%#x$QG{2{?!O=2lTHh)3;0%emgH
ze9cO!#XnYg{*Na?yyq8+%2Q`G7DH~R4rVv)elsS#_ESzp;4VX4HnyNqNV_+aE*!@N
zmI_rWm at 7tFU-lS)D4|KL7j{?HJpeO at 0RBgc8qH2=d#u at lY{l^Vr<1g!`Hx_!KTk~q
zF2&)r`(_GOb{oCu$pi$@^|bqHf-*y!(~%;P&PB;&ZV`6XI-F3s$!xn at sL&&&f-Rh1
z%W!-}{qQap1E>x9nC~HBS$psxIf-$p at GC_i)?XZ<&Dlbs=<yWYXjm=#0^xI|%k}uQ
zD^G5977H~6F37)cmG&QPky6SD<j2+${Izj|H#SfpRO#M_93$c|7ER;TT9_&}S`dfG
zsZf^syLgD#1J+VWp8{%xMk1(KdTvzm83m#_NhVrGCShJ>Sig(eacOLUI+E1S`i;u7
zp<&YP$~P(Pewj?{7HcIL5M>xix08f^5VxEkqQAo7Gk}4{TNo}+CxW@#qP=G=+86hK
z80{UtG=DXQ23vb$TYv^Al~J^Bm|vTbX!jd|w!EWhI;QlrOkY_L5bnQ>LfM&z&Ac>L
zW&T?}a8`jd!Ec@(pX-4ZE(I)FpFyPC;(MPS1ZQ499BDqp23hB4gT7DAe)p*F7GE9$
z$td^OScb_enYLFyxF6H~qUk~H at tsPI1o1-eu#;7MAwm#sLQ>gie#9yzd?J#{E$DSQ
z^P(&_Y4>yYTQg&O%4Oa`t2=G7;E_bthMw8;C#gLjGqo^gt}_6Tc0WKtFfz)VE at Noy
zOuNOv&h~vL9D``QvUW!AhQ&(O1g3X`_A at bnf0cdua+$!DyZs_PqfPikWYqChSC$D+
zFss;%P)o~oWqRy77Up%xo!5Di!&u~1qa$<l>MKhkGY0Yot-Q)j&dd{@EH;zfXQQ0d
z+Hr74^qnH@!8VNX4<=e>0`Z~}k#daJlh3O~JQKg&lGLxnPQ$j29<xKXcaO2zAHTTJ
zbdO|hiiIXJGVShaRz2R%N;AbKVU(nn>&8VTA at 3(krdM63+I~^7xrR@)eRjO)0y8q<
zE1DD30$Yx5kJhYYVq<2pY6m2Vc4StRY6naemZC0k&<M)_q%m_{<Wcryaf{1n80)fT
z<qH3`{{`>9%H1_a&sXC83;K2}-r-z0?>9Pf*|CV<W at WZ`3ZwKZdivFf-=0By3wRe~
zS1BVI0W6apG6<DB{KghF3}(*=>A1-NjE4VdQUf4+xA_czjFKcn0$sSMME53_OdA-3
ziJ5*Fo6UVtq%X|~*39N(hd`O}Gee-7m6;0_l{;jUP)!P8bh}11NsYzLM~}r^Yb+QB
zWtqII^d{DY&l(H*<x~n5F~VmLu_!})J(gfu<U1lG&G(=Pmi7IaL-emb`54I8u1M&y
zZ@@F-J1D}!@*W{RY_xOg7IfCsoiP={=xbSiiTNK<KN~~&8YvbQR?%HE4v16{?Cf6g
zwJu<95W6?TP3%@iZt5Q)W4?(Yes8iDWJ(}pY?ZX2 at mf$^OP1FK%R6N=FnWS*M{<MM
zy5hRhLDqUd*R`2jb=-`FNKFWd2-cy@$CGo!e2i9joil{nJ%(g&TVzitR$FJu_RwoK
zYcp?;A}7+JC9~oqdTNb>dTb7gRd$y-bAeAkMeVs2`C?nGksmTX3Z~ajubNzjk-2;u
zVLf+FT`g+`T6E(SAyQg%R85K+cKq6H81Z+`ishXf%v~>@BnTov{WS6<vJkuzhtXhq
z3cz~Mc!Row<$FL2eM{w9ecL14;fSCy%zTFd!P}!Yz634e;m8N#tguA}2}ATFrH at IK
z(HHCc-HNgHD`Parn6ulTQ*o9SzeGd&ZI1oZ0g@<IbX2*O2hd#N$Q?4?#+2@>I{);@
z!L^Jd+gyj9`@Wp)^qNaN at o5=b6PneVWY#UD4a(cVIx<rmUuF;Gej!c$3zb8+#VKWU
ztr-8;GrWSd^CnwJ+X?jA@*}h2MU{LB8Jla37fpBO<1^Ad<05AuzRVdimf}CQMQi at 0
zBvwy~l>3d>;(DH`Q$;0&slZ&ND$`_6OvAUp1F at pRGmBH-4V6#ocXGK$W)mlomg4!X
z&5oaWfzAOTqtpEBnZRX+j%R3YRggBCH}HO5?N#08T*5|2GKa-SYkNe8Bk<!zChuYj
zO;UxV%F!YFJ<b%zLkGD9km2rwSsvdrcsatk3Qgm5s&(AJakrM`Ts>$NY7JJ<C;BsX
zCmr|DMh-ZSZ_PRLoXKY`E!4H=IWzp5_C>{__n+e9v%w&BMBWOt=J*?WzY*a`*bJ03
z+rsWz!?Jrx&X1`uc{$Mi4dywOX>y*mv?!PXw$i>R*Vo#qm%qv?d`wTXD3<^60D6Gs
zD}}$TAh5c2%!j-Zp;O+626Q2&CFQ&}JXw|hh2$3)iK>?sMM`{Cca`e0xduurqK}E<
z;ENigGxZH~KN}{v9`h9$tc98y`4yi6MknOwG3mfby;5E6N(juh<^-&8nH;h6=vvKI
z&|bMC?XJH^kij(rNF1XE_g(yTjNT+iCc$mE)LC18eyPj}_zplUlrGjuXc--B;A!Dm
zK`$RR9hpAP9q8RnR`2SL>YaN~?~chZxOc~VQoXxO8c_SWxr+Wl6dRfoa=?LJHB_G+
z8Q$u*qoVUnK0A`{tGXj6Jd%E~reKlHv8q?#^s36VuWI?jVXRAA&EJSuXM7Iy2vPZR
zSbl4Cgj~6p$U!5oGzhougsAClhgcT-!lwtzUzG_Chx<E9TSg;u2fSTsSi|y%Z5H5J
z%3TzopDef88kTq2M3}8zX`V+qqh!Qo>gtu7%x^7{VR)ppg~8`Eu}ty7)QWS(SFmof
z`i(*K304i3;V4#Zw6I^fEmtzuSHhuP35Ry2C;1%fLO6vA#VIIuPV$%<I{h`{`51Fr
z%teW at OC2Y|xKa!kz_k8KE<iXScri1@!q?|9yMzmyc9&uTW`7D3u!=u$VY<ZuY+q6+
z9KZ_dNEzq_6*Kh}JGp?Bjr>6cwu`OjPlFh$qc?H(?|vT)I(io}t_ZjbMNiiF!3sgG
z;kaUGmP|A-l at V}J3i($%2<vgCQQAF>Hq-hMX?N3|s`c^xkjg~zF>oSMQoRxvJ)%FR
z!#<h+BJ1*Jt|ZiT1WIqRnZ-$KVVC(=TMOG)6mfG;2Df+2RL68PQ$JO0jy*+HctRCq
zz*-lc%*X7sx5_Dkkp09yCGGXex?5--fG}B-U0ix4GicO8OH!3?BdL}IjXOO^s{MX#
zgLSl=%iW0uy%dY_3h{O6*AXL1l^|C9M#)g!;oD{FzsB-&uEAItue)30(Cu*C>h)r6
zcn}wHp9jx+T+8(e;`p2Ue8h1+*XxMa5w9m+&lMFUEhMQ&&s`UcChd_`t+p0>>NMEN
z)#C4JzShB<xp$w4J at EB5^NLSoRnZxnRC{zQ9iyewoIlI7^IB<V=>JXA(5|majg at BE
zq**>`R*JS{nw990ah?uy#{c1#8agM6!3w7#D>d#oaR^hc+AfO2A?8fFq*~A3lPPvD
z!m&;4dxKFg>Uqt44}-x`vZ|6bea0 at P9V72C|H$<Y(FvnR(zfW~Ba!1e9fgF6AqPHr
z2h_(MJ^V#vM5klFJDdCv$yh;0MGt=-fdvedmUTK_$$T~D7WGdyz(@aA?LJE1<{R)$
zJ(}Kl^!T@!C7(Pe;|9qL80*>DMsY2K%+b4x^w^BNHTkNG_X&N|o=z;-{}=8L$U|YH
zmmg`(8>c*Y_2`H8$UZ&(0~yV=(udZ(>K41Waf-<b&52S{e%W7(wJ!QBS?dkLO*DSc
zfU=mieoH}ituLg07<VI>*VrfPQES5g)g~(l#ngk#6j#-R at GRoBtf=Ru`WAaSLG9j-
zMW3|>O5x!zE4`f6z0i{yF9(L~+N!RU%e!UqFr%#_P_)pKZu5J)mV6{unbsW6J-=>D
z&l8`Yg;0$O^fX(b5oL-q)Z@(y!Gv%+Lfo#x_mMn4R7=!NDNbJL#!m!Uco0Gs(4sA*
zj}?-=jDW|S>^-Ik^ONkylxki`H;yitOF>H;5r0V9a3IGX9 at -EpDJgCZIc`t659H*8
zhe_Pi`heqhigV#acgq7MXqq5@>v9kn^yo+SNM~w#<qn0W_$)iFM~`y+z!U8qy|l0)
zG`gfXKFyOl&fg!0``s%ySF|*Z7C<mZ;Pur-vgN6vfnY7T#UfZTb{4@}oFQ03Rx!*o
zALT4Y30$Cchl|hGigHp3Ctc<*0E;%|4K{SP)C##}K$*GxUSFO%61$oixTcIAn-7S9
zt{iu at riWx+8Z{Mb(RLEph(=CUBOSWy{~P^KhkNve!Q6zRZZdOM9SsSKFHE){Wz@;X
zi}Kq|n~YvzxF(oC`Y=mb at F=D^W(k at i;S4M%HJ>;pixa%VoVQy#T2qm+f(|l(p-Jjb
zMk)3yT)@Se;V?G|@Lcd at b+iVZjvljYsFXOMoQrZIu>+2^?2-0J1GA19Ctd`#SXOGP
z2=~G{_Qa<<;EqhO4I#MVa$x?MWk<8LCeiOueU*^In5(@Imxv2U8mxED7-Lw at efXhK
zQ?oM6;=mYPBPJHb6a8EUA$5aw^U(vCkJ*<VwaBCp0q;rSZ;G%t-s*O)5ZsaU^&j+3
zG at j&;4)0c+XTBc0-zo|}4Ovxm#DaVukOdCopfoeIyZ`Kn`QhGldWGoz8m2r~4Avqc
z40<c_sUhb2ISJG^P3nugZh?K!V~z(TG3JW!G852cc)>de<4pVy`x<uWw0RzXI~=!@
zXkG4<(Jj94o?xvDb6ikBpmR)a5~hWDFSC7+%;|%wJ(NQpQPB%wF!q^AkYBmm=!HFP
zx|F#Til23eRt5|X4XuygVy~{!nl7aMf!xp7&ns}ccPvUZrcFf#&*FpjG>5d8F1Cmu
zmKvL4S-2YFY$4rx>{mjFV%L@|h+TW45OnS7c16#HiX&9qfnc3{hhjn?nbm3c^bD*Q
z8ARErE-cAx>Nzj4TOn}d#O}_*wS2OL=$=}2b?K?$GpoL351*#3@<U#Sd$%neQNAwz
zeS3UFSwm=2NnY+3dig7nPsR9+dJ#M5j1$%zp_T at xQ_o$mmv4 at IW?Y!pnEWjabNK9N
zG7rzXq$_-!cQc3QIc6~){KfBMYK<mvmju{`9k)oJfWVam^qAVEQaMH{cAGOflyR#b
zy9R}(*8CYYG2 at a4kL}kP&%>M;9ktjdI5B-I)4~6|5R_2-L|?G&-Mre|jgTpS)#&gy
ztFE+%tJywsWCsa&6H7~L;&pa^<008S7mxC{76fwF`<;RFN&>mBWb!Q8E0nkDgb1us
z8!DPFLgk-D{tgalVB^QCuct>p&I^x;e(VanykA7<=Gfn(Zj)|~eMkayb8M3Y=;qkP
z1VZI+WkyzyUtXlfb9Q`kx%PBmRPTaVjvl`xN6`6ka<t4uhB*h>irtabRVDo8)ANOl
zJW{HxqM|v=-u<DDP8?&C^TA__`4xxL9*b}3c~hXWAhlI5`I_#^867zRZ3nGngM)Zz
zPv>2HN{5_^fs=En{pu_D5?RT0vSj6Wj>Y>^g*wWt3>nEKiuN at 2O=Ko6^~4)r_A>u^
zhb%4ful)ma+OPd)-6BV{?~KSfl{- at 9jeQTl%Czw`_WkKCn{COM#=d{b`(KTHvR1-x
zSgb=NH~J1f<P#RaV2e*qys-rBM!?t(5%Oz4ZLi#&sc+0ceT8eJI_?fyRPB!*IwMui
zc&ob3AYfHSK-E at 4Kvky^5LP9eudUrzz;xtXHfE}tCTyYs7=Nv%od<IfiE<YV<iIC~
z-Cw<3+VypMd>?iNGSqMjL}my4E%TK78x{nrD=<PZz1iW3oIfLSK#!k4Lyvak5WOJs
zuMmtxm0rGI-srwMa`f#-uvWm=1V}*<EFU~*Y)qLkq6ZGo#?)kv#Ty}G_dZ*}poD@!
zVH9f=%<@5xQ;<^d$p?cR>d94plv~Xa++}7(EbA}wvz<O<MjuY8|7-~-wFcC<Y7ScN
z=SR`d3J%n~F7Bn6F-Dl<Ak-EwFMUrw!#J&-0!o5L+T6W>b%NDHC~G4hg5FN8X&Hf#
zF>wz}eaJhphnKJQChlsywRB<RI8l at SPG#s}LwJUd{%2X&;!UbGKSh8ZOx3F={)sQ)
z3(RZ9x+u_3v4FN(K!3qYYi?An*kaD<hj$C<sqb=LPiwN1sO&^RW0QF&`-kArF^df5
zd&FqqHwlXqE4t&&>Eug7pQ|UHOJbzFzu>fN!O>Fiud)qQPjnFuV^Ey<IsCckAfFE!
z`L)J-wdMZ_a at 7X|bUx}vG-jeIxd9gnq-7RvuD at Y&-juM$p`tw08X1N4wjgu{2i#O)
zCZHdb>mZh05v;x-d`ZwKddr+hwe$&9TWs=MNnyx>M&K>nCiC8s6MEI>zZLl?>xBD~
zAh at bTvCdpTdFWq)zun;lcmZBWYg5-K<e0#adg7Pn=-!tWTNrpn68q2Wq1#(*T2KY#
zdvM^E at 9!S~DV^RZtqI1$Z^3y^+$VyBailt2x=d^OfdB%hA>%XD>(i^wpOn at 2#xKk<
zKYo`csihU3iGnm3zdT1Yx4xa~fXz}ip<uk$j*^}$-ws at j-fGMa{gmy#mhVw&qj{Ev
zPM6sN7~``}+Zj?BABt&KYLxjsfsO{>nz6=5#%J<~kB8K2ska+c`v$3&v+8YDXI8y^
z`a3XXimw*gsaPpXa0d{jwzV+uH<R_{lf|Wrsj5zCtFLWmp23e+Yuw*~U?#`x<Y35t
zBG!SkkAa-&KT^6J(+Xc4GWLhc4=T$;x}#xo1*g?AV$g+l^LYwXb~D=FG|TA&Qv%km
zJM8E96g!jM%*UsI88&9%m{jB`h)i15)1JH>68|OR^(^iZ+GL(dNmOK;lKZh4 at b34Y
zjJx|_kdz8VUFEXDx({aO at iLdg!_$sJmO#2adU)8Pm$(*2d at V{r>Ul^$Vmj65(eWbK
zW5+*)8;loqL3VGvS=rL9I*hShG8^U2m>-g5 at SQOikuUA~6Q7U1Go~NrwF5B642D at L
zm&jGj*SQ9 at UPjo^J=NcG-o?d1 at VjP9F|5g5r4{zD;~611N at SO|itKcZyuMZ^Lwr`R
zIUO`*H-hk0di;+zPHc$3G at S0T3Qp*514kBao|P}ri+a(EUNlUPO)@$<XF9pLxv*nq
zQDMW4u3lfuxk_5*IQpXfj1}G=GtsH9kF2&%171X3it|=C0ST9l9R#<7?71n1eAd8(
zw1kBC6RJTN+?bT!En&13aF?!|q$yP3Jremy*2bqW>KV}e9!vwEthp@!D~wM#rQ)&K
z7M*UEQRbN;-~o@>&);I{3|M9dO?U3OOUExNFbmn3Rv3E>hh4OXpwz?leiy*%eZpV`
zt0(UX=cLA)E6Bw>#tg;z&-k*U)Cj||4G}1s at Nuq{0OTyywg&muX5F#dnQGPNarc$u
z&obut?Y}csZ|jwdS-Hk1FOiv9t{a(IR=#`xTfPt3t-f+id-Qp`n!A at R@{XNGBNl%L
z8Wf68yZ~67HISpfZAYkca)LS!90>GQ*-=qO at 9Hf}ho_p)CWK?MM^1yvjx6699_rm0
z8M6jeZaP)8232u7<yeFA8poit`z{(PF!X4M!W;n_X|{pdPMhG_{3*exCwux5IwNBR
zVe!cvu<WkLTG75E5x4mrE3bKPfAQ3X^x!<NtAUld_zZoXT>BFivCC)^_kV at 85#55d
z1A%Sy05&(Utt at q-IW7ZgQa>oONO(_SbP%*Ky?+g_gvOX=V?Aw2yDx#+g=K;d3YUIc
zYvQ016$juoWbb}JV)IJ$_`<vwWOnJfZy|DpsvycskoUY(HnG^Xi>9oXHJ=XG`wdh?
z-n1audnD{XkZ%u9K9KL^fSxgw^IeQ0MCc6NSWg#!B*Hs7 at V35u#tPbqkT at bCio#f6
zds%CKOJI8yMn^f)C>w6{V|(N`;-4f<M~T8=lUvaIiX!Dse3kH1`uhILVafx-7tY&)
zZmvXCJb>F1A^VfjLj?AeAw=SN%mH*XJ$tGel0T%bj=-L(Mq>;6=17#e;X;leeZ?e6
zyZ`qF!JG+J?YbOO8p__7cFzXA8D8ImQVnvohl!9ADUb?$sdJ-!xsfv^>`YBiNqQ&k
zI3kqaaNNd>kX>ddgP-5&E0N at MhuDv!M{>31vsA95HHXYPJu~YpdTp)AQUuw`-4Od1
z*e_VaMdmw<pSc-`|Fm0K=8&cTW at trY6s1Cu5})#($mK?nS9Y&Lvm6+DwA2f!Vqh8%
z+w!105Hea~omJpGjU4C~MPt@)7q?oRBV14R!Sy at Lv2RHKW_w8avz0Q`N+~1dF)O8S
zx5|UQ!}U`u<v&(R6)6u`DX&;5K2q+rQrfK)D5z_hmGXp at auX@{St*ZNDGN!t%Swq`
zDa%M%WTo7xQj7*B0EzRh#06Gji<LOnO1#)gR4dBsnr$UcmPECqvIargf&o0pLFb2h
z6&gmWqO+Z(7*<N2l~PPfqm{Dnb%lnxq&#h<?6p$rN%@<VvPDv?{oC3T;d`vXV^7Q5
zE^Zxo=dF?1!@qI*DWAxpF>U5Sxh8>I)Q6f62n24Gh;xdGz2}23?Kv`@qK(LGJ~#~s
zOXYb^D86W)Uojg2t;c6q5fs at p9&s425?^TEq&^ti$cb6<N-I{u+=$OPY|fUbVfcue
z1*&6)F5$zwRC=9+KbCOZs3#2Y(H4M*t(fRA__j at AubN*lpNUl<K at j`ciiw#>s at f}2
z!+4CS`G^Jnj}l&Cg;z?r$qI`x#$2Yt{mTpdUTgWwrFKXymmw({nFAZ5mV*;M8&+G0
zClS_$P+)5f$^b<B_AZ^wR8RuHZu!cM?^HtJ1lj4=;Ty<OAC0YND#RZFQudt(>w!q}
z%PE&x2cLbcqnvNfAPri*9>0~kW7pK{vB*srsTV>+rhN>A%Jn+#{sH6t8l|cb4}y5D
z&783r?%+9@&iIA0t<*S;Wkm;nDO0(|*oq`%Y#p-$?LCK(`O60Pjx)W^Z21@=OgW<!
zRHl<#$SlHaE+X{|=53EYrdvOyD}1RALjqw~dM=(9n(l4GH(@mvCHbf6(Y-yU=L%X@
zPD=#E?7_Ep=5E>qwLISJP$Q*$v4?fq-h7jM(e`4wv`_NQ#32gR8#w#HU(#tBs$_JL
z+k|^j+&BBvJC+~f2_YliKobKTH#A=Ii`Qx5I%Y>N(3E at ylR3Mmv05rY_1pws-LSkw
z9iFbSWo(tAq~=2O%FX64FQq94_%*<<0e<82``uiWPkv9DqisgxUTTzK%T+qr#-5|2
z=Fw3hll__F{wn|Ke8~`Z-}ou7>bf2|$z3exhycg-w9K at LEwv7p?`%@S6O^+u8#w~t
z0b247{$%;3e*Yd>ue1%4K_77RN`&t~!CNSmc-z9?)s5)hOvA1hx#w!uiq&w=fJLiq
zk>TcoSJes<2<8cgRM_fEe~!SQ9C?RT4gqSOIVjzu!qIHEXG&$$s0<zghk&F|8T0d3
zR9RHUwig;m(95@)rj;f}7K!e%q5{U;Y=x!o=I<nX{GVlnpR*8oCq^d63HwQ|p4lVU
zCMb`f<D^e6^T(>_Ftb(O(R;ux8uN?5Ejyj$aF`3#7ksv&ogQV#dxE)_A&^H|?2<Fc
zY0-O>$&R}3Q6tLwVzuNs?bmoUZAvHFMN+>9pK7Y8u=a(x;}prvsE~h at p)#^dyUZqq
z<&EYCFH7qz=T<3q0`PklTJVR#@AX6P%0j0d at SNn;ntlpK#J900U=I$Sop~gnkm{eF
z*?4w-X5-nBvf_hh==x6tsmxI3qne?TrO=w9 at O;)3&7@`KD9o0cqvk}gporuEuVMa3
z2vUm}X7%`LAw$is!hLL&v~nCvKXRsZm*eFasaJ65_j2ZnC<soKAvbnfALD!!GQlA_
zCHSDv6G6=EgV?SZs7w4#SwAxbn|`@e-ut>-*wmT2K#x at m&~wGy2Aq^onw3zb=$#yy
zc at xCnC?u6L_iU^i&7YDj)oG~|GF1uReT-~6h)P3-xhQqwy|F<TrOq}UIFbkp)p!3m
z32-cA9G4CnJM_x!FvqPNX67EI*R-aqm_gEP5V9^Qn`5o_MXhNU{kJYrJ>UU~)qC$A
zt?93PNdB5XwZ at YNd|*<pLEVzQM0L-%6xyH!k&Dvq?-7$rRHwz~t|U_c?8V)s-(f{v
z(WSPj)2$?XgAn{Jrr%1<Uaq<&?f#(!Pv|rq{NEOZKjHm5xldKKEPJ_XrkM%x5kloT
zLkcpybNVk=J)6k^GURs;ETTUvd&lZ{l{XPSk8{!s_`KFf_pFoB<=b019I(y0<6-vw
z4=R+V&H~O9GNx7&IG+HRT_c6mX>@gF`_SzBpH-QyVXPDReXgZ at W$yH={}C|y_j3$j
z593d^=0pG?%(RGaS=`;s%aogZg}RPp!_hn2Si#oPMU(OrjbA;1OXT|3GHVo2a`r-9
z_xdCO;5^04Tn&dVaJZ4>MLB4&ObRpPOb;d89XrQZ?{(H$3}YWKV*<)Z(zvA-&}F>V
zNO|+x4CG5fMpNlyq{!I}<AKtL2^z1eTLJO274<t}>;sk^gh&P97P1g5lk^6{lF5S@
zmv--(3y#l|jd`>AC-^6$3#h=C5<nC4J`5oVR<VHGB0q&PLP_fd<2MP$7t*=9>oUK&
z0zsrBJD1aLNP^(`MZ)0ccZlQW!)k#ZeI4#)0#N8A_}X^4&1Q|40`qeL14ANUnk_I(
z1kA;Nq5B}ZC|h#aASk~EN_N~8oNoynhXtp`g7Zy*Gvv!~I)uZ?v}TrqGnoF!UAQ9v
z0818k9}fs+siJiUanmx_s at -$oF5K?}OYXug1dg@&0Jz^L3_Vzu=eO>{Z5Q`6xeNCn
z1VqOacXutI3UpnJKd_mb_z}wVQg`8w$$<aKoGf^y#5kso!Mw!axps}JMCRIT3B}zZ
zUTbhrx0(B72cw$*r*rMQAR#-~rclfO&0O1+>Dia&+Q66?hZvGS-6<H at MJFC5q>hTy
zFN3gos<j(ScM6Ty((Zo)GUYHQotVX$LYHXeoCwYJy at CqI&3(MQu#k?Y-z5Zhd~kd8
z?eY8dzle&+Y28a;%~O6Y;2h5N+<#Eu;Xlun8psW4xf|z{%Sel!!h^^icjO6d^i?~v
zmjisoo+JETP!6`dt`4^B2;=HCaCm32W~Mg|2ox#5$byCD7}XbxJJue56YHq>arjlL
z^7kK!*ZJb%Iu7dbqADe&m<5k9#G;_ at mz9`1KAHH|{Dj7(-QSiD at Owrvhv0=PDfuow
z0u$<ps at oYd^ej7%)qyf}qZ`7P$#9?-611~V0SKR0F~cBkycKzmKO8ah?%~W)w7pl4
z-q~vtYpcrdl&grQD%@cw=Ee#}BJzg(xD$x8+IzHK)zZ!i%2d at bi__K7N(JbEu>Vm2
zdG}=Q*y`7J#9TjO)CTC5Ii6lgixIEc;hv==kpe}(MIWTdLRLORFB3HtOEdN-Z!?=W
zir%ks>{OWtFKy)O8omlU14=V`@1uMiad4cTDSzpp@}sQs_}bl(DX)5*9hdB#KSEl+
z_RgOlX1O%sX<SbophYp)D(m&M^;*qK>E1;A%9<mYe7N$}RDKvZ`PR~9{#Eus3&b7G
zSNP;;UtTyA?aL33iuO6f)1rMt!&9PtTG$!)r_jAET^>zxANJ$43MU7xi6f;1hFCYk
zN0a$l)4h_?XAg%FKYvKreDy`)7Q~ntDG}wTco&lnx;XWsjvyepBa$1gzkZwKwzu=J
zP^E at c&&`v~HNkkcMfNc!lt0c)c4e)m=JT+O94zFpLCtvwR0r^~h);RpGnV~m0)LkP
z(`w3762PW2<v{{^^tYuARBx-{GSH#cbrHYC6uUy=Ooxe&?_rF$s4<?zJvXUb-I%0v
zU!>JV)}huUu1x-Ci_tDe4-Z{B1#A8ri}^K~8tDAM23iq}&Ucc*8M)NFVjU#iCwHza
z<MEg?iFf*nMS&|B&V&4{zFzviH!ql5BdB;nMHMQ<z+NUo;8;Cc at 1z5X;uLJJBcFzH
ztRa<eHAUKAX!WOz{z#LR``H7+98<|?b9)=Ds4Et3q67Y{qmEvrx21-u1Q_<GNJ#IH
zE_JCct;_NQ!B~w`Ks;goKtP1(g<hQcjnwFjUzlsI#*k{&T=*oIwD{|z)&PFKTzYN}
zWrs&JxD*B%w5k<&rJ;{7+S*LlAMN1_jkeNU&ICCQv?U^i+S<2=F3L;iq$aV<iyM$b
zIaEq9r{N#5-6Z=sD{8*SaLAc(piXykd29jilBkoJrkTGJX=U)jQglqUjm02ZvihL$
ziFH-pFEMq}y0H(5Fgnk1AFojSd}Yb1QonkjrY%j7G1QGwLO at O))O`2g<_}ZNcZy1Y
zd%m90jVqvfoHj8E#4}Sl6#4{^E<9SD9QuN%6}W1&`BNc2nXsRDS6J$-xW(U at zhXdB
zf8wx_pZ3aXYG4|%n(F2H(Ds&){Dhi1Gv<rVM>oV}bkX at 9dQ!U=HIrOWhZejB%d5K4
zLHz5eQ*JS+Em`dZl3XZJ^DpydYH3(rY~%Okw3- at -_uzXC2KX6>zY$~r)ws=O+`=;q
zZ~2|h=)7X^zL*tJ*_^(c3C_J|48E`eY__kOv2iw=w>Mna6P-Px7^;vOZcHE1X67)g
zj-Kee5np6ww!w@}KY!2W8$pnT-X at D6f#!|;fjpe7U<?HYT7r#g?9uz3F;b|zy7*Du
zG9|^@H$7obZl{Z1V}oIHHXO~!&y~Ah5DHBB0_EqLa^Q*)>eT0TDXTO4C7H~{kT~TB
zaizrGB&Ju7y^wI^94p(DY9b=H2D3RUB<DY^oTZY}Ay|m$TtO9|xceQMdJ~`J6^vh4
z(QgcW{4*JG$EQ7tPyX<If%yt2LGnYf^H~||#jF-DN??%KhR;qHqb7H?^yMtg at 64yO
zD3RrS8%|4NvXM7tn_u-~x?f!~$V`!usgy0keB@*$@ENYfG(b0shMM0TF9F9qE6xeu
zwu-d-y;&rxDh`)K5W`&oKAWBG)E}KNiLlI883W0VDDXS-XT$%i!pF$xB0E)n7|a|;
zl~a&fQx%I|-9>&50bkV_k>N_4B8sI2vD1^HY{K(RXAM=DpFb^V!)vi|S&?`)MaIKP
zcA_Vc!<%xzZKHX;>PQ!3fKEp5VgsrEqf`+&L*(^*ZB at a7Sgw-Kd{ws|dq~P?Oa6mi
zX{)#d=(5r(v+HEVPh6sW)&fS*>1RW{`y76B>#j45U=b&Pns*~~trhbmyq2}%*`Cdf
zN~w)t$9&WDdEC0??OF6qU)AmQa1~%uQDePdHNparDa+ws=!!UH${ug%MP?K at SO}YE
z%i>rC%|^duxpX9_$TWzZ)%_7enGniYf2?#T_cnGX<rj9c>&;<&AjAB+Ud<UM>u#fF
zhqf2&IL$Zk?bQdJ?d~sg at VzgW+0B+knFi6>4JyO<iY^TMYawmT9B|n40?lSg<Qo1G
z=8G6iEj<lx_SU5qj=Y^zAr7fcrNs~zE-+UIB9j8^1X0Ae%{7>jGXQ at 8z@*M<7B8EB
z*Eatv{I(uFl%w5yzU&dPM at n^I=rMkLQoWxnty1r2ODlMXV$YVA$vgi2G?!~13FY?5
zf=9d_^!pE at zv&E?uMZwX-98sX<6)<E{|W}V*89bh`LpBapB*${+K&Xi2bX&I{R~k-
z7+X0$n|4<RWy<K<MSFs|d`~ZVm&+&QY%QGgNgO!U)bB5d^JdZUEqTYc6yhgoS8C<=
zIgbharN5Qg=8;Rk<=nRfnE^i#V at t@mbrYwipWWmklDtAD!1feB9>@IvZ&CRyyf0Y=
zY4=mQwBc@?thO*aL*9?Wr^~Mr4BSWM*H*Epw&~?B$xoH!_*=MhJ)sWKyr+%<Z&qEo
z%>r|V)qz^TjN|BSZTZ#}IG+NdXt=*6Z}^}d$Qj}+9?rE2pOx)>Iy|0(#uS#8e0}*h
zgT}!HD-eE`c!IfaAptBdu@<&!(Hk>W$B;!1FCD{okh+u|LKeRI{%rO;=Z4Gqm8yeF
ztgl<t*I%ix_q?Nf_b;lFD?yA`!zYD|jiK at _U)Lb4bRrOFHSBf0$@zkD?-v-u%Rkb+
zA1|?*W+BV3fQM<?7mLR5J?Q-~Q at Qp1<ji+DRtViF=aln$ctJJRca?{{A1-!>Vhk_y
zRt>NCM#<pQMJ+1FMngs_c>`|}7P}!3%!HUV6S7$WqD5a+S-(iCJB$o#&g({I4H%g<
z0k0uzgsG&~f at qm!-HBK3$=~4J_ at XRKi>c4b9M&C3{B|HLV90pAmZf>7tWW;z2#+vF
zKZiRE8??B?eE5vGv$7<RR8a%UCZTNA;a#=R;FqPSBhWHDg)880E0oa7kv+H9;@c*_
zS<sh`jA&(Xa8_g;LTH&<A0MSWgVKs5P41#&=R+h(M{)x#$H_fsF;#rnjF!trr*Vv~
zOGX$qYBQHUOAFZ at Y{_qt!anr at jG80%lJpzW1AE5xBE|+B6Fl68v3O}mAkTxtO+pgx
z>S at hMjnh_fTJ!x}ZB-(=w?JDJ8sX9Y!Ub+^Erk5791)GYnHtB!Xj9fP0^QNKIbCk%
zzVuGhWqF>+I96FrtFs0L#4e%P`~rxe{O?sXA^PH6`kqK7&5hNf3OnlG(K0(E;B|P5
zKP-~_ at 85-&J`^lJ3{|Jq+7-LGFp?jKz8&LV at 35tdji&o<fN<%#9cg}`Z}BdBs$O0>
zsc*?EH+6};@=~+q<wynOm7kg-uY%MC@^Yrmk=Kw^nY;>9C(CPS>I8WerH+ at ED^(<~
zVJU~aG%he$tAXYPT9{uUd at Ug!F0um$v}d~*|44oye#yR+o0;S{+SU}4Gg!WnrQp|o
zyv|tXFK_d%)9&9&vhl!ukEynAk)K{#+-Dc?_T-Za_Ts)AiRL7Kmx<;|G&lLvOf*lT
zdCB`TQPng@>P}Mo^5s*0>UIeiNVp(1Pr^<KJ5yIkc!-3DD7^F)O1LmJRnmt_c&Pjo
z_u at X)>!Q?Y66S|>1QBB-JWRsFQksP2&n_*Mt6kAu1Gm%MLwgvVD~kCo?{#2^-&hh1
zMSN at _L8D8S3_<ajjB<T&@(Nb7;A~T%>N*5hVNTRub9AnA$pvzawqQBR3j}R`7;EX@
z%eO}lX-mIvJn+-K78Z?l3Xg~Esrj_(P)_PvdF84OAIeMBNz9Q7$}2xLO<n~lue_Y8
z^W`-pb(XveQ>V&nXlk6iic%%=a;1jLYgkH<bx3u1#{w<2oo;TB-G)_s!NC5*f%gU4
zZ9MgvXJKN{bcviq2_LsjCRkA~Tg=TMq_is}u~r7~)XpA!UmX7fo(Fk;!SidLKk=;O
zd79^Wp7lJNcwXXpo#$;HlV=(pxfk=)^W4sJH%}|iPkDaL^LHNk6`Bs79XxOGyw7uh
zCkNd~E6<O39_D$J=l48+<9U+j8J=}K-8|cPUgLR-=RKYec=q!k7hsQKY=vJI-5A|f
zx-lr_2=jTk-VE#WlU2wkiB!Gtvi}hk;Xc{M;f+1!-oLUrK~gGkT24praN3weY0O!N
zmKL(R9SAr_=P74Ly&UV!OVPLO{A3y#zVc863IjP8fvAX$;7h&_2)Wnz at O?nyU0w$X
zow0?ME8hpFKJS`(Zp!604_q5ew0q6F??xBH)b2L#EJ0Fihn>1B$JiM#BFk#<El0%X
zhmRNH4$(mWF=gQK%-t(r;SaG4PxsKgy+Tbcfc;@d4-Pmw<R)+k69tpy3 at vUEhm>2y
z*{EW1i&(dmqX1BH{2_`jpta%;AwSF_N}w&!rp|oj6M-#hgZcQIf=H!>?RSgl5Vwc}
zD*K~C%3?Q^mRXGz3EJ|8pxNe2SXQNl-zSqebNE05JIxK8+7=OoKm~@eSGZw7j%$|D
zi>;Q=hiMnx;XHK&i at U}-y~+k0XnsF at iBYpqAf7>@w^#e2$V2}HvWOsx#i+SSX*bM2
z{Rc&lfK at +ko_t$o8I|UC>v4Q2yj}f%B;E~6CzAG+J|u6PpTU{T3b{~Q{1^NENbY_^
z5cYL`B#ZuAYq>u{S}Wp?nMT=#BIaDlUnQr$PR92qU~B~eD8RukWO6=fW%9vezPQQi
zSfu_a*OJqpVufG|IUqlXdf|Y}$#Bv|V^QlA4- at aXf(B->!7MhI#qs&YSp(!X?Se$y
zbSw;}9vTGy4`w%tvD9Pi&PVUb3(=!<b-6mAgbD^tka^LcsIjRuAs8oNu5cJ|n<T9!
z3H1pHRq&uBtR#V0h3M)2DEXxYgdelgJ?2uZUaZucluHW0GsmjsCzKajUYd*X(tKA8
z0V0E$_oGs+?B>Un9&F3r)gGPl%4>krnyzpQ!RbzlIz;**9z6rUCneOUUKs_FO6=Bm
zqEj=Ye`JWod#Q4FQW~W<f5>q-*6%3O^Ur?j^w|?|SnyW&r0!8KVdIZ8)Bott at G==v
z^F+i2>nkc`DsvIiC{d8<VhR<@<z_RV26DXIYxqV8;shC(KsICVsqnA17YlkgEku;N
zBA_Wu3zzvn{gtG0<8zOItGNnS;5_4AB)F;<{&KKSD;VqV|3Xx0%Sx=@8;{@gzeuOj
z)0#>+?|qndLb2te<b=}lacI~&d7s8}j^9Z0niObRK9%=>cs}Mi$Rp_mq-*AkKgjy1
z+4_vAEUM=gMMegymhTaFqngf4<FNUsE->f3t+ZdGzx0`I)0EVRFMZ%v7Y@>nlGAlf
zU_h366FJ2KRoiK9{=HSP)Ooxrivv)9ovDfDzwluPeI;Llt4;uXMSXr_k8)3#!$F=c
z=5VTH^&AAma8}l7O88s}`^xC$O4h37*c%`>=1&-SVpG*^C8wE9M8(Ni5Uhs8gNreg
z;LZvrv8+S9ykK%eNCd!^A4~IdIdLr~3V9!28^0<i?tg)!;emLNbKx%pw3*$+;<G$(
zl-kS<<!zCnHJJ7CmE7=R=1$^4XBaZSjRc=BSJ7eNke{i&0_Eci at 6w`p-Z=m2IRt)A
zC(GAu at 8u|(sOLB)lZ*88;A{2Aan|W-COYKm_&Xf&<tR7e*Vw&#?tW1e9YgWb^BYYE
zZz3DN7(a5#zksz^(;wDz6Qp<AdKpVGPFc(zS}5UUWV=;P5G-O@!y;RaHrGAgzj%K3
zcd!k7@|E#R64rfv-+zPUKmyvg+pDbgoaG at r13W~b>}#*#5SAJzB3FT#yOJ<J&3Sn5
zlC#WfRUJh%(rQzMv;<e4_kXE+xJT4#t^ZPCWI9&?Rf^PXbc*YwomxeIzMbp8zuI1a
zxnS;ArI63n=P?^lB({mWeJJku^c58T99f8u0Iylc`%-h_Hkntrb^mpe=qZ^3|A)Qz
z0E_DC{zeBWB7!p(lvv`Zs8~=E8;YDWqo9LA#8`sSM35pVAfYHG77&ww6Qb#+lcuIh
zIvNwfipCh!6pSfYVg at nEfQneTzqR)|!^oTWpYJ~3eV*?=&%IlRb$)y8y3RhkthLWR
zx7(hl+S5sdK^VV_Ty1Xy%l85bzHWwnpck^hN*yBQ;$!g)-RSvXy!TLW^(MNAWsVqi
zsdyD2Cd4=AIPME(Fb7eT6e<erfmp7}7by5ufJ(dy5NIhzKLX8uG->y#x59uydVcgw
zMqvdI{gl`ji+z<H92wb8V^St>86C|p<>UN5Hg=L8M at J*Je&PFndmu|%i-z~M#Q%hT
zmvj$BQO(c>hg)m0i|~^KJU2z*e?+<3FbBIFX+0fTl=eAn8|4ud*FC0K*Pb+Fxag)>
z!|VY_WM{K)7KBBe0ZLpHzS*|pbrK at RBJ^rlf1!ukir;f|tn75}qFL`ogxt^<j3O<X
zb+`4t7lkB>!v9{^!Mu|?AebcZ9m|>iVe-9F{llx^izlZSie<JQjj}$rpYo5eUY%O(
zRv#8TGg!%PPbW3tvuMrkEB?X=qJR8PBsA5!_74gfX$}88a>%|3SWDZLN&2sLjIBz>
z3y;nF!>xaZ4LKJT|4URzwSIlFnC~4$^i}>abF_^dQaP=-OFjCywm1g{I)Vx7!a6EA
z=p*FE73WZ|@Q43g<x5=X6D+RKxBOr`_$c<UlI}vJ(i=BCIlj3W8^UU+95NNC4C)n1
zgX}78Ba3EXZ%+8Pu(x1Fx(nUxx8{OoH<D!-PM2&h$6nVk42?ta;9$YktY7;bifJwm
z$9R$UIi_+J*PFFRQCa<G9<-|pr#qp7!BjzfxRBle!#a089o+y+Ei(I&GAYXW4QV6G
zAE9?Bo`ud91R3H@#Xaq{d{PkyiHBLQ!OT$X{^|mpjAngWRAj=s$cE6y3b*V&5J`iQ
zck)_cxLzK5v(95eA(%*2Ul?wv!+E4fv1<GbM~x<p?P6Kk33o}{{_k*4ad<@=oQWq#
zWXj+65l$l#mHZoQYt&{)s2lZ~Vg6w>5yIBbW%#-T9zJXo#+L^I+^IJa2OAk}-C;10
zhYRdMWDFEL#eh$Bqlq64V9mZq?xeByC{1;rp;l#GxfPvn)E^UydyXx- at 5Qlr;X=QL
zrkxntO<p-+l#ID}f{#cl2 at j$vym*33Bw8mD#IZ)rzN=eO#JSw`Zkxp=b1oWJ^KNSR
zNK|NWFJ(=}p!m0S*1NS`u#Tp74Bcs<1+N<x_nH`ow>8|9=3P^)kDZn+<y#19LSYzM
zO8hRI&bp!o4~p5f8p(wP&stAgG;vlj59>&{xj}CT#}gK{wL#yJKGBTJ-lX*@!*)tC
z`k6>3`Fp4f&}N`?Mn^a_Q4b$oH35z3a+Gyfl=XXa!S8AWOhk7T_oQb?7v=hkd7WF3
zxw!((_($>JiK7=$xZ_HMXkROSg-Bh0s-2IqY8`dBS+OmRzIivwENX(sQMR7ENPDOo
zYEe515%4{wAhIGpm$!1guC|}>`B?e{-?zTD6FhhhjPLJ|4Yn-03zpNR0jLkwS6267
z<+!5mY^}cuoXGg2SP<eQVKe$N(Z~8+{1%nQ01)8{)v?`Tb*q?)p&-(lT@`?#sHknx
zWY5Tuy;)0W^Sa3raw*Gyod at 1j8t;|Uu6eTOK3BX!x?7(7Q at qw+MIP9!llh}uQHef#
zNHw(&tRk?>5{&}md9&|A)ByulC)}qXm&tA+yEC!oxs>^0ooBP}vEit3TY5j$`j{v*
z-Kh@!sh4}npQ?xHBjzfL#XN<qwA`oD+`>r)?+w&sFnH&`$-s`)^S{eLU$6$Z+#!cM
z^q)iZiTCOYn!Iuh1(QA7Z1Vv>sR$b_cDI3ri--k6QCKKYYbN*`kpLbP3rodv<eHF*
z>j}sOBEok$Q2l=pO(BV<Y}h}D=0d;!Ni^CTNy<iiq_!*r1+qOxZC|tzudf{Pi3LZr
zk>hA1;h34pHd6JCluwi^jtgxPgQC_<5 at a*M;hp=6CVJ`%AW2cf=!lS;S%Lb`p#$9y
z5nb`h@!l at QV}N=L;=#lKZ=e-F=HKLj7$FszhvlME43u<<4>&?n(Uu_<)S1mfWD2co
z3ySF=>E*+$mD^}OkAteleTDwb2DwFyXvE(Uny8-^5$KbpG;Tua?}|fE4}}fc*X(;b
zPzc)36+5`l_P&AAW61uZiEb!(?MU&YMIZ!jBTZ=@^C!_zOI+JmikpOpmWWok7;Re2
zn9cLh8tHk&Dh6j+(d at _h*cT(t0FK07?D*q!$d{jO%3J8qjXK)`P&thfdwei2$_nXq
zUlry>i$&hz)lQrTGvyF^&>A(e*uNa_)?d<1Xbh{t%xDs(h7avUQs3gWYlk=4{~YPs
zetT17Ri_UZhA_l1<38bB_^)lrh>E at 7J#1gdFt%f${I=(oHxP|>8O{6WO~PXAaGp!a
z<8|d($C2?T at tr{Z+UIDf#1hkJo5MLgAadx664)lm9BQ)>2<jxvuM)l%wT!Z!kEpnT
z{&IZz6svdbgmu|h#uiU%9`CZO9nNUET!noJTOoie!A3f%+l+gP at zVAv2534s5v~5d
z8e1S{QB(rjVuV533n@>ry4fZK&ua?S7yn85d%Z%lG5K!O*yn|jx+{YIcCaPrSpC{v
zqEWja5We1+n#{6Ku|{6OUcXm{$}CC{0%s>>uQc5}jPEbI=pPm5kTu>_>^}xGimFH)
zh7oc->mKWU-(mUWq5r%x342Ctzj<M9 at _Cd!3EQ&nM0Zhi-*@6!=^?rjTRGUWQvtsd
z4Hn;tmm=HXK;5kNb)Vu~`N1?iR9Sx&M)Pnh-ulD`Mo546ovqWQW*Yf)))>#)=VcAr
zat$DYE5R$Lne<;Brc&QYuY2AGyL!&@Ta$PL+d%8SxYh4nY^kl=e5>EGEAV?t$OIE7
z=!?<LEPXIDC&M7hhp#m@`(~o7SVy#L_O%a^rM|D4M&>Gv%5+pReib$&Ld034YOo|6
zTyVubr-yAKCd}L({lq2BYijpno?t6`4OZwcafMqp^Z?&7dimLu?VhK0$LBgcL=5cd
z)Y(oTFdnzsVuZJbpBW-Q*NoA>jAYa5Bw-#?ND~tzdTsF?bKCx%SVVn+W~IYZ?jO=?
zE4n+pPZST+kNdm0wphLCeVUv$bu+QCN^Zou4ePb_l6S at SK|8c=Y_D=_7Q%5~sznl;
zJ(_6T#&@r@&^0JBQl3t at z`qHn8Pq*03-Tlig25B=rBS&+e&&$(mmp{CB$AmA6vgns
z)6xs?rFz;PM~e3R_%1uKBY}o at Y!fYVEt-fvS?ssOnwQ?)_OTttMpr5Hx(VozhK2YX
z!qbyA0Pk#LyKwn_Drd`k#ol<;#ch}Vv#`qGf*Mm at C);{QbX&r!A}3lf%kr7f0a7P#
zw0-ytUY?xj5=!$fvLU0J$Bs0d8Z at WBE>Et{G1ClYg`0McA&P3keiyMf0@^xGi^PH@
zfZMX}R!l!}P?t`ZkH(9~Yw{7&)Vn4XbtXAE&ObySjWO|-{@G$3hi#nV)9pB(yFs2V
zqhI?MwGS)orszsu!*y8j at ElK82lWcWeiB0HzjSr_b(7mPR!8+HkGNbNQBaQAJ3f6$
zD^+~l#g7UILjm3W99pd}#3C>{9}f;rCmL%hxZ$#Na()Fi4dQ at IT{SxA3XC7o6*ezR
z^EXN6_T`vRlr^K}CH1SMiA9+XDuAT+=tiLGxGJU^IC)Y3 at cd?&r-%F&QKZn+0xGQ@
z5!M??VMRmgYT;*VM1RNUk+gK|so1xI`|p_gLP7V-|Gi3Df5g_^(KIwu^`58d70}(l
zN6GOKJl7^VGvR&uwk*c04p?+S2i07jH{Mg1(?DzT)_SJTykLFm{2%(Ih~`}p&AXvu
zf}-i4v`qWN`kvZwXc~3dIiu-W>~3=rl@{a84=>?+6cEvBR2X}*VKzS*k>5lf%c{w%
z_5obe;nj4FX6bmhkoRh1sIP80$G at 9x)5|1Jk at Q1a()jE-(mjLM#YMXGCa2gicQ@~$
zGTO?Xq~{vVJ<^(IKrUFGVoHrAco$r at rNs?)cHk3`P@;JuDNHl#TylQ;r)L3=KU$ab
z*;%GpGqjz_=6j&mC`2XbZCM0!H-3U^VI>N%#J^kuPWXs3k=FOO;0h+Au%d7 at QL-F)
z!e(S(o6%%+70~+BwZqp`^pBlDL$}0#T8bDCH&U1%u=&N-PlT}}%uR&(9AUz&pHjc-
zY+u4t=t(CiZGwNuullt`2u6E>*IVI%@29S|U|==C$k6P&-(L=^X$XR%j4fDcXp=bz
z3tp&g6T4>j4hxROfMs5%ALp6bZk)wM|HybM7iN at U!N#1E^f?w??VS|4an(2xd9Wk0
zQAF-;UKgcv#J-7}pvA5cir(6b at N%*-MZ(-<6r0S*#<T<qcQ%9_L^w<-oeg2=BB#Ty
zb5PiI4rWJd?+3#WCT%+oLs;7$$d?RZD{z0HnOQprsqJseF9*N9izF{L<vXlk`^gGM
zb^!faI`z+~g!D2-ixun}=!L1n@<bpEU;(%xVuEeNjo$01$7Y0zloqewATruJ<O)^Q
z6qNo5oAG9AX1qHzGhXYrn<sSVN=VC8_A0hY2}|DZ6{7V}kKm|7%L~pk!cb^f at eb2T
z-lT|-yEY(UA5s47J82?sa<<?>k40+(>nt?YD14k6 at kLDAj|VU$+NF)~L^gC!j+dR=
z*`9j=^Alk`Y$lu3v=*DxN^q?E>e|T;Txf)&0?0h|5*})pq=Fs2;{9{Qd(V^^22Jh{
zVq4psOtuq`BSp3$q4Q_c3E7-VAYy5A3KC|Pwc<523P6UY4d9Y8(>6{Tnxydr%N8~?
z(NLd3&w4I8r`Ugb9|{92ed`HZ(i?0!+aY&!#(0;x&GXt=PO9s=8L;Qk$_g59n0lb$
zJ=KREwj6!4Z;TP+PNgkwBcug2Glil4yb?VD6c-0~qA5XBj0|v+iBuSSSLP)g3BDn9
zz9?HT$_BkP`gEc208L^gaDZ(SMnE(JDE?qf5;vL##~|BH>EBlWd6<7tojbZ`dKhWG
zAY at H*Fe8og=*xX=qfj>PaJ`-rtCPCvnB!paBPTrLY at 3f#i~AaC!9N?tm8}+9cU0>j
z=3Wn%FLy`SI?Ohvl6oKS0X>8iEd}w|-Hp|d7Zwntd2pz(MHw(xptYP+L2kFbhupa!
z`Oi9*NnC$1>+;5|tF5gJbNITGHq6{<Km6CW01OJGRsPyG8(vs>Rm!=hf!0y-Tf8Q8
z)j1zP2&A}yOrSuDEbg@!nrUp?!mAgj1HiNH!dfy)A5J at X&BcpcEc)=PVb)9VvEw^D
zmL82b`+`o6^S10SNAKKRI}1HQQux>z9yw`Y>+~38um>s^J3AY*J!qR$Q3qhN{+V4^
z`PU9YSo69H|C;eQ1j$_5rtWq^_VG1 at T<Z*kn#SAp57XSpT<V4d%C}+o*A1z(et+zg
zd0q98 at 8MU`uc~fP__~R1W@~5jy15=WUHInsHu^_tWH62UMZab%MITqKFQ73&|5;r`
z$X{XD-l(5=7#q!~jL4^ae4hT{N5HpYhKb!=YDJBQ^+@|Fdf9de^raP<-$#aglhu>T
zU><xt$&59;{<GagJ<LU&Yp<jB#cOnsduTI?xKzQm1YJj6)@X_V)q*h(X at mOf&<;t}
zpu>DLWae7G%q}FHHbq at 8{}hGEBYkCWZ(S!`+Db8Tb)H4hjt{5?QaaInnI|4l6ZIRU
zM8qQ?92!qdl72OIDinmiyNjy(a4iO?Bz-_Nel^&#b8KXiMZXHWajx}Rzf5p!N&1<A
zGsN}qz^S16wGYcURTuPUFC^*j`7=pBe6RkI;llTX?=pmG(9i4NEaQxNG?(I3)1BAP
z?0+1HKF8M2eLnb+{d|%^B95GlaIHYj>6J*Ue-6c1LxTYpV?(ih$al9$tIp>Oic{<}
zvPficu)(aK<BiQ_0oY#@Pyxm@#Kdy0m#d^cUn6{je$G$$9mEeitpaKq^fA4T3I7<M
z7bPElB1|RmHcK9b{~7peq!-v(hV%J)sYvfH)UOtq8{BYyoA0x at c?i^H7yk4=E<>C}
z%su#hj~{Yf0+FLTiP??K#ZLQ+5y7`oM40DZC1^|)iil#|kL(To4~c9IfoDMBZ%2{p
zk>CMbAHg;KPT_YBe*HJdVh3)KMb&smIUK?me22<Ben;_9K*K0+V5Ehcf1;O+KW{hE
zs(~Liqy-$}^ii=nhw=LrJgQU$e&DxM3U{cZtcGtpK at I1Sq;Fadl1FnwowB~i*0HOB
zR&dd3F4fj!0i3iU=XR9B=WI3&N$$N-aN9Yw|2m7l_gdV1Ayprn<hm305OD{$>>sm)
zxNid+-`WguFQJRWmiF%ZaY0R~JZXbd8TGW^+A^Yi at 5!vHk$X;FS%s@>z1~IGy;sj(
z*n8zf;1asNGCXi0sD7;(t$FW}zyE{}+V*L*UWD;|k-}V?*S{ZX2F|E=L2-_w<oXng
z6i)PdhUm$x3od(4es_TKs@!}0ME~Dpoc_;IoHZY!depl2*4Fv{PT}k8e0~8%Bc6?p
zX77c02lrHDp>@NfKcu$z!kmh|*9^S|Q7YFAf%OQx=T!aMy*%MT7lE(B2jZ*|zNaY3
zYjXgOY^&UJ>g2XVNWjNi_!<JkMC1eSwzT1+E4dBtt&917&#433+zldZ%&xsx9QSzx
zGWPWo{`1_8MC)Rz_FlXHApH9qxnRM9&Z*yfA?5(`JhJCh?c4n?hzx7r4)h{!-JBzP
zPs}+5dQ at B=n{#gOiJ0H_o|tzQLhj`uQkb_Jel-Z^laz%xC+74|Cwh90yTGUC^ty}i
zwU|BlK{PSDok~hlT}|w|dEz|ky+^W+j@(;&!uO|4cwPzEwfD%?z?&4{DjK5+y|ZW^
zIm1vBpV<h5_P8Epw%zMN;T;l?k8hIJJ}I<ChEAl=LvIbe0nPF at u(Jo^LPr<WJ_q7L
zbalvM1jTBEGO5mu_QN~nr0FTF?$2SJgHss_nr_lD+L#oC6;E^p4S=HZ8mfSmVi?WY
zwxdPC+*RU-hE?PqhgdXm(m%5sx?`!XkoyU&KH-9Q<;F6+>AakR(?rLy|0NkSjSN4U
zXqYSovDKK6H$_=1tqozYOTuD9c6%RJq|og9a#sw9)tI&|!g*}CE@<+|nGf#o7*g?;
zl1TqHkv`3qQQSxrS1bg~Vs+H2<Y&84v;>$Z at P+_pg{Z}gNJ)Ic;QMCZ;UYJ2SOjUq
zdC?h5brbuYXinVv9YyRpI0Gv at CO!YL=OFJ>Ig`9)&p|ueH;^J0njLJ>m_keKliXOa
z2kFRsd1C=aRGwC9dkcJR*NTOH&(_%yxh`AoG3dChWsiY7W&OXo$G`{EDJaa>afYvh
zvVwBiV{#@~u%~6Oft)tRU%?if8q`Bf%H2kssJj=lyk(z2!HeEbSJ3Q|)6TTEtP<Bb
zJ|S0fjE#ADxOU0zW_t&*<cmr$LBC8%gzV1#3dub|*EE9<!tFs*c&FL-*)AkP at V32A
zydN=b?~FXewEbJ>Y5P8$IY{Ridt)N{fGoAPAErgd1rdHiO9->F*|P|H6^qP0 at e6p=
z+=bdKo#+#dZf~tW71eqimye0pk++v)3SVTwx<MYP0R^uK<9tVp4S!;)Ba2K`Hh<C<
zVg7Hl%}%GKY7Tv<btfKTq!K1{n$ZqjUCVmQNc;O53QqU7UTLiG%<cm1^>V!sj%^we
zEI56+?jCXUg=y^-tn~ET&$i3*vW*n1YjxvIjr(12S_!<pvh-4u>L++N>x|&F!D&O_
zwa at AdV89!|2Gq;eh(Z;dz9GE25Z^n?XPc2YKMT&^v?vS4A?GK=x&fO9 at LY&R5M(5@
zF|#ej$p at f|u_KaxPzL1U{><yBzSw8-H)$H{g~+z$^~QXd47AlYH>7QinokP=6Lmc#
zXflUEy=j6Ju{N`vMBfSDoMn)nsbJ;mHaQ)w;X4azPJ^GbwV=`!`%l8G;q%GjXc5ay
zVQYjYWC>{lApBVJHQEelg0{`6&CS>%J`$%}2GQEjgx7OKp4dDFdfyW3tc7AZB61JF
zUrelQmoS;A>xl;EhMtu6wU|UrY~g at 1HkRps)9iRE1g#JF#J>hYfU%uqK{I5zs^)V?
z4A_NDU8?&dpQCfd`I4mOd%egFI(man7}WYzLKbe=V&EN8nKN|60lf>}2RUW5U_BuA
z9iZSwbncT7-```rN4P$$0?Ca51Q`het#`p51I`wpeM!acIgg+i+n|O)$4#O at vC$FY
z at ufbw;CwP}mrWl~Z?+!6T+K}Hy9_qt)%~25up(2n{vJ&6I!0H8TQP0yXsX<AD({2%
z`%U8I-?~7oCTME`eNR#dE!Zp`c3fj9p`}J&3XN>tDA$&U1#A3BR3z8-1*EGF*ryMW
zd()B~s|j9I9CDhE6`c3ff6&w4>gJE~d+w(GQU3wHZ?;?i0eWY8cdxmR!!Joc%zfR%
z=oY)sRUxjHdNo+|ftC0(xPr1l<!L~`*g++ctp`^bQcP%^Bqj^i=#W!Uj2O4DchhLW
z_6mMw+KA0>W^4V3qdR?cy7HpwZZPo}ilRLw at isS>8*u(K{C2Jfzrf<=0<Sjg^_28#
z11}f$dO~`+!OM-k9+zI8 at bYA@4bsbiW{00E=6P*#62RrE5oXVV8p9oU4b;JCS5f22
z49{B_UKKTMnBjH{qrGc6`?rBVQm3>kY~JkY0#Dl?c$lE*$KqdPRS at BAXx!!I0G^Gz
zJPCvw3M}4kjk^pE(57*h(E(hnuG at 66NU2{1zLFBEGhzla0MrBu4SGcmo>3&>=~_2X
zTp00^9N{)~*ole at BXlx^UFZ#d!q<u9pKaFbbQNda^Nqc6coTWG6A57xc5s2k=u)uK
zq=WSw{@YJdgNepX3=gu(dxqWpl$0eF2a1Fn`b5VPv34l3MAunJ66Uhgh+{Py&Hc&?
zD%%v9MP!(CC>$DwQ}kH|>x5ViHbJCgv39i-MMvAtqh*o4Bg$a?7B*d%X5YabNT9%G
z&n+Y^{q_-U>6*ld>vnWa^2N0mUAK|f?dckCz>~kX)uo`uH9Lr&-`@1613kk5mi+c4
zW9-O87$5u@(gB(wTz8;rABZl$U-PRN(n%`FGrGuw#A%MU6nRizkFDd_JV1xrKvA~G
zDD{KFhUSv(TWr3GOqTiC);vt}1A5f!+S_sjpk4wopyFbioh=kfKYZu at v}%i at E1EXa
zTisGO<R{*6VEq%llw#{Zf$Zq9f~{X)K9YZ6bzXCGzsi2s+JB4ZJ}58r&$p06cK^l-
zQ?}7oPZrxg``oL^6J2yr!O5MrpW#X4R-GrI!-T}SHmFXvtPb8gk!SW<kK0}WABAhb
z8&g9nS?$a45OZ1^%mTDKlB=V2Oot-l&Eql2jC8Gtv>t`c+tejo|9K2d8RdTXtWr3p
z9=BVgy(2 at 8W_npIo~{QYLyly2z(y(r2nY}PI`b5E96J(YIkc$YibIEn&;;jO+ep+2
zTE)I}P7l5B_^oXX8X at VM^;VOAg{}AHs)8Dq|D4;DMcs?Fz*v_YBi;=kZ*i^24~`DU
z<g4Sh_IQAk##;PxJcK1+w=4+y!+<EO8Mpi(>^L at bX*$8y>TQ}4ZuO%cui$i3r1gNg
zQRjxe)7hQPR+DE`e6-u;>PXikmiWrZen%qWcTcf)!P79&fU1LdHio&l>a*L!g6iUm
z7i1z`D<elBn*(!eeUXoo7 at Ye15TEHUV2sV_WT~hyBwdD{y&<Pf!){B(0YmK=8Ow41
z=xm^=P((uQ*z7wF7tOvG1+3iO&P_)nqBuv)PJY_NT6`?t_WKO6>A0;JxW0i2#^<S0
zOcu!MK?6gurO5q3tfy&;0o`XgW at _$UgmI1mks|l+XhDLICR|q|>VEeR;6u6Yci)05
zBm}>Y_(}|%mc`|?VtI#R?sub)WawJ_tv>f+GXqNLX4E{<9r=W6o`^_i%-LW_#ax@`
z;kb8lw#VZZ9z3pQfUM at tyG1oUQP3c3rKsn-$liwaq9}a;O8+EEPxTDodiEu3b$^IR
zk^6ZlZ1=k##a~&sL%5Q4`+={t;!@oX!w)mLAWKmf7eGCg_%2N6WNV`No>8s>t;d^v
zQ=odWSifkZvS15cG#WYPNzJ}<$R7<|7)gS`!>(eQA4ZdskNN?6pF_^_BJqV5yvdGa
z(VvRs=E;w&2wlAiCPTDu6SVBjzSl5Mvsgc-+-Qe#Ib|7(w;P&$Yl(yWV69GoS)P(k
zru<@C^23L!@$oy#yd}Twh}OKnpt;S84^cgQ{Y><0vQay==YsQw$f7R(ktn2R6zyxB
z>F*agq$)~3;aFm%wP$|=3KSJ`tRbsgk~#mB&K_0#q7J9*n)kU1 at 0`CQt%!|Y*%P at K
zgk9O`!Qo4%{DvHfC}{G`?Aut;HoHsGhIKCE+&bb->Snx6TnWFNzp(O-sHk<#=?%+&
zwqEkRB|oPg>a5*8$_uKScW*$THrZn=R_uL73Ue_&;HZhPj-L3`n3dk|3hQXd3B at H&
z1rO`!2Sq|bg)yS}K+ZQ21vPk^Uu2T~q81;Y$f&?k00(mZ0=sQp0YS&l>W$AHS6cK3
zFawaeAJTsYLqJ6sKIDRq!(4F+-MK!jJ-+#H0LGqUHA!ZDI&_E`l{5(j$cEA};|TsN
zIY<ca+txwv`{R**RXKgIWx+rU4(Z9kWdPWrf79<c8sS<M7ThUPABOHp%oA^waf^JL
zYi{M3aO5S~an4aitw*e$w%6|`?SLFN!4;el2l9j6F at qB?O<_DW&7f!j#4L(JXA>2a
zw-Sc2REzjJ9(o%X>#X4c`N8p7X*D=i6W0Z~er`Eag>SCW=>F7gbPg_p<Qn at BpcyBD
zz5qG?wz!!zj3AXF3knw=WWjDJTO at fF#RS-TWTJ at s!;NTqba)Rvo%f;jI at KlIg6R#_
zp|<%&jEGJg7gTX;@-0==1P~shMLKv(ByrfHOzp#48F++f!hmcx-pUXw2f<i<3j<HP
z at J+eJH*aNzPCKY;8aPhk*UA=U!3R!d+)uaNTBC<Ik{GzUhFcPb=p2IRiail6g0MzK
z%hZ}*a`qP8v1IIn3AQCXZbp#wAKfZ at 7uhtjz4L>6p^0R>;VoSGRWT9%me~U4RZi{g
zmR7}q>6ZR~$pzd)qY>V-W*WmZooOM{SD1dp^bpe;rWctSVq|*5n3|Z*W7>g^fQDPe
z_%Wt0F at 2Be9;QDty~woZ92q}=>1d{5Oz&bkk7+v7Jf=@FeVyqCO!qLYW_p(CRi=h}
zWxjoxj$~?L8p$+<X)4ndOdn^uk?EUEOPTIt`ZLo;rUp9j7;Z4raZD{t?`4|GbOqDL
znZCeu3)3A;4>A3fX#-Oo-ye}F{=DR?6S|6wgOY0ghYYu3&EJjvcQ8$TMutmRD{0AB
z{~XVAjP%djCMmvWDDu_P{cjZ0xm#Rr&s*cw9G4iA8{zDXspllu)Qa!<lMIhd0mAt)
z#uQk%fL1t|u{ZNAt>VvQOfyV!v90(St#BS=t$c-ywfr|S#)bspwzP`>5o2cSK4DA)
z0=aU=TKbiYWh=v?f-%jm$yK$&-?a)~-HQKnD_qkG+Zb#2<6<j*6JxDB*IV&*C*=Ln
z%IC&d3-8$qd$+;{#<UfTT$fgSzgD<sD{N$}<?r8$AJB?Fv=u+76 at O$aesC*1z7;mL
ziXYYrTUz1BRyev9p4ke=w8HZkYx0V1g%etZPi}=%Tj31G+Vhpy3U6Snwa<-=wf3 at w
zF$@~QmAB$oG48~C8)Mq*P0sUY*?urp5H5hR#<#TMC%57kGVaImOBr`(T*cVPxQQ_|
z_`>=9BJ&@>*u+?iAIn(J{0zpL{IeNjHY{9TtMD5bYvucdvDW{TGuGr^#kd2fSHoB<
zkM37lUQIqm#{D_Gg|R>5j8^=OjE6A4lChS)jj at sWhTmj<eHjNc4q%+jcrfFQj7e2b
zu8gtPA6GK&DA~Fi##;Z`y1%ry3h!AX%cG?qz*uWvCdQh4Vj17Y`L#~Jb^q47e`@`F
zx9$)8xIJtAUF-Ir$N7_jh}``73*xd86EyJw$0sDlr-Ek0WyQy(%1{(8D?0&L^O!$B
zJ2`~{u*dxQNpV@(&Uk5JeD;z|%?IhGYGD5S#JB}1GG(N at EF~#>{vDi=hVOLXjO@(O
zBawe*Vpeu$N_ at 5!FDE at NHDzIXVuJ9{xKt5idg3yUt}`YirY2 at 5>O$e6C_3Hv at j6`}
zT!+G=4}Np+lOdO6Bxc5;yo3S~j at r)<G|Iq0{OB4#dL{#v!Mfp~)V`6FZamUJaGe4=
z6f|HE=B}Xk<F^980f at 8$7lXkcf?pth!}05npMpr^k-z|4ufXqq{9>0TWydW at O&o~0
z<YJdDXoX3l19h?4%QF&}Bx%8Pv8hYIFlJ at PWv9d&7v{ueCJ0_E2`znLOSq+UzabU)
z=g<vePOQ9LQe248Iz((jVp3dAYPK<cNxBx*7 at xW%D<@NwHI~{!T;_j|&*?iyPsx at t
zry{iE??~O5?cmGe|F={qos`V%97rM|B`YH}E<Q0WF+JOu7MG#bGcnotFGZ1ZZwc2T
zD`QKMVq5tCW07Lxmt-veZ$hJb=OknsGZV9OGSkIviVe5uV(*?gGeVRCe0g6Tt>RYv
z&k0le*V?tbA&DB)#V$!pPcc#(%1WVD5!)gp`J_1CR4QL<{@nX+2@#tXmmaq;G2!2Y
z+B)1n3YGF}k?Vg*u0{H{gwy2TO3u!q5k6sgdR!VFjg<71>=g7I4<=?Bla^!}wRWNL
z<FXTTQ?i|!zjG+0<7hnpV|I>k|4W6VdjE$U|0Vrfp7-qJ%*40^r^jBW^=HPueT_)I
z1;;O$AGa(ng}YIQ|M*bq#n5-oM89GTOU#PTOvz~J9(2YD)NM>mjmye%;u_<!jdJL4
z=9 at D!<Ce2rIf^9(k9uZ&@^YuhB7||`lC%u!p^eiPEW(Ikj6^@?ly7WY`jYhJX-jgl
zjJSV^Ss8ewDPk#)V|J!NC*?RCr_0c#pvO+rW#R8KT&IJ^>y}_MS0b*G;IjZ%nS!6H
zy90jmC#tXexA<AQ<w!AJmyCEa_MNy2l9BOuu}C`|e^YfMblNDUYn84HPHTiosafV!
z+)GCSxM2TDnTd(QoAKnt?AdXtIns|9>_5ZVpT>Rik8m{eiJ55dc;IJ1x+zQ2!*eOB
z!?|P0r_FW9vlp<o79{*^D_jihNep(6x5DdN;SH_u6Rq%*tuPtzozwpW-vV;RpSHr@
zTn=sitIb>K{%dzVQ8!GNfcrsHm5EC-!|{AaXD*3P%);KbpF?E3(dy$r{#HD5g~WwS
zH?qD%qxfcw&_fJeC~3k<N%NR$=_YWxso|2ph3U_!68oh|I&-w7TKd=LNvx%#QH`(R
z_c(nGr!v;UbzyAh`fC2vUa$>Jv>9qQBuApu2K?|t`_TE|N9zNUZCm_E=5$Ypk{?mh
zKM;@FlE$NSDK1exev~emW5|!@+nxAF{xl~e|55l6HZz{cI2x4V+|B+onBD_Q>CeHB
z@}_%C>7?Oj#4iKCp7>?rM`g{!kII_QbPXu^7vM+fti_Mwqn+vo;r9yT*FdRUZ{kP!
zY{rkmeU2ZM>o9)A{}Dgp&w&7G4oUmONIuEG%lnwiw2<jWri;)+1nQ>fsGj5=6g|vD
z-CYu*Us(eFR8jvH{!AU!-`Qo at WIowU@hwErK36c!W4e}UA=Ag0KFzd*=@zDCO!qLY
zV)`@F8m4EM+L)eaYG-<pX%o}yOm(%goNi1#nHre-G4*FUl&O~fNXFxthB1w18p|}9
zX)e>XObeNAU|PbojHwF?xsq`e(`u$QOl?f<Oq-bM&dK^2m>QV|F|{y_WtzdXkm&}d
z8=00c-NLk#X&KXUrj<;qm{v2bVQORA#MDqH%V}h)r60uD#59^|EYn=3g-lDBe!_GI
z(@Lf_Og+zYeoSZNr0b%Vr0Zs4oVy2WyP3&3x=EQSx*2iVI`9(WmcyL8L{hpX2$w~k
z2%9di<c&hSOu+y|d=Za0NGB(g(UiD!-K4|?x~RBJojD^Dbh&N{@}H8Esx#*-)XhlD
z&`raF^R6XJbzzC|B4NbA+G;t)%M=&zMf~_=P^6JU{SVR*gEZ1XY2lx<Fei&ATu3uJ
zF>OI2^+)88{t`mS!`Ykib6|6nP8W?Ixu~e&2?@iOi*yMmzzsD<!5QgdIUITGES7O;
zY2#>wlWvAC2lE!hM?XSzCNLH99{f!ZI2k^W6?)1P&>85DsK_#20+38s#&5wgoh+mw
zL&)@K{?p=zWRM at FPqQv9B>8IjwfM<=DP)Tug`0x(soay0@&eE(V3MI3Jv>puRKh7-
zPoi`$%%BTFXCNMp1=BDqpnBZ}IV=SYgFoF_nSPE)mC}*<WFj`@BkK-t&X?wY(#iZ&
zL|)`0^B1>Y1d!!ui7(5O13AbBA<LDGQl#;`RHiG-xy0co%iB7XR{mT4%_t?gXr^=>
zg at 3~#(**oo?o=Q0p?^a$T2dJLXLR^bNEzCqv*^a5jA{6rg at 2k$#9ay0&4PUYe at 7B9
z{>Q%no%ZiPdH?BS!3^nt`nMJ{l-B=l4WEy>jrPw)_rLbfIfXU4mVa$9r}<y`r^Pq^
zf4&jq<*zAN`|u-=78b3uK34qr`VCJ!`P9?TJp0_n=U;g7rI%lMwdA$e-+1$_O`Es8
z{m#4Zz5l`1(hooS_>)gR`@C%1_AhpP`PI(yie0<+?A^D&^1#8b4}Ej^+o~f+kA3(3
z4?k8P|LMffzx?`J&B;@z&-{M&4_ocIy7Pbj^|!sg;ljmBjhCCQT)lQ3Uw7BJv~hKF
z_h{?c&a1t*PY1oBW2eqte7kn at yRCbVp1p4GZS2#xpMU=W0|N#P9x^m=*zlk`?i?|4
z)aWt6W5<O+2cVkb7C-@<v at khk(c;v!^d%V&WM*aOEM1nn{K2{N?z?|}?0 at G!v|{C|
z)&HmK|9?9F|84o3Crk_rpETJLF=c9G)Lqk}r{6teCf at OmnRBm{|9|KIze4^wSgAO>
zng%()E3M&q-UUfxnU*p&Tx5Tyb`D>{xQ40m5{F}2%GA)v{!B}mYI>nc#x+a>F3a%$
zrthIy2#wC!m=&dgYFZynXY_CJN#B&}6pyq;cRC5^-{PlYo)V8Tq#~UMMOjkB3{EQt
zrFX~wBk9pxBMWI$X{pA}IRrU!__y-XY>Y}w^FNy7Bm*a++zCKhiX=Nt2LF~Gr9m^&
zbj;$M<7*}Q_xQ_^GsRCrxwI5or1o#|r3Nt*rO at J1>9yQj>-GLq-<T_;Alne7Aaia>
z;h*!T{50)VAj+PNd1w~on2Ee)9to(;vVSPkKc`1=<B<kQG8;3xK%_=;k at L<Za7d>~
zZJbsIx8A9ix>6%Z)a4>vYyIl2B}_m%)MA(5o-M%N+<z#i)}a1Z(sQmcm6 at b@>r>Ej
zPpG9WMF`RYJL_MmgqjXe%bVyw%Zq$7 at VqZU9Ma?lLUJUdf9eHfOV;j>mglYYl6o)7
z&zzY!DJ3=0oRN}czH3H=(5o5XPipYE%)}YOS_d7i3;f9czfsb)5#N<*<ix1B3`cAy
ze=-Xu-UZe9%q5W%Bf=0|=-td28PQ8pQ{tCHtIW#KnTeTcDe15uE=i9{%uZfH%R-Sq
zQIm&@iONDcE^-#els~y>#!!0+7sHtJhvbqOYx at i`7*jpS<uWGSA-O!pq?;pG$e46@
z<TfxST^qTLj7ir<u7ok^=*Vqh+(ANJDPz)0k}G3OG9_2em~?yODj9c at P*=scGvjK;
zT^QFe*6i#y#-w8;XJ<@0R&q^@Z<7$pR4H$5AA~1kZJ&XGG3hqR`7wt6UN|G;+ZhKi
z*7lhMF*Y(km~kJ*CdPdk2k|)GkFkaM{*0p;_h%f#m~7_cVi^yVP?yY at bgbku7?aMF
zTrT4w66*384`p1)IFRuM#$=l(w~_H^33Vlm$1vW)IGAxM<FSm(7)z at d+5=;i`IU at K
zjH?)%8CNr&$hd~FcmUyNV?2rZcE*z#H!+T2tn-xZVG3hU##0#^7~jR%kMT6dM#j;M
z0~pU{9K=}DCkHdWm-!~fnr6eocs28*8M|-?5W~0)<7CFJjB^>gG1m0p?u-kW at 1gM-
zw`IJAu_xm)#(0ZHI3w#5>2t^ADw*%ixSFvKV;kcRjGGwi8GE*q@~4mOk at I8Rk+G)V
z at 5ETs?{{V#z~Q?v4rc7j*ut2;&`U0cu^;1P#<wxfW!#-{A>$s5H!|+YcnjlRjLR6`
z&bX3sZ^qS(jf`!K`!H@|+?TPZmy}OG#(s?b83!=#&p4Rz0LB)^0~yCK9>h4A at nFWe
zjE68TWIUAdM#h1ROBoMmT+aAT##M|*GOl4fim{#XXvVtsvc6*&8yM3EOUW4-k7XRh
zcpPIB;}FKtj1|VQj8(=Nj7^O57 at HYyU_6m=3F9!vWsJiaS2CW&xSH`~#x}+gjGGuw
zVeIKG>pzvTALB^I0gUfr9L#tcV+&*YS|zy{#&<JLW;~m5F5`O`7c#z=@kYjpjJGge
z%(#qkD&tDV`HZU>yYK|W#@LOqX18n0xQY4g7<>9id3Z7QW9-d1fU$vbFyqdQEsVP`
zj$z!DaWdoXjB^?HV!VOzP{t*ULl~DaRv1?@p2)bG at nXhy#xB}~s)MYb8)F0Gwv3I8
z+c6Ge?8Vr`*qd=Q<L-=O8HX^=WxSYiA!GW86uFIz at jiiYTNt-xT*kN^<4VR}jH?-Y
zGqy4A&bWzj2xCvZtiKCS at cbCNF%DqdmT at rSc8o2Iy%@(Z_GX;SxI5!q#vzP1Fm~Yy
zV+rGSj7u4NF)nB9&A5tjcg8i0Ll`$PcHs%7r$N at Y9b-SnUW@}6cV`^TID~ODV;7^m
zKe3G4G0tG@#TW<LiuFYZ;|*GTe;L0-i_f at Ji_f@Ri_f at 9iyt84*J$w>+qL+NbshQs
z4wc~zjN36bGWKE|q=gTX;Z0h2#?e}M#<5!XkurRS7M^jQ7M}42Eqt&HU!w6Dmumd+
zl3%Xz8CPk1ljPTEe8zSShe^J!ldQj&MPh at 7BPBL!I9lQ$#%?PlHZktbIGVAv(&?ZF
zSSSLLE{mMDzrn(mqj+c?$dSHHQaRJ4)i*h^Gf67LkzS2l5?1Eqk`Y2uvSRAMmElO=
zL5}uUkfVJR<kC6abjBHs at uH*PlNO5{t^3K59*bNS>o>D>4=^SxA`VSJ2uWo)(zTFF
zL5;}Ko-=Y;j{3-aQiT<g_N_>q#N}Md^-G4HhFlyZMlO-dlg8zUg9OMe=6Iy#BA3kZ
zX&)51#T<Syr<Voo5xE>rH=Fa%;B*#pKBR3SN17sXi}^mJIpiVvY3#p{>ql~4jPRsq
zB1w==NJ@%Qq56<6Ylhh8Lzvn}pl*UrTmMiy3Dku<?26Pr0(BF0+IocANg%AZ+WLp|
zG=#$`F*vEUne5mvL+vFHR$Xm9MeT<0-7>gnKY`$Ka|g}=-vY~~bkv at RKf{4Z3l;&p
zwsh2<0%29w;-{lVgthe-wXZ-}WHmmuGpetaKee|&AT2z#JHlH2)c&YET6k)QBtNbG
z)E)yNO)dQ_NSpYYJg9vJqO|;YBX>$~rXxLSuT(xQJ!-d9KdpNpy*}A_&0Jq<&s6?7
zjHz8yewutqhfMcR%b(hLAWEmLH>tf7*5pU+p7PV`N9{ilp|$laJqJ`j-Uflt4+?xQ
z{zd|2JNgHbTT8p4=OhrZw0cpvK(r#Q9=Sp;E%-qp_ZCdgmveY}&H~X&wR%ad at +8N7
zqvww5p_MyL)HBLaPtwFXw+p#XHOe7JdQNGdm)6edc_pkp7xdf`*7B$4m+nhzIneX$
z+<q2_dbgB|o^$7N((~?&>AAlZQ at LB>Q$OI0)5QI6;Zy(M%+G3-9`zS=Uo<(zi+WB*
zi;|A|5$F3T`;(RwWxql#PPRbVzfg*@g*|}!kYpzCosnAYmiw9}?$cckIm`YiLN}fB
zm;K2^$MYihIkc3I>>HF at 42PHf$ppuJp>c=$EA4rc{X+{sUDV&Xf1vQuPVI!`Hv>Mm
zwr}}dxAbGq&%s2|*QSaR$#&NA{L6MW!69$wcH<mRlUq2-PEN`t+|mBzxNUJfPf|{1
zN4ce(%#MCb%BkgflyaKrc>c0PJCXHtE{80COFgx6MYDuuxgs6UjV#v;M>%D=BAv=X
z?X4wWS+2>Ba%<(%?w9OuCpeWe4ReT=Cs*bl=4d}M|0qX4pyl7vA5#7;?M>!C(b3<@
z{9DRPwm53NX8d*T-?CtppmJz;R+b~mQBEoU2uC}V`9wSTGM^~EyEHyiJNxH+s0Ywm
zsLW at kqy5NyTAnAFPne_r&gtHIU(-ZSaBKOe;YpHCraQ$6lN at F{>O=J>AFXA`a?Nq@
zW&DYbengYAHm*{9x)Zm?*Lo2-&m?(h{jVlJt-qD|O>xvy<~P&Pj%0YV<G#x9kxu2I
z-0yYl+m+$9r%ij_raJK{e6*t<(dwg(^D=$2Q~gOgvmDQb<WFc7Ke`ovx}$x_^tE1-
z<U#4paE#j$Tb$Yf@$YgP_X$Tk>fbWYmm at v33umY4jkSJX)6);-KqW at GE|IhC7CV%d
zMk({F*`u8CPmHS=f5^CoaS3BP<MoVnePn*$GBz;&p0SbfQN}@x-)3xLyp3@*<2{UH
z8UM^UgRy2O$YXqn`5PGTWL(0ylCfq78N|4h`7biAWW1QMh3yJ`7}qdAUgNVJ%7w9=
z`Pw{C*H_ACCG!o8KW7}x at ijYP0Q0ryCz<(f96p%&+Wf}C_)+F(aCmpdG0fNc>0IV(
zcEx1ozs})v89%|ekg?V;Z)E&2^S3a5m$8NI0NQ-9jQLjPYj(=Ej4PS1*=Y*7e4fm&
zX8s$DZH&KR+{E}j#-9D8ybmz;WBerJ0LI%H2Q%Kw*uwY|#xab4V4Tdjig7MuZN6N{
zxSaVL86RW3f$P_f at fPMEVO+-e7si#0e`H+E_#k5&<4+kkF|J_j=`ZE+9b-SnZ!!*G
z{66Dg#=kMPFn)@04C5Nc$&9~XoXhwy<3h$K8E<5Kg7Fr{zcMake4KG5<9&={_<8Kd
zxSIKij5WKaW*4<FKb83z9De}gCgvwI-pKdIi?L^aDZfa at r5t}4V?X9+G1lzp?HLC!
z|7pg-jNf8xVf+E(7{=Q8p3L|&=I1ir!C13HYIfH`<`*(wvx|;lypj2u9dZlT*PHoU
zn6Irf%DBG6nP0~IY{s6<_hVei{H=_u8Ef-{QqIqZ`8MWHW1Pq71u$-6{vyUE=J#go
zIY8c at IL2k1eh0>W%x5*6W1oVa`2oy-hH)_C>5MBmJp*G4^R;#N7A{X9^JAE=joOvW
zzk~V7%+F<P;Qn$P<6P#iVO- at Q>(`NSFo#ze7jpO_#v2*W(BgCccQW3>{N;?3nctsr
z8S at u1j%B_-<4WdBEt*bO&G>QVZ{+Yp7~7bi#<+=b0pkF!Pbg#0fwI1jF!p19h=!TJ
zmT@`f7sNP#`7bjLW-PUL*oVV7hxsv#XECn!kok9FoXq at Z8Rs&d$+(d5bBwipES(u|
zWPUMYZQsIZ##@-bim{FJ at 4~o@`Lnh7%=cwn$^3g5S2Nzo*v9xV#!ZZ0W$YOs>$^qc
zbNXEw`!PR;v97HQ-;Hqq^QBe+c3i$+<C!1K{D&D^7;k1A!+0s<WX3NsHgJBoG0tWF
zT*lGN at 5{K5`3a0SGX9G37RI|7moYA7T*<hMaW&(w8QU1|XY9xMcW2zh{CSKuz5Z#&
zo`a<Pb}=?G{*rMp<4sz8#?NcvIlmr^lbQbl<6Oq~F|OwDBN!Jl|3SvuJ{1$=jm%%i
zSm!Cr8_akM^Ya*cGJh=NGUn$q4&eNIGOlF){fw&_r!x-X at Vyw@m_J{`%pb+LiTNwE
z_`L7R$k=nREdK(=!5sf~#(vC?Wn9Djk&FYF{|aLh<A)gMa`=IaW0;@9IGOPhEj(ja
z#)XVeG2X~{1LG}>Ut?Ux_#?)ZjNf5g&3F=H8{-VdQa?*OqotGU-8igUo$&%_d7W_r
zTRpV(b|PD+G at QcL9StvHtBQsfv-L#7snGU2r=JQ<oHHh!hcjLRErc_EpcS9ArOtfP
zb~<BC+pXol+^N2#^^{t{cqe_J^pSs4!Pioddi({B^ram}v(}MahV&1#e_A at Jms)@n
zXg709I?`T4+5zdLy(ZovXDUme*bglE(teWwZMTL=zf9>l<CgdAq&|)QI`e5){H<6U
z2Q__g8e5&DJ!qjr`yll;anKS=C-DMDc_r4Ym6~2C-f^ELpY}I9$4_yTPx2Qz?z6<{
zt<ukMv`fj?tZ-U>w5!-T{g!qv!$0U~hf*&?tzQdIdKlV$?Tq7b&u+!7`M1WWUFOc=
z<-3yPBlByy-x4o$+&_tv9qmTqH0%X;PA}bY|0G|tK5FS_ILVXhBj5FG$v?x<Ze at JZ
zjytEH(~7^;DLvA+CpuxWe^4sYNqba^L!Q!ps9BxK?o9SN&DtvM&?IlIeM&uROZ(BV
z)(=Tcf3^Hb51Z;}kCLCJi)X&HhqRPW+G|>#OR|5{bE at 56X@_#=Q~LDWN+<Q(npK<Z
z#Z-U!4lsp~_O>`j`<3=U&6+Lk>y)1+FKO>+d0r*ftnbqP9th2~)^AHY+CqoCq}^+=
z<N1*GrIzw*_8-lMa3FdQO at 7i&w%E~+OZ%c`RVVv8*&j7)JDm?fcDk15QQ8SLt2*(?
z{-otbnEFBbE1k4&IrHW7*1{*8=4gM?4oH8cllEb4_krAx;M{(sy-3 at oKzz#IIXtD`
z(jQ2BUQ2nTy;<AUK<8jkdtcy?m&Dp`2OY*cX%W(T3=L~fyoR+WQrfGvT at rGignUav
z)=%2|TFN8sIW5nR#4YuanEq<<$quURwvhWK2y6X4>G5d{(o)c{mI7h2lQ{DUJM&4R
zT8St;Nwfu%J)PcS(aNJeKXjT9?P-u4Y3KOQ at lg6_LGJ$)Uiv$apVF?U<xcgb_NtYZ
zFxh?SbRn%gR0awmX9m(<+ahoI2A4A?`@gnJh4yn$?OWQ9+z&v1rIYq!ZTAc96QTP-
zZ^KI`_X}h=#&6kr<X>m`IQu)-SK9ZNq7>3eJA6xdq}_n}6WPPGVEF`TSc at -lvZFi_
z(;Ga}Nu1^AA0*CpjGxl(-;zH^V`6V^g;(E-n_BTb9qeXpV$41+4vxH#hZE~>^|iOc
zEy?LR{64_<p|4M<&Jl8*@Tg}V2pIGB7R8Al-8t--BYb~l!LRDyuFiZ4YH|vXOS>by
z^si~btt%h`#J2DSZV5k2xbIu>s~q at +=gA##U>Sa|1B>LE)|U&4KR4QHSI)Hb*6_N&
zTH*Ru*x-oFheNN{JkHLf5`5|i|J}arC|{8SzdF6XZNG>G4s36}uX1GGcn79*C`~Or
z5?34iv}Q07mP4|s&Vt2I(?N0A4X=DTm(t1jZtG&AvCnMFCR(!e>4yZ38ktWt+VjP=
zM9Uwz`6$u64fk7#+82HCIMI><uP2DseER8=M5Cw8f10RnM%!nJR_%WOIimJA?|z=B
z at yewah-U15?j at on9>K2=E#3RWs{*@hFCl6?`RHpz%iGL)UC at Pn-XOZ6<DY`&xs<(0
zxF&ebTSN`prfwo?D(JGAX!*vU1+BXJ#ukC!S at bs1s<(sQA&PPcs(WGkyM#9suX>ND
z;d}G at L`xoU`+#Uh!ahMuKX`O2;qm}~asTZD)(X1e=xITNhEDvD_@<Gs3yPy^J|b+m
zd%mDG$zKW at 9n|Av@~_#FD`?QM?*%Q{dgmwPU!|-U)R<o<Xwb6BqJ6~nc|%ZB-c3oL
zp7R-nx8L`PpryZb_?)n=ONyYeF1rN{+SId5_`5C at G|2B;K}}}|ZX^E<X?cQ{d{8YY
z<g=apOXe2}no;$eprzMGe?k6LXNm<4Dmo*m>D;&-<e%aBgrJ5qX9X=;IsQxX&-?xf
zL3QWP3R+ST@)h})&fXws$-8F+EiVt=DZ)Sdn4m#{HG-Dxx~*KKKW(C*v0tVNn&<tj
zpt{hVf*PjT1hr4-SV7 at S{Kg5ISG7RU4U4RT8vgiL(4a{_OI+x-i^A8uH&oE7Pi6{g
ze|3eRdFgKoT53Eb=!VZO2#Wi-o8lQCpCD;filBLo8w8DYDHF8D{;Qxtd)@bldaN2M
zXjRV{5|=EOv|Wjyx|n@}20eCOP}8PPqJIk76f9`;WA_WXA!e<hruOd$n(^kh68m2g
zv}#@VeUx8xwJK<pccP$q0qZ0kvQ^L;-|r;<k0wDgUhB1A$Ya6;K~0B}1T6`*3L5m>
zRzVHNj|m#>+9as4YtKrGw*j9RBwBtcUeKCdj|!?={;r^Ce}a~jGzgl}sjKLZOVh>*
zn)lH>L3Jlr3mSdpbwM+(?G?2251XL&FWVoaeDYQe6Et?vbU{nL$`Uj~c~(&SmNG$&
zH-8c|NVy?tO7E{JzG<~t(2TrzLG7sz3tAesS>m<_1TFvUoS;F|y$?~m=pO?mjhH5=
zX>*34LG at 2aJn&;d^CG?z)DUw?P~D8K-%$M6abqOy5F at DW+gw32Ry;3gN!RUyR=xa_
zp!SZ}1P#jSahT%cITAGb##}*T2dogZX8cQ%nsx}9cjwQ7R&~5C{eSK8Eyb^TK19%x
z33CO_JN}@c8TY>+=!PTP1hwCJT+os=O at c<(w67BRFYO^{klPSJ4MpPwHMvg_v?h0s
zp!U<rf at Vz06*RBpQ9%t2&k7n8vPn?;L!Sy7{mC9dW6vCueDBkOmJewV)G*QI2<30O
z+aT$j-hu|j3=>p0EmY8|&`3c`{O1aq;kroB=$~>0HNE|)ps^Xx3R*J!EkV&g2wMK^
zE<sC`BZAt0{Y}t}Wq%18>v==ak|)|9rSe2~?k;FXae$x(-55cG7KaO3b$EuLx*-cB
zUY#MR>6=x8#&#|i)Oh!cf|eA$EojZQ&m}#zSI|<o?*xtReM->sJMDrR)tiE5gn5hk
zSLuZAg4T=;5Y#Yuw4k at l&rojR)*C<SyTj|F(C>VPjY!dd7<$jqRW_ez4u__sEeHv_
za4hs5W%OI;?!6e=e&@;Y$rJa4c6 at 7J>^DVMLSG%$+qh)GjnHqt{He at 3tv1v*Xu{vs
zg*xT^<wG`gcJoyB9Q&)h+jH(pn~3k;UpD3a&<;Uk?CR1E%I-#w$v-YQ8QNt>RPRGB
z9?H(&8>iP?I2T%Xq5JLaA8e=WZ&RL8^hSB;^!>2R3^OPl(!cpjH`iC$`l)NiphtcS
zO?zYX$J_2PDAUe)OsSmOS$TiQYp?t?v8yup+~rR;C-qYPzJ58l=A*{YLVL!(nY9-}
zKR!6FUAs&-W%GRl|5%^VOZj8l1Iu3dt+x{E;k9|^Ku<-MqpLFa{zZnyF&@g)1uN=1
zFY2U>Tab77Bc+}4>(joqM}oR2ca*F*7#8<Z%njSyzw~HVWyp?A_q%vDho&yv_f6<$
zgOs7~?%6T4%@8Fl at t2iV-L8bbGRF0uSd*_3+vCBftw+3-Rd25tnD~A-<?Z>e?u{z!
zsH~~-h~3k%o6_WY$M|9GhAZPv4mrKIOE=|(X<0Wme=$HQSX=Yy`inP0pJ^Yp|Ha|`
zl+NDEEw-#Hq3JREJa-(rUD-J0?klyveU!30?wDihHe4AMoY3F;Z4V{yPiwC&^Ls02
zjt{yLHN{_f+PiPHabqW?-D$U{EbRv?HxoC#J3Fek5<h+PZ5zD%D5D3?xtXhP3O(4f
zvVY;-24zup+R7Qv)Pzd;_$lL`3O~Q4)I)ju#HAih_Zk%6?`I9Tda9eU^UMc3&(HBu
z-cXZ&8gA{Sj2ScT#xG_5id&}-;#RHcth}nPjd<v>p-Qhg&-vQV4N^uwbVvH8cWzT=
zd1SVmojFXI`QC%qNAw(^-2Hmow?mQ!DM17GbgZ1{r;Psk-u7Q47?n3&2CnrU>81Rz
zeEp}h9`CNa at bdjH^$DyEU36o$&)IlY=@LKvc!w8<Dc++N+_s_LASM6)+~C3`cPd*q
zy&Jh`Ziv!z>Ek~y>T3`Ev-`L^ew;F1=~kSz!j|Bx_$95YKfiv2lC*T$rB|K|Rmw_=
z?ID)2%7B=6{_5~ch_Zc5n>oMi8LR9+SXWbfp}X>)&%iY^4v$i{ZyP)#d)ioK<|BpA
z3>?{3u}?kSUU#oI-^YPU(_?>r(qGqKDLLA3*m?x@%klCa7SKmIxOvWq3mHC2f76!E
zt5y$DZZGPyJ3VNG5}jkE;ZsTI_2XlsN);vh>4*DPE*+<we&pA?_jL$Ww#GbCbLh?C
z$}3*wM_*qXq8ypKtD*EQqw;*?+`h3tgeqg~FFvgQ&{H}2^@dOT6)H;Ov$tR9*m<<_
zg8ub+kM<s>ytQp?MCLO?l~XawgU`4JD<fTBJvX3!xYBO+<8v;}7^_(J%x+pzF<QA8
z*P!qFwZHQEjL`3mCr2r>8;asq-#t#zzw}-6_1VG7Pd^5%8Ri|N)ch9qbXDj2&`opB
zb%;0gS33T9r#^Ss0Oi{zL-*s#pP>(bGj-LJ#C}Sj_wyoh=ejEi=^uU<IJ}SIeQE6R
z_xFrZuID|lU~RVmB`)IR{sq&|h06AKhf=uowINaC$0+%swKZ?q1}j_pbhYm*9jqkH
z{UzIadyw+<%rDL_G2*2BL(?*?pV&hOor-JUyFgX8?r6K`x$aG&?|lAs&(r`#dCIGA
zMEm#vW!})&D}38GhfZqO^N;YEqm+l!Jeq>ehA3lGkK2EHzQ2-Ry8gq54~<qTx7 at Bv
zn><qKeXQ#%h3XjP(ZS1o4EKys8eQT(Sbii#In}s(w&4wL<(lV93o-(5VAaB-dBNMq
zDVtUf`g+9Zp-P)`e?K3*wvTew)A;g%Lm^7^u`k2ib-~KXMX>{RJuyW2ZOCT>etU4R
zav*(8<+P=KialBXd+4;@%IRm8=Nyc^96EV=-mz6l*F%^5w&=FT5o46a1<D1(=fjoG
zhJ@|ug=3ZOk8Q0=o^dVofkDMRQXU(Ha-{W5eEMeSb2`;yRm=#*@6}Fi{_q>k&(UaQ
zO04JFO>I at B&&;RK>>N2>X&+?nVE-^!iSO~l+6fa?Wpwt~``g8jQ+~Z|+w4asj8rxq
z|H$RZgQJz6PYoWoCU~F{^klaVg&oH$H}6g>{yFpxrCV*^qVNAgJN;$x+9&4>Qmg}q
z&5t_aqwE>wF}VJ%`p}W%hZfo=Oj7Qj+_?G0zXmI3Vy6_Wo;pAowtV8L2|j}qmua0n
zjRPZ<x!?ZKby)5c#gg>X at _Er=N}q3{&VBcGq_X4t6$?UF4pKV5v*XIV4~@z%OTUdb
z&b>pi41DLp*@8jJ)3wbP6Czbbf3I!D_OB)>Wt;B0k at 8ZA^6s1S3*K5ZL^<-Oe);Z0
z6P222rah76gOr!6a~_<UWl}nIt=Z!i)<b#Pa(GwbUX$|8sN?1?`$s5ug)E-+<eQnH
z6Mr_lw!3OnE*?MKE at S;LC48NmwXw%kW%k=wf4loHMfo!EjIQ0{aPA+Xl-N^a9(g_8
zqS#;euHTwCNy$EM*?ObnaAp6IHy`QoRiu)*bj!`TrTvv&Q at VTYI&4;6ebMAK{~NQC
z5j~)C_ULdWwr{|w>Q!TuquWeDJG%KR4Sz3x=<ml(O6@&Ak6p4qO1bBv_vWYEA{FmV
zZyo-jV2ZN+p1nR9KLjaWU)nmQ9tcx>`<;I3wxOZQgf;U!_u1c9S(*J)l=8wrWyof8
z%BxM+L+|jcZ?id~k8&a>f5p`I?^3+}h`$+>a+fmvuj5~NoHQ#>_N-qsBsox7@#cxb
z`nKbg#>|SqkylL0f78zxYkK2fvuba9-DP!ov)bvZ%R4<^YgUa-`MsO+o7GQGl)Pt%
zZ&n|eFy)oRFkr8KVU7KpRnOil>=kXB)i#fZH|?*zsg|F2`MB+&n`)iQ_6PGmxT!Au
z-2UzzPux_`L_had_w1W$_U|qS#@%yM&FcR1 at +ZdKRBsm!w8jPhZ>sAaX*&JG?>E$g
zy-I#|Ie0 at ok-u$e><2g0b*pdh*YM;Gb>z^pnV&7Yp?;K^llR`d8)~ob%=mvp?LPPV
z8$$=)P_xU^*MI7LL*2JCY+ic9b+!GAu0^w}ud9E2?ec8eSJ%}iPTueS at tfDx3G1%i
zJHUEf?YaK}{J*X~65(^?>6q)Py=k}0dKLa9!^VC(;JR8<p6}YW!*$hK{K#Jgm#(Ro
zJ)SNa^2;^#A*C?!#-3|x)%J=mSKhm(_G|VVa{DvaRO^VJLQ_{>Q{Dgi>h!6^YwENf
zwomf!x~3lXsGedOb4@*-muebqyr#a{_xK%C+g(!ww!XIGk%p`4{TrTMZ98#Q?UAv!
zd&b_Y>W#WbhxgigRsAY{QS9Fvuc~uS22DS^=Bk?3y=s$7+EsPRy5zRzd#<Y8-!$X@
zRkft&-bV)yy{fjE`rwsgUEyEig8x_5<0A~uJbwO)8koGe+p9lbQQN$B=B^{VuBbm5
zW}Wl@;EF2sV^`GX^2dFKKYT^aEc0$UlW|4;VA<*RU(CCr*3|xRz0`6=Jv;Qp)%!+X
zQ3su>inwOHqJF=@rPDN at E9zChm)2KYX;RfO^$*^Cwn;ta7gX$WtVtc$jEU6FCiR^Q
zi}l;yYf at h-a%n7ozDb=@`mX)=N1D`aPnPc(nBAoMJraliO==g9++Dh9P3kXSee~dS
z<D1lyH`lmK84SK~O{#}qY at UlplWJP+a>M=NWwqC|d#Cq5by>aWzS2Cu>ax1RW!RG+
ze|1^ieZI!C at B5ck>)6j0zw_c{wero}{K$2eRiAw?bo5+)S^e<sk!OBhcv(%$aoKfn
z_GNWaxBIe>gkM&RZ<_boM_yKU{5olMfd6H+-HMmeaywsEGxFQd!&leUZm|trV;dUP
z{bMFBzI?J#jjPNbu<1yn+AX!BYidQK8ruC0uZRyD)eV_5j*Ne;Q7x}395?w1 at RReq
zCg(S*-50uye)WMy^-ACAi_XV2s&7mQd3f60jcP)l_H!yHG^)RruPd89qER(1a9MV>
zU!(f;2X`cY+@(?V=o%B7 at 7}0h4;(Zyq4ARXhi_Hc+&?a<Z=E{7dtvn@^&Z1hLkbUE
zQlGdwdEbuhm(=omT^75)cS(KcP`~=PmoKS*#^eVbef*Ld>mK7WJMWS at ZgKSZKOeZH
zp1OO*_UGa+sZt+$Nxiw|i?jVFUsCJz7cK3^UQ(yJZ<*aZ_>$_|bn0B&UYFFpdpe%%
zs|SvD!T(F at i;=%9SbyQ7I at W#o=9=Fxs*yu~{%T_NMKyhE|3}LXUQ|!6-}H;}<wbSw
z&bv!~*m_Z&;<EJp)vsSv7gl|Adh9b7)jW$!U-!a`>O);Vn0)fVi)vEroRNpqE~+nl
zdujjIu@}{YOZT5TKI5W#?f8Pkrb!posK4F~8aVEv`e^U(`zHlnRHx6mf54~4i)t6)
z5I?cQku_}*zH_PSa_xfJcI#Uc*8g=uZS(e-9YarDQ1|7$^ThG*FQ|XK`_P-u9Jrv)
z8r1K2?3WkRE+HRw4*Bqc+PCt-VE?x+sPU`)hW32^g8H~;(y_k9;0Nb-4$i-z{uO at U
z$lRO at s-^9(7m8CZs7- at koqzbg3u;B~kZV2fzMxL(T=U-YNf*?QcHA at f%(x5c)n1GK
zoHzV}y3;UZ%ISU=)X(Z_W0v_{P&XV2a=Fdtf*RXq&)`az3u^N4*S=ia*q}~5a`Uyj
z>KfGN@}`#euW3+Aq61yLz6TweA9d|OgW7S-y^mk{szEgkae3eElLpnj;=+?X-)>M}
z>2zk0`IQFsEw{3{nNKySol6Tll@>OrQHNg(zPhqO9W^k&EIO+}9q97IijR{U)cPm$
zGWy=%pnkOMiB&JpXi%T at kHG&1b#838=RQ{&)ZcczkUM*1gF3iVNne-24QlSSKKY;b
zZcxw8vg9rIZBUPwFZ7<=zCrC|biw}yHKTXMO1I1PYGm2!@fXk6tJ!60$ls^x)i0+E
zTX?CuUhS3t`uiT=)~j=BdS36lw_Y9e=OojVFY49P+Zz_H_^@7m_Mz@^+cwv$uXL=r
z&E=JP^`+Mz%bW3Zy?SEEhJw;{^=c=-{EmM4_3GLmdfc{dS-rYEYeJDndcEp$=k at 5~
zgnHFyV9xy8=hmwSzQ6Itw(0e1$Twac=3DAj|H&hZJE-+)$I4OoU$4Gb{%4VOXuUcj
z=)ON<`qirgESql&>JGke^(xK>`083)VEavj{ia=gz5mBo|GZ>ZH at tLq@ul;2wPWm>
zSsrKX>a&y9Z!w;*tK(i7H9PF6T at CqZ$Fv6y*wqKj)<-s%+ttdK`=3Aixn2GA{IJa7
zTkYy*L$X)?Cc7G2uyxakm+k7zb}nPpXYA^!#GH at ceax<|HB9jAvljSV*`QY+va9<p
zPxcy+Wmm6tTK>|fi|p$4x9g8aEwHPP<YbooHOH>Hjr{TQbJOkW-h{4)A|mXn!Oe{S
z2se4n=lg=~YWMqlfBHm_U9BCo?0Q0gUG;QplW#KG)iDoFAMNjl at WR>EJRBtI=4mHA
z2AoD=$6m7Vjv(nN{!06WI+5va)Bn}p`9Q~2l?nXLq)8|Lnn|0|Nt at CEi$;VpgeVdJ
zrT;M1Qin9PS*$uOlagXdhcsowAIr29jaqvmRyG0$CX-1r|0mR<u~c`|icyOWiffir
zVLSqxa~5 at UkqsWi{eAD<X_7W9xVz}C>pSP`@0;)4ckg$<``!0m=Dp6n$$UR7t0{$k
zGJgF>gyl#t4<l^vwJ6)$%?CO8eO2t6gY>PlsJ?ehJ>;=XsqFoq+iE?gpJ&$S{E_*)
zoVA)~?pLpqKWDWwn}Nqho at 0Fd!4g4T%Wp6qJ$k;!7tWN;+m^dr%8yOrY}$C^B|{nc
z%+JtwZC!4>>PJ6~-|t)Da$URqI;C8EmdAW6RyVgSZ(Y4onr}G6CdS5 at wriwZ(+t}>
z<5>3 at HZiuIVOx#OgUtcWcGrnXb<ZqkwBes&a~o~+V3Q|l=CSTpIks<RxmGC{m}xWW
z3(v5%81;?JsISE+m&Vq_Bi|MLXn)sMGk5zWmd5Ahx7>1zcN^hT0rJ*}UuV~~%h#<m
z>I=`XU1QWYGTqi<mK&X6Gs~s1Ir&cyE4s~gvn>`Sb3~6}9jbbMrtLDZ**0<9)L7Sx
zP1aC;fyt$heVf>n$6_o*vcjyM7i27IjF;k9Y}3El at 3*LSChQ8IF3 at XHhdJz{&1+Ul
zv^e at TZI&XdDyp-(EORVs&MMYAsVGtv-eOfzZ&MY`rM}w5=JUx)+CFDKU*40u!uKIt
zrhV4+xQnHp^XU`Ei4UJ&z?wk>=6;S7TC5gjbwhqwt-QWimDd$<M^dO3)*n*~Eu*SP
z_La<0CG|zBq^`(kG5o=&`a)GPztksnT58Hvjn}SfS}Igc{XA9E>Byavt;)<#+kM65
z7FE7~s{IFf5jTx|nf8U2xdm$OssgvwWroLUDNxpPRFTEUKB;@U7;Vp`ZQ8G+ZKGY<
zZYibR5>-<-)vnb#M-@<y)nhSz)bY&6^(^v3PE}r{Wv;5C{;E2=&%%#AEvPS33!2Mv
zC0Uzqu7}txEmKRoO4U+tiCWrHtd=q^OY5q0i?R#T7Jhv0v~P|Q<?xm%2fjJ*&Cy(y
zo1djlqYtH&D^V4l^no9cJBK#TxvRomtj9h-R(F!2k0aZ8`Fk0eSvjr#e3^CZZ${SZ
z7sM at dEyR<uRrG<pslvaiX1kF$63ZCb{0n4XzWjWvn%`OKwv<{_={DkR_>Ipk_)I=H
z>a^d69UFaiP-osgn@@kZoS(yNnDS}1GH+-9>S<++JjL&PzqY at Ncc>8YIZsQ8RdUc}
zDYmNOyR2 at 5omTg3^~)2ke at 60gnXSyaM&>8-pOyI>`@iujWs2FqXj&N~w}@r+3i88y
zf*kplT59>anwKr}l`@|izs<waLi%RpTnRZhHBOf55>-upRg+)U*sF<kb at RfkX)niK
zhMoQ7Pjx5u8uGrrO4S@$m|Kvo%v7YyePtfT)0i8~#g=mRGe?@I=0>%vlzh5TEwgM_
z_8eYiO44R_o4z at D`JwtPbJgOm530rWo77 at Uv&#GJx90sW!|zh^3;#RqzUnu?`uU>I
zs8RaLFe~GH)M<598u`z;te$zy9L|sTom<Ft<lcN<Ru|Dn`r0|)SLw044S&4P<Ilh0
zPwuooKHe{xZESzJiR&VdKJsI0oaZ>l82Mdq&(FuqyfkCtDdC)FQwzIF)I#RWLSnwK
zxiV|o(7ki96{&@F*o=8Kb&jY!`?y at bPjh+sZ3A*t_o?!X`TZ+iNh{>V^89{F4d=10
zMVw2|VcZs)<7%0&7H09=$P4m;b5u3wsA~MFu4DY?S=GF{5|_nM#N3?A+=O*ip6ZLs
z- at 2@;N-gm&P>UFs1((e`Qj)V}i!yW4a=w>w0jhG^xjpaq!@Okus7QV+3azTJ%cApj
z9^+olSTp{2*?njB>Cj%*+(Mqs_qo!hD(fp%WoJ2$J&V(GeMKH=hcr?*_*q|dpHeUB
zvJaqtW!mT2#`Oo({WNlVT+6Jgtg~>|bHG1Q*L(JJojXZmY?bqi)O^N%{t;s)8h%)?
zcTuM14)Ro&t6o;9$}OK(McFwSYub#Jo%@0FYD-k@^LHv|*C#l)e^S|7dX%mHQ_9}M
z?<^r}uC^HKqD}v7p6{ow-_;Aa9tX`j8)@6Tww9=p&iu8tlDT156+bHVF@~FFjN!(!
z$FNoEsFG`!opGsPTo|7tTxXUs$GaA*W!`G$x`Vl1rHnH<gKpuE1lzXR=S|@~-0C2k
z at -bUdLJpOwCH19hN!_B{!t8=fWxC?@ynT8=sf8idtJLK!i%Q71MQYKJndgD(3*{PJ
zt7<IHS<g9>^rQOXVzs2D*Se(skadaW(^hkobgZ~nslJpxwcKr8R)5&K%yP&&KWERH
z^Vclnp^TZ&HdWGGblS)F4fA`l$S3kX$~<i59!q>}DZ}4VwWw}Et}<JZDNl1vHqKEM
zjKe%tafESrQ|YGaja8OPRh}!&7H8(B3w?7u1+M%&>XtDmwy5G&`Iyc;w;gy;sYA#E
zr}N9E?DZAO-Z^z&A at h;b6Zue}O4_YPj?9+-Hy=~#t4Mx)EH<mM-8IKm{YI|K?To$U
zTveQvSyt$pqvv@>>Xkmvr_ZGYs<gdO&HW}uvCDmtRdYXFVpB`H7zfTXOE^a_sjG6&
zxCfnf&i?(kD1U-EOTUE0vz$vF#jfaEPWldIz8U#Ptc;j#gT`^?<{aP$f^D61d<7o!
zj?nOr`&v0pHo0HVZ at yM^>D(-v+{4SZO0!k7L$gQoe$6AACpEL0&uiMHEw&Y!jhb6D
z=WQ|f at 713VYTl<A*F2$lO7nTmn!huTuho2;<{Hfnnp-qGH2s=)X$CcunkO{JHJ{b|
zy{7#dv)%JG>oprS*K4+F?$o?Z^N?nrW=L~H^AXKcnlEVDKV-Ihq2?8uO`6we?$o?Z
z^N{8}nqkf3nkO}%)cmcc(&J+cBLBGOT)n5Q^JaHjCyNTRmhZJ~t9R|`V1a9Ou9ctI
zU%jWZlZB}DFYT}Ms`IB=Ta49vF{+$cH{QIPCE{9k+|agix2zQ)n%Y?~wW90B^*eTV
zHL>8Y`th9RuAQs5`dHJB_GqrVOFbdB^}BX`Y>)5CJsswnuN_ at 1S*Lz3dp>BckG-km
z?{{?2;{JklyVtaB+jHG at ZJllwQO8Mjyl_)T`_>Nc&NlDb?rT}FjuioLL^`8xEo8ab
zSKR$m!~d?WEWzzt*Rg%qX7wrR*S+4=d1afdzSov-XRnmLYL|D<&bB6_Iqt9CzqWb9
z+Vz*!t?<gq@>%iNbd at y`u9NcXS!RB1XQ!;x{vPpV+UK`g)=I?BSn!s=3k%k_ZM~`O
zEPJJ8jj=fVnLFC2#rlkWD?7X!eLFggu~qTHmeZ^ECPl|RbA{fNd^)`@Z$ds9tNA`?
z5v<>_jm3~}Ru4&kBseR*UP8ZHsYeRd at 7n6s``60-=Jq+wTX*bkJ3S8k6=KHNYle)w
zh@#D`@N29pp>COqsASFtmVKa(rDC0#fy!%{z6|a?g)MsV2L?y4jQjDay3D2we@<DX
zu3a~f;`rIowo?7<49jM<p at 8J{nadhC8 at joa@vW9C$+^`m8sDb&8TyqwSY1jyHR`_0
zux%iT#k5%+B6o=A4)5w+-ZnR at jH^*;YvpRLL-&h!A6R>p=-)9sa7)6e-xgfOD)l>7
z-Q2~37n^r at +g7)4?NsGOd9`KN>HX^6Qpeg3R*c`(A<M*@%V+E+Vk5>l&9>`&$+>Ae
zKDf1W$JTA)?Pl4tvFr4>Y?9igBeJ5ldQv`_4ajHOxOe87A6SkSte;xNgU=7kF?u{C
zqO8_vL~|pHmvhB7^yW4*&V!aKckbEUF72(_vweG8C)t!UN2X)<uAOZXC#%%QX+l0T
z?Wp5Y at mY>>@7f_#M;3?vzFN&<;$}i^R-aJDc<E$wnz^Ryz{S69f8`O7=L&LV72&o{
zUE<^)+2jVB?a>cAf3*GaKmM^U_|(N;e9O%L`yl(}nCY9;SB62pt9^Yp^GV8V|C;SO
zUvYbV{rYp&{>lsWnI63ILUMmD5C1al%$5<R&GhFL)57_e@%MFZ_5XO9$Wzkk5eo5L
zqi6rk`_I$Hp{Goxf6(N<2eL1T*0|SiFiiPx3_LO5G<To%@4lB!Q={fXud)0}UH;3I
z|6%ay;9~Vma3Yxhm6xezPS?M;-#FsxLZz;L;v-Ku)kmMW{)xJ&f?C`6<MAi6FLLGH
zYaZ$PrTM(n{Of1x?^-FIx1CkVEC$<kvp<i`7yV1`&-;<5{T2Kj`L!7j*KbUYJYzC{
z+-qf^&5Vb~V{)}VFs$3n>@n^CUEZ#@xUTncUGJaD75FFeGS}Bv>!Zc_Y9;<_`>oXb
zr{vsgZN<9$?E8q<dhB0YIm at eT)-$#Oz2)N|`5{~W^O at tdr!T+9q^z%U43X#I$Kgq2
z3|;t))+eBs at 6<Bbg*PEmrW-z}^`r0)h}5GNDD at dc^n-9Y-?Q4^XEE4>E_UIKTIaEY
zN@{%seg~2I$6(h&zGvsy5%_&X>^XSFBECPzz6Rcnh&>Do9IQo;eGY8Yy6`rw3#%4$
z4WW!YSGcT(Hqh(g7DVb1?$LTTd<N;I%yaN%ZCCu@(|knAyI>=dri>eA&n1rNIcQr(
z+|cc?5_ufm3C}~u(YL@`5vk`k_yw)^!Oc#kPEn>6K7dG>0Q{!bPrw(nJ_#>5&y1}L
ze&&3op5xeq at G(SU{y1Fx22-zr+qCY54<Qn_QCQ7<ly+TkHDY@|{el<N5<B!p=tmsr
zz3>>~L{GzKky`W|y!_34M~&V9k6p+(qOa#~h>DAeKe`>>fQWBC_yQ-m_1Gt&_Y%_|
z;q at -ohs3@UCXn0EN8r9oc`pS00K6YD;scLq{W$!0txrN%ogOc^SL;3SIYfLDzWFk<
z-HV_XIfY$#LA_GP(d%Ij89^6b at mACScfx<r`blWxnYs8=1+Uh63%ptD2jTA#+j^d@
zT&~pH5QW|V`w at vr9R3uMda`gy1OMrlGBt2Bau~f8+O8n~q#k(gJ9rNW-36~l8qg2J
zQ-}*a2N%3k`v#Y5UAPsIc6Y+K)`fH5WtOjjS8Kfmb|ItG*#rLtkz*&|yWee=Z-T!-
zB$w2Cl=?U_PWd?eSLAv0=ir+g$%m^f>LPd};y~|$KSth({y6Mk$#Xo)hu{h16uR)M
zs~A7@<M0iu&9Pe!ClP5^_`n*|w*cI^*0c);5s7UWeoyNs;hWy8)Ir*H!6%V8dKSKn
z96*;J+kP)1$M(V}5t%z#C_j`fcA-=2!Y?2apFa2#MErjaZhJp=>h!{2ttUR{Ir!oR
z@(leYc!!%Y-awwiyEZar==Z at y3pt8D0)Maxx6m{2)0>Gc`axLS$~#-=W$->k@?3cP
zHME7 at 4_9r$XY at 7jB_x0@-11?wFT!rE3orHXnKJb-g2)`K*{akL#PI=(Itm}!X7*)N
z*hVa{3%|w>aW<fjLHl)POfG`gYTXZyYhAdt-SpWDk0KtaA8y&fTtJV*?bkDP(A(k9
z5M#c;M?Xeg*fa1H-!_k<3m4r$EYKaW6_K$MZtEcC*u5}=$QTK0cbPdObot0F$_PJ-
zNLwEGbwtKD4X^5Cyxg<}o4ZW^Z-Yk=sq+*(u*W=Bm_uBY7jC*q`vX^Wo9A#B+>1#4
zes~O#c8|k8zW3k4vBE4OWrT0M#nfwIht_ at Y8;JDx1iau at -7hHXJV`ym77 at w_?-U(-
z5Bx47^`C at WKd#3G`VsNxAS~N!)+ua4q#ifC9WnfeM-d-&3SUG{qQ3+$yq)<&eAdI!
zeOz;~3!C>7bMzKie+SRrd2TNJ9FoI+7|uIjwrhtULZmG(yyH%D+z-H~5V23fn?7mw
z*AE{=#C{Y$qxA_mugC1y^yl;P-2Q>ja4bFuzlQkH)9~{L&Hf&Sb)RKkU~h!Z&(Rn3
zT6i28K^H!Dn7*Sw4zK?L`_Om7I}nNIeek}!nakLPm-UfX&Ex>Q<cs<|4|gC^ekXhu
zk(f`wu6vZai1Nb1dpU2Q+u-;E<PEy;i2&`QpMt;ZH}y%_K0rLN3pa*%{)OHGR}9l%
zbQk<NqBdI8({Op%jG^!jMEp4be~8HWCj*Nkl%sqZ+#kg^^a*%*%q-skpF!k&G6C17
z=nG|<;A6-d^vB^1Bj#9l!!IG-*pI@?A2j>k0PjKk*zbegU*a7TbU%E{SMd}5BDfb3
z-~8}C#E3b(=9qb2-2xv)PEtMtZ+zH{VHdpgxY?E)K7`~bGYUJuX8P6z at BKP?i#-7C
z|H!$K_eq5=M6M&kM-V6WEX*M;bXS_|JJNvO3fsQL^&Pz(-i?T#eefYf@^%!~pTHl=
z2sa{PZ-H%yluyI*Z*%WN8F_c$!-&{D at L@#G+Zp&9BtV(xVeKPkJ;E1}IQExd#dpkO
z?J$Ofu*YHb7;_uF27VSvqX*z`kPN#0yWGzp<LJKc5i7(;uF5;9 at _wleT`2E*y3mF4
z-p&ZRP~K~lGD3MDQFNia117pq-i;DnDDNYQE__z&LV15k>_U0hM|7dQ&m+1}-j@(v
zDDSF>E|hmdL>J2Y8KMj2od(f`ztFn8!(e~Zv@=uwS8j*S<!=S#E6692!$=4 at iX1?W
zBYj8)Nh7^T02x92$T%{6%Pd#w*T`eYQ;6dN@*8m>jmS7QAM_&%=|x(R0Fp+2$Ns-<
zf5r%8Xv at MF1#5#1L3gk<=n1w5eZih!Z?G?z31)-2pc=3bI0sw<jRWoh&wy{hKhQf6
z7#JBy4`c?i1GxbevWJ`@SEw=M4tYYpkU!KL3WP>N=};z=4dp^=&_3uKbPYBRx(7Xj
zzCr(B?_gkXWH3FL8O#pm2Gx*#$T{R1Y8-M8d4_yL{-NHXz|hE0dMGoL9m)-<Vf(Oi
z*frcZ>>l<E`-c6)y~Bawk>T`kW;i>X8&+X^*co<(8^i9fC+rLR!@c1^cqE(-XTsTV
zF03N<h%@4fG)CMJPsA7TM|vZH$Vem|$wX9^b2K673j_k;K-TE3js805aV>pr7-*u`
zt at OK{o_EvtzJc(-D19HJ_u~Ui^r at 9zjSP;`pD}tgPM;>|)g=A0(K82qtEG1h^sk8?
zw$jITdf81sd+2E&eGSvwQTjVZkH_ir1ihX#`t6|Swe-D#-Z#<zRwB?&47!Oz4{_)t
z5 at BL7N;JlZ$2bw0ASRPU#YS8lM5dP5G!UI8;?qim+QW1>$DCx`8-q>LM!h at e*CQVY
zhJz!)(O^0_Miz_*ZPZjtElt$W9_|kJg!{tb at Mw4}JRY71Pljy~N2E5=5NV3EM%p9Y
zk)B9jBpexyj77#H6OqY?E$WEYMjN6{(bi~tv^&}p?Tdz^qtUVGcyuB<8MVb6vD#Qe
ztSQzSYmarudSZRCaBMU-78{RE#3p05xFcR0Z-_U=TjTBV?s!kUFCLDM#>e90 at rn3k
z+?H at 8Y7-5KrbKI^J<*-$N%SSciP6MZVmvXCm`vD`j%01JA=#8{O|~bylRe44WH>pR
z97~QTCz6v%Tgs8DO*N#NQmv`>RClT;)t3sVMpI*{@zg|WlDiJBkA%$@a0F at t4S}XW
zYoI;Q9q0-4kvF4(vA}p>A}|@S^*j1&`y2Y3`dj<k`@8#l`uqCB{iFS3{p0-;{geH+
zpu?DHP0Y0RU^mh3BhsTpd7S45lR+DqS8HTlD;d{4(4+Hhj9i--m>jT$9HH7!L#Qd#
z8fp)9hk8PNp>Sw4G!_~UO at t;xwn4{W?O?-T6It0l*ge=Y*f$s^H^<1!33Ad#KGu?p
z%FaC~<L_av`<d$jMmzogV7_M~xrmC|qt2)++8A|5JyBoOAMK3>q9f6CG!xB6b5Rwu
z$DA=&tTE<}d1AhpKh_%y#71K2SSFT@<zgysk2~Y8cw^ih_r!g1f4nyyh>yh6 at k~4$
z&&5^3o^U2yiN=IG;Ys)s{zPvgkQhm%6PZLdkxQtgJ?Tukl8s4s(v$Qh{mI^BAUTpu
zCo{=xGM7{-d&-$|r5aQ2lqcm&`BS~AKx!nFPGwTrR4%2Q++&f8Dqs&d1Fk at 0z#Z at e
zd;x!;Hy}?#s at NsxqgLZA!v_z4+e>jWz{cn|asKJkXPj3$%ba<R;qbq0e}xhF4^N!D
Ap#T5?

diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/hascetret42.yaml b/llvm/test/tools/llvm-readobj/COFF/Inputs/hascetret42.yaml
new file mode 100644
index 0000000000000..0e827b3eb2dce
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/hascetret42.yaml
@@ -0,0 +1,15 @@
+--- !COFF
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: []
+sections:
+  - Name:            .text
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    SectionData:     B82A000000C3  # mov eax, 42; ret
+symbols:
+  - Name:            main
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
diff --git a/llvm/test/tools/llvm-readobj/COFF/cetcompat.test b/llvm/test/tools/llvm-readobj/COFF/cetcompat.test
index a973b5c0a2080..0e629a374a8e4 100644
--- a/llvm/test/tools/llvm-readobj/COFF/cetcompat.test
+++ b/llvm/test/tools/llvm-readobj/COFF/cetcompat.test
@@ -1,7 +1,6 @@
-# To regenerate has-cet.exe
-# $ echo int main() { return 0; } > has-cet.c
-# $ cl has-cet.c /link /cetcompat
-RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cet.exe | FileCheck %s
+RUN: yaml2obj %p/Inputs/hascetret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetcompat %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
 
 CHECK:  DebugEntry {
 CHECK:    Characteristics: 0x0
diff --git a/llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test b/llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test
index 9807bfe5686ee..c60980d8490e4 100644
--- a/llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test
+++ b/llvm/test/tools/llvm-readobj/COFF/cetcompatstrict.test
@@ -1,7 +1,6 @@
-# To regenerate has-cetstrict.exe
-# $ echo int main() { return 0; } > has-cetstrict.c
-# $ cl has-cetstrict.c /link /cetcompatstrict
-RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cetstrict.exe | FileCheck %s
+RUN: yaml2obj %p/Inputs/hascetret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetcompatstrict %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
 
 CHECK:  DebugEntry {
 CHECK:    Characteristics: 0x0
diff --git a/llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test b/llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test
index 18b3ec70177cb..355833fa5808a 100644
--- a/llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test
+++ b/llvm/test/tools/llvm-readobj/COFF/cetdynamicapisinproc.test
@@ -1,7 +1,6 @@
-# To regenerate has-cetdynamicapisinproc.exe
-# $ echo int main() { return 0; } > has-cetdynamicapisinproc.c
-# $ cl has-cetdynamicapisinproc.c /link /cetdynamicapisinproc
-RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cetdynamicapisinproc.exe | FileCheck %s
+RUN: yaml2obj %p/Inputs/hascetret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetdynamicapisinproc %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
 
 CHECK:  DebugEntry {
 CHECK:    Characteristics: 0x0
diff --git a/llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test b/llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test
index 25cf1db3464f7..02bf679f89f50 100644
--- a/llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test
+++ b/llvm/test/tools/llvm-readobj/COFF/cetipvalidationrelaxed.test
@@ -1,7 +1,6 @@
-# To regenerate has-cetipvalidationrelaxed.exe
-# $ echo int main() { return 0; } > has-cetipvalidationrelaxed.c
-# $ cl has-cetipvalidationrelaxed.c /link /cetipvalidationrelaxed
-RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cetipvalidationrelaxed.exe | FileCheck %s
+RUN: yaml2obj %p/Inputs/hascetret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /cetipvalidationrelaxed %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
 
 CHECK:  DebugEntry {
 CHECK:    Characteristics: 0x0
diff --git a/llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test b/llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test
index 87208d24f9fee..a18bd784348fc 100644
--- a/llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test
+++ b/llvm/test/tools/llvm-readobj/COFF/hotpatchcompatible.test
@@ -1,7 +1,6 @@
-# To regenerate has-hotpatchcompatible.exe
-# $ echo int main() { return 0; } > has-hotpatchcompatible.c
-# $ cl has-hotpatchcompatible.c /link /hotpatchcompatible
-RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-hotpatchcompatible.exe | FileCheck %s
+RUN: yaml2obj %p/Inputs/hascetret42.yaml -o %t.obj
+RUN: lld-link /out:%t.exe /entry:main /hotpatchcompatible %t.obj
+RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
 
 CHECK:  DebugEntry {
 CHECK:    Characteristics: 0x0

>From 6723a3e552c81ee49936fe6d62aae9046a54956b Mon Sep 17 00:00:00 2001
From: kkent030315 <hrn832 at protonmail.com>
Date: Mon, 28 Jul 2025 21:59:42 +0900
Subject: [PATCH 5/5] reorder options

---
 lld/COFF/Options.td | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lld/COFF/Options.td b/lld/COFF/Options.td
index da2e4706fa606..d02121ab4c5ff 100644
--- a/lld/COFF/Options.td
+++ b/lld/COFF/Options.td
@@ -198,12 +198,10 @@ defm cetcompat : B<"cetcompat", "Mark executable image as compatible with Contro
                    "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack (default)">;
 defm cetcompatstrict : B<"cetcompatstrict", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack in strict mode",
                          "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack in strict mode (default)">;
-defm cetipvalidationrelaxed : B<"cetipvalidationrelaxed", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with relaxed context IP validation",
-                                "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with relaxed context IP validation (default)">;
 defm cetdynamicapisinproc : B<"cetdynamicapisinproc", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack in such a way that dynamic APIs allowed in process",
                               "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with dynamic APIs allowed in process (default)">;
-defm hotpatchcompatible : B<"hotpatchcompatible", "Mark executable image as compatible with hotpatch",
-                            "Don't mark executable image as compatible with hotpatch (default)">;
+defm cetipvalidationrelaxed : B<"cetipvalidationrelaxed", "Mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with relaxed context IP validation",
+                                "Don't mark executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack with relaxed context IP validation (default)">;
 defm dynamicbase : B<"dynamicbase", "Enable ASLR (default unless /fixed)",
                      "Disable ASLR (default when /fixed)">;
 defm fixed : B<"fixed", "Disable base relocations",
@@ -211,6 +209,8 @@ defm fixed : B<"fixed", "Disable base relocations",
 defm highentropyva : B<"highentropyva",
                        "Enable 64-bit ASLR (default on 64-bit)",
                        "Disable 64-bit ASLR">;
+defm hotpatchcompatible : B<"hotpatchcompatible", "Mark executable image as compatible with hotpatch",
+                            "Don't mark executable image as compatible with hotpatch (default)">;
 defm incremental : B<"incremental",
                      "Keep original import library if contents are unchanged",
                      "Overwrite import library even if contents are unchanged">;



More information about the llvm-commits mailing list