[llvm] [clang] [clang-tools-extra] [compiler-rt] [PGO][GlobalValue][LTO]In GlobalValues::getGlobalIdentifier, use semicolon as delimiter for local-linkage varibles. (PR #74008)
Mingming Liu via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 11 15:55:15 PST 2023
https://github.com/minglotus-6 updated https://github.com/llvm/llvm-project/pull/74008
>From 4cb5b087485124a7f2375fdc018b42a0401e6409 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Thu, 30 Nov 2023 15:41:37 -0800
Subject: [PATCH 01/10] [PGO][GlobalValue][LTO]In
GlobalValues::getGlobalIdentifier, use semicolon as delimiter for
local-linkage varibles.
Commit fe05193 (phab D156569), IRPGO names uses format
'[<filepath>;]<linkage-name>' while prior format is
[<filepath>:<linkage-name>'. The format change would break the use caes
demonstrated in (updated)
llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
This patch changes GlobalValues::getGlobalIdentifer to use the
semicolon.
To elaborate on the scenario how things break without this PR
1. IRPGO raw profiles stores (compressed) IRPGO names of functions in
one section, and per-function profile data in another section. One
field in per-function profile data is the MD5 hash of IRPGO names.
2. When raw profiles are converted to indexed format profiles, the
profiled address is mapped to the MD5 hash of the callee.
3. In thin-lto prelink pipeline, MD5 hash of IRPGO names will be
annotated as value profiles, and used to import indirect-call-prom
candidates. If the annotated MD5 hash is computed from the new format
while import uses the prior format, the callee cannot be imported.
The updated test case Transforms/PGOProfile/thinlto_indirect_call_promotion.ll exercise the following path
- Annotate raw profiles and generate import summaries. Using the
imported summaries, it tests that functions are correctly imported and
ICP transformations happened.
---
llvm/lib/IR/Globals.cpp | 4 +-
llvm/lib/ProfileData/InstrProf.cpp | 28 +++++--
.../thinlto-function-summary-originalnames.ll | 6 +-
llvm/test/ThinLTO/X86/memprof-basic.ll | 26 +++----
.../X86/memprof-duplicate-context-ids.ll | 12 +--
.../ThinLTO/X86/memprof-funcassigncloning.ll | 6 +-
llvm/test/ThinLTO/X86/memprof-indirectcall.ll | 32 ++++----
llvm/test/ThinLTO/X86/memprof-inlined.ll | 14 ++--
.../Inputs/thinlto_icall_prom.profdata | Bin 0 -> 976 bytes
.../Inputs/thinlto_indirect_call_promotion.ll | 32 ++++++--
.../Inputs/update_icall_promotion_inputs.sh | 70 ++++++++++++++++++
.../thinlto_indirect_call_promotion.ll | 52 ++++++-------
12 files changed, 194 insertions(+), 88 deletions(-)
create mode 100644 llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata
create mode 100644 llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index 7bd4503a689e4a..e821de3b198f1b 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -158,9 +158,9 @@ std::string GlobalValue::getGlobalIdentifier(StringRef Name,
// that it will stay the same, e.g., if the files are checked out from
// version control in different locations.
if (FileName.empty())
- NewName = NewName.insert(0, "<unknown>:");
+ NewName = NewName.insert(0, "<unknown>;");
else
- NewName = NewName.insert(0, FileName.str() + ":");
+ NewName = NewName.insert(0, FileName.str() + ";");
}
return NewName;
}
diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp
index 236b083a1e2155..d9ad5c8b6f6838 100644
--- a/llvm/lib/ProfileData/InstrProf.cpp
+++ b/llvm/lib/ProfileData/InstrProf.cpp
@@ -246,11 +246,27 @@ std::string InstrProfError::message() const {
char InstrProfError::ID = 0;
-std::string getPGOFuncName(StringRef RawFuncName,
- GlobalValue::LinkageTypes Linkage,
+std::string getPGOFuncName(StringRef Name, GlobalValue::LinkageTypes Linkage,
StringRef FileName,
uint64_t Version LLVM_ATTRIBUTE_UNUSED) {
- return GlobalValue::getGlobalIdentifier(RawFuncName, Linkage, FileName);
+ // Value names may be prefixed with a binary '1' to indicate
+ // that the backend should not modify the symbols due to any platform
+ // naming convention. Do not include that '1' in the PGO profile name.
+ if (Name[0] == '\1')
+ Name = Name.substr(1);
+
+ std::string NewName = std::string(Name);
+ if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
+ // For local symbols, prepend the main file name to distinguish them.
+ // Do not include the full path in the file name since there's no guarantee
+ // that it will stay the same, e.g., if the files are checked out from
+ // version control in different locations.
+ if (FileName.empty())
+ NewName = NewName.insert(0, "<unknown>:");
+ else
+ NewName = NewName.insert(0, FileName.str() + ":");
+ }
+ return NewName;
}
// Strip NumPrefix level of directory name from PathNameStr. If the number of
@@ -300,12 +316,8 @@ getIRPGONameForGlobalObject(const GlobalObject &GO,
GlobalValue::LinkageTypes Linkage,
StringRef FileName) {
SmallString<64> Name;
- if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
- Name.append(FileName.empty() ? "<unknown>" : FileName);
- Name.append(";");
- }
Mangler().getNameWithPrefix(Name, &GO, /*CannotUsePrivateLabel=*/true);
- return Name.str().str();
+ return GlobalValue::getGlobalIdentifier(Name, Linkage, FileName);
}
static std::optional<std::string> lookupPGONameFromMetadata(MDNode *MD) {
diff --git a/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll b/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll
index 4d840d1f8ec8dd..24bb2a4efff509 100644
--- a/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll
+++ b/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll
@@ -6,9 +6,9 @@
; COMBINED: <GLOBALVAL_SUMMARY_BLOCK
; COMBINED-NEXT: <VERSION
; COMBINED-NEXT: <FLAGS
-; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=4947176790635855146/>
-; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=-6591587165810580810/>
-; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=-4377693495213223786/>
+; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=686735765308251824/>
+; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=4507502870619175775/>
+; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=-8118561185538785069/>
; COMBINED-DAG: <COMBINED{{ }}
; COMBINED-DAG: <COMBINED_ORIGINAL_NAME op0=6699318081062747564/>
; COMBINED-DAG: <COMBINED_GLOBALVAR_INIT_REFS
diff --git a/llvm/test/ThinLTO/X86/memprof-basic.ll b/llvm/test/ThinLTO/X86/memprof-basic.ll
index 0d466830ba57d6..54e01e5fcdf955 100644
--- a/llvm/test/ThinLTO/X86/memprof-basic.ll
+++ b/llvm/test/ThinLTO/X86/memprof-basic.ll
@@ -148,7 +148,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[BAR]] to Caller: [[BAZ:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 1 2
; DUMP: Node [[BAZ]]
-; DUMP: Callee: 9832687305761716512 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 11481133863268513686 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 1 2
; DUMP: CalleeEdges:
@@ -157,7 +157,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 1 2
; DUMP: Node [[FOO]]
-; DUMP: Callee: 5878270615442837395 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
+; DUMP: Callee: 1807954217441101578 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 1 2
; DUMP: CalleeEdges:
@@ -167,7 +167,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 2
; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
+; DUMP: Callee: 8107868197919466657 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1
; DUMP: CalleeEdges:
@@ -175,7 +175,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
+; DUMP: Callee: 8107868197919466657 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2
; DUMP: CalleeEdges:
@@ -197,7 +197,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clones: [[BAR2:0x[a-z0-9]+]]
; DUMP: Node [[BAZ]]
-; DUMP: Callee: 9832687305761716512 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 11481133863268513686 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1
; DUMP: CalleeEdges:
@@ -207,7 +207,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clones: [[BAZ2:0x[a-z0-9]+]]
; DUMP: Node [[FOO]]
-; DUMP: Callee: 5878270615442837395 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
+; DUMP: Callee: 1807954217441101578 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1
; DUMP: CalleeEdges:
@@ -217,7 +217,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clones: [[FOO2:0x[a-z0-9]+]]
; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
+; DUMP: Callee: 8107868197919466657 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1
; DUMP: CalleeEdges:
@@ -225,7 +225,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
+; DUMP: Callee: 8107868197919466657 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2
; DUMP: CalleeEdges:
@@ -233,7 +233,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[FOO2]]
-; DUMP: Callee: 5878270615442837395 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
+; DUMP: Callee: 1807954217441101578 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2
; DUMP: CalleeEdges:
@@ -243,7 +243,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clone of [[FOO]]
; DUMP: Node [[BAZ2]]
-; DUMP: Callee: 9832687305761716512 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 11481133863268513686 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2
; DUMP: CalleeEdges:
@@ -344,7 +344,7 @@ attributes #0 = { noinline optnone }
; DOTCLONED: }
-; DISTRIB: ^[[BAZ:[0-9]+]] = gv: (guid: 5878270615442837395, {{.*}} callsites: ((callee: ^[[BAR:[0-9]+]], clones: (0, 1)
-; DISTRIB: ^[[FOO:[0-9]+]] = gv: (guid: 6731117468105397038, {{.*}} callsites: ((callee: ^[[BAZ]], clones: (0, 1)
-; DISTRIB: ^[[BAR]] = gv: (guid: 9832687305761716512, {{.*}} allocs: ((versions: (notcold, cold)
+; DISTRIB: ^[[BAZ:[0-9]+]] = gv: (guid: 1807954217441101578, {{.*}} callsites: ((callee: ^[[BAR:[0-9]+]], clones: (0, 1)
+; DISTRIB: ^[[FOO:[0-9]+]] = gv: (guid: 8107868197919466657, {{.*}} callsites: ((callee: ^[[BAZ]], clones: (0, 1)
+; DISTRIB: ^[[BAR]] = gv: (guid: 11481133863268513686, {{.*}} allocs: ((versions: (notcold, cold)
; DISTRIB: ^[[MAIN:[0-9]+]] = gv: (guid: 15822663052811949562, {{.*}} callsites: ((callee: ^[[FOO]], clones: (0), {{.*}} (callee: ^[[FOO]], clones: (1)
diff --git a/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll b/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
index f7ba0d27dca78a..7a0b4a36dbad4d 100644
--- a/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
+++ b/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
@@ -260,8 +260,10 @@ attributes #0 = { noinline optnone}
; STATS-BE: 1 memprof-context-disambiguation - Number of original (not cloned) allocations with memprof profiles during ThinLTO backend
-; DISTRIB: ^[[C:[0-9]+]] = gv: (guid: 1643923691937891493, {{.*}} callsites: ((callee: ^[[D:[0-9]+]], clones: (1)
-; DISTRIB: ^[[D]] = gv: (guid: 4881081444663423788, {{.*}} allocs: ((versions: (notcold, cold)
-; DISTRIB: ^[[B:[0-9]+]] = gv: (guid: 14590037969532473829, {{.*}} callsites: ((callee: ^[[D]], clones: (1)
-; DISTRIB: ^[[F:[0-9]+]] = gv: (guid: 17035303613541779335, {{.*}} callsites: ((callee: ^[[D]], clones: (0)
-; DISTRIB: ^[[E:[0-9]+]] = gv: (guid: 17820708772846654376, {{.*}} callsites: ((callee: ^[[D]], clones: (1)
+; DISTRIB: ^[[E:[0-9]+]] = gv: (guid: 331966645857188136, {{.*}} callsites: ((callee: ^[[D:[0-9]+]], clones: (1)
+; DISTRIB: ^[[D]] = gv: (guid: 11079124245221721799, {{.*}} allocs: ((versions: (notcold, cold)
+; DISTRIB: ^[[F:[0-9]+]] = gv: (guid: 11254287701717398916, {{.*}} callsites: ((callee: ^[[D]], clones: (0)
+; DISTRIB: ^[[B:[0-9]+]] = gv: (guid: 13579056193435805313, {{.*}} callsites: ((callee: ^[[D]], clones: (1)
+; DISTRIB: ^[[C:[0-9]+]] = gv: (guid: 15101436305866936160, {{.*}} callsites: ((callee: ^[[D:[0-9]+]], clones: (1)
+
+
diff --git a/llvm/test/ThinLTO/X86/memprof-funcassigncloning.ll b/llvm/test/ThinLTO/X86/memprof-funcassigncloning.ll
index 9a72ae43b2f1e4..f1a494d077fefc 100644
--- a/llvm/test/ThinLTO/X86/memprof-funcassigncloning.ll
+++ b/llvm/test/ThinLTO/X86/memprof-funcassigncloning.ll
@@ -176,7 +176,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clones: [[ENEW1CLONE:0x[a-z0-9]+]]
; DUMP: Node [[D:0x[a-z0-9]+]]
-; DUMP: Callee: 10758063066234039248 (_Z1EPPcS0_) Clones: 0 StackIds: 0 (clone 0)
+; DUMP: Callee: 16147627620923572899 (_Z1EPPcS0_) Clones: 0 StackIds: 0 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 1 6
; DUMP: CalleeEdges:
@@ -185,7 +185,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[C]]
-; DUMP: Callee: 10758063066234039248 (_Z1EPPcS0_) Clones: 0 StackIds: 1 (clone 0)
+; DUMP: Callee: 16147627620923572899 (_Z1EPPcS0_) Clones: 0 StackIds: 1 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 2 5
; DUMP: CalleeEdges:
@@ -194,7 +194,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[B]]
-; DUMP: Callee: 10758063066234039248 (_Z1EPPcS0_) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 16147627620923572899 (_Z1EPPcS0_) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 3 4
; DUMP: CalleeEdges:
diff --git a/llvm/test/ThinLTO/X86/memprof-indirectcall.ll b/llvm/test/ThinLTO/X86/memprof-indirectcall.ll
index 76273959f4f4ac..07a52f441ca278 100644
--- a/llvm/test/ThinLTO/X86/memprof-indirectcall.ll
+++ b/llvm/test/ThinLTO/X86/memprof-indirectcall.ll
@@ -202,7 +202,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 6
; DUMP: Node [[AX]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 6 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 6 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 1 2
; DUMP: CalleeEdges:
@@ -225,7 +225,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN6:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 5
; DUMP: Node [[MAIN3]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 4 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 4 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1
; DUMP: CalleeEdges:
@@ -233,7 +233,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN4]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 5 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 5 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2
; DUMP: CalleeEdges:
@@ -241,7 +241,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 3
; DUMP: CalleeEdges:
@@ -249,7 +249,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[BX]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 7 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 7 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 4 5
; DUMP: CalleeEdges:
@@ -258,7 +258,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[BX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 4 5
; DUMP: Node [[MAIN5]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 4
; DUMP: CalleeEdges:
@@ -266,7 +266,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN6]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 3 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 3 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 5
; DUMP: CalleeEdges:
@@ -274,7 +274,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 6
; DUMP: CalleeEdges:
@@ -302,7 +302,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clones: [[FOO2:0x[a-z0-9]+]]
; DUMP: Node [[AX]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 6 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 6 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 1 2
; DUMP: CalleeEdges:
@@ -324,7 +324,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN6]] AllocTypes: NotCold ContextIds: 5
; DUMP: Node [[MAIN3]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 4 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 4 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1
; DUMP: CalleeEdges:
@@ -332,7 +332,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN4]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 5 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 5 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2
; DUMP: CalleeEdges:
@@ -340,7 +340,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 3
; DUMP: CalleeEdges:
@@ -348,7 +348,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[BX]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 7 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 7 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 4 5
; DUMP: CalleeEdges:
@@ -357,7 +357,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[BX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 4 5
; DUMP: Node [[MAIN5]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 4
; DUMP: CalleeEdges:
@@ -365,7 +365,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN6]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 3 (clone 0)
+; DUMP: Callee: 2040285415115148168 (_Z3barP1A) Clones: 0 StackIds: 3 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 5
; DUMP: CalleeEdges:
@@ -373,7 +373,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
+; DUMP: Callee: 15844184524768596045 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 6
; DUMP: CalleeEdges:
diff --git a/llvm/test/ThinLTO/X86/memprof-inlined.ll b/llvm/test/ThinLTO/X86/memprof-inlined.ll
index feb9c94344223c..89df345b220423 100644
--- a/llvm/test/ThinLTO/X86/memprof-inlined.ll
+++ b/llvm/test/ThinLTO/X86/memprof-inlined.ll
@@ -170,7 +170,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 2
; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 2229562716906371625 (_Z3foov) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 644169328058379925 (_Z3foov) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1 3
; DUMP: CalleeEdges:
@@ -179,7 +179,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 2229562716906371625 (_Z3foov) Clones: 0 StackIds: 3 (clone 0)
+; DUMP: Callee: 644169328058379925 (_Z3foov) Clones: 0 StackIds: 3 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2 4
; DUMP: CalleeEdges:
@@ -201,7 +201,7 @@ attributes #0 = { noinline optnone }
;; This is the node synthesized for the call to bar in foo that was created
;; by inlining baz into foo.
; DUMP: Node [[FOO]]
-; DUMP: Callee: 16064618363798697104 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
+; DUMP: Callee: 10349908617508457487 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
; DUMP: AllocTypes: NotColdCold
; DUMP: ContextIds: 3 4
; DUMP: CalleeEdges:
@@ -234,7 +234,7 @@ attributes #0 = { noinline optnone }
; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 2229562716906371625 (_Z3foov) Clones: 0 StackIds: 2 (clone 0)
+; DUMP: Callee: 644169328058379925 (_Z3foov) Clones: 0 StackIds: 2 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 1 3
; DUMP: CalleeEdges:
@@ -243,7 +243,7 @@ attributes #0 = { noinline optnone }
; DUMP: CallerEdges:
; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 2229562716906371625 (_Z3foov) Clones: 0 StackIds: 3 (clone 0)
+; DUMP: Callee: 644169328058379925 (_Z3foov) Clones: 0 StackIds: 3 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 2 4
; DUMP: CalleeEdges:
@@ -264,7 +264,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clones: [[BAR2:0x[a-z0-9]+]]
; DUMP: Node [[FOO]]
-; DUMP: Callee: 16064618363798697104 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
+; DUMP: Callee: 10349908617508457487 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
; DUMP: AllocTypes: NotCold
; DUMP: ContextIds: 3
; DUMP: CalleeEdges:
@@ -274,7 +274,7 @@ attributes #0 = { noinline optnone }
; DUMP: Clones: [[FOO3]]
; DUMP: Node [[FOO3]]
-; DUMP: Callee: 16064618363798697104 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
+; DUMP: Callee: 10349908617508457487 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
; DUMP: AllocTypes: Cold
; DUMP: ContextIds: 4
; DUMP: CalleeEdges:
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata
new file mode 100644
index 0000000000000000000000000000000000000000..df563c53000f0dead9134fb7d45a5539a1f0cd0f
GIT binary patch
literal 976
zcmeyLQ&5zjmf6V700xW at 3PDydBiJC;2{b+%R9XN^vp{K995l=V9+*CLC<BdJ&<0Tn
zGY6*6ffwQcbnyq1AvU9nH%LKTh%T<MkR5Cz%sWg_`wysdViiwV$Awj#!4%>Xn0}af
z3wHB@)uW4lsN(~R!~6qtmw_}tR`Ccs?BaJEv5T8IVHdZ at A<oF~>uT?Fvy`c~VKJux
zb_WAPZenKM|NsBrU*_`Vg1Ht(LzOUaKp9L7#xo at E>CU at jDhw5YnUa&4q?ep*9UtXm
zo}8GIlbUK+hHfY<h|mp<o at t!pb5*B?ppga`M#5qN-AG1;tEw7SiHGv;!_sR4R7rf4
zp<#MXeo|sid|GK<a+yb~<=gx}(p)gd!Qu%$1T291VPYT}rXJ>am`h;c1Cxh^94yqK
V&OlI5g>EnnP?>jVe1rxF3jo^+RI300
literal 0
HcmV?d00001
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
index 7412120bb52cf5..4514eeb1451ba6 100644
--- a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
+++ b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
@@ -1,16 +1,38 @@
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+; ModuleID = 'lib.bc'
+source_filename = "lib.cc"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
-source_filename = "thinlto_indirect_call_promotion.c"
+ at calleeAddrs = dso_local local_unnamed_addr global [2 x ptr] [ptr @_ZL7callee0v, ptr @_ZL7callee1v], align 16
-define void @a() {
+define internal void @_ZL7callee0v() {
entry:
ret void
}
-define internal void @c() !PGOFuncName !1 {
+define internal void @_ZL7callee1v() {
entry:
ret void
}
-!1 = !{!"thinlto_indirect_call_promotion.c:c"}
+define dso_local void @_Z11global_funcv() {
+entry:
+ br label %for.cond
+
+for.cond: ; preds = %for.body, %entry
+ %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
+ %cmp = icmp ult i32 %i.0, 5
+ br i1 %cmp, label %for.body, label %for.cond.cleanup
+
+for.cond.cleanup: ; preds = %for.cond
+ ret void
+
+for.body: ; preds = %for.cond
+ %rem = and i32 %i.0, 1
+ %idxprom = zext nneg i32 %rem to i64
+ %arrayidx = getelementptr inbounds [2 x ptr], ptr @calleeAddrs, i64 0, i64 %idxprom
+ %0 = load ptr, ptr %arrayidx ;, align 8, !tbaa !5
+ call void %0()
+ %inc = add nuw nsw i32 %i.0, 1
+ br label %for.cond ;, !llvm.loop !9
+}
\ No newline at end of file
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh b/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
new file mode 100644
index 00000000000000..6c4fc1f5c339ac
--- /dev/null
+++ b/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+if [ $# -lt 2 ]; then
+ echo "Path to clang and llvm-profdata required!"
+ echo "Usage: update_icall_promotion_inputs.sh /path/to/updated/clang /path/to/updated/llvm-profdata"
+ exit 1
+else
+ CLANG=$1
+ LLVMPROFDATA=$2
+fi
+
+# Allows the script to be invoked from other directories.
+OUTDIR=$(dirname $(realpath -s $0))
+
+# Creates trivial header file to expose global_func.
+cat > ${OUTDIR}/lib.h << EOF
+void global_func();
+EOF
+
+# Creates lib.cc. global_func might call one of two indirect callees. Both
+# indirect callees have internal linkage.
+cat > ${OUTDIR}/lib.cc << EOF
+#include "lib.h"
+
+static void callee0() {}
+static void callee1() {}
+
+typedef void (*FPT)();
+FPT calleeAddrs[] = {callee0, callee1};
+
+void global_func() {
+ FPT fp = nullptr;
+ for (int i = 0; i < 5; i++) {
+ fp = calleeAddrs[i % 2];
+ fp();
+ }
+}
+EOF
+
+# Create main.cc that calls `global_func` in lib.cc
+cat > ${OUTDIR}/main.cc << EOF
+#include "lib.h"
+
+int main() {
+ global_func();
+}
+EOF
+
+COMMON_FLAGS="-fuse-ld=lld -O2"
+
+# cd into OUTDIR
+cd ${OUTDIR}
+
+# Generate instrumented binary
+${CLANG} ${COMMON_FLAGS} -fprofile-generate=. lib.h lib.cc main.cc
+# Create raw profiles
+env LLVM_PROFILE_FILE=icall_prom.profraw ./a.out
+# Create indexed profiles
+${LLVMPROFDATA} merge icall_prom.profraw -o thinlto_icall_prom.profdata
+
+# Clean up intermediate files.
+rm a.out
+rm ${OUTDIR}/icall_prom.profraw
+rm ${OUTDIR}/lib.h.pch
+rm ${OUTDIR}/lib.h
+rm ${OUTDIR}/lib.cc
+rm ${OUTDIR}/main.cc
+
+# Go back to original directory
+cd -
\ No newline at end of file
diff --git a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
index 173296f223e56a..30969fef52da29 100644
--- a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
+++ b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
@@ -1,39 +1,39 @@
-; Do setup work for all below tests: generate bitcode and combined index
-; RUN: opt -module-summary %s -o %t.bc
-; RUN: opt -module-summary %p/Inputs/thinlto_indirect_call_promotion.ll -o %t2.bc
+; The raw profiles and reduced IR inputs are generated from Inputs/update_icall_promotion_inputs.sh
+
+; Do setup work for all below tests: annotate value profiles, generate bitcode and combined index
+; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=%p/Inputs/thinlto_icall_prom.profdata -module-summary %s -o %t.bc
+
+; Explicitly turn off ICP pass in Inputs/thinlto_indirect_call_promotion.ll. So ICP happens in this file after _Z11global_funcv and two indirect callees are imported here.
+; RUN: opt -disable-icp -passes=pgo-instr-use -pgo-test-profile-file=%p/Inputs/thinlto_icall_prom.profdata -module-summary %p/Inputs/thinlto_indirect_call_promotion.ll -o %t2.bc
; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
+; Tests that callees are correctly imported.
; RUN: opt -passes=function-import -summary-file %t3.thinlto.bc %t.bc -o %t4.bc -print-imports 2>&1 | FileCheck %s --check-prefix=IMPORTS
-; IMPORTS-DAG: Import a
-; IMPORTS-DAG: Import c
+; IMPORTS: Import _ZL7callee0v.llvm{{.*}}
+; IMPORTS: Import _ZL7callee1v.llvm{{.*}}
+; IMPORTS: Import _Z11global_funcv
-; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S | FileCheck %s --check-prefix=ICALL-PROM
+; Tests that ICP transformations happen.
+; Both candidates are ICP'ed, check there is no `!VP` in the IR.
+; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S | FileCheck %s --check-prefix=ICALL-PROM --implicit-check-not="!VP"
; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefix=PASS-REMARK
-; PASS-REMARK: Promote indirect call to a with count 1 out of 1
-; PASS-REMARK: Promote indirect call to c.llvm.0 with count 1 out of 1
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
+; PASS-REMARK: Promote indirect call to _ZL7callee0v.llvm.0 with count 3 out of 5
+; PASS-REMARK: Promote indirect call to _ZL7callee1v.llvm.0 with count 2 out of 2
- at foo = external local_unnamed_addr global ptr, align 8
- at bar = external local_unnamed_addr global ptr, align 8
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
-define i32 @main() local_unnamed_addr {
+define dso_local noundef i32 @main() {
entry:
- %0 = load ptr, ptr @foo, align 8
-; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ, label %if.false.orig_indirect, !prof [[BRANCH_WEIGHT:![0-9]+]]
- tail call void %0(), !prof !1
- %1 = load ptr, ptr @bar, align 8
-; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT:![0-9]+]]
- tail call void %1(), !prof !2
+ tail call void @_Z11global_funcv()
ret i32 0
}
-!1 = !{!"VP", i32 0, i64 1, i64 -6289574019528802036, i64 1}
-!2 = !{!"VP", i32 0, i64 1, i64 591260329866125152, i64 1}
+declare void @_Z11global_funcv()
+
+; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ, label %if.false.orig_indirect, !prof [[BRANCH_WEIGHT1:![0-9]+]]
+; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT2:![0-9]+]]
-; Should not have a VP annotation on new indirect call (check before and after
-; branch_weights annotation).
-; ICALL-PROM-NOT: !"VP"
-; ICALL-PROM: [[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 0}
-; ICALL-PROM-NOT: !"VP"
+; ICALL-PROM: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 3, i32 2}
+; ICALL-PROM: [[BRANCH_WEIGHT2]] = !{!"branch_weights", i32 2, i32 0}
\ No newline at end of file
>From 25773fa1752214e0e766b7467f888a904b554fb5 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Thu, 30 Nov 2023 21:50:13 -0800
Subject: [PATCH 02/10] address feedback
---
clang/lib/CodeGen/CodeGenPGO.cpp | 4 ++-
llvm/include/llvm/ProfileData/InstrProf.h | 18 ++++++------
llvm/lib/IR/Globals.cpp | 1 -
llvm/lib/ProfileData/InstrProf.cpp | 27 ++++++++++++------
.../X86/memprof-duplicate-context-ids.ll | 2 --
.../Inputs/thinlto_icall_prom.profdata | Bin 976 -> 976 bytes
.../Inputs/thinlto_indirect_call_promotion.ll | 14 ++++-----
.../Inputs/update_icall_promotion_inputs.sh | 8 +++---
.../thinlto_indirect_call_promotion.ll | 22 ++++++++------
9 files changed, 56 insertions(+), 40 deletions(-)
diff --git a/clang/lib/CodeGen/CodeGenPGO.cpp b/clang/lib/CodeGen/CodeGenPGO.cpp
index 81bf8ea696b164..2d3a4c779b6025 100644
--- a/clang/lib/CodeGen/CodeGenPGO.cpp
+++ b/clang/lib/CodeGen/CodeGenPGO.cpp
@@ -34,7 +34,9 @@ using namespace CodeGen;
void CodeGenPGO::setFuncName(StringRef Name,
llvm::GlobalValue::LinkageTypes Linkage) {
llvm::IndexedInstrProfReader *PGOReader = CGM.getPGOReader();
- FuncName = llvm::getPGOFuncName(
+ // FIXME: Maybe use IRPGOFuncName (not the legacy format) in clang
+ // instrumentation.
+ FuncName = llvm::getLegacyPGOFuncName(
Name, Linkage, CGM.getCodeGenOpts().MainFileName,
PGOReader ? PGOReader->getVersion() : llvm::IndexedInstrProf::Version);
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h
index 3bc677d5b6d867..0ee12abede175c 100644
--- a/llvm/include/llvm/ProfileData/InstrProf.h
+++ b/llvm/include/llvm/ProfileData/InstrProf.h
@@ -171,6 +171,8 @@ inline StringRef getInstrProfCounterBiasVarName() {
/// Return the marker used to separate PGO names during serialization.
inline StringRef getInstrProfNameSeparator() { return "\01"; }
+/// DEPRECATED. Use getIRPGOFuncName for new code. See that function for
+/// details.
/// Return the modified name for function \c F suitable to be
/// used the key for profile lookup. Variable \c InLTO indicates if this
/// is called in LTO optimization passes.
@@ -181,10 +183,10 @@ std::string getPGOFuncName(const Function &F, bool InLTO = false,
/// used the key for profile lookup. The function's original
/// name is \c RawFuncName and has linkage of type \c Linkage.
/// The function is defined in module \c FileName.
-std::string getPGOFuncName(StringRef RawFuncName,
- GlobalValue::LinkageTypes Linkage,
- StringRef FileName,
- uint64_t Version = INSTR_PROF_INDEX_VERSION);
+std::string getLegacyPGOFuncName(StringRef RawFuncName,
+ GlobalValue::LinkageTypes Linkage,
+ StringRef FileName,
+ uint64_t Version = INSTR_PROF_INDEX_VERSION);
/// \return the modified name for function \c F suitable to be
/// used as the key for IRPGO profile lookup. \c InLTO indicates if this is
@@ -197,18 +199,18 @@ std::pair<StringRef, StringRef> getParsedIRPGOFuncName(StringRef IRPGOFuncName);
/// Return the name of the global variable used to store a function
/// name in PGO instrumentation. \c FuncName is the name of the function
-/// returned by the \c getPGOFuncName call.
+/// returned by the \c getIRPGOFuncName call.
std::string getPGOFuncNameVarName(StringRef FuncName,
GlobalValue::LinkageTypes Linkage);
/// Create and return the global variable for function name used in PGO
/// instrumentation. \c FuncName is the name of the function returned
-/// by \c getPGOFuncName call.
+/// by \c getIRPGOFuncName call.
GlobalVariable *createPGOFuncNameVar(Function &F, StringRef PGOFuncName);
/// Create and return the global variable for function name used in PGO
/// instrumentation. /// \c FuncName is the name of the function
-/// returned by \c getPGOFuncName call, \c M is the owning module,
+/// returned by \c getIRPGOFuncName call, \c M is the owning module,
/// and \c Linkage is the linkage of the instrumented function.
GlobalVariable *createPGOFuncNameVar(Module &M,
GlobalValue::LinkageTypes Linkage,
@@ -420,7 +422,7 @@ uint64_t ComputeHash(StringRef K);
/// A symbol table used for function PGO name look-up with keys
/// (such as pointers, md5hash values) to the function. A function's
/// PGO name or name's md5hash are used in retrieving the profile
-/// data of the function. See \c getPGOFuncName() method for details
+/// data of the function. See \c getIRPGOFuncName() method for details
/// on how PGO name is formed.
class InstrProfSymtab {
public:
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index e821de3b198f1b..00b2dc80478318 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -144,7 +144,6 @@ void GlobalObject::copyAttributesFrom(const GlobalObject *Src) {
std::string GlobalValue::getGlobalIdentifier(StringRef Name,
GlobalValue::LinkageTypes Linkage,
StringRef FileName) {
-
// Value names may be prefixed with a binary '1' to indicate
// that the backend should not modify the symbols due to any platform
// naming convention. Do not include that '1' in the PGO profile name.
diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp
index d9ad5c8b6f6838..3992cbd14b2b42 100644
--- a/llvm/lib/ProfileData/InstrProf.cpp
+++ b/llvm/lib/ProfileData/InstrProf.cpp
@@ -246,9 +246,10 @@ std::string InstrProfError::message() const {
char InstrProfError::ID = 0;
-std::string getPGOFuncName(StringRef Name, GlobalValue::LinkageTypes Linkage,
- StringRef FileName,
- uint64_t Version LLVM_ATTRIBUTE_UNUSED) {
+std::string getLegacyPGOFuncName(StringRef Name,
+ GlobalValue::LinkageTypes Linkage,
+ StringRef FileName,
+ uint64_t Version LLVM_ATTRIBUTE_UNUSED) {
// Value names may be prefixed with a binary '1' to indicate
// that the backend should not modify the symbols due to any platform
// naming convention. Do not include that '1' in the PGO profile name.
@@ -303,7 +304,7 @@ static StringRef getStrippedSourceFileName(const GlobalObject &GO) {
// ; is used because it is unlikely to be found in either <filepath> or
// <linkage-name>.
//
-// Older compilers used getPGOFuncName() which has the format
+// Older compilers used getLegacyPGOFuncName() which has the format
// [<filepath>:]<function-name>. <filepath> is used to discriminate between
// possibly identical function names when linkage is local and <function-name>
// simply comes from F.getName(). This caused trouble for Objective-C functions
@@ -316,6 +317,12 @@ getIRPGONameForGlobalObject(const GlobalObject &GO,
GlobalValue::LinkageTypes Linkage,
StringRef FileName) {
SmallString<64> Name;
+ // Keep mangler handling outside of `getGlobalIdentifier` for two reasons.
+ // First of all, passing global object gives other information (e.g. linkage)
+ // besides its name. and these information might affect mangled name.
+ // Secondly, `getGlobalIdentifier` only drops `\1` prefix but mangler might
+ // do more changes. Moving mangler's way of handling `\1` into
+ // `getGlobalIdentifier` might introduce unwanted change for existing callers.
Mangler().getNameWithPrefix(Name, &GO, /*CannotUsePrivateLabel=*/true);
return GlobalValue::getGlobalIdentifier(Name, Linkage, FileName);
}
@@ -364,14 +371,17 @@ std::string getIRPGOFuncName(const Function &F, bool InLTO) {
return getIRPGOObjectName(F, InLTO, getPGOFuncNameMetadata(F));
}
+// DEPRECATED. Use `getIRPGOFuncName`for new code. See that function for
+// details. The implementation is kept for profile matching from older profiles.
+// FIXME: Possibly rename this to `getLegacyPGOFuncName` and update all callers.
// This is similar to `getIRPGOFuncName` except that this function calls
-// 'getPGOFuncName' to get a name and `getIRPGOFuncName` calls
+// 'getLegacyPGOFuncName' to get a name and `getIRPGOFuncName` calls
// 'getIRPGONameForGlobalObject'. See the difference between two callees in the
// comments of `getIRPGONameForGlobalObject`.
std::string getPGOFuncName(const Function &F, bool InLTO, uint64_t Version) {
if (!InLTO) {
auto FileName = getStrippedSourceFileName(F);
- return getPGOFuncName(F.getName(), F.getLinkage(), FileName, Version);
+ return getLegacyPGOFuncName(F.getName(), F.getLinkage(), FileName, Version);
}
// In LTO mode (when InLTO is true), first check if there is a meta data.
@@ -381,7 +391,7 @@ std::string getPGOFuncName(const Function &F, bool InLTO, uint64_t Version) {
// If there is no meta data, the function must be a global before the value
// profile annotation pass. Its current linkage may be internal if it is
// internalized in LTO mode.
- return getPGOFuncName(F.getName(), GlobalValue::ExternalLinkage, "");
+ return getLegacyPGOFuncName(F.getName(), GlobalValue::ExternalLinkage, "");
}
// See getIRPGOFuncName() for a discription of the format.
@@ -396,7 +406,8 @@ getParsedIRPGOFuncName(StringRef IRPGOFuncName) {
StringRef getFuncNameWithoutPrefix(StringRef PGOFuncName, StringRef FileName) {
if (FileName.empty())
return PGOFuncName;
- // Drop the file name including ':'. See also getPGOFuncName.
+ // Drop the file name including ':' or ';'. See getIRPGONameForGlobalObject as
+ // well.
if (PGOFuncName.startswith(FileName))
PGOFuncName = PGOFuncName.drop_front(FileName.size() + 1);
return PGOFuncName;
diff --git a/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll b/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
index 7a0b4a36dbad4d..65d794e9cba87c 100644
--- a/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
+++ b/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
@@ -265,5 +265,3 @@ attributes #0 = { noinline optnone}
; DISTRIB: ^[[F:[0-9]+]] = gv: (guid: 11254287701717398916, {{.*}} callsites: ((callee: ^[[D]], clones: (0)
; DISTRIB: ^[[B:[0-9]+]] = gv: (guid: 13579056193435805313, {{.*}} callsites: ((callee: ^[[D]], clones: (1)
; DISTRIB: ^[[C:[0-9]+]] = gv: (guid: 15101436305866936160, {{.*}} callsites: ((callee: ^[[D:[0-9]+]], clones: (1)
-
-
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata
index df563c53000f0dead9134fb7d45a5539a1f0cd0f..90f4ed31a7a0aa5cdf65aaf3f8316a7c1c2b4b1d 100644
GIT binary patch
delta 102
zcmcb>et~@h6O)wStIZ03H%vak%>V%!P&z(pau$=}BqldT#>umo&T+!jF-<mP5}n+@
YEU3T)QRxe%Cqrqdeufv5H!{lu08<nee*gdg
delta 74
zcmcb>et~@h6VqgWCKoOy2ICo$_jKpoF`Yb at NpZ3=lh)*^OlLV^f=rVOnH45?GV=?%
OF)^Tkcat|V%L4#d>J$tB
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
index 4514eeb1451ba6..bc8dc868b3a8eb 100644
--- a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
+++ b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
@@ -3,19 +3,17 @@ source_filename = "lib.cc"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
- at calleeAddrs = dso_local local_unnamed_addr global [2 x ptr] [ptr @_ZL7callee0v, ptr @_ZL7callee1v], align 16
+ at calleeAddrs = global [2 x ptr] [ptr @_ZL7callee0v, ptr @_Z7callee1v]
define internal void @_ZL7callee0v() {
-entry:
ret void
}
-define internal void @_ZL7callee1v() {
-entry:
+define void @_Z7callee1v() {
ret void
}
-define dso_local void @_Z11global_funcv() {
+define void @_Z11global_funcv() {
entry:
br label %for.cond
@@ -31,8 +29,8 @@ for.body: ; preds = %for.cond
%rem = and i32 %i.0, 1
%idxprom = zext nneg i32 %rem to i64
%arrayidx = getelementptr inbounds [2 x ptr], ptr @calleeAddrs, i64 0, i64 %idxprom
- %0 = load ptr, ptr %arrayidx ;, align 8, !tbaa !5
+ %0 = load ptr, ptr %arrayidx
call void %0()
%inc = add nuw nsw i32 %i.0, 1
- br label %for.cond ;, !llvm.loop !9
-}
\ No newline at end of file
+ br label %for.cond
+}
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh b/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
index 6c4fc1f5c339ac..1e2df0185c82af 100644
--- a/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
+++ b/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
@@ -17,13 +17,13 @@ cat > ${OUTDIR}/lib.h << EOF
void global_func();
EOF
-# Creates lib.cc. global_func might call one of two indirect callees. Both
-# indirect callees have internal linkage.
+# Creates lib.cc. global_func might call one of two indirect callees. One callee
+# has internal linkage and the other has external linkage.
cat > ${OUTDIR}/lib.cc << EOF
#include "lib.h"
static void callee0() {}
-static void callee1() {}
+void callee1() {}
typedef void (*FPT)();
FPT calleeAddrs[] = {callee0, callee1};
@@ -67,4 +67,4 @@ rm ${OUTDIR}/lib.cc
rm ${OUTDIR}/main.cc
# Go back to original directory
-cd -
\ No newline at end of file
+cd -
diff --git a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
index 30969fef52da29..27fea39ed0a406 100644
--- a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
+++ b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
@@ -1,16 +1,22 @@
; The raw profiles and reduced IR inputs are generated from Inputs/update_icall_promotion_inputs.sh
-; Do setup work for all below tests: annotate value profiles, generate bitcode and combined index
+; Do setup work for all below tests: annotate value profiles, generate bitcode and combined index.
+; Explicitly turn off ICP pass in Inputs/thinlto_indirect_call_promotion.ll.
+; This way ICP happens in %t.bc after _Z11global_funcv and two indirect callees are imported.
; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=%p/Inputs/thinlto_icall_prom.profdata -module-summary %s -o %t.bc
-
-; Explicitly turn off ICP pass in Inputs/thinlto_indirect_call_promotion.ll. So ICP happens in this file after _Z11global_funcv and two indirect callees are imported here.
; RUN: opt -disable-icp -passes=pgo-instr-use -pgo-test-profile-file=%p/Inputs/thinlto_icall_prom.profdata -module-summary %p/Inputs/thinlto_indirect_call_promotion.ll -o %t2.bc
; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
-; Tests that callees are correctly imported.
+; Test that callee with local linkage has `PGOFuncName` metadata while callee with external doesn't have it.
+; RUN: llvm-dis %t2.bc -o - | FileCheck %s --check-prefix=PGOName
+; PGOName: define internal void @_ZL7callee0v() {{.*}} !prof !{{[0-9]+}} !PGOFuncName ![[MD:[0-9]+]] {
+; PGOName: define void @_Z7callee1v() {{.*}} !prof !{{[0-9]+}} {
+; PGOName: ![[MD]] = !{!"lib.cc;_ZL7callee0v"}
+
+; Tests that both external and internal callees are correctly imported.
; RUN: opt -passes=function-import -summary-file %t3.thinlto.bc %t.bc -o %t4.bc -print-imports 2>&1 | FileCheck %s --check-prefix=IMPORTS
; IMPORTS: Import _ZL7callee0v.llvm{{.*}}
-; IMPORTS: Import _ZL7callee1v.llvm{{.*}}
+; IMPORTS: Import _Z7callee1v
; IMPORTS: Import _Z11global_funcv
; Tests that ICP transformations happen.
@@ -19,12 +25,12 @@
; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefix=PASS-REMARK
; PASS-REMARK: Promote indirect call to _ZL7callee0v.llvm.0 with count 3 out of 5
-; PASS-REMARK: Promote indirect call to _ZL7callee1v.llvm.0 with count 2 out of 2
+; PASS-REMARK: Promote indirect call to _Z7callee1v with count 2 out of 2
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
-define dso_local noundef i32 @main() {
+define i32 @main() {
entry:
tail call void @_Z11global_funcv()
ret i32 0
@@ -36,4 +42,4 @@ declare void @_Z11global_funcv()
; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT2:![0-9]+]]
; ICALL-PROM: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 3, i32 2}
-; ICALL-PROM: [[BRANCH_WEIGHT2]] = !{!"branch_weights", i32 2, i32 0}
\ No newline at end of file
+; ICALL-PROM: [[BRANCH_WEIGHT2]] = !{!"branch_weights", i32 2, i32 0}
>From 413bcb5e64fa846852b50f41b4c8e584e510d00f Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Mon, 4 Dec 2023 10:56:06 -0800
Subject: [PATCH 03/10] keep getPGOFuncName and document it as front-end
instrumentation only
---
clang/lib/CodeGen/CodeGenPGO.cpp | 4 +---
llvm/include/llvm/ProfileData/InstrProf.h | 12 ++++++------
llvm/lib/ProfileData/InstrProf.cpp | 16 +++++++---------
3 files changed, 14 insertions(+), 18 deletions(-)
diff --git a/clang/lib/CodeGen/CodeGenPGO.cpp b/clang/lib/CodeGen/CodeGenPGO.cpp
index 2d3a4c779b6025..81bf8ea696b164 100644
--- a/clang/lib/CodeGen/CodeGenPGO.cpp
+++ b/clang/lib/CodeGen/CodeGenPGO.cpp
@@ -34,9 +34,7 @@ using namespace CodeGen;
void CodeGenPGO::setFuncName(StringRef Name,
llvm::GlobalValue::LinkageTypes Linkage) {
llvm::IndexedInstrProfReader *PGOReader = CGM.getPGOReader();
- // FIXME: Maybe use IRPGOFuncName (not the legacy format) in clang
- // instrumentation.
- FuncName = llvm::getLegacyPGOFuncName(
+ FuncName = llvm::getPGOFuncName(
Name, Linkage, CGM.getCodeGenOpts().MainFileName,
PGOReader ? PGOReader->getVersion() : llvm::IndexedInstrProf::Version);
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h
index 0ee12abede175c..b57a963f4d12c3 100644
--- a/llvm/include/llvm/ProfileData/InstrProf.h
+++ b/llvm/include/llvm/ProfileData/InstrProf.h
@@ -171,8 +171,8 @@ inline StringRef getInstrProfCounterBiasVarName() {
/// Return the marker used to separate PGO names during serialization.
inline StringRef getInstrProfNameSeparator() { return "\01"; }
-/// DEPRECATED. Use getIRPGOFuncName for new code. See that function for
-/// details.
+/// Please use getIRPGOFuncName for LLVM IR instrumentation. This function is
+/// used by front-end (Clang, etc) instrumentation.
/// Return the modified name for function \c F suitable to be
/// used the key for profile lookup. Variable \c InLTO indicates if this
/// is called in LTO optimization passes.
@@ -183,10 +183,10 @@ std::string getPGOFuncName(const Function &F, bool InLTO = false,
/// used the key for profile lookup. The function's original
/// name is \c RawFuncName and has linkage of type \c Linkage.
/// The function is defined in module \c FileName.
-std::string getLegacyPGOFuncName(StringRef RawFuncName,
- GlobalValue::LinkageTypes Linkage,
- StringRef FileName,
- uint64_t Version = INSTR_PROF_INDEX_VERSION);
+std::string getPGOFuncName(StringRef RawFuncName,
+ GlobalValue::LinkageTypes Linkage,
+ StringRef FileName,
+ uint64_t Version = INSTR_PROF_INDEX_VERSION);
/// \return the modified name for function \c F suitable to be
/// used as the key for IRPGO profile lookup. \c InLTO indicates if this is
diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp
index 3992cbd14b2b42..9072270891e208 100644
--- a/llvm/lib/ProfileData/InstrProf.cpp
+++ b/llvm/lib/ProfileData/InstrProf.cpp
@@ -246,10 +246,9 @@ std::string InstrProfError::message() const {
char InstrProfError::ID = 0;
-std::string getLegacyPGOFuncName(StringRef Name,
- GlobalValue::LinkageTypes Linkage,
- StringRef FileName,
- uint64_t Version LLVM_ATTRIBUTE_UNUSED) {
+std::string getPGOFuncName(StringRef Name, GlobalValue::LinkageTypes Linkage,
+ StringRef FileName,
+ uint64_t Version LLVM_ATTRIBUTE_UNUSED) {
// Value names may be prefixed with a binary '1' to indicate
// that the backend should not modify the symbols due to any platform
// naming convention. Do not include that '1' in the PGO profile name.
@@ -304,7 +303,7 @@ static StringRef getStrippedSourceFileName(const GlobalObject &GO) {
// ; is used because it is unlikely to be found in either <filepath> or
// <linkage-name>.
//
-// Older compilers used getLegacyPGOFuncName() which has the format
+// Older compilers used getPGOFuncName() which has the format
// [<filepath>:]<function-name>. <filepath> is used to discriminate between
// possibly identical function names when linkage is local and <function-name>
// simply comes from F.getName(). This caused trouble for Objective-C functions
@@ -373,15 +372,14 @@ std::string getIRPGOFuncName(const Function &F, bool InLTO) {
// DEPRECATED. Use `getIRPGOFuncName`for new code. See that function for
// details. The implementation is kept for profile matching from older profiles.
-// FIXME: Possibly rename this to `getLegacyPGOFuncName` and update all callers.
// This is similar to `getIRPGOFuncName` except that this function calls
-// 'getLegacyPGOFuncName' to get a name and `getIRPGOFuncName` calls
+// 'getPGOFuncName' to get a name and `getIRPGOFuncName` calls
// 'getIRPGONameForGlobalObject'. See the difference between two callees in the
// comments of `getIRPGONameForGlobalObject`.
std::string getPGOFuncName(const Function &F, bool InLTO, uint64_t Version) {
if (!InLTO) {
auto FileName = getStrippedSourceFileName(F);
- return getLegacyPGOFuncName(F.getName(), F.getLinkage(), FileName, Version);
+ return getPGOFuncName(F.getName(), F.getLinkage(), FileName, Version);
}
// In LTO mode (when InLTO is true), first check if there is a meta data.
@@ -391,7 +389,7 @@ std::string getPGOFuncName(const Function &F, bool InLTO, uint64_t Version) {
// If there is no meta data, the function must be a global before the value
// profile annotation pass. Its current linkage may be internal if it is
// internalized in LTO mode.
- return getLegacyPGOFuncName(F.getName(), GlobalValue::ExternalLinkage, "");
+ return getPGOFuncName(F.getName(), GlobalValue::ExternalLinkage, "");
}
// See getIRPGOFuncName() for a discription of the format.
>From 718e0428e083e9d9e085ea2a182458e8267e7625 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Wed, 6 Dec 2023 15:11:47 -0800
Subject: [PATCH 04/10] Use semicolon in itanium symbol remapper
---
llvm/lib/ProfileData/InstrProfReader.cpp | 9 +++++----
llvm/unittests/ProfileData/InstrProfTest.cpp | 4 ++--
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp
index 74f3f3270c4c7e..dd0d3c773ab627 100644
--- a/llvm/lib/ProfileData/InstrProfReader.cpp
+++ b/llvm/lib/ProfileData/InstrProfReader.cpp
@@ -1011,12 +1011,13 @@ class llvm::InstrProfReaderItaniumRemapper
/// Extract the original function name from a PGO function name.
static StringRef extractName(StringRef Name) {
- // We can have multiple :-separated pieces; there can be pieces both
- // before and after the mangled name. Find the first part that starts
- // with '_Z'; we'll assume that's the mangled name we want.
+ // We can have multiple ;-separated pieces (and :-separated pieces from
+ // older profiles); there can be pieces both before and after the mangled
+ // name. Find the first part that starts with '_Z'; we'll assume that's the
+ // mangled name we want.
std::pair<StringRef, StringRef> Parts = {StringRef(), Name};
while (true) {
- Parts = Parts.second.split(':');
+ Parts = Parts.second.split(';');
if (Parts.first.startswith("_Z"))
return Parts.first;
if (Parts.second.empty())
diff --git a/llvm/unittests/ProfileData/InstrProfTest.cpp b/llvm/unittests/ProfileData/InstrProfTest.cpp
index e6613a90dc7c53..6a71a975fbb12d 100644
--- a/llvm/unittests/ProfileData/InstrProfTest.cpp
+++ b/llvm/unittests/ProfileData/InstrProfTest.cpp
@@ -1379,7 +1379,7 @@ TEST(SymtabTest, instr_prof_symtab_compression_test) {
TEST_P(MaybeSparseInstrProfTest, remapping_test) {
Writer.addRecord({"_Z3fooi", 0x1234, {1, 2, 3, 4}}, Err);
- Writer.addRecord({"file:_Z3barf", 0x567, {5, 6, 7}}, Err);
+ Writer.addRecord({"file;_Z3barf", 0x567, {5, 6, 7}}, Err);
auto Profile = Writer.writeBuffer();
readProfile(std::move(Profile), llvm::MemoryBuffer::getMemBuffer(R"(
type i l
@@ -1397,7 +1397,7 @@ TEST_P(MaybeSparseInstrProfTest, remapping_test) {
EXPECT_EQ(4u, Counts[3]);
}
- for (StringRef BarName : {"file:_Z3barf", "file:_Z4quuxf"}) {
+ for (StringRef BarName : {"file;_Z3barf", "file;_Z4quuxf"}) {
EXPECT_THAT_ERROR(Reader->getFunctionCounts(BarName, 0x567, Counts),
Succeeded());
ASSERT_EQ(3u, Counts.size());
>From 4064fdc179f4a32ac1ae82e001bf1b9e7ee13479 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Thu, 7 Dec 2023 10:22:46 -0800
Subject: [PATCH 05/10] refine code comments and use semicolon in
ItaniumRemapper's handling
---
llvm/include/llvm/IR/GlobalValue.h | 4 ++++
llvm/lib/IR/Globals.cpp | 12 ++++++++----
llvm/lib/ProfileData/InstrProf.cpp | 8 ++------
llvm/lib/ProfileData/InstrProfReader.cpp | 10 +++++-----
4 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h
index d1891c157099d4..829206fc56377e 100644
--- a/llvm/include/llvm/IR/GlobalValue.h
+++ b/llvm/include/llvm/IR/GlobalValue.h
@@ -41,6 +41,10 @@ namespace Intrinsic {
typedef unsigned ID;
} // end namespace Intrinsic
+// Choose ';' as the delimiter. ':' was used once but it doesn't work well for
+// Objective-C functions which commonly have :'s in their names
+inline constexpr char kGlobalIdentifierDelimiter = ';';
+
class GlobalValue : public Constant {
public:
/// An enumeration for the kinds of linkage for global values.
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index 872824f2f98bd4..49c96a4ebd5625 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//
#include "LLVMContextImpl.h"
+#include "llvm/ADT/SmallString.h"
#include "llvm/IR/ConstantRange.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
@@ -150,18 +151,21 @@ std::string GlobalValue::getGlobalIdentifier(StringRef Name,
if (Name[0] == '\1')
Name = Name.substr(1);
- std::string NewName = std::string(Name);
+ SmallString<64> GlobalName;
if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
// For local symbols, prepend the main file name to distinguish them.
// Do not include the full path in the file name since there's no guarantee
// that it will stay the same, e.g., if the files are checked out from
// version control in different locations.
if (FileName.empty())
- NewName = NewName.insert(0, "<unknown>;");
+ GlobalName.append("<unknown>");
else
- NewName = NewName.insert(0, FileName.str() + ";");
+ GlobalName.append(FileName.str());
+
+ GlobalName.append({kGlobalIdentifierDelimiter});
}
- return NewName;
+ GlobalName.append(Name);
+ return GlobalName.str().str();
}
std::string GlobalValue::getGlobalIdentifier() const {
diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp
index 9072270891e208..794c8ab467897d 100644
--- a/llvm/lib/ProfileData/InstrProf.cpp
+++ b/llvm/lib/ProfileData/InstrProf.cpp
@@ -316,12 +316,8 @@ getIRPGONameForGlobalObject(const GlobalObject &GO,
GlobalValue::LinkageTypes Linkage,
StringRef FileName) {
SmallString<64> Name;
- // Keep mangler handling outside of `getGlobalIdentifier` for two reasons.
- // First of all, passing global object gives other information (e.g. linkage)
- // besides its name. and these information might affect mangled name.
- // Secondly, `getGlobalIdentifier` only drops `\1` prefix but mangler might
- // do more changes. Moving mangler's way of handling `\1` into
- // `getGlobalIdentifier` might introduce unwanted change for existing callers.
+ // FIXME: Mangler's handling is kept outside of `getGlobalIdentifier` for now.
+ // For more details please check issue #74565.
Mangler().getNameWithPrefix(Name, &GO, /*CannotUsePrivateLabel=*/true);
return GlobalValue::getGlobalIdentifier(Name, Linkage, FileName);
}
diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp
index dd0d3c773ab627..a2c131680dc4d9 100644
--- a/llvm/lib/ProfileData/InstrProfReader.cpp
+++ b/llvm/lib/ProfileData/InstrProfReader.cpp
@@ -1011,13 +1011,13 @@ class llvm::InstrProfReaderItaniumRemapper
/// Extract the original function name from a PGO function name.
static StringRef extractName(StringRef Name) {
- // We can have multiple ;-separated pieces (and :-separated pieces from
- // older profiles); there can be pieces both before and after the mangled
- // name. Find the first part that starts with '_Z'; we'll assume that's the
- // mangled name we want.
+ // We can have multiple pieces separated by kGlobalIdentifierDelimiter (
+ // semicolon now and colon in older profiles); there can be pieces both
+ // before and after the mangled name. Find the first part that starts with
+ // '_Z'; we'll assume that's the mangled name we want.
std::pair<StringRef, StringRef> Parts = {StringRef(), Name};
while (true) {
- Parts = Parts.second.split(';');
+ Parts = Parts.second.split(kGlobalIdentifierDelimiter);
if (Parts.first.startswith("_Z"))
return Parts.first;
if (Parts.second.empty())
>From eca83c0185a5af119e519d9b9478697da375397a Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Thu, 7 Dec 2023 17:18:31 -0800
Subject: [PATCH 06/10] resolve feedback
---
llvm/test/Transforms/PGOProfile/Inputs/a.out | Bin 145592 -> 0 bytes
.../PGOProfile/Inputs/icall_prom.profraw | Bin 536 -> 0 bytes
llvm/test/Transforms/PGOProfile/Inputs/lib.cc | 15 ----
llvm/test/Transforms/PGOProfile/Inputs/lib.h | 1 -
.../Transforms/PGOProfile/Inputs/lib.h.pch | Bin 221372 -> 0 bytes
.../test/Transforms/PGOProfile/Inputs/main.cc | 5 --
.../Inputs/thinlto_icall_prom.profdata | Bin 976 -> 0 bytes
.../Inputs/thinlto_indirect_call_promotion.ll | 36 ---------
.../thinlto_indirect_call_promotion.profraw | Bin 0 -> 528 bytes
.../Inputs/update_icall_promotion_inputs.sh | 70 ------------------
..._thinlto_indirect_call_promotion_inputs.sh | 60 +++++++++++++++
.../thinlto_indirect_call_promotion.ll | 64 ++++++++++++----
12 files changed, 108 insertions(+), 143 deletions(-)
delete mode 100755 llvm/test/Transforms/PGOProfile/Inputs/a.out
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/icall_prom.profraw
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/lib.cc
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/lib.h
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/lib.h.pch
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/main.cc
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
create mode 100644 llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
create mode 100755 llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/a.out b/llvm/test/Transforms/PGOProfile/Inputs/a.out
deleted file mode 100755
index 8548705ace212765eaff8f159366424b10ddf2b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 145592
zcmeFa3w%`7)i-?3OinU^Boi)?a8U*%5boh>xM{cy44PoL1W~~da)C&0O=bWu2oj=<
z!&tCtsZvWTt*EqOtC(6Z0g*(-Hd?CDqEBkko*2}qC}|&*@4wdG=ggVF&_3Vyz2En~
zzu%0Kwf9<Uuf6u#Yp=cbK4+3m?(DfXRaK0SUAa=B+76GvWJyBi7 at I69N|utTbjQyT
zO1csYYz+QoNorTPMm95`L-N at Hsog$F?+OP<J_8yW5~OyKK07i6#ehn(s8c%){|vk_
zJ_BxEA@~evZAW8Feo)Yp4~D}`seebjz;|u8a+kobYzl|_ibQ?S-Qn#>9QBtj`%9Po
z8L(Lz!hnW77k%t4BD?&jdK&i3mF>0-6nb=pXQi<XXxM%s+L50B(+{<$e at CR<x<Z!}
zXh5UCv1O&JCQlq&Ry4Y-w8FPx^oGpIqbE-sQ&Tx+Jj<hLrZLT1kjE0pzhoC&kMx7u
z^t=GE7jUi%;0H&*Ul{?v40vkO^|Km?3-#-ZfWJKg{>}*aA4b5FTV1H%hk@^be_cPn
z0OCUYPei~!9RXh-0snFY{Lu*bHzMFqM8JO>0e>n2{;LT1&ItH(5%BSFtP9yKIRZX4
z0)Aiwd|Cwjs0jE85%5<<z|W0<&xwFv8Ueo|0=_5${^khystEXX5%9M~z;B6w_ea3*
zjDY`f1pLn;;3*oZ{GT21%6{H|+Ig7sc`k+_+56GA3;rl#p<OvF>p&?>hThVhBJcCS
z(Z|=X6g!q(Ifgp%- at o%ggmX=4k at aV|Zd3j)`3Yp;AHjb37xu}|M|3XCukjXCd-KZ+
zN-LE7{MF@^6%v!L<j-G{lV4O^UA(%q##>yyBxiP6WkvClf>mY3f_7m_e&L3K{F2g&
zg0j+E!I)oFSyfo+tMC?;j#pL}dy6a9DFxojQcwzNYKqZ!NkM6uQdm${R#~W&R2LU3
zHD2^ut&~(%msWU7l=9;8!tyEtHN{@8Ro$YLl$I4&R4V1=1yzs)_KM1U2q^HDR#rej
zH87PBvA(+0Tdb7S6c?{mO1#BoWlFiPg4&dLt9=z<r{1a|ia<pn2`((FtU;5?Dj-Wr
z%6v6z6!c4KL;I?N)x|Y5F0dE*su)#Tq|{VMU4dp@#c0ac7L`^jzKVi!2rR7dmMKDN
z5d-2~Q%#Z>R#g{*p}e4IT`Bs{XEQ>-4W(WM6ScY!Q$;)HIAz}K+4&R3OeAa}VJ0i{
zvggm5oj-oe_%V~r^0<j+aRT$gs)Zv*iUw#}E=ueYMt)@EB^mRDr=-d}#=uueysHa-
zah2d-Bl9JL->6r0!S9fAHgv&nmiRqg at GD0Phd$5+zh9&cN_`jnpCrDa3;xEXLeJJN
z`1>VZ?}Goq)q=mH3x44>0^ivM|1>2I^m$DHhXBfMiFb6te|?=`NbZ8)^SZ#NcEyhr
zc1Z7nZ=%EppNuYe<yyg?83CWw1z*)i$nkW+zbX^@Jzem|e6 at DL8}sXu<1p;7XTFf1
z-UYu|)>n4Hue at 6DcRnW|<*s5xqOMSaf)C-Xd85OEr<~IGBwO%Cj!Lvt3!cs!#>ZvB
zBM_UPbPGPg#41X?oS!)0ta2JGc+%DQG+FS}#`rW_ at P_S()?&fO8_a;M7JN4gUbo<_
z`gd6Hi5C7&3qHw$S13WjhjesuN&IkF at U$NppJWT(nxCdx at YX!bWx-2VW>M)Dd~ZWI
zV1@;sV!>xx at RwNdSr)u>ai)4K_*4sjt_9!Mf?sCATldqI7JPpT{~8P4I1>}O%7VYt
z!oR_Szs!Q)Y{APTA5*tk at GcAg4hw#e1;5LJx1MkISn!uy`1e`xLoE0M7JQloUvI$=
zwcr~p_+b`&lLen{!8cp*!!7t03x0$J-)g~+wBU6Mev}2 at VZo2K;5#k&F&4Zc_aE~A
zu~xh+t1|k?HK~pnTU1<9;4Aayr<ISXs;(@lE?94EmYuycCx2;fe$LEg`3v$;oSD5i
zKi9n|fARb!ZtBBVQ$3clnX<8~D=Sx*6^~t0SzbK0ytHC9{VN+=R<^Eu^s4H at LQz5&
zHy0Or#}-zWS0OK|9$oFFqxV?q8uhXBE0AR5as|zo7L at sl#}uNU1-|m7i;*DJxUO_%
zxP}gO4Gv)n3o3?rU8{;+w-#4dN at rQ*tEhkgSEbMEsw{CKb at Y}Nx;VQluC7rO8kbA-
zQ|!8~pqiMcy7DS0WpsHfUEb<~!nLl7;`Od|q(jYAS6a;&muq%qMNKJEK9{eCrB_iB
z=Nes3qjZg4S2fz`VRRM7Rs)4+Os}|-1ag{%B*|4?SzRoIy5yiuwOj>Wl-V#YZ)th)
z7?(9f^0XLY*fLW8*_5-=sEo at AaLQSAAs_TYQw3tn3o43SxZNmLkRg^<S5}l4S9qaG
zbt&h`NHVEU*Ua4cN?yg<ipupBkVDaw{;eOm3O~Ep%}trB)oPUE8lxhMbz?h||IEsp
zJD0uY2J)JJE2p at 6b+IAHRaD?D80A84D(42tt&1{S(F2PMpU?C4x~RPB;`OB!MM7Fl
zrLVd$)HV5}tF#6aSm~-Mhw+WI_V4_s{Jb7R_AveKKhl$JN(YZ(sUi<Jf}RzX!h_)L
zFxD7leg)jOv?$D!<c+M}1&v0N7GZvj<&uN3vG<p_*gk1BE~|b8tCaQOqRsUsRw^AS
zM9cN1-ZfYdMa8ayRl+{``5bX_7hOAdezrS*(USc63+6A$zjndw$bK`IjYGrYGn5cL
zIIU)|#X$-y;oTL!N?(oW4|D3PsPR=*RaSe8i(FX5-Zj8gl@)kPDyz$JsG%jDFIQ;3
zT-N!kN(*YpAAA*9U|32;!uu}l&j=PqpR&EH=9Y>=Q-Nak=%P`sRR~guyXGvR156|x
z;6`KiR->CSuGzloYOL3}@Plhha7y&LX1LPIe4|`^&byUrzA at d5b#I39|F!X%wBhiq
z%rDyDnm)s|m`|u2pXb9w8^}$n3Tm)ky*MGSc2)Sw%3O$5*c))Nt{$wUl?fC6yY)nC
zz6y?v$>I5>gDNC at A*+Hza~=m|@0wzl5&DS5SgsNLF%<7f{+h}fFU$QOcd{fWch3Ap
z=dByl at 5B2cB}EI at g(C4NS9Ng-?lLM0;h3e7Mu)Ml!RRh*x3siES4~xMVQEPz_A0D8
zIC$ADv_%?Na(To#As#C}lALn0#eXCxZ1FC2FPe4j;tQ<X1(jX|@5MBwV%rx>mWD*D
zn3k?<U1<T$tFZxw=_lG>yAC%e*o<A3WuXAaGAshlmxo1 at pH{>J&Nspg#Tv|>vAH5V
zVwb*!oF}Yb8Lva}hJs~5S#@zi(JdT%aQ7kuLRdSYuMs|JJEQe&v>+8Jj#9M3cxg?s
z7ZMBBxeyp8?>s#$aZkp)3-Kc-;vJsyfKtk{e3Sw3J(LT!tf5q<ycFA<w{VSXs;hVd
zJcxp0nha62M$(GJjKH4|{>=HK{e;%Hh+Ob3X at +q7nd>1NiBL6kSSPQ+C`IcMaf^KA
zRqVNCur8ShmtCt?6>}6J_NwaQb)^XBaBE_Pnuag2ec6~UH})4!){0$eY31bY1`}Ht
zv7~TKL4_sNVDzeD1OUVlh{c#NC1Wb9k at NA8!t82}r;F~GHC!u}73Wv3qGUI{q-aK3
z(Quyg(3S&bESpkjV_3fiyQ9UPMWr>A_(;2x?~yesS9x&{D%K6s at 3qjD^VXVMZ~<D5
zG_SnWd!GNA`pzL2EHB`QP*_=A?W>}BF7mN;4HFqUSa#8Ww;n8hI5 at 2+Z2w(TT)1`?
z64fFk-}o#kF2~keP-aX>jjO2AY9Iq|S^}xD%uvU;=#T)f7$wpe>(+^#+1v;C<UxaB
zhd>60<SlIa<TB!n=l?gmRwJ>VH~ZS9h(+$X^Osr6`HPn<nxCs=OxW;#;D_U{U2yER
z`8ktD6&`yn`|WEM9K833U)_06-}}cMo!7VDul{jzSlTB?9(&-EG(0%?;qA$Ph)LM+
z{u?>Rj^SxQfAv?$;rrXC(KFUZV0#A+s;QcybOO!+bc|4xWq_%GWq>V!_XD;8?g#9K
zgX%HBQGlla7Xl{Wa%czOD8SbMvjP7KSO$0l4zSw+yW_yRAMh){V}KeQ@)Y0zzyusn
z?*tqL_&i`XU>XjrWq`8)w*%Gy?gy*`JO=n<z*B&m at Sq?8mrdixp*>(=0@?%Wlh7V;
z$Yit!oCmlc at Xvt9028i2d%(4sDB}R!dkWeE4hPHz%mpk1TmiTp at MggMfa?K|0d566
z1-KJ1p&M)oI12Ddz-+*Jz%syB0k;Fb4Y(ihzW|Q`o&r1t*lQ}<cUP1Sz)^sKY3Lg;
zdxoNT0k;9(54a2P8NkN at j|08{cpC5+U~gRJWnZNz69Jb2E&*H%=moqY3+(~70zL!y
zcfjL-b7rDFVAd?O$7R~ffD-|K??!vT<#W*<@Jqn^0W+^bd%zQb#{q5GXb;#6uy>N8
z3<aDBxDRj%;Cp~xKwA#l1C9iI2Jm*k7Qo*Eb^<m5raBenL%>YHehV-Lz%;-OfL{Ra
z0(|dU*c8x~i}rw106PI62ON+Ly#c2Kz5%!#@EyS00W%gV%5K1Wk&(Rs_z>U;z+VHN
z1$-WG051EQ0jC3g1GpUU*(GQX*a^5Ba1ie1UjY0i;0eI)OVJ*1<aKD at 6MnV~?E%ML
zuP7 at 4Uj^I@`0fpgvInrojf&C$=v=NSCjk!t#^BQMsTF7oIQS;a3E;Q_MOg!QFW@%7
zAvkL91FQn1`|^%r_%`73)$ki!E|#o;-2wNkh1~()2lN8E%3*iF#{i!JoL+%>16&Gt
z8t^W_-YJSQvkL72cLFW}Tvm<tfaQSq1KtAo4B+noj{_d?V%&g_`OwEDit^lg=neQP
zU=iSNZil}EKC%)1PI$m$fFA;$0$hIw^zNf5_W+Ipd=M}juoJKhuyPaH1AYRyA24w<
z+5=7mJO%hNU;-{ZeRrZg;NmT44|pqJ8Q{+Ww*#IA+z;riMSH+qfTsZIgW>Z>y>*eI
zZb(-9C&W2+sBy_~2ZioCbzCM67Az5X#dA#J-H!`Kgc1Hw`waZsXThPU%)!6CDEt9X
znU$10GbwdulB?E!ug&&bDkjfLa*$4C_%}UGz8eAbwMh=vXDjfNfFA^?0DqTlc4F*u
zD2*!VuowR(gU&h|^c5lc5zsS1$N!=BD?{{?K+gaXAtOY;HAIh5;cuWLWQFM75Pb;f
zKG1tw={X_#9MD&Tjwubbw}}o&e|kQD6!fRV==)g!(YJzr-B3mOM;QGhlfD=9%Z4Eq
zS?LQx{T~6n2k3C0Q2&cU^pl`FKrgn^ZNfm*e~e90azKwbe$Y!m$I=VQx0RUs%>n&s
z&@Z*pmxcN-0{u6jkF(OtLiDYmzYKaL`|g$UBhin5{wUh(R{6HSoBEvueQi3{co_XR
zCOyWkDBpvAJ@`!jvoEm`1KDQ?=vR!yUKvJTX42<??i~%^w#r{08eb9UJ3znOO1~*Y
z-wOJVK;Leq+wL~?+Y9<R&?C*y5zte|C`vx&Ii&v$s-gc$(61Ydy(CQjUQ>Qd44zei
zj<6SMpBvI|2<U$S9VQOZSB2<vKtBO`qLuCm(ThNT?IQH8pdY*leJ|*bUW9%G^c@$W
zp9Fp5Md&da@}G;)hk#D at i!?sUE9YE<UIhBMi_o`%e%VFndqMAh5&99(J2C%}=I12n
z=Rp6!IzP4+o*)-+F|pYDA^%}3-Cb+9?G$rJJn7(>fZ%^9%*S3}AERcpPO`z%j71)4
z9h8B73Ut~>Oh3IQ<R{xfKLL6VD?K|z-w*nmpht>>$3Snmi2PHa9{_!G*cfgz*GWPg
zben+v*V_NQQ2(PqKRZ5h|Jk5_0s1j(ds`z5Ap4Yo{xIa{gwe%9A^LXEn?TPGqu*e*
z-w%4+L|om3(Zxnd?T>-(0sU+k{fycE6zD at HMc$_pu;JE%{;#k&_l+6nMuEN}6KgR{
z{v)RRY|vXle;|y$!=#sio`)bd59`sKfBUQ$V&L(Ee)|lu-<x#X&&>AwLB}iA%22EP
z0w#0&W1z=^9?5 at Bfqn+^Bl%AP&O4uizQrovw$bc=6zJKI4;KpQZ`sGPL0<v-a4Wqi
zq+c26B at yT@wAl`NCFl#S?P(oaeDDBxc7tbf7amfBY}gF?Z$U>Y8q#rLNC$eidf!Fp
z$vCq;0{V1od&^#y0s8Zxcem2#hUDjh{!7qbx6*B|G6U&X1^Tr}#6At9e{9lsfZjJN
zvJDS_J{a^XtnI5s|1RK~L7xJ8m6dK=D;R(y9ZrL%4m^?KP;U&*2YRG at V<PCQL62mE
zB_J#U9Y>?k9N6;AF?vDY4*E at Dap-z84&4v>>oX(Ap=Urp2zn$xJ`Vchphw!TPJ{j+
z=#hM+Hv-^x(9^8?Tk`3Npzj2|LA8v}{s&Y4C7_R+ttj|EH2yop6p;PBpf3S&xRq{M
zC-;NC0`#p`x^0tbzh^){1bRsrT?7J>e;o9<IXJ(C>DS-X?=;cfit^8}_NQ6C3%K4e
zTr23^t?jW6?JA34AIbzz<6PJ=OorGnNrz>i&zJ`vvdXY0nmTL%eXK`Oa4izDkx$sj
z1=KFk=Y#&el}@ohsL49K0G`X|<4kDfvF$ePbOQ9fpq~q)|I4JG1-<ra+&zWSD@;2K
zNWwh>=uSHrjB^*+L9?4OvcPjF2lEvsLnQxXhn1jz4|*g!Z3f-D0C6>}y$E>Jeh=t-
zK;LZD!G0Sn-~zn?bY&6tR;!)oZMWCP*jJLVhk$$%Jf6k4+q3e_58AiK)M~b~JQTKP
zf>TjOEWw<F^)-q6B3(v-KIgg%&l%CPLB9!fdf(f$mwl!==VhR8U8X2^gKW}mTTEMS
z2fZEiNc-o0&{tkB-x)UMLxdI9{}|{ufSzHMFGC;ccM9~ILH|RTeg{qc5)crz8*x8p
zZEq6^8jm0JNuW1|wLfgO&j$U(^2q0iGSJ at w9m_8?e#_pr9rPDLztEbXdE5{ByP$t(
z?VtSdYgU1zDlYsx4!-?2VXr5IVJBKUpNY99o=)&=LZX#y&2 at y|#8ARB06YVbNUSYT
z6ml_B&U_(*^qCI&^`N)KSm++;bAnSEYQ^(X1ipR<Rvm;e^s%*@^S%}IPeC7MrCZKd
zdqMva^uAX55}^m_c|^AViIr}<-;{q6^upDV_lp>8bW1^xG%rIyp9T7=F!|yFhWeia
z`c}}_htb8RO!Okq|9TPnR?x?<xyblIpK=lU5zw<h4}|r9S7`j8KMDH5F#6Lbo$e`T
zmf{XCjQ*ZUr~AuupbxXsE%QV7nz1)WrWb*p2>N1cdz-kxA^U6vJqz^yR{B!zp8aPp
z=+i*I%}TeeV+OicI|BM%(AiIkM}EeAHsAl&O&<S8p4yWgxl7#R8pgfm3C?&H%jaCm
zyh<cO$HG3K?c9t|8Px6}Fs0L*;t6PD!04%K at W!8Obq)kxQC^V{`~}1qoOA<$;op1w
z9iBs<U*$Q}Y4 at l{J#T&Q?F|9nR0si%bFC%LfpbFbzjj{sugx<){yRkaM&@~HXS at wg
z#pD0jo8Sq|xMUM<bowHP(u>ZWJ9kuj5q#<j^lkP}?c3IaC`aKrr at e(nVA%>ekaSLa
z&03$ibaC$2&PweCAWNL<UMq3__o1(yo3#C?X9p(z`VKS+UOIU*YW_1G|A*t=*8d(0
z*EshMB;75Tc7VyGzG_lS1@&et^)Zurji4^EQvD`%G^iNw7*OZ?VMFS7EvVVBX6+Hj
zjWcgL*UBTzg&N6V)+b=h;~K7iB at edpZ#)%npQ>$e_}ym%?z6QGakZ_TqP&6`Jhi7B
z{*7n-zD|(+jd~**2l6@(eH5cMzh-iH{2Mzx0e5F0D+WA|g2#WD>K>EHzfo^=pC!9C
zx;qK9U*ZYm>ELl5oMUr14>qXi-rcF9nGP{i+?~}QqDxbYRP><}(SsfyryksAC2t__
ztp6QgvyFarYrm|R2SYSPWk6I5)Nnuzh-mQy;5P0Ksb71Jz<H7(7sU?$JLvM<TYlJS
z<0-{ET#{3}kPpL<tj4R~pF5|zJKNPAweGWO?Z&g}x?f|QrnR!Ddyn7O?9V&q&uN0V
zW}yKMuO$FvvM4n9b7QzOjO{)MwJN!cnq>#FT+kwra||`z|3~OK^IWsveKO!a=|2Sf
zw!nhhvTY8 at oDs-53;CXauY(#0cJO)*wZ?c<cL(W<7Sr5K)q8gA2vfKT3O9IaH#R6<
zlGYGV+Of>sKsV~Ygl at 17Q++)d8_3OsImm8rx6>FJpnEG|Yas6w4-do6B|(5NKG>jb
ztA7^pwvx=Nx{UW)!RsN at P#d0eYKVC`QM>Vk;!O|aoZu<(f$r`gApsI1%g=r%3}~H}
zCqZnL!z2%Oz6h7C?YPSHlw{%98$0z6^Kc7k_`5*YZtQfdkA;ZN_NzU2ZtSG at h1bQ^
zs{rj&2u&*d4nA4isrm%pU<2(3+VecE1AI1PuKxU~$KMPuRWH;Dgo3U8Qls at vQmDjh
z^(4j8P%bfq;?=Lvs2laMP#;r((Lqn|FcRcEsBCTU4lrb13J$;a-?w0aYEOSCUS$nv
z?WoT<2kGm&HEQppLS^Y02n!Swv_@{TQMTD3jR$-BeW(4+C0JPj_h}3*)f4PZ>y4s<
zCzu=Ke9qlb;<s5EFtN5FD<pz3 at N#oTc<p-R02{U0=$k$PO-2884L+zjL8{s4K24<d
z{t$v?1r-jbI-i?E9XG(+J8Rviu{uwy>;8+a;!B6U8rfclp2vPjJDKM&neQk{zv5D(
z9*Yd0lzNGS2P~@*!jHvNyHQtsaXc06nH1ZoTTjp<zE{%WaX#I{d4EG~hYG9r0*wRN
zyV%u56OHFMG>HLi?FJrE at 0U`c%**5f`Yy1yQKI4rXeU5ss|HfuqvDjqHM0ZSw<i=O
zn5+6zK0~3lGk#M#SYJc>MC&Y=;-p~&6VrJ#6ff!_Owm`GYK*I=-k|Lv?KYB1K0{MR
z(-%mok{!um(rPv1+L6szEV~dUcKGwQgMcEp-2n&>*iI3m(cMbp0JQ_y7TBysac*^B
z#h}=VBCR1%TRefRbfgVFWB{nZ%->=8)-^b{euVZWgCCKz(cMHt0Bj&gQ772 at RVsq5
znOu#ddp#HqVA-5I>V8UTF9fZg2-s$Pv;<J$aMbEiY2&K*_;Vd?w~D?%%W`<8xewHk
zHlpTt9}sMaY|KtUiD`%p?)uH{r&NrnUhzHXJec=XKzno at lF-A|3&4a15I4o$T0Mko
zU>8mEIz1d3QO#>*1^y{UAzF;2z(~q9Fzo}-^goH9R?mGow~{5!lXc#>8r}QA7r|1n
z`AGC%&vs0(*zpj1is8oCul??Q?Gw;(lj0qPPBH$hWSX*p)SMAPkN9p at c%#~l`xM{c
zfVSPo?w!gCV}_6AVy$-D(H^&>J!S`@w7LHr33Due&Stc at kaGpxVB}rqf9hO&{`>!E
z=bG#NU*cTVunIZz|B22uwkF)UDi=g>u2UI^S_s9yR)5|JI2K3clujObXMj*Stw3XG
zQnb{2z$S)ciXD!Ll#hh%FXj%W`+X;6Vkx8}@=^2)WFdb<;`I^EIvk>~a%5D!R_<=?
z2;Jv%CX+I1Gj{K=oEZ|K!%6ENM=A7+p%fa!gf4!B79J(X=FYBqKsrL8lx_|JS)Q*!
zZl{fIzKDPjTJh-|#;NSr9)5?T55kkS4 at EiZHiw9!O_ZA%J1~-hcS>qEzJrK=5}~Np
z-9h291 at Goist}6bEzqT1q&L(&nD7^hT-e91puYSuJ*27HwgKJfKE+fPl!k$uf`VEc
z>lS0f(IsSaDVc&sdvdM&6rDX_9fUCoBeWs;+V0$ViqoGsNT-4)puGVlNE>7B<cuJ*
z-3BS0D)O3lV0-75wb*W`qPkC8vQFn+pCc{B%nI}31m^d_>nP;sw9N6lkFzCw7(i$z
z3u<%GsV6`K(9Mn&POV#@t$B9A2%s3UdEP1HZbrW0@!KMhuo?MhIna=tl7=2S1{|+G
zKzQi~LG7P(n8zx3=Bsn(Br<e7%;OUx<x2M*7i at Ldon%52)V at PoQ_zkoOQrS)mdcc)
zrs$wnX{}7Owz)P`320y4WC{pqpIIw<s1nqsS^F9Dw%LX<e?Ogw;2UHG&Q8U-;Y^EX
zP_sGGEQAU;IxPi0$$}e4qJ{*r8I`fG*LK>Sb-!dkp)*o#XN<G%K~e2^o-X>3d~N<c
zMHdbyow#4e!e1|1$M_o{O6Q8=Z+MCMVeX~yBWTB(i46|^(x{(BuC&cf$t$+tA<lz2
z{{<%aFT9BtWTRf1OgZ2=1QyDC+Iu+<f*l^DHk&7YF+YoO%+JK=;7h({_+pb>OYJv<
zy&2*_pi{8^6<il8)^5~IsY?(}RQM{gt$<bQJ#_f;zruK23xtMqHxX1Me{4A at Od*HP
z!1zZ;&+X*-ffZ(Ac}mzlsJ*|JB+?S4f4MHv68gGvnz!C9w5>(Vq3Oht>QJlQGh6^a
zWlt1R<iuoMoQuO7uC8WZM3N`qNxvvL%jKDJ$hY*OJVu5_Bk8y}CyiP9f!@C4;=IWr
z`}`ZJ=@zNvAK3KBq2cT7rSD at MBQD`4!<_UX0rzoS*l<|mJDXPLb6J@<SaIOHlLOpY
zx%O#&(WZqU1ZyT5Wpd2afR<J!4=e*v;2FZSB^!sr`a7%f4TGvO8E(WW=(m_RgFy;E
z(^A_SXNH&g&(MM~!cFa|T>bB~gz6e@!SV3GT5-75_lo?cMc*e1&H9VPWt_^BvGhq{
zxp>4bw9Wk|=-=!aNh{*8^Q9cBwg at v#n~RLR)DT)Og<9B&^(Djrj-iRf{n@|RqZ{-u
zMWG%n6azZj9wWBUUJL8-fylX)b~<ng1dbubN~KdS5*FOTgq?B`%unHzdkUxAMz>C#
zw_i#7e`t?AKmiYPL%U!qgtU4ZvmC_8<*?oGZ?#zJ)Own`qx$!ld=K`!EY at b4yWY9w
z8rbh;YN|W&L*_{V?H7MEVy$syumc!l25WhJ!<>8}24NH#uqT<DTHC!4CN?ik>}$=e
za<0Qf;;xI%dQH58IiEU=*1AcgRWDkw1CF==!2uR{JcbPC7qhu>4qE`&WDs$qNMbtR
zn&u_hG3S;N44BVF7FVaO#Gj}8b55cGrU`M|Pa--)W+g28$z?RMHh(S|9t;D>cp<~2
za&8*X{BJ at Rctt?F8zn#8rr;U}S8ceLkR-~^TrgA4X~>3rXw3H(B}{MBSCDH5wd+uo
zy4IdbhInGdwXFk=j!TJ at KE%#ylatb|oR&Z+kP#$OI*$=q`zHY=H)?Gt)2C7Uhb$TS
zaqX#<=%5}Gd%&N!A5!ZBxdQ_3{o;g;1b9kwO+P}@#&Q%Q&`CGmsoD;r2Fd{pnojui
ztB~LU`%!I`Ud-aMQm481*NkBq0bIgUn|hkYU`{jtdL=QJxD$owm0}aTN${}k>jPN>
zu;;@6`KkhT3)1rAo$il`PyuoXWs#+O5DZ~rxEghZglRZAM!i3GfYlLd`CQQgN(=fx
z?*&w3e%in=2pW<k^R|x^t`jK6VF+R{XhBM}S`-k2kwJ+Zs71O>SocRZ!}Pmg`W^7a
zZH;cqvdxTK<|o_2GIFFLNwhK==e&A=nA`7w>>b!<X>Dx7#j&UM5M7^n==zN2zE*c&
zQ@}oeyF5odG7a3}=qil)5|ufMdd__7S=#^;9r5^)P&YU|hx8bko>E`_C9fU`<Uz(+
zPXOJTvGL0+IunSybLU+P$#q#5hbNeKfYcFlM0dX at Yd4-$eBF5PZJjWx;LLK-J at _%Y
z2Zsj*`GS1c^Ay(P^1cDn81gsTS42bjMbLdrI5&19DpNF?a at cUq`@w1)ZEoRmD~lx~
zSx-20S+xXo49 at S~OG;bGWJC8pO4oupM8s6_R{P3Xt6J$HwIa>JNOvnPz}bS?WK254
z8p76v3HvJsZyc9?N`?rnBuujh$5Bq;@gRlldKx#Qinj)_rwC)nJ3ZyFbM9ffvcp7V
zQ__=zVxAu0=R!06O&<SSIF_ZhAw1z3#9LTUI$RSc5#G{wA?-bj-A9h{1MH13zI0+Y
z7>A1veLoCk6kYAbnZ-Q#LfBbqBT|hp&kr5w;rT5%Q&9jBD~nHb@{nDFfgnUS>N~~G
z+krZ`ahH$FaSEV(?C+2YKPD_G6~4l{?KM|Z3IN7N-4 at 2x!$9AQ9>P^zX^D$^8xB*{
zvHqDTbm-l`W{j>oMWI#iB?>KiA5m!5-xSPE`dgyVkc}D1=EOKh#|SVUA4Y)~g%es}
z<NoW;`5Mmon$GzSoTCgM7un<jwMR1KZgA%*dY8fDe=(KQ_GgnBJm6puQ~<L5b)8r=
z+5TV$hd at CK)Co?GnGb0sf;PPi5VHjliakJbJb^lrDx<9(>X6S|kobUT*@|H$qZxNE
zg0xLEBUenvU|mw0D$vc@!C)>NCOcTSjAICV0nfzb2?@deMGw%|0cJ6TRfbT at +9S#O
z9p8{{bt^&8e<jLmP!`!u5zPWtSzQ%SVw&qVa8Y#R$4w+ng&&bBP)91DxC1Eiuw6h=
ze<<z&3X|d9hheiZq&0^lfuTV6fUvYMF(d2I0;9w(g?n#A2PnI-L-F+iXjXj5z;f^g
zYyc5^2af=nx~Rv-x^#dlA~e=zphyxL>oQSd?m!*QK5ae0AU6<*^L8J(OY^<GU?GoM
z08gZ(UQ$2h;3eIo&P8*L{sCBR$}#+P8K|Ov{N(-{>#{;ckI5>HT9?b*%R+eJKy at pD
zf$TLVfmU{16?1REPbqtIsJP8!m9tZ~gSmHw at WRXL_5cIf`%D7OVch}duE$R)yCGC;
zGFjy`*EKVDi^SJ%%ux7opv$~}s%r%ez366Ba*MhSZr6#QvKPgesKz>noIN-bIWf4C
z0UGO4L-<rQlyiv^7ztt71H&?jtMpcMLP>z|C<5>(87&8S0zn50c_5jAFICE;iLXU~
zGm^?9o2`il!tZ8J5Ux+Y-ss-PJ0*OS{m#un5e|**+~Ux*(__;{)+a{oCdGKSl8%EO
z=xjiny at J-ec#Ju;mUcaFCme63VWYD?Aq{BNcoziQPmh3BCQ4z?QN<~;QS*RCUC4CY
zIJ!&$I+USj=_5WP>mz)R5rqytTNHFXR}@<HC8E%xFB64kJxLUr^q!)C at Qo=C-~xs>
z9y)^K7=cA1!gh}T(0o4 at OrxGdQ5pftJaE9(eXZaGq`=Ej2Q6s>KpjCNI18`T=&|N4
zRx&0CqDZ`C60vkYxzVB4SRq+|x&zho&%$I8_$^JOkVscY=@5x!fsI9kIB3sttyO=T
zgi at NrNx#ne+;C2Rh|qZI?QfBJ;+LTd9}<`ffpTDUqeX+`4JN?tUeRwL=zI#7OXf9^
zIVkMKBi)^HxRJ1WK&$#2auqr_>ZT5UZ2bIyJSm_pByt0ZlFL*`WS=!{nPJ)zCq6iP
zYc^7(Y~&nzGc?3%qSqE$JdLmx`)UVG;hZmUEqst{)hteiXxXTbF|nASWDr{kn`&ZV
zlH~SW;Gtqe7173#5oka2+kj@#mkAW)5{l(^7bplN6bq$@f`*W2GnVZsNEAmk>^%E0
zl06v7E{tRc8l}PtXix6N>36-HjVEav=ey55T7787lXL}%=e<0STJMtRr2^fWjYCy-
z5LOA~kU&hYkNl;>6WrK at y?A58bu_q#i5q_YGFeXlx*fH`W at ckg!Y$rm)a0=or+cbN
zFT;V3YIsUQpoxxmu$Z}EI)(3p9!$9n<`vc^RXXUwYG`e{*a?y3B7%X$W2+}?qRK8~
zo>$Vo4Fy2H&4A^xC}sW$OE$rh4d}rtsvM%Q>Vd|ka==VYa3Vl&NZM{z&iP!pA|sd_
z3IGexS151O at 3~aIKp=cl{|BV{wOt>YK}!D^7(qk`!yR6XcN+a%e<gm}y+i5e`tkUw
zdL8&_^LB3^;t6V>`~r#gU=%*1LSGcVqykPy+ILilLqWldUglC*32VUve0%g%os5cz
zI6xFS^r at nt>sN|Gt3FE<TJ*W1fT;}&M!DkltjSDh#KCWmoQ6VNjq~Y^!ciNZ?I at UO
z5F7P(#$(yiydRkPdvcwb{^s8kliV4O3V&(<7gTJ(YDZQ)MW;G0ukm^t6VP6JU at i$o
zCX_e<;}v at fFMfRjc=%<F_LV|fUK<$LI}K-p?0Sp{a|;(8PU_V2ErZqvkL^KdWrA?2
zhcg&O&fOx1w+$%nOE_&nYd|w|4(UXx{RSArRRh{Sla5({E5o_{+K)mk0c{;Bh)41I
zlW+$<dy!SbLK~be7tNb6i4Fd|7a#?GndQJ(bW8*9#>T<-Ry3wF=b=`4BZoDI0q{MM
z?*fEeJR_6b6mh`~(N&HMAYmPxUoaCn<7kTTQr&s&aOZ;4=+>{GKTkv3cPN>BWNgwV
zkd=yIZaNR|!HtHA3 at HPl;@+^MeHJ8ih&*XZv&T7)ZWA$Ke5|6?+42&Zj&yvSrVej%
z;3Uh|q~|!Tp5e59DJy at jeWBTtq1M0YUhGFgK3@ndMHk``4)>5^-afwI+;S^oq{U4z
ze~8lN-cD|Su=N%~l}$09C4D;<D$gL4p|mwO3N`2O_z4I2WC)5B9`QsOYo%Z|*+Y9D
z%HYPuG|#7F82yGo`?c3mVB*WkFrfYhlUX!v0B~6jv0gZ+s5a`SKjl!;fqDn7PuVUg
zn!6Sqcsd~q%T#;e5#q)6YKY~XoL|Hfue#AaAv$T)$AiPKO((Uq$@qz9Q^Mkn`V~TD
z`rW}hEWMakb$33G1WYj_|8wA{>6xx?M2SPlRu+Nz))vizVjMy;SvQ(c2*%JmM#Fb8
z&U0<gk at 8ZnTaA`9Z*2AOZRTp(*%Uq5=&X;?MEiKA(OLg4oz)th at tdu%B`?$IWK$~F
zc2=$*3vKrr0#XK(fMDY6E^?-sa>87u_LR$X8_I&@U~<6iC$I155{QMVWgxx+T)Z!G
zc7n#F4 at KlLAh0<n5eEs<?1qAgfBPv-b;z7QA0^G%UW5)=3h(CZPk+9Y_X_v<lz!Z~
z_GFf{T*_M{H<);J7xA-9 at z#NdC%!=*xe>r$!NRc|h2IvFtm7KpxT>U`gJVjNHv=@}
z<^II?VGV!6Tr9d(E|0+jc{sCRkgu*X6u(L+zO;+t{*lBG)_kZrmMlG!FO!f&)5e38
zi at 5zCqSOOSUD|!lqHrwZGZA~SCHWRUKy%Nr`)@3XR<@|0O@};0;}Re!eO3Q&T^W<R
zqB-7f6v3EQ2^(#T&<)i_eZUaw$|cW)M!r`4&z<Bl)H|M>cvJMRzU2HofkmR-sWhm_
zPgMpOS`QY1h)2|aDA`6fH|CI^(TU9*afO}j at 0fUbdFq=9L9GGWbx9;R8uiQ(GIpT6
zA7#+^xn1}=Uj+(z&s;qnC0+$%QJ at 1;K>H5Co0bVDlan?*Ov92<<)Pt35<T6420Tmr
zj!5WPI$K14^^DaT;@xDtkB`|3rmSX>Jev6sBBG%2f<P1A;Dk?7yq!aDq#%VJ1mI8B
zAAm?qF)~GV=q7298aOlzrz3NeFD2BFS%HDI at xrXUEZV`2uBFo8{MydnB1ZPbt%4XO
zos(Ff>;H)tXI8X|7`pcZl5+?fa<l(^=?S~BU*MU5{xK!VQ{1|56b}m4z8AL9zXTdO
zUap@;-VfW;(<h$Z6nG84&(5`3;H9_XLx)St;~WgxgX62zXc(E?^b7Q+t(XoB&rb_N
z$v|ceMXEEyj7T*Xyu*ptul?d_=r#gl69dcQfswa|rNn*V!SoKToZz2gP2oiebCb%@
zf7T5VSALB{#r0&D$1=aCO_v?bbLPuPk7am`b(q`R((XJwF;~v5TgA+8`3a4`QGcHn
z1)g&}(7>;QibpXe;<hlTEoUxzA83)}??+)kTKrWc_yMgIkrDGSiLt?yFLs%R{UZzo
z!?wUn at LE_OFmQ}|3~1|1qUP{j#!3fgD=GKIX~>eDP32Wdhabf|LH{$<=0(N&^P<`}
zl{CZuh?T)fhgl7|sNCQdY5q?k5&2wbK`hhv<MxIg^t2%<;1m#p8I6fuCglZFenYZ?
zi7)(^Mi%meFA#3pUJSMJW_bcBBd#GWw2=g+9A-gIQ_urKP)!#>zal|i2+}`#pSpNO
zf0N;dWP at LSPAGSaz7_X1;$a;H-}7AK4;I(>I-+Yd!JJK|YfOvh3F0FZUgP82UgL?9
z3=;aC*kH&!pYrNPS`MAwa&bGurReKqT at HCzgS^`Bz-py1NMC#4by-PGW%&^r_wCe}
z9uvdtnLK&?`UJN=i8-gfdk7vDFvcQa1qqnO#GC^NTKj}#-cW`hmWB2F4K`h)=ONV4
z#tr#4WS>;`7-C4<qdd}-W%HRI17=-RG{HO=V?M%6VoZ0T6-cdmB6$4n7XmBj;MFSE
z>DTmF4G-54wD4F;Q!_~{9`b_+Q8qZ~z=Jfw(o-M49BZSjiy1x;&!mzJ?Mu*K`#iC#
z at W4MTHyDpAKmASK7`;P`2LHN at hr;$7PK_<EXj>v=KwJJtFwzbX(5^=jB_~v#OIS?%
z=YtV^8ZdC-KtXM^BxukYd{=siPwNA0qxKqp!ocPMS8n3rFL{xfu#D-1s5bj4)5L8M
zy}7#0eP;8<Gvz+|mP;3oR=mDJ`@e=D+MX#6ZR5Z^_Ku<WIc1XzkN*74hgxlFv)VxK
z_qfmCT{%4i5uOfS?E#L^=AB0}ZdAlK<EFVg??^|eyJ|O0$f4)|h82nGz6YpEF)&ul
zlzwy&g>8Jrs?+%hg-tVnWg&ny`F%&a3^J$<c#|xH!3DM9qKJ1OPQyCnkxgV<{Bmfx
z&IwpiKL)I{{0S<9>P3$ry(meTp65}NOpi&XYrzyYJ at -mN2?(_tk0?HRZwtL?J`nhu
zNZj>mbPeQ6ARD!t at Kc3ejc&XEip6jvj6m-Pm{%j1oat%Kx~T$>P$Xg!o?7!4=YEA;
zftGCUh1ym5s$e(zYD?Z(Fx7p7p7c&=C&a@)=>hb+_n$k*?;n_};$yIY|A()FA7*%I
zA_4r5H#mZc2f%I(%gbDHdv2rOdUl at fYkb$kaae~=(%}az)7|>gW(=2Xy|f>9wso24
zY++buk9O&-9YLj at 4}t41)S1_phbceCjT-d|ia>sC;2S)OR05>I7t}H4eF6bvRKMub
z(H66#qziRa=(|S$`zK_2FP#H-hsiqHMb>0f)?sw5U+04BHR^vwbNyBPXfHr0JuX~@
zL*I17AM8N9i_hVA3Mfg+4C~{GE`7X>ki&*)FMy{*Wz0m2U;Ewb at H}+~X5~E3DHBny
zf7cn?3KQLmjewis)@%(#U<UnKAqu>f#rm7Mgc4jAmSBtDcic~}ylUHDgH8Qz9kB__
z{H4m{)7&SWTj=kGZ~*mn2U{KAeQ=_pE8a9XRtts?cjV!(hq<sh;mw-ke(hUGZ0n#I
zV{@d)S8E05H%N#u1DgKpe^HtN_C`{GljLl2gdcIJ*NbtSrK#V#lkIXG)_3tO2 at VG-
zElnT>wD;)l4DJw|^pt2N63biBw0#9+ZI-h73R&Ly)L*0CLid>dSF!_XJ0OSNooUpM
zFpdr$TcuF!8T0+`<=};$;G`W^@%<r9ufVf%{ehD_7Ki>ews6=U_tmZ&XD%0Ub7r2f
zb}D41lfD==wkK@>%6w5{9IvnmC;{zRpkcv at 0qrSK8Ufx^(av{SK>Mk{;;UKO`;CwW
zomWATwjE^WfOb^k763QX|7zgUQfeC1K9u;$WP)1V=6tGUrvF6X(z$~Cm?ZZx$*;^&
zTW1EBYb5k1M1|VaX;5;0HUNQASLKbW+Cp#TXbLOmjj45?NDUxD*B(iQ9cHdDcaW8E
zxqW`$UI-e%f+zvkdPw<X77gVvv(WF?3TTf2O#xsF8|i+o`8I(6yQ8d|uPmT#5!h9_
zhSy(V!|Q7|?p1sVU^)P%wx=No<-ODZRvU!@;Cw+ZUsJ$N+)j9Ys>3-^d4F;VLBpdS
zwONweZYD87%_qft3_h$HU~ZF`KQji$DXoAoup3^D(efnqSx}|XkOp<RXQpraQRdG(
zNQc<oX$RRQ at EiwP&SR+Zji(j3i(a at Yd>tzi>LQK8qfqTnuhL+Tdi;OVcOzDV4R0~G
zRbQx^H6-Qa1*QBvB!wbA*hmWfouTt|@%muHRvv)13eD(6x<Wkd%z;i{N=<r_41A3n
zUyf`RLlyQN3k-%xvYW}9gB)6L&B3ANBdjfo1J8h at e?cN9?L-I9qpF<w*8i5j2`(rW
z{(JE>>cjYgG)~J0%(t}$?7(K(mn0i0WIe=CuCuZ8oHrIfQ}4j{UOH33LZ{BcX6(S8
zLOKUPK{|OKkR!;26mZZR;lnK^2qw^%PQ;#V4(zb=pt{Z0PJz7T!V^eQI~KVB_XbzA
zx|^9V(UYiEKNK->AvE+Dr*JQ#GO{cBcC+#NLJVQdmKpHAmtR2(cp@!^-=W+#1e2$)
zKn%Xf3Hm>Jv9Zeux;J(vs3vba5}@?U_u|_3S+Y8B6Zi)4C9HibVm-cbL at c|B<vzjE
ziifW{+X)VWU(i6uH>}n%usGz3^RaInhH-KviG-J=<fA!~o3#WiXU^ODfB`8g(CwLq
zZRx279j$qd`@vxlfHc-P$lAS!NxHkmw4zHNi;c=^Eoik%OoV*?L0T;^wR$bcTK$E9
zMXQf#^g-=$pxfzJD|DE5@$W%?$aL{w+Dc3`nV}~DF5?M+krM~C#arq5I;P*anCQ@(
zkOP>ayx4j0&>s`7yksXML-8{>@wHz?Pi+v?gIY2~fWH$$5#5w_r==Ha$FEuASpbTP
zFx^225Vp}*A*a*t`+!5PrVot?onzz!8r>&|q(`UF15B((CF!At9zD3k0*>!Z>+-C=
zAFmZ4kjLv2Sb~>sflm#mnW1^#y&YNy6Q3ktv2bk)rSNA}xv%O at 2xGBrx#aX~I%yg^
zp^9*>F4so<tcC~bIddlB-2iqi%p946tT_;OS*E#tq~ttP$$3J_rCpT#5K38<yt$W=
z96t%6`sIIwk_~t^5bvF>UqTfe__Qz6dFXh?g#ZT&Ov+%X@;n^qBC?Mmvi(MK08(@i
z-Ybyr5aVL#c{JdQp+hK$+twe79{8Xfob>ozG%hKAR2T8}J!$crG#5y+zU3pHt#lf{
zloL$(EWneL)OGw&PLD&-!!(O;xg5hNu^3Hx8NwC5 at 4>DBnZ2e6Yu7*#OrZWVYzR2N
z;xOz!jjvJuKbTF53A(us7s4k!^azyW6V2u=!`SX{xm)hx(QG4Nak*rS#yXq3p|m*a
zoTiDQ9TC=l9$ftLGHopoJ1dh`)(Npc>Y at GdE3$0f33#ZnKY~d4hn{fE;uh!LkZ!^E
zdYDMlE&8&0a^Ad<X4Q>;;ioulkXx`~4kXmZp=E;pD0NS#oF`BaZn0sgFo3v)xsRiT
z6ra*X{LhogEkbcKSsx{4*_>NF8GD3$mLJeQevuM8Je-B0l=jQTqz`@p at Ahd&L89n`
z0Cj{f(Hr%DK)OgK=>X$FHd*iYJ)`%2Pvi#VNwpiFQGE0mw4Q8!klcsX&a-J^2*Jd~
zT_$fa8HD<2dl)~BhHoUWUgXTT8ckDnQPW`Jp)L}7KmsDBPD4P}LhgjlIcs?wYl5!U
z=xGBh^bq8V-uPTa3zPENz0@?I#Zgy&ZSzBzYzLZRA=cB4zm(?r8};vQ=J;fWp9kNj
z(R-H~U0i`K^bcqrXckYRAikH#{r?hGHVFL=dWxg|_Yg>~;t|Oyodp)5;ytXDP at H~$
zTRT<*cF>^wI*8Z`K9NJDU-H3SJl9>erw6cXjV7u8F4Bd$<nz#{PS6-dv(0Emza>f3
z27XB4;28|y8^nHgi_rBOKc3OQZ$e|_8v46%54s9I%#g2w7q&31Rli%(szbEjzRR>0
zy-w1q2o8V6L(f(6nuQA<5j0VGBE)d$Uv^LZlTV0`e21b*@6Ft}@uipC4z;H96I?8=
zL#>yI*Ronr>}|ZEb*Qx)75P*gk0xkloCyRAOgzA*e~Mo|MPD2>pUa4YWEOcn9`YR!
zrb6OE84Z0kCzxBsID`%Q8i+urqUTtl4}U8RZ)c(B1C{H$i8+2kI6Wk!>KmxXDX%!|
zXxO6tGKc=4f&E1Yo2rk&ua24TKce>q%=Ujmi|zV%xVdkmY?`jmkWA?zrspKnGRc&w
zkC#lBhM4-&6is=>H$gIa^!E;n?v4P;?z%}Py6hzbtigV%;(IH+mj7((nwu=?!V>(J
z9I<<{gF|dme!70<FX$1kSk4djri_aiG7)v at RXRLbJ5VEEdD#RSSy$HwK at k*Mal=51
zI6%F$(t^UH3<^I$@pp-U!%Ia#4k2V9H-q>BSsB3e6qrnb$;6j#WG{X3jSD>sKU%Yh
zg})~J6R`$rk7Suw3vh%^(B;dYi#>OqYN1j4Urgt4`7FKDuD84jJ at Hl0@gAImU1H4#
zQy!$PJ(w7KHw_~6oMxUGoq|ZwJOO at z9;4iYZtyQF7v%<7UWRhLEKA=L?CgHKB*o%>
zyU3p6ivc?Tw+W7A>H2NQp#^RvXaUme(ag3P#myeS{GtK%o(n^XDlr&eMgU=%M|Oq{
zp;14MwTPQ$eC5*){wgvB^RJ<jL`-vUtHy*0>NFNwBOT{{<j7K7Du?FH!jrZ^<z_v<
zfehwuX}@0IL~EWSF&K<*&!(bji}N5k1KrIJ!q($%*_O=TG;I-1(o9Ywy$}zQ at Axw*
z2+=-K02e%LntOBgPkF}M>_VYk=vLRCe3|=ih3-5atmd{q(TxN<A7TIu at VD>4Lt8Zu
zdnFH>Tr(?`sPwKzh`J2aM)xxq0f~UmLc~aVaz%=ZnGjzYs4Z{EA`W=2zb+fCYG0(E
z^hBH28~wQlD3wdSk#*s2vcg8L8LU5mZ7T2pHNsrO2!ae9rw9%ys5b=3uXVIN47Kz=
z2n*-gc at n>xE57YPPeC$7ox7*HBaA-ikN&SP3D?lGGxM9kMq^LF5ssHaFk6hDh+768
z8(UJvwan{y0iYId^@BW(ZQ<Oql!he?NUsmqvjHv6nnm>5 at _K2*On=>UU}|5apNbdX
zJrrM_5UyC=H}C)v4D5L}>VQIx?){`!`xOEDvZ?sah_nRNxkG6Q3q77KQHyV-;`^o3
zSc&SFJOQl)E<hIq8}O|K7VF~4##K_S{C;%_(iDF3t-7D7b??KMtoNzw-luHKi)Z@}
zaL5UW at 7<8T_{9b?n1PxYN8-h+BQh7jcjoYb1sMunUUWB!Ux9R9)Z5|Qayi^pL_TvH
zMCM0(AOz8`rXX8Dws<tu`5Rab>%@3*^Kn7b$?>leH2m&_lhj1MN!MNqy>tXo{=JOb
z-0#YRb$b at whMB)wgl-4$twF~HkjT|L at KQI{Ort*aASM;pWAwY$@Y^Teo#H-S{T%(e
zmoC5RF#v^GsU)c|J#M2x at UMbA>)bLA({KJtDD!nZ`l22#T%ZcR=*30rZ|pGHzykc`
z#>OD8`eBq#TB;Z;4qfdf=FJD4E)c8m9I-2E`dHu8FdQ91@*so5gDz6sN8?B)F3Mma
z3`)g?m-`Igc*&PHO$zmbTdKQ^ff?U1nK{zDGYDuCQIYq>cb?iq$%+5PHFSh{wg^8x
zLH?o>*?JoK#XxYjQ8tVY)G-x0NQR(iCRPD86#JW=9gD1#CcfPcZ9~UQ|Hcy~jqZ=o
zkCDMkpVIF^3mh~-ZB>=_f%-ifrPTNxC*EHA9kQI}8!8S{X~>FOap(OKv_jg=J?Z-(
z0olLz2<|u-^PhCvE7Yxxy6t7 at Hts*_c3i}6U062=^1}BX!WIt$!WyvVXRws1T^L)9
zm2C$6 at _e@E4`QBPnuU>LV#Ls2gr;(KZjpz(MWUx#^n^&0j;P~GrKO8AQ_6#P(A*}z
zOu&+lJcqrHd at GppIaBD@p4LDz);QK&*u9v1XpX~TBeOQ at BWUBq1On9{QGEo8+O~$i
zrlL2JUnoe6 at vQv(>(pEja8U+@(J2)8h_|{t-A~!0PH(*3!Y`8vDec_|D<xvBQHuuN
z!m%TBlhD;{E~cXeVXPVF4urFuhB<g80?kpU7)F-|6xt{YRcR#cco-z_dinRV(zP$v
zC?&w?$E{P?fvX{ob|Su?p5}hx_CHdcU(M%Vy^7xW>hoS612%dQNSZ_lm_F7^BOxsM
zqxbo71y5HGcu*>Q=38n<RQ^IVIB_q|B!0$_3998X&v3Sv at Det8hTde%2=qPQi%hns
zFT|ECW4b2 at fAAlD8C{9>tltNA+!79equ|2K*P9Q<e5oW{u^Mzi!!M*X-$8hZ?$9h;
z+2At1VPL%fhMCceXvDkNkNAtyI2wq!S0L_d;Y%ErF=u?@|ABFhOWrcgt=9}<1C1o#
zAzR7cizKGu9}q5|2EF!5*sqs9hR2&T)9|MuzHNJ(h6?XI<?sZwS9_y~<zqVsuQ=j(
zMc}zaT%pgoNwc=$_m`&4!B6MFER?9eh8Wsfv5L>7O{F>~Z_QjEPj%|6t%2(!s1B<r
zZ3nnMnCb`yO4}Z;_oF%%BOX3-y(iTXdX%=!T<=D83Wse~T(?o(LG_hf|JU89(=4>*
za{Vi+ccXe1*FU8?E(Mgf46c7fbsSKXHW%05r+OmQlezvj)sv{MaQ$_vJE>0JEIpTY
znCiHJ!1%fTJk at clp|sIAR?nsVmg>09!uYxV1l4h8hw*d$7gUG&F at CN;M0H#?WBgpd
zkLtMI$N0H^57qIA0psWT7OErSVf<XbmFo07sx6o6)l~0C^(?O6Om#di#Q3?sit2c3
ziScv&2CCzMEymCFMO4ST1Q<WpuckU4$YcCSqA>qdcTv5S>r<&di0aK;A5ZncRBzz=
z2&!LB^#fcVO!XmD-^2BORELXV{9Nxz^`TVX%=K<mA4c^muG^@dPW6>s|JPlp52t!A
z>VOygkb~0ab6GIz{C5q2H|qPl&=1Qxo^e&O0QsjGX~L|ZI9bUh&%=itls+Eve0<13
z=|dAoAKdk`Jemml&;-+m{sswsc(DR@$o3K_dqxU{$bsl%^h*ndKDum34o at GWKU!e)
znIjdGYASJ(|C{fHKIxK94n?2Tg94HR(T5zLKICBZNtSeD9LBh5fzc=9Q32(!6pyTT
z$no>a1`Aw`?a?F$1W)6-VFw}Qf4`qJ8-|Vl_tQ at JwJ~S^iGH6+fB#Q-iKoY>zjJ+e
z;73iEuP^@GEvFkUO!*V3eOK`}{$xT~_FqQbZnWR?KWzV(wDhS3hb#WeQ#a+a%Cr5u
z(RBuWBK1%HWYytce+m9$a?t~SMHALPlUqk_Z*3c?k0?HBfv5$d7KmCPYJsQ)q85l+
zAZmfA1)>&+S|DnHs0E at Hh*}_Ofv5$d7KmCPYJsQ)q85l+AZmfA1)>&+S|DnHs0E at H
zh*}_Ofv5$d7KmCPYJsQ)q85l+AZmfA1)>&+S|DnHs0E at Hh*}_Ofv5$d7KmCPYJsQ)
zq85l+AZmfA1)>&+S|DnHs0E at Hh*}_Ofv5$d7KmCPYJsQ)q85l+AZmfA1)>&+S|DnH
zs0E at Hh*}_Ofv5$d7KmCPYJsQ)q85l+AZmfA1)>&+S|DnHs0E at H_<z#^>GJP`bd|YI
z{vD9JBz#c9UrBgS!lM$tBjG0!ek)<@ULpAs35QBJS;DyzE|suE!gUhfCE<e-{z}4w
z5+0TC9SJ{?@LLIEe<}NyaHxcnC7dhaQVB~WTqogO5<V#5uOvJu;ZX_Sk?<1<zm+id
zSEB!Uvu96rrOzo|Ra#Kt8aH9g_%RuyCk~e-MaeF$SX*2@)s>w+$2Bf<OvacDrLe4^
zVzp~sadk~;C7LkOmA=O7t*V(icI at g>?;78#F@=@oW6Mh`R+m+JeKn&ek1Z=(S3bI`
zy7K1YLhl&xxF!~lA3tt#@wm*11>;v0Ok6dk_=@6*8LK7~mK2N|SDaBeY24(3$;CyJ
zhbw#WCu=lC<v$QJ?4S7iG?$)+>YAn~Ke$?q!ApO2Nq!t3g2Vn!pQ)%PIO4v*A0SGI
ziEA06DCv#_)iD8ob0xtR_XPe7Pl6gdEFFJvXBGYgP0Y|fBrCzD(ckBB9Kv7gh)Ex?
z5ar=9T4{w>aX8UO%!o^7vRLgF{23d^ukpu&Vn+9;o*aAaDDUdKlggv;N1bAR(x1w<
zL&UGfz6$;%Dql)}uCzrP=U9S2D5AcBzrLeQh`R#>MQwzt+T{2bP<E)lgi_iSTuD}!
zLQO4`E2*kF29+sXaj9D%SDVU}baf|m(57)ELwy#12}+yJl}t4rf3-)O!Idnv2P~&$
zamAxf8HvhFuH>q(leAe}S*G4G9+f$llta&z>dm82ncKS>l{M-Qh|R-VSE&yXWj<HD
zs(LvpS9d2D-=NZ8F4A&(k`XtnPg9!(&Sj`<Q9q7B<yyyjNUK%v7>mk6=iR7mQ;(Ak
zu1`DwwjJtZ*ipN&&rVQwsfTGi%lkfz${zJ@(rpE+vrqk$C^yA>(B^>Z7=}uIH`oY&
zLwqzQTU*JxHK>rRXsaB1AmE7NXn;PkaedzeazyJ;P(~(Qb`8vIqrX6ABXm!iF4C&k
zR1|<*iSlLZVPo5ND$R%GY!9Nuj0X(HUW%;=+=B^Wqe&k8Jbv`;m!>G)b|z6d!J!qR
zcR1&F_~T8szXLVW at fY|~Txzd;G<DRXkGQ_Qt5Hts0M+piIAvVF-gSgfL3Df!caH1d
zdlw;k0 at 3>fMwhHQ?K!B#K88OcruMKW5Jicdi9gAu_7XLRl0uwnZ~Nt-jVgna#l_47
zm!oIwR$%(I4MwHkJNT<(YQG=RpJM8FIs;|J at h0?h^l_4rlZbQl7ns8=hoi677X`J!
zfgc|AGU`$N6U3_5aK)i6!t|;O)E%HCs}Eq_)N8qtsy0!ZC0uc-`K0qwl|-kjk6^s&
zGBpvE47G~d+ at KCeHxtzzFr2!aDVa*ovoH?fd4^OaiBuUwia7?@A3$SA(io~thQm89
zcV(k&TZkW*{s9x7>KKxI7b+ at St43vGscbACR~+hgh)~z7S>Q at m9Ms4$%uWIll4I_M
zacn2i|D`?fSCTT~Z%_Ug2~%D8i(MO&Qqd!nM*H~9Nu#KHwFCo<-*V}GRFc()VU+l-
zNw1=ks_uZf;_puS6DlrsD^Y&f|12u$N+L~m5{h>I(F-NTHVysQenLN}M`ocO?8K|s
zE=95TJWP3ldWBkwN^A<&zB)xsV0tWD^GZ>RiQPt1;8wd&LmYA_i5tLA|Lhy_L$Qs+
zPumv!=-ob=hES at K_OZ!nXjEYc+(C1-UJ6uf)FtagV`H79Vo#$!mUOVaPAoJTXTn(Q
zTqV40K`v at L4ju=YIQ~cWM?mX46KgvD<#dwN_ghR!{Gl;v(B4LK+4oTd*Z9K%K~vw8
zX6PD_<r+>Q%czAajVy%*rS4aGfP=A^v(y*VzkxS)KV+*fs?HD5Sc&bAD5SomCUt=1
zh&=;U)R)zyc>KAs<k+u9pw=L2sj)Px>LE307-+6o8$_y2YEl+z>9Id1|9(yFR)ktc
ztb=5}q4wU0TBfiUiMMl)Hd2CZNS!cFTI3spKs|&Al9~i$BDpd3$T&MYwQUsY8Tn=t
zE|L9YJBk at LH#OdXAN0>o;Zw0)hwf~psHc#5)MIKP5SRQIK9ib2TUNY%a}zNF`8;Iw
zmB_5om<2-i##Hr_$T<?(lji9|$Q(ye^_*Q9KM?+DyIgw{xOn at XH@K-XA(8qXHYnb{
zRd&%^MX+?)x~o^B|Ja|A&I#&ev at Vp`L&Th at _9Bvlo!XY9Cem_AReCM}lK#mcVIyxz
zAz?PB8Vh{VV*H4CcPRCz4x~!FeWlbk=0$`(Te>=Mi_oq~XczM{#3WmZ+E<0Fczdfv
z4|Jp<$ls*$kdH!;o&HLw{aO5&s7x9R&*`3NOMH(A9uhS0cNj(YQMM$ieM4xnyD<J_
zJG4)5CteZ{4DBW22gPbGDOdD^-MW`@U!x2rW#H4WefN89NiTqLwu#Q1?SjH<)e)<J
zYFP#vK8XS->TVm2V at l%X;8~^iAlG<W@(eS1_Mv6BrPmNgCNJZiW!)B2%`Iwcl&LQa
zfq<KYfZb96rBn1#clWsoMq8-%A^U%QoxnaW0H}Ew4U1o>ju!%#Yj*T*Tc}<o>dU&#
zsqredMd}Q4VB5}I?F=@4+hR47*Z)pWw*^$o7Tj~X&&T$wCXm5wJIi8T#Fl2uQ+o>D
zl}ev}N$^2cCGPu|3N`YD-$I*--H{QnkBw7jaO~Y#ze%HLX&bMOB*(JvJg|wnm|%9%
z{c5T?MTcv;!!{Gto}yM1Ls1g-zM{S|CYAheqS}ib)3(!-dP1rYBUR{*v1B6VVB&2%
z=cdk-_S!1#)qS>No2e#CL&dP6W~rBm!R3OfPm)Vf28pS-QOceo8>_qT!|=K-Qf!0N
z$rN#HJD0KP2dT4!#3eMdgVhP5mK#F>(RR5yh}zk9u2F3HP`l61uow3cUHmCe$lh*t
zVaNVRUG!1MTD$0 at PLo}bfl|e`f%zd*rmDRJZH?%#uhAi9>lI92FVWY2*%!Q(KkDw;
zvaeohhUjYz52u$pUC1j^`d^2*|D9STn@%^IK8&Vu0mSC-Mo_GTCE{q>znkF!3w$hY
z&v5*S$q_;h?M=WcDrZ(?i2e`3nZHtdEfxY-z?k$=cUNO^vD~l5kzD)EZJSu|S93_P
zedp#)EcxqkB-y_6>>Y8PgB0boWbU}*@~Lo7j})6G#eU<YKQ9ZdoGTbEcP?VM(m9Xe
zn)n)qp7=W$X2tsf?Qq at r`?+vnQ~b}kuy0fR6I|G{DgIe5{A^Qv0~dB}Qk4EHu#<hJ
zK2M&6&-Lc8NGl%JXCuRg_1TqS!}@%rF)SWOyOd*$<BR{V#xZRjQY+g|)qV_m51?t@
zIfV2cKy$qF3etH1P4Im~NZ$c81@}!OhU8P&*ngBd8MB+*0U1B#g_^t*W_g4|Nb+`&
zekO{SVJ+_w#l9mI<>%}j$?ZcG<<ahxe<UBnqW&+De+^lTMYE1$V4Sqd at 7TuVG-sjZ
zC4Ynx>t&c)qYQZyG42Kq@&m6GjJnBR>cni&P;R)AG({Y_<j-h*qv4*erPs_?mUG9p
zoki0>#_GKVP2%mjSWWbC<rJ4IYh at 5xru1wAjyQO$9H1mo2WfZ1K)Gb9#A~Syk}3h9
z at UKB<1#%}*kfarnHVoFdnri>OK=6gwPZ;c1XBzB7*N;+^>FVo}cbqADNU{_?eTo>{
znm9VG%or_}Vo at 9=vNL9i0J%~b`nW?;CSCe#DTn?lF at 4nCxg@6tre)F$(XveG-vU7+
zE}bQL*9unf-VR>ZVsEuF(n&im4X4NZ8Hy6Lt24nAFB^p7=u>E*@%bTWXUF0upJN-m
z)y`*#y*Wa7vDwE*W|LbjO^#!GsIhC5R0U-dn2|r~?p{b1yDd}H8vDq1rCNhtgLnNv
zG`LkZkaLQ0%#jU#U>|BU=<xv at V}(tn?CwX|Lh?V%9zI0_?HQ=8uCPs{3dIcVpQC}e
z$u^QRLTq<2e3HmV+69-RJ(UjvD~<Z{?n`s$Ai1{nqy~sm-Ip#>)HSx=UqGO3=gQQ9
zQqgN<zcG9kxf!V%%Y#-nO0#T~ug{n?7M;(rsUJ!1r%h#l35U|?uPuW-R><}U<=wW)
zq`YlsmPWp!&P758(e|A$Y|^-|xi;Q?Xmr?q)Om*LWxV029vi3p*aTvJ0Jl`HvGozD
z#>&*O(q>Df8r>IQs0$3$f$cF0J4}X+^NB*KGa at N})ZHU6IYP$_+ZdsvN0 at V5NC!6O
zc%v>hL3M(m)5_F)q}cgVtgzo?Ly6_s at F%2W!P<I~RTfI_(DGYBO0eP5Y*WM>!NFgI
z>-7^&Qe~5ngYPk$^s`MBwq6!<2Slp<4L!@0L2qNil5E|`*6&>{l)FmmsP6vK6p_?L
zgwqs(-Cs>MYS3wz3!2(e$oS7lfoZ0|A#@$c!_aKAgidHOkRp!CI@~9l3^tprrY7tG
z|E<csyiDU^oHgoelq-KrKJ&SdVcaZY)$m8%E!uysW(aRx9#fCFsD5E)Fp6?-JbF=7
zM=H{UOZc90Hk6`!%8z9-`~@sTpRZuB7;zUFBkm$&<XxUh^7H<LEHnY0b<GX_m!
z#Lc9QZYFK%11160N8C)>=w{M3;*#ma<=~r18{JIWM)#i$RI0=NQ=*7F$T%w7=(5S4
z+G`=oagP&%Zk+6WdlwPnc|y>Qlf7T>^@MnX5Om{Y at 8A0#LYyE(3j%J;4cvw8ER at m)
z^yHRbVr<%=p4=#f>^`g~^Y6y`&_;>!gl;Hja5<R<=SKS;q^wivo24y`*AV8^+sJr}
zdrSgNQLh_`%95miqMWQQBT61udaCevMO&JrfvvZC=`d8TOS%*l<d!2)S(Z2)6_<J&
z_;9gEm2~wI><`)v+$KX^0`qA%vb2e62k6>zu1r?bNZJanWU3xwyNN4P)u*ueX!%^3
zuAYIdw3S at B5?L(VPAjm}km6_ at Ju`oAqgzDB=U51TuyLn~V-dpp3!)O^xXq;~FWOi)
zhhrHkFWGnq$&Mvh$S;dZs^ccupuy(sLE~{uyIfHYiAuWTG^X#csAMR;#-=ICE4E9}
zXB>6hGod4<kra3rsmE6_Qh|@5&DWw5<G2 at db6Qj!O0Qa&>YJD!Q+sM>qYL%eclyx$
z*!SWGoRlsu;cIk_850w;8j8g at Vme@lm}IRMvlAmO$n5u_y?p?*>(^i0HIkFY^^B!I
zZlAz+jR}0$n80_93F5BNMt6;IeVh*xFL4eKca3p<wGU9^yGDmc)j<|_jgD)$BJLU;
z3)Cgx5_gS`Yq=us8XZfxBJLU;OH~pr?iwA-)OR6F+%-CGP(K4j+%-CuGbK|=J_-iH
zv!AL;9I0|CDHb=tem%;LxUcZjMt6;Im%EZdu&3ZhBHuN}4VjNJUo|>vR9X)TUo|>>
zToG4|j`eB`xRMncwTT-h+7H5Py5c83NbM=ti=X7|1E8phSX}XwyU`BsP<sqU<qEDO
ztFtjX at tJW|;7Y|I4+7$+*z+L3_Av>V-upKw+kb~2m%Ra=V<^P)k4`EPO0mC%Vq)qz
zs1tt`q1EGXyZEf0zd%`0pThPSKQo?Y$f4LtHyiQB&*FCW?|`tMLtmP_p`++*ClhG$
zhK>;0o8VB#4j{W}Gl5XYiSl!_!AwY`P^EnUUr;BC@>GmOog~Uda8h-$D6gWnSM(so
zwK$kV%@p|W2cSGfl)r($t5Yvw9oEC$)oEPrO=tO4@%H4`&={ZILr^b_x2MW_()%>*
zKWSvke}WVrPd{h^<GIRHX at 3^=q>mh!w7Kz*lN7{2W>S(KKwsUm5~%$|!qVJ{A2e~w
zz}r)y%VPtG-s?vEz=uLSebn6_qeb^e5)|dJIn*y_WqH(KU;iFx9s6q->hTofLb?@e
zhYviFLdO at J1Y(CJE6T6g2au|{u)+Q&feeHU)tM_hS}i+ at U5+qwF!fWGvoba=UQwQt
zwPmqR1i?4sNk7}pInaSRw!e)ZDHOVQ5Mjd&_<_&E0zmQg*tuEp9V1C`=+mA0*fCf1
zk=330*g1x3G$`)mKB??-=Yvw-%~D?M$jfm_BXw97yC_Xj9!e0IZ7%e<3X<269uHqH
z8hl{tk%T#6J=Tpg49JSCpD4OMuqpNzaODk#oni|h>lP<Hl0nAmJSzpRHx&6jm~T&_
zNk at _xI}KaH#@^%yWPUd`wM~gM{kEMrDGi!|x?18SJ-t#6OvxX0cMd65j~ut;GBJ=f
z-G56pnc=Tgx}Ak>@`uqnSuI;9nytH?#Uw9RiFm{L#AMj^y1{$VL(X|bJNZDj?=uu-
z$z{7x%sP*w+a;L0g-o1qKJj}*`~^%LdOoog#A}$?_k3dcNL*+PA<HJ5Ph9Cj62QcB
zGF7q+_VjQ?nWfT+ at vHNRtFRodWTKH|g<2|0DdHd_8wy({aYl9zN|ccuUoMRaedt3s
zs48uAHu2=xE)p at jNXwiKyU5n;B3rYI{7j|%%r2fB+eLnc>wlocljCHOpQ)6e*~OD%
zyU5Q}%FpcL$+7l0x`#k|LJTr(spy<GSe4SW81YO{r3@`bJQIw49W7MK&|<_h!PvhN
zf-<xi at k}uG6c9Z^PxrK*vFXq&o_E}M-f`o3$Bh>|u1Y(uCZ6swXHT)?YJIgQ(azQY
zU-EQ9redRKd)H9WVWTH|3nqe|Y at _FT*HSUnMo;yYP|;<hXL?Ji<8&K6(OdQpG|RA2
z9)80gfSqWgr+Lc>o2m4A2Y|4>r=p-LvD9%2si6(9PeIuc+kl at c?XTM9t`AYx{*E7)
z at cya|N$yE&md at feG<d~EPx5?JblB)Q-ukz}oUEwCt_`zO(>`~>CAF*79>irA8H at HN
z2_{)F{}*>}9$#g3?TtVCdCorPIYV+z=8=#vCCq^^lRzL0NeB=HA;BRaB#??gNy6X&
z3R<n&YSh-+qTtY0Z^7E>RsmbB+G<-n+}o>dZF{|M)ehDU+Sa!B_V)MvuDzd=6Ue=v
z_mB6l-^nM>+2h)4uf6u#YpuPXeIBetksOjX>Q%moFMJ~8#SP^%ksl%FU1WlsPnSd<
zW&zHgizQfGT84OoIQQ>Eg;+E4V~6;F;6xVZ(k4 at jGpAF6C0|Ye<<sHkSz`&ymEKT^
ze$N`U{!+%cmu|k*F{%T8i!(3EmLX&P<<5K?ZVcT9LM`+kMUFT4)x)9c8Q2e~Ama2~
zhb|rOILmDGk;DG77H7G{usp<bFEb51Xuh1#CxOz+Y*GnA(Wg_XIh%BG2QTq^o#s3f
z?g-IS)>c5QyulNP<L|R at IH3H5Dxh{>SU49rKwct2GnkkOiq#VMGTXrv3*)1Xm2pi~
zQ`A=wn_+XYj>`v at B^t_V8jHz0-Qc#vDPN1I8aJxa7KSvpg%e+^#A?fOsq>l{_2C-S
zDh&rhq25#i0_(wlS+wU$XD~?jjwTF;<_0B80TA>=vfO~ah-9(7#x}cr9_2D%r at giA
ztXwdYT^YtxM!+Z|V3d(N%E}olTa1tp-$o?V1?X<BoZ at k1Ub`}{U76Renb+Yeu%Jri
zuq-y~?50+PECw6sHH+yGMSqQQzWB2W>jnPcPA6K4j;Y)##(!XIpuT+6G3SP)A;gzJ
zhzcRZSd1qL at vbfWep@;L=^D;BoD((Fh?*XcHbe<s48T#-(fE1^%aNU^AqaA+F;-!F
zWM?xA7~+KOksVH%usy4 at o!N%;VM<(kR;SVr5psxHTbMFd7v~Ki9RDg4C}?#_{>@DI
z9up{Nb!q<HO!yBbP|)hK{7*CC9VXBe4sVikK!tJ;Bk9cne`Jx8IEKM8P8Q`6PGK<O
zJ4Gy(?<G;H%7|&=3d3k8Qu1Xu^JO^mWjOQga8gXeF!}<@##wSq+Ava_R20*0v-)pj
z8$s=^l86!2?izIfb&Rlf*Gj~QYwVLT#|Uh9gCb}nvfU2#Hh>wS?QT+3{*2gmFOi&i
zPU0sh!1Qb*xZ^}+tTl|T1tdRCQ#AEF#%)ie;w^;T!YVwDDj|&fT~NurK_b3OZPUF`
zA}RN7NLcp+5-E18VD7j#Nu*Mi6Zd9`)VRl3?1K`il_kZ!MI!UuS1XZot3(>z{7H!1
zCXr_MpIPTa5@~m5KsLI!OQgdcI|h+KiEMVi45ZyVC9=Z_vkQ?buLfNRTRYDKw}gB=
zQr6C^M_862w@<1$vJklg5;04WyI;LWia23w=dnKcluLiqNQ0DEeg3R_2u;NN>?Fh3
z<pvr2IkJNIF0DR)u0&EUtv-KVq#31(ozO9q9v3DUf4;W?kuYsPzdrv<_zH2mKIcDB
z@?Q~9@}Rk<nB;_hh+s-=KYuZkUD|$rWA38}J1%WMe at T=~=sThNkQQcHf2k++Zil?9
z^jBU+arxz$NN>(#*l~A65NS!U3E$;*ufHm>6*(#Q6>xyRT5^irud&WriImg10DNR#
z60YBlWg0c)$c=x^cM*0~CDO0Wej8!O<%t{rx at -mU<GVcsdt}sAh@@Pe&G2u?z6+6J
zmnUxgo3igiq|)Vy8~^q)o=T}PMEN;jDS7;oP(x!eS|OquVv9mIwqU9C4$=zc#LZl_
z0LfW&ljFRN&@zkK4vyO}63XHRGEUp%KneAooE8-3zgmNb6AI%QT8BrWoVMvzL_CX5
zVVt!wz_^Qyqc#G}39&IjhMf{*EJlYBA1{SI#v<g==Z6(h5 at ourK|vIH5M{z7t$&x-
zk4{Z^la)BmPVs6C-q{I%KtkwMJc`$0VR@>CG%3Cg!LQUvb7cMmN2`how^{d#NSdvR
zy(?nJPAc}Xgs at 9S<G_bql)P5JDlOQ7XViPzCJL-wfK^Rc{}}Cf%fbHTsY{WBV;4aw
z3fsGa7L$&*0DTx$cGMJFjZA#JX_zY&LawMc?nOz%0U}^gi9;rjSWt4HqY4R++l1Kf
z!R^yDCsip;b^k>PJ0OP=wl1Uk5|-Ir_O(j1Bf*+2;DN|Q6>ej}cToG>hhz+YI3X6y
z<++RsDSibjuVrOEoZRn&Q%fc1#&dEefo%DbbNrl~M at e_ddGef`AE0MZ$@y32q?sP=
zprcum^Y-wZ7>&3N*$0emu7s6of=2!2aw^8-#SsY_^;UvLy_KL*pxIc=D9{X+QdN#N
zWRusrF-L^y6p7Bmu8uSDmhm9{`@`2Tk7QSb<&<uNWfh$))sCgBQBIm_<#gV3C>gP*
z-^Ut`^RW4XZkLQ=i0EADP?HH$_ULKgcc^*}gly8&#P3v-Sk at c-%b^I3{7q_{$^ZQ!
ze<liEta9=t|Bk~>=vzogP$-T=l1u^DDW8t+c}hBTu*V><5-swhj-4f|5D!m{vv^z+
zp}Ov=l_U=ExF$k<J*1|a_+PG$^a7$*mE;R=@b_0oDo{|Xg(m*Xt0SMOAy?Y`*RGCi
z!r~BC^O^4sI+5qVNf9-HO}m4B<R!EoQH>@y71<BqzNzdE7DqOK34ArJS?X5$)6ub*
z%B7Y8ec0zBod}|v{l8R_cWiElPrEM}MB9BDd^th1+2 at j+7epKVr+`(VDxr$t4Sw&C
z&n3T9iOS>+zHrFrLSL$C4Dp{n<o^n2m#K(}KXJ%^6>XQP(I)=*A- at 9PXRDlN&`WRd
zjzfMFd+Cc*&i76H8i;dD4jC*aS$QS#{|Mp{r{H<8#2?Dp``5eiz~>|83uE^nbXv`^
z`@=#rbdMa?r0qKmBrUBVP3pZnoz=a;V~0Hs?4K$)jv$`LVg0j>ZT2{*?<LJBba))n
zzt~v2#{vDTjWv55&cE4MqsQU<Pl?f)=5hG`%SInR?2LL0llDhMV2Q>5p)~%5s44jW
zXgcwSQ%lhQ at eIQm?V9Mmy1<~@tcmVVY^>4yGz9xka|ptPuM8&S&w_qAA<FSlt5Eq6
z8(w+2Y4L9uS$@>976>^_0EcP`fOAh;K0M11?z+Qr{OY;}%khVjEzb3c?WhZHrpI;g
z`lN}i_v*nWM{=e>+;gYb<05-B!3IeGNrSfSL(;P2Jd5U%>#lM>nEDTaw#>=<@>Y{K
zV3rCe+3Gx!ZE|;b&w=S4E#QLY4c>j&TMFWyw3+SR)M_|cZLBSC&o%?+UfYy+1L*ZN
z+fK9Bh~%#o8MxcL1`y}j!UW)g>c|mYs1sOQJ-T2E3hWZTdtr+Kc-VY_e2)a=+tpy`
z-<<dFwvhdDk}YeUJ$dAPF}4ey0T*l(5%lfN2F`z_!PP;^$!KgGV at 3mPOs#X{LL>OV
z#@y}P*h=Kd#sq$uOe}1+=k2g<TECv-T>*I8vbPFH?eHEz%ia0Z<mh_9VfSxCYO1zT
zS6Dm(jMcHt0Um9OO}BP91$#ilC5q96E#H;K`y|U#$y_qtvad9~RA|Zh)s4zcqA%e9
zj5FnjfTHGRebqu(od)D3Edl0Eu?-8 at xho9V&6+)$S8aOKp{cOWn at 3`}gX^8C_h^8f
zP{nv)^nN=HTDGbuG#Nn6+Jy|NUMgBOjwvLnpmf%=B3TzaKG7n(Q#vv!c3RrloL6B{
zzQw}zcmixnVwz-=eflVg9OXZP?|iYt`;baIeA^YK&Px~oemc?Di19W=jO`sU#&yIP
z<dF;;+ipHbGHh(S`CMS^buqQ==5r*&)V7<?g}%NIO#&p{n^A_t`ydeA at 0J{8*t!Fn
z5H8vVnHGwx{70E#&GHKvwiY=jSM<kBuon4#CcMQ2Ymt*UQF66 at 7>{Bx#luN2MfYKj
zF~)`GbBry{u<w)%+nC&jqS<19XN&!vE%tZzaQmCvUQw1TP21mpMJz=7JKU^%gt4}i
zBeF^&eu%Ep at EWxTIjInxrQx*_DGt$H8eT7v$`Bo<;SGwQYeHN)!yW290IQXw9^p+Y
z3IRGR#8otWiR8?4%HAY4NG~T9751f2JJ^_{MDwHB$PEnEDG2KscqFaC+Kq6C#0mE)
zp-za at 2@gob57BoT-mmBcN;w!|8mSRuq$aJA`b9#ZxbSBu8HS-_jMOh7?1!w8%1A0?
zjnqAe6g&D!l&%Pj)ILN4BlTYp*4!9LaD0D{fGdx3wBj<!(SJf>(i*8u4p}4h>qvJ(
z)=1?@`HtpWH-VALdb$b~^mmY%w5H^pgrF)>`r7Qr5ysI5JYh;c$FEQi=mS&oH;AM{
z)|AwkPsJf?N+uDh3|UjM9+4V@`lnFCmB(igg4>9#&qPqOMd=+|uzjL!o-3y0PZ8q3
z`+x9o^ow}vU*M5T6H0#vA*o9oq^<=(m*{BHN5_zp;9$=kR>YMk(`}7haEQ)FnZWX!
z3lQGpV1Yu}w1k<p21W4kUdCEdnp2Np)O+0~W>K~E at 0I=0ud=17sBStez0N{ioXj8g
zka9z5<ON4BLFFu}TK+u(?DaG-DK3SwC}{oNF?KM7plNJ~C$g-C#=@mRzLRA)W;xuo
zOcgG#q}>(?s~BUxv1^EvzqyijjRcKd^D!1MZhZ+FyGDY>u92XzYuIPs*fk8s`mu(8
zxt#bsvl|b5q$BuN$ChL1S6o+~h!X;|07Y%<iD^Q(!FEM$>&Z$JYgSYapPVgZ8*Ee+
zAkXO>#;EcsYKNyMndsw(71hJjO{T1)s2-k?ve5MvwZk(LO<qdY=Ciq+4$$G8*l&w*
z^k4A3#o{}cNaLf9(ViB3Kex!@E44qLuAN6K?PPe1tqFxeKI+(0tVu24WVNuz;0}Rv
za-o5PcI&{9cgRre-(_n3I$ir47$~94pwPk_eB`i at W^e^bLmf|ObEl=o#|{f|?wn$%
zafcz!oy$%1W<#92Y~kw;3w7?Q31~&?+|_7ezDN7yBe|64R3=I>^*)*)zkpWWYY++d
z*jR^0k$kT$+3wMBx!>kBdo)|_uQBx+JsK^?BaDf%{%R$nqfHdbQ578rYG3%&m8SpS
zG+!Y91}qecDD2NRpmr#tu)oU0Hp{DV`{$Whha&0+Y{_;-gbs`)2y7E6B6KimVvULz
z9Gqohjv{(j**r*2f*W&;I9(~?;6aO5JdM}b-m%E-$zjPJn_HjGeS%nz%0kuxi<wt5
z3R~KiI6JVYAagVG+HGYhNb*s~_)3gg57al;nGx9$U%qRbvw4MyZFW-hh-_lz1?N?s
z2{TnHZ(5L9`C=Ob)6q4uUYIUqYtKnHy(g%>ey*wAAx*DuHL-RlMwiQKsr`kWrW%zM
ze$=sV2DMkuG3A at 3_UaZBYxMSF+OJ7GgTk2h-Z+q8%>)x`cgB at h0mh2aTrh93poivC
zjLw-Q((ab?GAD4LNU$YKjo2^*TWVt<7 at a=zNw8X584^c6>e%6+^86*Hvgz^y8*3M&
z7h0ru2+|8J(jX??rxOLO$F49CkE9{zfm_7zom64b62o`0jcpdgcS_O{S`6Q*Hf9Xp
zX*OmI-|04H4BuLbr48R1Hj25F_u5RjVMcwz;**!gXA$s;x36=?HPs^x2BkCpady6P
z)GfAbPP*&_IsjF<$izUCo{-LUrb4t)?QXz;hCYNx)sv7GRJ&(bNk7#V{y1Q|M(uWu
z+U**(+cj!8-ofJ5mTOdPZPaVmsMN@#{v3{k1mR}yPBfrA_DH=1iKWzg5CyLKJ38#C
zI^Yyii@}3hy?|E3>g~zY!LNXj_0^v+Wuoc?ST3fr>Ocsw3Gpgj2^}{vJhRmt5Gbj}
z0`-)di}{$Nz6CzXRaB?)ls}Hn#$`$D&#PEDT{f>m1Qe+zlq^>NfVeJEk0Pa1-3#2x
z)JfDTSN{$Qk5W~&bZ&kJDWjD;8ak8u3(8cfooH)}+BpeZN2(VLJWkaB+IY1Fb76v7
zgT7R&yC67fR6puYR9B(oB(*06Yf}9bxJ^+HB0N=11N>>~6nZ^fEgAzhS6fkQhWZs+
znW<h!dY#&glC#urf#GcRA+$9|9h?R|Nqr0{^VCf!KVSVCL$N?Tfpv7D+6Y?Js}BJ}
zz4`+nG^i$EyGVTy;l(P6QD{_?(3d5u6)i4RUBJ0X-8%z2+Ug0^U9RRKcZIqWxhvIe
zpm4LAgH~Ep6!W at Otwm2)sZS!eO|3 at B)#`q<yGFea at Ykww=xMte4Gb?(D}ech>L6gQ
zQ+cShUi||2U!?vp9;Xu2CWJStk5|)!xd|9{s(T=#HmNJ{ycjR}@yJj)#_m$}1>km>
z`Y>AQQlG<kZB}oCf3~Q<VvH_V9|Rq?s#igQZR$gS)~(JWrAOU_*0-yTz<h^l0Oq~w
zBILeL?FJ`Yp=P1QooWL(=SuZQsE at nUS3$Ae>TcB9qb^68_p5(H`d;-zwAiO!LGSw2
zt0*&|-a@<k)CYm*esvGv98fQzj|Wv3aK1`S2hLZkD}n7b>LgOGRbN7X52-_-*kR?P
z#p_fQ_+PIMBKL?o1v(s6XTc{os9NB8qxu2({{yNAFmF<g!1-pi4b=OfY5{F;Q4264
zx2l^_{x)?Gbw8vY1y&zcf5#-dU9|wh9qJL_Jg6oD!kuayX3bsdHnerOI*2L%5%vCB
zXa;H&O5UTcLN7k1DuC6!Y8`t0an%PrKcT(_oR6tzK>7PrF(BNp3L!_1tDhqMgt{K^
zA5fd4j`N^;7nFZU)dRPO)fmj^PpW6p_fM&MwDM`S9nVJ;Pc}WOK92A|sY-C*XVhx+
z;-p#x-aDm^0or3~FGlLKigM?1buaq$IrV3Z<LA`@l>CCa1~9*<u1z`4msCI6{b%)I
z^zO^*G|E4rE<)>1s=460)9O-`Kck)j%(LneQ0XbvfgXKDRRaI7s-wW+Y1M$b&!|T9
z`fDnNlxNkoQ*qCN$_GC`ul7|t&ev55<kC0P3_yEJT?5MeM%{<-+v;-U{#N}T at W$_y
z3z)xGQI!0HS_3%msM~<ayXtY2{G)mkIQ&Vyh+h0zy?`FQr+x!^{zd&1<NH_j0wDa&
zk=KNbp!9OXPhkv|*z-#4c_sF|GWNV5r at U-bV>{5Rs1z+Kk9xnfwoU947#i<aVec6X
z^}0PMgAaNrA9c)I3+gPf$zVU59DkclW+ezSSOZe&T<5146fPL=f^jC9BWdUq7mUj+
zs2`(y{G<Rg1V({(U8H|D!;{Urki8gT at t)wk+D4W!i-^7HWXi}loyf5XoLAe<3K=dP
zoLAdLc=n*$WdcuLB#>hhIH<-Z!Vh~O$Hz)O%`mSx@$M~?@aMpD-p5M>B|3M!?@F0`
zx#=V{!+$@>=kcbKP+f$D9FI4hgyuv+KgaiY(@AKqL{c7aItk5_NU_IVoX~uURC>JW
zB(y*xH6Cv|2`!XJt;d^ALiG}v=kcbKP=iDoy&RA=)F_c=Z$6kLv_vB99&b7cEtN=z
zcL;0{T2^=q at Z9Y2rjyW${M!-P;qj)EP_tmY$Ky>Wp%#hsdkUizYK@;p7Y=xsK2B(L
zE{S-Z$D2+<Ymx(q9PxP5NocKqH=rH$c+*Mfg5<-9-0bnDlTc^Y*HP>ak2jr!E-rcu
zIUn<Q(@E%(k|z*3;oU^sE){eh at p#io=(1=x>OAiG)rfS(Rw43)$D2+<n+3P0JwSFs
zm-|lvz;jOcY2c$HCBH`E)YmY*LX)$Lc+*MfM&yT>oI}ncR=FH!BwmYf(SFkSQHEMb
zxi26j1z!pZ=3zWgdK42v9OO~-*c9`ollWk^cyElq$li1!wc~&)%|x6~0m7r0Fl{=W
ze_=TPe#Yj>7vcfLg(%lBOb;L~M7bT|>{$ql2M`yce1ZwfnLrO9E<|~Z33A$jXL9^a
z!nn2K2#mrJ_;D1iGLAqNa;l6YkYV2$Lq{NaKb9MQ7AZ*)8%YrxNf8^#3^!n`D9K^S
zX2}`G4HzrY9T;wpZop`>x|}U|bOT0LNyPW)28^yz-$hQ!qZ=@~RwBh7-GI^c5~=j)
z28?b{1YP6N4H)fE7a&sW at iaknlj82mEU`JGmq^Y$C#Mkwm at dS{T_{9lCJ~F3dp|&)
zpM51F;s%V3t-KZC&>eW>iyJUDF7-Sj9%&QpQ$ie%#EA|_#P{e2jP6&5Q7Yxs9R$b3
zE>KzIYkL_=eig>OGBGPvrU8iVz{Kn%2iNiF4ou7uPW3&y0~2#4lJe*dOw1FuEq25a
zn3(VV2yKWXFj1dh2VkLjcocA$FF-)a;}AnkazYyr%oj&sVsVP;9zB7H#@uRz9gm*C
z#1fe^IIcqE#1oiU>Pba8u98 at p`WY*7D<RRG$FSq^yh@@a!A5-VB8Zj5s>IKclk({P
zPpp=lVvpxl5^E)b^D6T4OAV at o2{_U2-Hsah;$%!*lWK<$^i(A>uFdAL2FIh9F>zh?
z5k!2CUdF_cQU8QU%A=PtaYOdAh!lJDGA3 at yehHCEk6y;a?PY&Mq{h%?8-hw6y$CrW
z>L4NF8e)q=I<{a5)`y^+$|(2*Li|@J at Nhym;TifQ9&%74#8;f9E^&~$7Qkl_pGCTa
zUSJXO5^p9MDxxIH^q@%==4*oDWlY at V{SnBGrBh9Hqh)ixByo1a7^H;ac*p^h#8Wlw
zgq$!*e5Hmhj$O+-L{~B7gvivzPhtg1Je%Ci+KcfR6UL<BR92I-??ybi5QF3--_L5v
zJb-bNuR>w*lC_w2At%h at YKGU1qWK?%^n6+^OEJrP75u4IBq`zW_8UvJBna2{o at D1*
zB`4)I67VXYRf at eu7%SB#OG}OSDQH1zwcm)GTJK*8ZH)kU-1{qFs<jgNqF2j08zu6@
z?DjQyH?^afh at Ukgm(^unCr!LPh#z*s#8-8CCs5j-jcIvtA#-tLc`arEQO(B$xGb?4
zLHKfQ;+$Hrn)*gnA!rfxU}Z?rxsO0OQLof6)xT{Vc7AhLNVTW)B;WD7(ZEk^;&Vab
zzoOQ^=aWWJujWNt@{y$D{GV(NZq%y{5`T{BKevhVY@&PR1R9L8UO at M<sJPz(eb2ZS
zYGY9L&yXa0LpHV9rbd5;vf0~R>ErvN=mH;3Xg8ko#_?tE#K~(B&T~q6 at -=aqFKQ|d
zqf<dIa135xO1yCo0KKeLyyzs)$>NSj;>j3`m2C%&vzj$&_;tyR{t5bM_C#0u@>7E2
zGHl+A%vzL1TD;3tVVtr*gFuNdNE;ebA<v2M;7W3`)E<u%nFNZ$(!#lLBJz((hZ>nr
zI0o2!dMaXb!=-d?#2P!9D_x0<#vo=j3X=Uy<tnO(vJ?Fm3`YDaCGb9)&LheKG|#E{
z<`~S)Tin#YAT9C{j7aiKHUT`z($b3s9;RYydDf4E6oVAoHU%O)#FK20PW_FAIQW8q
z=~Trs%%AYPo?%5g-(p3E at MGf^h5;1)EGA9%17<vz4a+nADdQV1v936cP5wg>p=^kB
zqk*h)p}_lDjVg!}`6i&n-;`Ew8cO9>L*gDO`)Q_9<|_#a$wL3YlrC$kM4?aRG5IU_
z2Ls)TmJ<*CfHj7MQ1tt3!Zkend**TfN*+$+A`mnFd1*cj?z2e!eKJt3iV(wcrV5E8
z at fxI-2~soDWwYpkicOQ$(m`l|SvhN&$>DJ#pTSr14jHT6L8=*<Rgymwvovd=aO925
zmxiKOgHp+RRFY+m4JE$?t`3)k1lcE;Oj;=FxK0)we6dx+#F5W|pJICiqkj)-8>J!g
zXOzup69|7}mN0=qr2!Hpc2H^+WLZ>9t?1!6i1Zyd=hLV?g?VP^c*Rk6uK-&b)NrD_
z;wT$e9FYJ#Fky+ug93?;<Zh(!Uq;jk{Ss(LzX0yY#yv|!<__i&A;Xmm$G|wt#<ffj
zF`WgR=xWd`{-WW(=a@`v6mhfjX)`2j{83lP_iGkN1yk2R{t3!Ek?(+4vM!ST>TDF+
z&O&@R5pGl^UX-jdW{JiT_0fYku8$(s=P{XZgpKl?=pG2C<U>k&y_T86r&*VPy>iEA
zU5u0vQzGjj*>mPgS8r!AcFABRgE{n&VU2cx&*Kx#r2G`i3+1EqGRNQ!q+I+OlhZ1O
zlf`YZ*d>u^0G!1oJa(}Ob7L&F$%MHx7V9)&ZjHq at loLW0_r_uuNjS9vJvtLACq@hJ
z!~>tdn}rB2^!vbKx)5|e6Iw!)xb34~MdI1eV%G2mA3j{zVXJ-BR&#%d!F(Yk762UU
z<L9B^ji}>(0myzYR7mX%2Ug5hxqEgD7PC+m`$6|HzEb1R-Oq+(T$F{q0O|awV=oiZ
zE;RLcNbK*Z_j|iqITMal!TS>W)1WB}#+Q#emMX<?eA+;K&E{h6+1yH?8{50pc_bt%
zFg?+!&x30QOofs=Ou=uYsqz_HVP8<8+2uiyeW5sMf-^4e_dwKrp*$09b8As`U#Qwd
zcevFc=>CvsEjShAmLYl|B&rI?<rbju)d6In(uV9FgUXAy8&ulO7pU<Qi^|T73g3tP
zs52F^KWs|!l`ej8<O?<~J3A|=uwHPV72s~Ln;l at +A=u3cu-h!y%@6ACbgFN|aMXl;
z_8|km)_kFzeP~BhajOYUqqM`;ol{R&jv5sTKWB at BJ>{d0Rd0suaYNH>#z)c_Zvl?`
zB6{f!q4am;hJxsh7&SE=5>1V??}va32N-U4Ql9}*Z+RknAGyuIy(tZTAs9ml at Eb1}
zeChGqo*j?PGFrd&>}Yj3sX3VI-!||rztsR*ktXk>0lb%n!~4z<ysRmX^BqsFlfX8h
zfd6h9y!!wq!gsw=L$Y=!-ic}ZoF}?gjcsjcF1*Ut$W6}&0CqU>UxV7Wm>R#e9bG_i
zhmSh;r92D^8SWNuqM33ZJFKbL-r_AFd-8N$ti`!Cz`i-wib%|G?oRgr7QS1(EEDZ;
ze~EFq)hjm9_3nRx at ox2MOtjs72t#_SH^)RTamfs~1$b^QpNiJpf5!81FPm6#3mF%l
zeJ+5$!_5VId_IV_S-;2gC at M;LF*c7dhx?4seEkFLA6Pp*67Qj4tgU;O(;xJu%_(U>
z_Db)-jixZ)u;B+s-k{M6x32W28qzn9CR;Uob7%nIoohW<hrI%C5;ZLdFZXNc>#CqP
z9qx_jYnx|zaJ>`%>?Fteg;~4)a=kPHpOpDl$0h at BY3&!Tv_`on at PFwFd~fiJhh3T}
zzjD(|NkipVZoVPr4h+$++%YDy%%$P;Yd0-GXzjceMBCjK<o+fAw9RGXZwJw~!f)JQ
zu-an29G6DWEKlA(1bbpxIu&x9*GyMV+OA+Q<b&->KpWk%?Ep&15(43=e+}9BnmgX2
z+VBQQb32MfJ-@=%%OMLhO-3^AWE0GyuY$tr+ing?TxeVRsI7s6;$S@?+P7URP&!7p
zINx>~x#&WSf>B>`#dZS at u{8r%BARDLYe!+N1-ILRi#0jlbz^7`HMe7L>o(wc)_w9i
zlYOZzrH+-nQjJ|0_n)pcDarH@{u0=@-1*<*Cb&9tCUXtw3n;rx#7Msx1`e>y(*alH
z2v1<TTviXdQ7)?#`&}5Os{&x{;}dA{`)q`Z=?$(drko<>U<*eU&5yWt(d1om<ztx4
zvq2BJ+3dA9coNC+t4Cw+$qe3H+lfBp@}rK;1uRYRvB|A7T;Cy!{U*1`VAal*;*y|C
zJDrlvkgYS^dDj>S|1e*GbOMm1gELJB*&#}qx_}KgOLu1l-8ICTordg27549fDCW;Y
z;2~UYv=}YibG2#afplyCAl_G0u|&0<t?opyZFvCT689HamPQ4wVNIKXg~-igMV_z;
z(T^8 at 7_|AD(ev)T$^ifGbQ^t8k)(~ksWEIrhLDZ?r?PW$y)^P)Dm{Xa0p5QHx$UCu
z#N6CK+ljvelzwNdlP=pFrvX3e*cXH5ey3{ePzc4a3uA@?f_>5yy!&YYtUhQe^4u6d
z>R2x1kv<No^8;liScfJ;KTu6}f{2O#Z)tcO+Lr at tw>c$$1E)W$zI?y{9GZ8#37Aas
zteO;HMoxcDiT4oedg1G~Qje+YxZ^;lud6s07?K-S8R&i7kox3)Q!1WD{X1-d{)gjg
ztm$mCpnhD<HmEnsBsih$OzRN#e?VD*heh%k;C_<<|Al=9{9nx%C{s~t!QZ56EG;!B
z)lF)VnYo)ab<msD#IZ7wJDm6hz^&K7yKBGzs!XHX6~OCN(=*|{Pt`F?_=|u`jzFkg
zqNZ8^0ddr^L6+KA#Vuf~Rp0>5LG-^}DcVer_M0ZHWJVW$$0jK++SOQE5}00c`ng at r
zq{)rr&%$l%l{if?Br%)}->7m3jrdePH;P-_*IB?&DddBd2+jgI8r`a<(E34DX{S}q
zGhN&4#6Jz<HmMvo)L;QLr2*_D0Akjpssmzt339bbH3X9_PPKoW0dVbJQ}gLGHK%}8
z1cPw~16d1sJbRp4atIhvRLTME at oGF#pj^Z1H$jQ77ouLKNp-;19qubw{c4o|pCVS9
z3pZGCci5ureg)V}SJ|r&2Wbj#vH44b{3pR0GgQjtw<C4&mq7qETFJW9VLLG17FWkA
zj{w;+wbW)HA|G|^0DDH#l&LY6G)~RBJf6r9H`{Dm17l=sRNf5S3e*^zfuc6!S%RY3
zRiGv<MjB0&ntQ=P`G!dgZ4E9O{HSA%uVKX1>mop(*ke*JOB4O`$ehRp=k>|tRB!NO
zhbI!#*Ow7dyrpy4r^Nh41+7K!gwI2ezqGN<J`X|uDo}`h9)kR}jkWtc1NoMXHTygQ
z`5PN+^m%UXZJERzWj_k8{+*4UIP5=+wdId8r#a^SbC6|!%jNbBjZSCD0?Z~=CyH>e
zN4v at N3*B8R-rBl4qpa<OlL#vzH+VZqZ`t5|2#~nJJMV5&>%SxB`|?Vd3+6;n*qjK0
z@$f_75;mK;VRItL<IC>$Ab!~F+Iktcz?GRDVK14DQsx%8usJp4 at tt>j5Z~kGt@|-K
zb?<TW*1fmvD9|YP&1>*xi`oAYlDv#V`5w>V;|h`sn0^!>a0SUWg#8~ef#>jX1qsEf
z|7#|27Y<jD+`@$aWCC~Lw7DcMOSXf<GyLNiX!+rbaGhMc13xrYi}0N2<E$n>d=Z{2
z5%a?r;dv4<KYS6MFOf?5;fwGBiI^Y02rra~`QeLjy+q6pUxXVZ(kMTC5pI--`QeN3
z5{Z}}z6dXsi231*@UlYgziyTvz6h_#e+m)v!x!OZ!P at -rMYu&G=7%rBt?`ed3+9I}
z!mD#<BXXVm at I`nHUMb?y6mAEH*ZN-rH1oq3;R}-V6`CKu2zO>Zh+^i4FTxiW(fwn7
z_#%8s$(x9rkRQGXUn=OBAHE1*7JUqL%nx6LyJF8EVt)7{yjgI2T7LK<e7XM?06gb-
z+zyUJN{TThM{zqiJUKgCwu8CB8)9;jTtKW+O$Z?IGYDtPb}%PtwrmIg2SQSi;!X;}
z3wsu&^Oz9gAm?c?Og^`R at xvDkR}8&sf!~{0ft0xHvBqVOH7<LsakIzj at u~y--UR#R
zv*c*A$BN&Zcoi|Z0}gwv5egRhy$S5GGGgw4!yfB}C}r+|!yYRm<_<XQu`*)rfWsau
zL7O|^u*dpm05f;MVUP7K<d{3)u*b at rc~0^Td@)`6iyy at xDwRYGzc;ZFVc-8fo>_9$
zfnSmOI&u{6I*1-soDRS=7m*tz;w#>D5WP_%DaF?)qaTn+vEp&v=uHx-lpn*0-Yk(C
zIl3GDphRlr#BcN#iOiE at ywO`F(kQ2Yqqj+<S at Eue=!YcIu6Wl$^md7KDBg7t9hAss
z^<~J<=$#VT;dtzWU*);zg2%fKeB8N%aER~YnLF+9`x(W^kW1~bXKXrX_ly}am)c>^
z_+L;Z<#^m^#_wkk00b1 at BMF=LNJ4)H(L(irRV8n}M|)LjD`Ewy at jOOG$>J24SKk>9
zflHA)<^UdgE*}gzA(B4-Nl-ifZ1RIh3GKjREFnfuDv#jDU5kgx_oLoltmAGx-wp6r
zL|+1cXOXF;7cn|wd5=Gruh*Cy18nW!k>lj at cy5mJpFv)XhnM{d6_fsA#nNPcc{nki
zP4-Jo-nij;_Ld+Dya>IimqZxM{aPi6Z7LN07aF^iRM>#3IZh$31G|jz9*IXbqwK~k
zHW#^aGEV$SFvjD(e$;^Y7~7ml?D=ql`-%__ZZSeojxqcBrp7l}W2graI&nJ%HG5Z)
zU};`>mo67^BVgwqKwo_i9{BtUqsxyv_9iHss04(aGYJwa{h`ELAlH at CNi4pP>mHi`
zS7$LtkMDoF-+~S at P;H{u9d<j=mw{P~(x&5O!~=^=tlj0C!uv|u1XTvN7i;Z)k=}es
z+x<fn(Q+b7<9Ovv$mFEK;rEB!DM0B!C8Knvw4jlLHuIN<-2Xz&t8DbOL++PgoL_CD
zKRo0v$3lE{wSfe)n)B+Ktb`&Gu&Oz;uC>ue4i~Svmvn%G3@!2FzJcz2I!>(ka<ls_
zz<$(5UpN$9gP&ITOm at BGK78110A63Txlbdv$$8Rdo;~E|R=~@hWAJz!nM<9QZ05;B
zCFLJyYmW2J=F52yM2faJU(GYHPaMV-tDi7=)HL~d-W2)Q0#oGJVW;>WTLg5L4<Nj1
zA<*b|LX>S2UPhPH)?AWcv1Nd4TLG6hftJ-9kYD{6(xA&ZMce_ZCA&=jh$)t`#8Jl{
zKxtu at +F7P!j~o_unK8q#%ZbA>=rd)|Ijm%!I$<7;BYCIJ@(zZEyi+%fcj^M(aca07
ztBQny1C{K(G}dw*O-X`{lI?i<rqssT<wBZr8*7#eWh!i}(cO$DD<vid`{iKCF%_J7
zWDanZND$?J6998WE&Lqvs20vSW*Yy!#o<#R(#W?#8MV+}3YB>|urg|4=H<Y-_5gW?
zT4-;f%Dfyn&j&OfEzi6XIP*5(@MlN}Dth)d;P6={P|>ru0f#9&qjJP5>G4`Dd6^K`
z9x)vU?!c?K_J|SRiLqF|_cKJ~l2=?gM~x|*LbZIez~jofyEvns22VCq%QQ!*RxxM}
zP^~FPzBxX%mO*oPYCVIMa&&3~!I^_o9WS7oIX1P4H;<Y_Q<pFmKfCi~d@(h<2?1O=
z$A*I|=c*9)K{2jV_KL2kyqPywy at xEhyc?IikQ$D>orz0c7zu^!B`>@*#>e}qkXwGQ
zsz6NcOUGR<rjA+AOdZF61TeFXqkbI<3O<m{Y;UW27FjWZIVmmsq_MvU#p1lW`}??I
z9jYn*H6M;o0EHi?B>!Oe!%QaWHOZ{mutc4BbtUfpQ7y=Sh-IW|ysid200NJ?uU><P
zQ^Xx_RUAH-OW_u!I4qvZQsnp~C3Hz0J4%j^v|!%U0{|?>$U3JqX~H`q8=TTy6W*5i
zH^{(JkvcGl6Gt&+%8G~+=67Vng-&@s at xnAr^&SHxd_HNuoWxZqJ6ePuTo9=b+U#zd
z9a*!%sY;TZ?%+zMJrzTLV3bWP3XHNcQV6qe!hNRBZxH5(@36_KTYDvASsfC~t&L at j
zwcrv+W2^-?MOtIc8feA>^S at mSYJ9YGJz&T$1mgHC#h?5_Adb&U_;Xb#V~)>`@(bSs
zhLxeQ6iDigNx)@%vKL|Co<d}TL|nB2Yg(u#>nLHVPAHY3i4sYv)!^6Av at DA6Vn==p
zQNLVtF=E5-mh{X$&0Z?<DCB6xN5E4bP~lqtDg at MM@IkmP#;~KF2YTT-5?P{7V%~@6
zOXP at Jj;6v3CGu?1Pl4+q)(EMh3alDU4C4~)T+;6rgynYIMssAem<geK at fhvXM2u`I
zBZ`G$BKk9?Kvs%{=-UIsVj=qWz_3_|zCAE3KaJ?y1H<yuh`v2AEEb|~4-CssBl`Bh
zu>3TlZx0O1Pb2#Fz_3_|zCAE3KaGfsuCTJe`^5vp{!)n;3(;RzNUxBw5d9VTt%w*4
z(YFVN<);ySdtg|88qsf!bI6Q^=&#OQjfk-j{WZzU5iu5`zt&$1XvRYHFGzMFVk|_z
zGwXH~GZvzMaZxXFjD_f5QqqTru at L=B1s!7{`j<sNjXK6c^t)nYEn^}2_Q0 at Mi2mjN
z0RVW;k)KA4MoK<~;i;sB=ughh7Ynfw`5`9Dpb{&4WpQX8!uet$ZevI+#9atU!JC7E
zun;-4#Z0KOb|J%Z at -`xu^5x}*Uqs6P_zJ$grgQAgz`~tT#fgQVGkFnT_~<`itm5XZ
zTR4OQ?6=GQx{H}#!V^gL0Fu6>916!IaZ^oXS(ZpTQCKQCU}KJ1EN41d)l}Cnk3rs_
zv&j&f&&lF}uB^$~Z1B2t%XhOXn|I{EO%@K^FvhoX1gxVo4!Cf$%cKrF;PTv1 at _SiW
z2*#^ylI%4m6J=W^uvnPH+qc~hp%Cu0W1sX<OtIwmrK=?nb3<K1e|i2RX3u}f+tGyX
z=nbGw@^ez9ja8&6L!xm!a*{JXs{`qB<fMd$$8dIxGDm*~)X6gEk!XauB$jDV2%)b<
zd*KTN at Nwqz;e>d0Ejj_qUG9y>ulO|cg!KE7 at 1%H^=5i$)efK=b6lmh+3#P_&!sKg@
zm#d{8C(Q?&$MZ!|cWV%DjBtZ$hZ5$8DjNA27OP&BWlC?3d=SgY`+{hPGvNV9Ew at vR
zy2iFumToJ>vw$lNCKGM$x^(U}z$B6n at z)aUZ{QfkPmtZ9#z}8%jp}rbv&8)gG~b|F
zrNm%I!Mg4}c)iTT;GpLbt~w?0S06AHhw9TVl=^k5CbRymbp7hTVhmik&;EYGRHpjH
zk2?0z2r7T07E at A{%Ru4Y at W;_wv6^OJHHLX+pjb6A%2hsGjzKC>qd1sc=ED=w*%CE{
ztU(8PL3{sRxScKTk!<9a2c*~*`9%?&PAX~f#Ov`BajTmUX5|S0z$dU;)UiJTw>Y7@
z|EMRcK at E_`9krNQ*msQ(Hx+=}5qY-`$w73p6C#c=9<=*T1)2KnacRN1)qJ7*O_&$)
zpN>JT?<}x5C3>9iMp>E)NzXRtd%-ri6XWT^=Y#`4Vj&HU!eKzlTH(0Q%`<g7Sois%
zx;)r-TI%jPukIOJ_w<~Mx at U&!&c({}fYg2OeuKJ92?W)#zp^fx!r={$fIHZha~($N
zq12-i!)wZG(3hK~_I2mgo{LE(wQrX33u at moRGahiTB%)OYhP|qK-+hscKq=|w0dnF
zna3Oa;Wb%2_TXOIKxDkZA6%1I;~dH*5O46cYZ4bahtu7vxf^`uUL2zY&$X}<Y1k9D
zqhoGI_#aj~Ls|K#V?Sf7{|1(IJ0`O(HzX$URHQpA++#~y%NsbZz^spdpCdeLvSIL!
zM6WYDz#`{9pf<<Gc1*tB)(`ravwI?D^3Z1el>deVRu>eKu~yr%B?d9HbtBr!I)MCX
z%!iPP%Z&*a%rnu=&eSJHqxx#89;lr|EX1m-rwpsQdQMOkFO)f6_Ja7r`22WF-aM$y
zZqkWY`7I!fryYKUW|<P2C0w{BpxsK9bVAs|kOabrNQo-fKxG}jFryiW<XO%PffYkZ
zAI+y>#nIZZgv2-}9$ysqvO$CbRbA4Or+`%U1i>w-Eu54f8MKIHWSUxB0xYW(L9-Ta
zhl?~8UsJ-`xk?!@c~t;29T?~17Xq{6alxc2#WDpJV?DphBN+;ZwZJ|VO+%dpXmeN#
zS4j)Sar~xWF2qTRrJm4taY;RfwX_DbC`Y4Z0g^(f>XJ+p%ZHH=(k+c3AQ8WcJU}71
z(H4pjkv**!3 at U|?0Y!*!RnXiyG%*;DnJW|>J4($ET6I*po$-ylz++s{Pqch4CC3La
z*@Y?@9 at 7g0bV6n}Dre?Z=cw`7d2w%a*=Q!GieOuV_du74cE~YRCk^op-cg(Y{+|*8
z)fdI%U`E5XB*s)jotqU$&=P3cP}P<^<iI&p;1GWp?qnp^n<3+mMPTOeVIsNeW;rWu
z6O7KnzcYI{tqrB;q!WceHz|xVfzKVD9t_O9X^yaFdb|Rn;Pr5!^f?)ZWfx3KPrA%8
zzzJ7dN7}9w)~IJ^TJmO<5buUG7Q&{cF#~ha at T_2tTt(4yzFf#8Cxk;<OoWCes2)y5
za%WhQFb#p95g!pVb$t;URoYB_N{y(IH at I~;n7Y!ZOtj)=R%Ad+1d}N%V}h6&oSp8T
zg=2;#8BEPoAO&&)DUh3|AOi%aswjsL at 4|D66G<Zl@`Wj+J5|*rZ-JQ{#HcEfIWnwX
zcs`344e at rd;r0?~G|jf9Wb(3+n7n)hCLfhKD#GLyLqc*$G7KZ68GIujtl(!)ARa`l
z4=Zb?v7<7Z!5U%4E-Z82EF0bs7nlVjbI5g?S;A)Uaemv3u_j-TY~&Rmyy8=2BhBzi
zG#Fj16P&p5VC--~-4K&hRSglI%$s!{mt>zm5J^M*)X;e3j6`&>1Q&*3k|i%-ocw at s
zg2h4*mtiQ(U`LshMRsn;N at o^=;*lA&WO%aS+S1{PnbSB}Mr15ADM1#5`fa6+5IU%b
z1!W|F!Eg@^rW=facRmS&nGZRwN1~mX`xz`2`JdbLWy~_l!XuK2c%~F^a7i|~!LXsN
zLkZ%YCu~A#&NEs|CUb>{GqqJ(WN|dyM}7=c2+NN{gh`93NG1!%4Sy#B4#_ezMRWu+
zQL+P`NuI~;sSKVmA}nWUGUr;_RYfR_VrI^Wj0)yNelS#!Nkfz4yd^u}Oi^4+Get(s
z5lbWHicQabGZPKBLX*LIXb4DoaSlfY%UfA6Gc)ldAEt2{rY;#_1ZFgp9!ZK;oX>fq
zhh}Z1na5QlG2oaHChyqHQJ1MYjuLl#pc_mGbc5<ZH>gQ-tzd5E<HU5L%qx>P$qWTY
zW%BU+VBRrnN~WMS8D`#19bPA3`D<i7K2N5(W)h6R^Hv=fVZ>>XA$~JE4?TT|o&BL<
zlMWe)95w75vxu3&9}+QU at VF=s7u$&;w#_=XPli(20k0;{<M~u(V}{W)iIfwpJ>b=Z
znNqodDx8;D^&E9G|9mbg7~-Nr!$oEySaSsai8OK;c at AC4NL*Gr0+*Eq0sx!(#=;n3
zr6%8v4*0GzE${67;EEWi>{hgAa?u#85ZciSNQ9FKnd}wtkYTWK={APdB7=<|o;3t+
z!tjhCfK(ELQFMnG$s=B~(zXoj$MXrVhX@}IsdJV2$Vfysve=G{5lAp1GZpkeAPcQX
zy!a4>0<43nB&)}H(%n0E;*79*U~tS*aPI0cGM}fH5Sfe=o6&T^^f;5VV!>*VZXh1W
zL|ZO%@H36#bH|5W56t6Wd@|<L2+(o at X3Y(lH4lhp*u+4dI2H^|>%w5sDGKJESu*Tm
zY*&n-9#mxo#-EWHnTtnNxY}Aw!!(&-K`D=`i(ng$GWKajy1QxeVG;!rC{4V|k(xG>
zpvnl4C>J{`K*k8iRYl at ep-iiCY_Jr-0#559RbeB+#uF`41rsFD5;A*<GYUh}2u-1r
znIl*;R4ZeJruI7VJV`(4{24TPXa-F&qHF4qXve)L6fM(jiVy`x at 43Qk#t3q2<`5KX
zG{X!Qvp}Gjah(;&tl1zXoi)PTTxsUm!jiC9?9aKwldwO|+O&0t>38JX1sP-pQPPGq
zOk7KT8FNGb`gDCs3}_33mkkEiFHGD3`=Mpa at WEm$9;AAvfM~RJ(21cshHaOOl*K_?
zDjaAj!D&8%0WE~cR6xB<Vna}7>Z+7b;UTG-Hkd>uGs+(fCbK+45T3ID2Mc!Em0)NF
zZ?W+_CC=lqO!HYLdv-9flYw+d1=1mh{mZrVuktaGgisv9JTpsSCJWguA20`RW^<Zk
zPP at Wjg0NFnsbIpxuQsH<R_SxcV92#Lq-~X+KSRofW=Of2AsH($+-D;#GNVVB5tW&P
zB>H02xf5wjASVLd5(MG+jT^o|1->%j5;KHGe*BMiH!hkPnqTCqAyxDo<|M-naSL8H
z7$QH+B18HRsSL*_Cu%525>!P=H0oqvpr6N5ewsU at w*OTjicoQu#-u@$Al_0eUS<rX
zjQ9l&3ntE+1z7=q4OvF#ac3%6ZgS2a=-i=!&NBmTow>to_7N=fv{VsV8uS9*vtu+Q
zRYsW4R{tI%d&UGF4m;p%{8ka?fVBoWpb<lkjFfXd<!MOiStja2Kws-R9+F?oHEyyD
zX+)|+MbB`^(?^mP-Na-_Bj at Z+D-43!xl=GFz*^=vYmeknM_*;)2W^8{l16t5Oi*H2
z<rCu~!;j)oih)Jpk}Wo(q$H3tsZ2RD(u6m{5EoI(egT{kqYOJ#2*2tf&+urjjv4bB
zdbV`P63i at eMkhGO&pdW`IrjWKotk|fZ>cM at i=~FNXc@*Kz6z8CE2)DF(gZ3(TI<MI
zi9|<8bA|A(sb!Y6Nh4*M)oXGvi-uXC0qdCRut5XSF*NFI(!rjn<KiF7jy&JrDql`N
zc4kKUnDUQc_uP~Zen$6q*isnjW6Ce62+9XPnrRz7uZk&uH}>ER{NOhvu@^St$CSTs
zY*0S<MUCKRB+sp6%8#!L%5S^Elz0iJAV&I_^2Zhh<%2sKaUfvCk17AsvY>qM3Q%xO
z<GGbg`Nyz_X!;u*F%91O8M*xPJA?A)9<&>|eAAwwe6W)k9AG=Q{BOhXEC82-$WTiC
zXLc69u<z;MAA!*k9)s&eWHKmr8vk#DeQNFKyK1zX%;N7ws7H|HN(j54j&~3x<d^Yu
zKK9S_CIFC^15^~{R2kA>df_n!(J*e*h`IqMdT)D5CkAxtF75Z|*mkWN^t?Gb_KF^V
zT+iv&s#Z78(zR!BD}xHZj2n~qJx!~9x^b3H9M!RX+UwU7r|aC;^+aTP3w068wCWsw
z_3PLsf<)o6GrHnUsqRnHvG7!__Upy7bnK{BNA+A>jGz-|b#g#wJw}M*r|XI%+V}Hx
zZLiL~Uh2IAr;HnN!>4s*qn^p&C|${%Rvo*Nt+WzK(%+=BPwApTJ^Hwg{gJ>*r|Y~U
zdX&FPC*IZih>rUWdMqk>j~FalwYpi)^5U&}+ at A<9+^;7PeE5h?JgG|>^%$o1>oR^F
z(Iw2gU+1>0)}se?@ey6f^wYWo$iJJ3e1q0Ibj<J65x-&tgjeZ_-gWLYJ at bfOafhB(
ztLL89?RV(Ovvv54PVCe1?K*K{K*tUA#3ntaSK3BX4NUVZwOXYo&oad`3hvjcGvw-p
z-dzVlkE1$zREPcP!H5VvbY at imtYW(^JE6lp?0`D1S1i&+1G;>W;r1mu$1l<|{SK`T
z=tYf$hT&Q`Q)f$H*&LlXqYG}*kp~0-D15?FAc<j~0yMoAT|sPHwf8=LgSaJOw<aGb
zq4a?E2XsVwb3}*vU9UCL&ycfJr=D7?BR3NCC?vkF^DoxLCpAEnb!z{09qH5wx2Bk7
zeb#+hCsyke0QKucr$AVx=X<Z=M+1w!PvWfrrNc)bBZpyRV}QUqr*+;3bncm>deTvy
z3z7n*_zgO`N>@(Te!os`*F{Hk<PDv(N&821YP&8tqmwtV{~Abo1FbsO%kJ0V`*oo=
zs at 0Y$I(ka$uju>@y8MXNZ|dxeb$C$cJ*MNQ$cl+Kb- at 4#(5j=Gbe20dhfR_r!DPZr
zM|84NXE6b7hIi;Z277eMeCbtZyi<p#Ez*(2T6 at np^;&ramAau3-8_ESo&EpgZkAQ*
zdCPQ>U#q=$HD2u0jb2W at o_b0z?bqrJy|`8<PU$L4#G`r?DEET!!2nq at HC<O8(c at mw
zk<)rM=m<&0i44A+#;<-eJzlp0Yt9T^^@>g%wRO}P-QZ<S1E1)Uew{a<bI$0pQ#y8v
zkh8%_kSMvI)zjPbWCLtEzfR)ehVKx$5ej$c1n||sWRsq<PmebRYxsrf#i^q1mkPLk
zA-qv%wdvS&oxSP_9Xp`ogA|Pw{krM}JsuO4<-CCo!xybO;$^+y?YcvxA%vocUI<06
z=zfaDwKH`sgyJ%`(65{Mg$8T+9W<DWNGOadtJopPiV{Cp=OWZ#LXerOM6i2bPD8(m
z(x<MLbwK%M1YW_2Y}d<YOVWVrVo95W)ru<~6 at d{~yl}AMai!yjs~%TBS?%I0x!TEt
zYn;oK&Al3Fp1cLi#m_8sToARac7H_3(^XjG0`19bPzEDC+F(1Nmru7TO+jF35NJFv
zuqa4b83e}8u+`HkGwXEf3}w^kRy_)=*q|49$!R+BF2^l?h7w8G><(Q`y7%bFpk9QK
z>))p<+cX5o%pH0{kIw(O9{rg1-_X$kUCfexABD%9eLD9A9a~JmSe_#gohVQS2?dtQ
z-cF8O(5t8Q=<$9PIke^HI#I7<H|V6dAEM4n2qUyzsSD2P`o}1gX0+;pg*viY$M$o`
z3pZh)@7Ivog<k9q6K>Uoof4Yas%IlpFmKVd7wbC2#<u8rt!!o1YCRY6REu8rJ-rg4
zN)$)VLcMIY#F10-I4~U~rp5cft(PCs<a at AcIs0gpg_A&Z+#TqmaLz#tH92Ps#`u5d
zoIp<^*YG2p6TKWEB at c3mOZM@|KJwC|C{Q7?ieVZ(5Bw5n&t8er5iFTj7Ta0Yucu-?
z#<Wlax^a<={|VgyIRy4UuIral8&ZRMsbR6>dI?r80Ac?+^ms_~6NB2n%S`(Y?SF$A
z;SN%vACFLnE(<Tx9+n!vZBXYAGC0X!q-zFs{7yz7WfC`Vc`3L{XP>1UnaXK8P526n
zY$XAL?7hsIJ{@-sRO+mKqWhfD*-sdPzkf(#96V{1oN}YqbZF1Ze;HlDB^^q2fn+2;
zH2IN<?*`LWi0y3#b(K8$N~zKdNY2Yp86WI|3$?cErdpi?6=P7EXd&^@L=TGm at 8g@P
z3lpF;8Ix=N<RQxNkRB}BFJ*)lT+%{8>y^MNFk!rEVCC1IA at f6-sKCHZZ-t_hs}rr%
za&i&!>-8uqZ at F6gAJAF-dNha2JNR;1271xc)KZqt(8Um%SP at E2>B2L*=(tv=^o+&O
zV@`45r-F^8Vjo&OL;h*0)k%>FP<0CXIbhIaz;C(}w{k(3KBd(O-M$!Oi1n;rPw8ML
zR1&MOWUtaW4<PeJCg*fg;7qO8QHX2u0LC2!M(@{i!8CVhy$=v8{e7I1lcBsW<ctT-
zD+3&I+jQRbdchf;ce~DcY(!vC3}cV6Qj^iJ8 at MKcaG;L=jxOocML*IlSR>xisXjg7
z3bU}f^K&@^%IkIHh;XOt?Rz1h+;}f_KLwS{4={0JyB_yIT9=-tOB-}#yUm3%*QU!J
z)X5{d6jZxjLlura$o8`@)uZ+kg`&Il?Ct2~G#zcQROryzZMxt=z4C~TzN3r#^sHVT
zg-J0)qQnEFJS5+!qdEst@(sP{eL9KN6)NHpcWi-9NZA)OC<MMO-marw{}GvQZkfy{
z%s0`@&~C)rebV-Fe`V0im^U4Q7i6mggYDDd8^{US(ClHB04<1bX`zP$R)e6sH<*l(
zhfL>B>jai$kpHak*-XfUTFL|%9-{^ab=e>l_0mBdgSzg{E6_`@IJmP5bU7F;;-BRo
znuav-qJ9r-0_FYUkh?&!*>FdAVA%Kl;lWd<j`GiM^V^PwphkN4!QRPdDOgbhx(I~A
zL~y6&>B#+dbWRdOs{btYI`u8^W|e!lE811K2gz=a&Ix-5J9L&8buWT&9bWf<soSCJ
z2m<TU0LeuC-+x!nCdcK#NXT+8Ez*&IW1vhyKO!T`V$s0q{(rStP|e_i!B1Mvhz=q}
z$wSl(5hm3%szu=t<zh&f=r+iaz_sC(iF6yoeyVUQp5FbG>LD1(;ZDwU7+P2$RxV<v
zut3x;rlm2`5Z;L)tS!(hX43qba752Ksu#VkRhwQpQ^(#F15$z0pmkyHMpj`*7)?Sn
z at GDSs!E9 at 0V42DzfIJMBDO1lc7~`k(itDv{Ot0;QD9VHGFlQqhSPZ_0U^=Q-&CuBr
zSUOXWJ*pE>q2J|rP_^sS6R at _e(Q1>fo{i=FjbPZSpo~1m24I<2h8ODSej6E!$mo4G
zGD^N--ND|QrAPlkSMD>0A<X%Gy6Q<iYM)_#NYnw{I!o91Z|dA5x(M9m at 9=kM&)=yh
zxzohG0Bft+!h`Bl+pib*>v02mcE7G3&~?ziPU)r at x(G at -5I;kc);o(HPZyJ+ZWds@
zX`=4J0%4%NU<Wc#J-$a=jl5vNBLm3_6#6mC%3~u!u37miz#D-Z%S$L-zDma~1 at UI;
zwidmbIK!0QUf=3Q(9Rn80of|w))}!?KWH`3aROfuS@(Ks#PkW}(SIi|j^PL@(nQzc
zJFg+SgF<9v at d<gdDw3PSf-D_FM*sO8LO8I9sOUuW6X{M=gRdPS(T)ONn>SNYASK)h
z`FG+&S5T|>u$rbP{b at K?!vmARumwsGh5RaA_J9oA%Q`GR0Bt1 at 5?zS8FeZGp;hy{T
zay!7eeLC_1UDm2gTJ@}YUEQa>1Ad(uzD_;KOH9*st-7^G&xJlDQ*7*FJ*8F8 at 7Fcc
z^_(Mm(Mes^s7v8)=@B!_Z53CQ;xzTbtr at emcBYO(zCw1wErs<3M!3}j7IwmGl&fo6
z<*V3y<v`iaM{2A^r|#5+$Dxkp>SVnhyGl<$Xl|=sfUoRUTB9&Ov!KqICFO|D#SL5F
zckdwlQdGDrQ4lKmEPPD_a9CpOJzR3BPOEk7vKA`sx&qNUnrG6!km>J(csJ-6df%xR
z$-<r|j9(8G<PAOH6|*8^c^=Ru&?Yev3h`g?E+qowNfoL<Rv0%?6<dapYrgVVX&Q%c
zlhnXXBuK$swofl>8fv@)iVJg$IxFM&M_qVAl1`iDBMdEIzr}UL;>;B_NGyUrdd}e5
z$+vDG*gW~ZIKAM6BtCA~9S8LSYbvy+?dLU~(H0C>4MCRytZ_CZN|8kdTnQBq%NJB<
z1Rk`>JwY--gLU;Pw<eF{0&+$V4z>5X_QDV7XsgbCL&r{#{7^IUu=d)4Iju`!^Sg`l
ze5izH^%^f$uZxiP5#uJcWClf6=`fV~0oD!wkxPXSmmKh>%M<3Jumikch`C&3C~Hd@
zp*M7u%$1P8QR_{TCuYUzusbF{@T9HMvmm_BT4glWD}r#^3?2D44b%wM3*n;<ox94v
z!C(MK-Yc6hg~gQ-en%IC!N0bYhAwo*XfGXs8>N6vcMu!>BOQB+rfOZUPJIR4xRX6g
zxa0F+YrdjKV>Di|3_eYJu%)o%H0WxqdpGO4qq+q8kUJk3!OAW8yq-b0 at b&SlM~Am-
z?+X7VUGx;af>@5i)Nb~{57zT?lb2P$M5{5nWhUK2SVhBcoWmU+h?1vc7>ouz2Qz&z
z=urf{<}h%WBbykuUQ6Nrm%-u8skzkPaYUDG)Tv+S`A7BW9$gw>8~rS;z(C?bN4ZHu
zqGf-U9$2I5K~d~H11A!kiJ0aWr>PJ<iq!aJ>1iMB1P`&t-uq5_CD5F}dH!NCqDww&
zcn1#WRk+Jsh+YP*7XTxj?)U;7MZcI#t#lP=FiX~4$hBbb;68lp at XKB<=A;*|_bTW=
zEUDC!db!wQLd`WmMZf6LW7bkl_HKfVI;x8yR*vf?2r}3U&<Xd^%?3R_2IFHpRrc5s
zUHl^JhkK}WxYJ<khGF+HsYfSwXc(E%9v$}%K(<kq!K;Q at GZiEDid2Kqf~6sk%l5)L
zI$rZ(`V5 at XkyE<Zx{6Qhq9)=wM%-yd7`gLs1``73o53A7=rOP at zG-~;r}YFVGY?R<
z=Zo!vu}VODX3MYZLWofCIXumG=!T<a>cNa)H{7wgl;ZiM at 2CfK&O5qLia~735I}CH
zvrjM^Yk&yS*L4M0zn>nwT&XO%S*Xl5JLp$KdcK|jDIzHYdd$@r>&_kY|4SBJCN*#(
zd9c`*5Et))N`o6V4Or!MO-g&lk?FmoqYvtGZ*C<F1ThOb>8?-uZMqn?=v`0IlnFm3
z!UIxXyv<+~td1IU;gUcsiO!EsK`s@;G`*AVCSfW}#6dO+*J?EERu`mG%?j`W5ro~0
zc~%2;9aUMF6U*BMwagn;sjEM#i@(Vsn{TpYoyU$3WA)S#N at O#FK3W(9vh at O+Y!$Yx
z02*c-q%=ZaH!XlDL{i%ux}<@=vu4(Koq84|2)v{#ZJb}Ny7V!<x=+`4>hb+X54#@e
zt}Iz_zC^-PbWtNk3e0SJG#m8FFX-f(x)_ at U|5vCU84=Yg0T|h!{nZ-#EG1_RfnV3U
zf$9jDH1!6Z(uoG0yvum}vC9ExvcY{!gHHA9CPu7_7!`;&9k+BT$KW)|0jCH23=1vR
zql at ZwA%x at o>`eJddIsW<rK3)fF-K0C0X+M4xjc(b>HL$r8h()m9fvH2)k*}wC8It7
zRZwu5z^@*I at JX{UqZ46wV!oDj09jZfu#I$DT7N^2{{Uxx?rD<0xE|cx*J}Jv-rh<x
zQ|>U#_>Ru@;Gd+sa}jkD=wzivF%b*GYC-S`V4R at utkN@~=-<RaD#yBV_S^*oD`^tT
z9#(?^U3gYk!OpMOAZtFBl2^>K1Yv_8ag9Q{q0tHOZHP`Z9cI)`x>}Z_jFQ=R%DMz-
zG3dV7ew)qRpyH#tVL&grUq?E0{tm9PdOsHLENr at g44^yUL!;a;%kBi&AMoX5%neGw
zg;1y<tPOd+HYhE9T*}7J)_FJU2quilp$iJ!ELxJN4Zf^ca7`Y6V0hnGvv)(e&}~>1
zJR^{>i5uum5YTRQA%%D1xb|U<pSx&6S07V=;-cX+=+QGYXl3z%fPiXMs68;Atg6+s
zh;Z&V&1MxG0wAbCeb~}|E_THa2HU7!1C&$f1(5HjboNO-6KWyn{{IWqt1zfQ6rS1!
zJ*k#fLQ999y_kM*OntBvG>L)}(vvrI8`LAK#$ge|y1reoco_?n|0f+iVML$kU)gRA
z*4 at lSo^~_ at 85ZT#ppHP1ibLTRLSXMDy2@;*8$AtBy_a<=?ElfMCEiZRBd-u^!>bwk
z0QVPUsqwZld-OEw1o}-s?}xBfsCl|!*pQ91++b1m(<1y|PZ(r6LTFW{ogs;CSdK~_
zL(UNKgV21;IA$O=q*#+QBtzn8g at F}ygJTw6q0)tS>Y6(PrKxnIE__pncmz)u+Gh9{
zTJ*~!da6lDbnD#JW^?KV<7&Gft6`t6hBNO at J^3W}E*k2&XI{{tmtC(LjPRik-MvGm
z1;yf0L~)BD2D*)*jan_zi#$liQj7vb(W>jYUorl()LyuG`xwPT795b)zXXK~ZnY!E
zBZa-VJ2ftgAq!f(=Z61DXI-Kv-*COzo=1z4FnuVYRT73*Ycth=c4CK~3N_-WE<<-(
z^pXZW|A@|k&TvG`JxKf2Ejp)7FTY-g->(x_=+r(v5fbEfotmM?LD|AOfThfMBNckH
zN!Rr2+CH7a7G%GkgI%LGU9nqF>@f2XD}@&oU*x1ab?gIl`qaaG9MXT`dd561(4`OR
ztk0j(<G&Kn=tq`D`KNU04SJH<xdDE;eUIshr?}f*?&m}274p2JYvA)KX at QI^F#APV
z72efZFsm?NgBrj3qHovn8OD1Gq*x1 at L?<a<07dTvJ6DD939|%tP#u%S5Fzg%v|x54
z^?<H{E(*o}pRg|*?a<X&FbL|1Q6r#QFVqeDM@)wMb-D+2wI2TJKArbt*}i>IXJdEf
zxIya$UHq=7ROqGXNB4^=;oheq{PT`;(T;bX(}Vm?dcr$8ACBf1^q3p;QjE_S{7=CA
z=f1wX#YpT{J=Kf7E at R#27fRFLq>?s^$iE{CBEBFo(0}+kbEoSu at 9118o7nb65hy*@
zDv5rMERc6Gk-=G+iSOt*PL8n1!k{I;S5NGPSpW~jb}j{r;fyJ~9-?EQXQ{66nkt7e
z$JZTf{umkZ8ht*HAv~-$q6`TIUMb3uwA={4h0{$+9wIl=u2Zw)28u at A;6RmEtmu6x
z!H$TWn90H}rYzCuP7=G`Z?N~+%#Z$q+ZItj*B>L@@>Ux40;bMK#EFC5m{y}wSywzv
z5i$g|N7w6z9!|=pPb1-=-W_fTy}Fb>G4%1+|J29yNvuFl(%Z%lWu<uC^2Jvuo-+wa
zry=S1jwN=zt^+kf;&7uUE=*5cSR8KjtA%(kklB9}uN$jr at zaUJEsOHh_!ApJwcuEp
z_iab%tl`_t*l)y20|P^?f_s04w*^KYT%8^^@4X&ffHmiZ?c5=Ww&|=Fv=|UPf)fq@
zknxCj;E4E<u at x(h)mG!<c?YUGmX{f;bt6s;+ at Yr|<~TI<=%wD6X;{kOcY*H<8UfsZ
zFsI?FZ_u?fbpGQyZ#$*hkmotKK}UBO7XlVh4hA%jxOEqq`Huw1ve^60lmc5v4(ixg
ztuECwYyY2voDbvpt2*{3&Dez*VYt+Nx+-4eRuuh8MD>2!KM{(>n8)c1eXkW;eec2)
z29v^~#;#uYxRKb_mJ-D at yiey37>NY^7n2Yh`w(Mib?Ss!!%qi?lW3VeP8GWd<At(v
z<|wwBle+*a5|oaudLena%$yLx(ht9k7p=s^hMtMNzC3u}VGv^r5Ke9)ecBj at IB&(+
zNsYr9(-!m8Qp|5>587)pBJhDkZm_+DVj_!at66^Gs_)bVI02%(*l9f%JKb$iUzg~W
z0QR04xei^v9ZM=U>hPa<7%lu6+XLcIzp#7HhAle>x}C1A1ADu+?%p|Y<u0dh$L_uT
zmA$+Aovwjh1AX1wW;)$n`?~k`_3qx~EbZO3W$(e3Z7pjzbZ>RmT-bf(mfl at X*Se;z
zCF?rZG&NticFo$0)^*`G4Vc!pe8cj#8C}bomNYdlM~QW7n<Rbt1sAn!=xS<1O4sTo
z9g?<e`G%IJ<w4EW%U7?xu(PZE!nNy{H?413yGF{az5ppLYtwa>EZfksj^$d`tS~KJ
zxPD#BO3B~3XYcNw6}`K*wQcF^U)H-9cSLR3yQP2kUgyezT~}_|<E-o6*}b*Ddt3XK
zey4X=Z-4KWoxN9eZ*$t0b#Lk4v95PJF6sq{mEHZ#yZidrY`L=ASvSzr(|Z6{_H6Ip
z;Q(A;_mW-P)^+!<=-t`9iv_lK_qU at CqD)!`cq?}AUERHRd+)C8PV<(&rQO}TF6`dk
z+t=T{7ftnb_3Yfe^$ODva9q86TemaN-zTv8`nT-ucW^D&hBZuHzoWO0 at Vj^Ib3mo8
z6)kPcovy9{4AhJ{UH!mq>(=hRK4;_J-u`X_QG#oCbq9lnaon?`dslxS at N$;#?3pvG
zt9i at L9zc<{y1Ke{?%a1}*PgvSUBsZzK(QTKHgM%0pqwrvz3c))T?E(FvwLsX<seV@
z-Y#I&y?57^oib!=+Pc;RL%eRuhULq;T9&PooQ}2a%hz;WxO_?5`j*w`3iyS6>RQ*i
zZvFDr8AX~d>}+3e;!D at f?rLdkubbJmcEyUinNHWrwzW%_w4nn7mv^;vwe0Ha-)ry%
z!7m)x)!%z%_q45h_K<K*1AEisgx?(Ep!PZ2cH8a+gM?ovz(lz6$}PLLb?xlkg{ct`
z#dLVD9lfsoq;nUCx@${+_krGiL#;N9=ZbC4%I<!dS%iLJ_txEew>5Wf+19<6EFr_U
z6=S+}U%!(czct+lFyk<=25>j7V_UYRe+$~*-P42dHBg+bTXuqFoV5e}YkSBSeH*vz
z-G$EfjWmke2tc at CZxiZWz6HFtrwe?(9dmYgzb;3=c6IIBMUW1#zP#IM+6 at 9?-t%U-
zb4qjAcMV(#N|_?y&hDi$`gZ2e>}p at Su4_qC)7p#HtZ!MfGGjO|TGL`?{F>$KH?F;K
zRgeo#S#sgZfL9E6bTnPmwPE>%>nH%W?&#in#Zol5O%NpIF?Dye at 9oB%be47ZY#G=Y
z%s!c|c38SZpn*5f?SxRLt7}VNU-#bruAVKu;8 at VVZ_B>!uFJRd$!tDn5M}sqW83=O
zq&=7tGiUdn%!wmFySuL3vUP{yo?%l9e9*m at m}4sTZo^ar1Ww?Y^Dw at BmS+qj8FHGz
zI~Q}3KOntKzmW=@GcD18kvn!;m<hM6YxT<2W^zFmU%0&e|Euj=pd>k}D`UoUu#gZQ
zeb5MD4ZRqUSlrz+qpz{GP~BbKU7G%ss;cK_<DBlQ>h5BytIGA6k0j2HILPQ=jAsRw
zFlg~0Sg*if<0EW@@kjE?YYB6V_kh-TZEUTN?3Ka0E7m`3glF%2??zT;RF%L7DbGx2
z<;{r5$QLi(d-38$<U%Z5Rd`<;ne1N3EoF<jBi2o|<4Qy2YnACuh(X8RlWnZ7)gdJ0
z4I52|9 at oY@&f;o$eI2joq<2-UrCd*?+?q5fREk at yHI(5 at +6DYplaAfnLSYf4qP+fb
z)mz#F_Cv@!NYYhw0^ACk3|(Cj?Mx>04x$-CilM)G?hl at AJ!7rb6{Qi})0$8<&bF)7
z`DXK&D;}%0gaPG=+J0{NL_>%WHzu0A)or6wi_k00Lk7-7#r$$1Gn1Q+irE5KUT+mk
zxV32FGM~#E_4h^7ai17evT-A=OwVTuabuPW87S8klpR4QFO}jO8F0Mn)S2u;DWkAd
z)yW at eAh2QlTbr+KQZ-s_)f|*txw_KPL;+<gP#13fges%p78oI_)Y{P&x{zzOumN5X
zqEs6{({8Vxa+|B2Vt2J$D=P-_T91IDU0gkh#_Z%pkV4A|l?zo=u-7PeVV>lhs(VzZ
zlE7&xC+#J2tF>CGKxjs5r at 9b#OHKS8BIT^*`+Zg#v<RC4Pck`<*0Uyx$vLG6L|TlP
zI*Vp9rOZ^OXiaFXVGRMDS3+~Ets&j08uPDmtWt1U#D+EtNg3BEp at yu80<0RyuEpwB
zvwbSRx>4<vn#)C3?6%RKZl=>EO<l2F7V?46urfsMK|)5Nb+kLdP^wvhadot>(QH6>
zb_MCVE3Mch%o|Oe2`-j9NPbUx5l^sxU^bM!5)ox-xuHcG)oP`~%KD-MMgoIE+#o;n
ze52Rwb&RFtt>gCb+CzHEN^!o>=X`3IJU(|IHxG$zv5=pF`3TzrCq<=eqR$*G<j_db
z!t(Tf>y5Kw?P>}Ylh;s8#=URpNVWirH2wO0D^u+Tx8AMR>u$MTkxwGEMgIF<S87t9
z#eEN|Zo%wMG+f*!%8}ZFXxS+fQTUZ>RH`SPDge<i`9ii-IvmZeEU76SMQ(0sWo&xy
z4P$$+nb<e6XKZ}y`fKs0+iO&B+Nd_F?OGX^tL^gUO($=>eq3&DjE%21n&TZ9{GfJu
zTsvB;*@4~MY}mbeZM`Z6*LbB<CDLu;M?N==zpI^7jq+x@*+4su_ZlZ4w8y*Be(2rJ
z#>QBs*~5j)<qzzSW^3(EmxhbiA_rn25laJ_ZnR8=n_*zXjB#Sd=3vst%tQv7lJ1 at X
z+1r{pY#)^lD8*DNRTktzP8(W{(@d#U$W5)3vc?A5_z=iCzDeoG74#^mNQ{#-GsZ$0
z2!-NG9%A0~?Ggqz(^-s(3dLx8d1+SDnPkW<&1b=JiimK=@5A8H`RvRJ9%7t1mo3c|
zqCzAr7YiHMP>V&ip+wVSs89pJMQw^nw+ at l6{bIeMQddQe_Tri5iAJdja)>nw<2pGY
zig}H81MN^hrcfaTipArKYE<16&U0kft?E{}b&68KY5N#G7co>UEiXaiO-sKro_zi5
z|FvA%=~iwkYqsZR(BrjEZLL<Xbx(nJ#j@{=Z`LZX!M;o871>eDE at txc%LQ^pF`rvX
z$cmKIfyFx$O|fkYnS&9=#QU=)uv1!Ah?0~BYk(giVpltvN~Ikp+7f*ct+$(79DBJ=
zqt!+mu4CLNeM=RJ3>I2Fl`Uc)iHuoZdkgfKgHeS(-gfoq1lq4$bqDg&o&_DMluos(
zZXHIAD>b{Tb>H9}Wg$yw>RKp3BZe#;6=8d1XOw^U2_-TM*_o_yxb%{kUzOdhgQ&HV
zvvEFHU2GR#$%Xj}mNJW$HxH$S at wysR;4{4KaW6V$I8SC5NNei{@MOukYS&wZB2+pq
zBV($V(UqkWX+$A*KzfYBFk*&4^<y`Eyr&CnA+aMcz7h at BR-;1yh^Vo?ZHC^c4xP{C
zqUB-^vOu^2G(B*AdaMgbY`>}8l2O)V#lo`5gVK?hI+A%MmoW17Ma6>=94uO_JO?+k
z1&qIFz9??`a3MRFnLg|pt#4<jJs0pO6?e1-_KeMX44qqGC~&S*igsiytO7kIFhz)O
z1EqIK&3a7|51v6%HS-LG?QUaeR4z5B5`RS*UJZA^JE?ReTD&zL!7397RrW<Iw4$dM
z_D3a19YHbdj5#uHg$1^Pjbs-gs55g}Q$6BU(l<)El`z1m9+M81;6A8tXtEhGwrI+T
zWebA~fGOz%`u0#V85xxicd*39vW$0O$vHVY8z|v<o{q}PP%f%MVE``Y^}QQtnohZM
zD>$<&U3v)hjthfl>sy-M#z==wpzZM>wUbqEPE}#7nVBvo`GGuJ!z)=kn}j#Ama>O(
zeR~V0u^7NHrRnf1=Cjke*_;_uLj6M}(+^4Z_vTpIXGE!Ey at e8}uspR=EZLAIrAFru
z7o$9yu;^lI+T3|wT1Y=FwyNdYdac@)AzLRYQWC#K;7Bts6{Rikt0iW(s66~mc$p||
zRL!n5#L*{(%)_$;I|rgyx(LL4ua#RS?R-m`#KDzk8aicrjgB&jdS~&lphu|-Nqk_!
zf%#@j`zI{SSgX^<5_OH|H}EZR_2YKzq?{=IA!(T`FD;l%M)S?&7UR}~gI2Y+_8+r#
zw9)-&wv?IP-<RN$6k2kDzFhbXNF2O>vbzKVrd@?!x>JKcX6qO_fsXg$v5LBAq7!hV
zL>2LKsbdU2pO`2hc1%Ag$tql~9nq5*4516kaK<E*R3L5K*iZ*eIoufm`w`Evr(*Pb
zq}p!!5lV}G2(!gyObKn=AM3+DL#HTtC)fNkST!ZKA>c*zK{}fUl;jk%6S5jKjYk+p
zO{KXG>*or~EBT at W(}232<hVfwf3+5zw_beE=`2>an%*h4!r*(U+2HU4w2TMaHn at t@
zmf`q;5WtAsxVE1T24JOaBHHVbmRX;Xji|M`*wi|{g$9vn1-Qg881HQ<BPK<Un(T2~
z`X4jZI-1>-Nvs*@!R~vf<zYj8WPGyf3MHeTz<@ywFSX4lP+2D-h}Y|rtUjGzi5=Lc
zEJQJzX5j=#ZpZ)u;%#8GDWkL$I~=%SzyvU at 53hoDMGPJjk|`v&z2Z7L0>+wf+?2t#
zZp%E#rL7j!7rUX9p~9b?G2d*~a}fX5Y}y`u6=q7160PF=)KEQY)hcl>#I%F<Fl8|P
zgN^_%9UcVFU>|_!uv(&%NZVV-QH3Mo)Of3>zBCy(9oHeFm|~C|PUk?B5o5=#crY3^
zeQ|3 at 4&y$RilV^+VS}7~R|G~a@&Hc&oBL2neo$OmLXq57tDfRMCE&~{SnRcOpcFmJ
z+VE5~jryAo<Sm`%6iEtk+?TMoM6sh)?gjcXqKnW>Wlo|^&*v84(&g34!g9h9wJ(~*
z&@(Em(8kU#Mh7wrD}9A*Mtj7mx8<puA+3wBp)h(YsIGB3oDkm73L6KBDHDra<&<?8
zV|CYRm+{wzlsCd^)->u{>N|52MxRo1E}_z-D5DElq>T}YI;RGeUSeKF+<=&5+l(Cq
zJ)7QSD?(g})7ZBK>J~ch(R3IMU__<9WN}}c0x(wqX6MAUl<fO6S@{1}rc29(NE}2N
znW;2$ByD~x<-GxJLIR`t>HYa-q|*Xvck1uy<%NalU^X{5U*h~|dTdAzR=ZoLE~Wb_
zU$#~5FT<y*Q;A}W!-$@a9b}3s8-vsf&D9Eko^<_<#%j0M#tdh>OgECvt3W<D)4fT`
z$8DpuOlVP^=?Xhmzr7=LtEM>7L&B>8+A#Z690u?mn;EL3Uf-F(i{8^$KUIV~i4Chn
z!@O^?w7+=7F4WP- at gs!jLLMVGxb?7)qjaTW%4vepd$fc<{kiDW)JLpw{m{TPGyE_4
zgQ5RrKwW2MX6V~3_Bv>m3P`=b2AfQU9_xRw*4>mQ<fvTRN3Mk(Eumal at 0)32PEu3Q
z|0;eP-$O)(df6y;pw5LV(`&~ZRQBQ|E0j1MLklOxEk|FFy2+-uw23lX&=Fv!q~`!5
zjpI574kWC}U+ZKoU(X<ox<UJLIJmn}Z?3J at Bk?j~2na3- at 55`dwYpI&r$#PnJ|q>3
z7Xe9UK3<*1 at S+wFl<fN)d}%OLIy#LjoOBpw at NzyDx#Is9Z$}ImM_|yQJ{Xbw-a&pV
z%(8y#3J)}UT?pD<yWwgbvW80BLiHzlcwZeHLdS|Q&Fc-FZfd}gRZdZTD=lbF4a{m<
zNP{+(lqXCu3ulpyixn0Px6xkRqWy&27zVQMWnspt$=xwaE8+8r6_z+8yj&}#)E7-3
z#(t!HqlN5T_E27XBE9aZ-U*Ke{AVdUi2aJhRN|6ACL44V2J53G17q;LIJKBSNv=a;
z47h6;QFLW0+%yk5OTFS5aX9-QY_Gy}#(1zFMxig?5?O{pwOr&HX0HS+0|O!ww+Y$}
zv-ag)9oCm7T*A~wwNk>MVWX<Uej|ly`$PG;YxGj2jd#;1fC;+HVX-v(vwA7rZ)4-+
zl%dS+E#!(&N-;a4R4q)c&lJ_^;lLOf(lIq*pIw at da(izyvjHQRV%7#Qfl`v`d34+@
zv;iHh&fA=#NjVWLlY7$^U$Fou>@uv!HimHRglrcjRqVA|2txwt*o>GT(TOcLU2k?o
zQzeCx*GImw;z5eooHF`Vzg;X5A+8FmjSWm4GW=<sPE&PsYV*RYjEd>QrErxD>=t?H
z7DJpUYc;r_#0AKS1IZ@?z=VmXa(f!a3>d*jOCW}7RYr+^wt{**;HCc5k?~3 at 5XO5)
zv|pv>hKEfmXW+SseIcR^RX+yvUd4Ropfz}Eio<kay5Z3faCvq&5jUif80%%UkhqyZ
zz(zBI-vbPR&@ncos<I)3$oZ%tbl*x3;aTmnHmkbJe3ZnPZ`r=hp;AwpR?45Q-wNFt
zYcx at e;&%~=DTSH2LT)tEP92Pq_-wC>XEM#jjfo7A^%^wQ=xqg))UgCi&+O1DSHs(T
z`ICb<-&83JqaPTj9opxUo~RvHy|6+z@<yd8(qBT##K7}(?FX9mnWcZPZ#t<BSXL(F
zZHxoWq*w at iRHqn;W=<y^XrZ--I&+28m at zzto*bJa=Ajud_Ozpj4+^6=_NgW7Q>nqb
zh|j*Fr~20EJ=I(?l#tNA&;;1j$qVZxUZR at Smxo!ccrYc;HlvQ&pXJb64Mj*oD05D0
zXy&O*p^!sJl3u8lPcw5ihZscBJupj at N@l>p=^{E8GZaoDi;U2aK)`+M68pMzq;*Cz
zL~1|LPBBlh4W(3)Df4+Q_W}_eD38b_m3K1W8nm+2NgfCm8TD4sHI&VzK}26#2QZ;0
zWFTq883LWupPLkIw7fz`dD0I;<xjsyY(b~B7i at q+gs`H%i`aY{vF7*O3(i+9t`V2s
zFb4f3%+PEZ4ChViLKR~&LRs90V8L7zx3|u0$<%^aNHPu-fq;Q6dQkt8 at g;FEQeVuN
z-Ro&BEH2S>y_Q9a$#vfoS+ys^7l at j}Mu5K!lTt$nFJ{|-AELc_q91OnT7unPhYVU*
zA&gdE<)~LBnv6WkKod-%rN%`!FHgx_bE&YrV2mh3MWJZ+B;>P-ZxTH)JY~XI(qT~G
zWl!HB)aef!<Jk?Zo{(D1Q at kUD2PWnbn{WV=S7`+z9UTJJLb_mD%Z!{2!S}@?SvlV5
zFx@>F!!kTo8t5&3W>C0vDk;1otsUH}bzraf5v95}A at VJPO^S*|JSKPZa0!aH$-4dG
z6hfPql15c*szoz%g-kMfH5q_{wzy>_n{c^kKk>mMDH|DfmP8DQD at SH8g;Qj*K%#$#
zjoa7P>peI=)^%cE9MYhnI-C5oQkrkj4n{2DTMcAYS*=v`6Pjp*pzAXlTk&)crv?+J
zFM>l5(#UXX)%=mf(t-(K4QlLEv`0%21J@?M<;8}xo$;htQOMnpI0ETX#s^Mq=~7d#
zyt$xBMO~fj=GG6^8W`~7UHy0uzRwEc04RhrtyUc&Qn46bs2;D at HT=7*;op^}1h*^Y
ztsX`3qocCnxXNThe`Hl{Ll6%zn~cYkA&gE<6Ol-L`Ge;iH at hSdR2+=My^5F9$R5Wb
zTWa7PFt}%aXk3UnM!QL?`lxF}kIXG)7L2P?%-FX{bkfX+e(p<|mx+l7uS7M@&?4Jn
zIWA9Br<b<-;tB%3Qz}&-?4xM<4>muUL=Tj*AvNXAgcY=PX24rWumwp2y{E!Iw)Jz+
zWsQxx%nGT^Z?mJr3<uGKMyS~AC!<MMG0&}8AvPSA*|z>n(h2EB7$m0qSxP?7Y8MTf
zNb?PioTt()W at fW-=$17UM|$%nW{UG!+BKY$iwY1NpqRFEG_%t8PO!-29BJIA(=r*8
z1!8+?A*I72{Q|eJ#257%#~O$nlD_AAnDoE8hyl!Tqm6_{OMUkCs at EJ8v=<>~{N!96
z3nL)gg;}KsA*ejX-C{FBmaC7GO#@q=!!0E>S_U%GE5wj#MA67xZQp&fWV2?mBv%8)
zh at 9*h8u}%3m at +Wd2jRJ*4we0a7L}(6Yer2AvXS^$*dzxqT?Pq&K at paq1X*HE7H7LJ
z7m~@Ig~)I$TM;L%dJa`Jc>=4Njy>{Fhgg|n6ZMd8;Al{D74932jaOf4LXtt8xyfFq
zJy~m%>pjedV$h4=><RIpRO+=g{D`{|0;d`qQnQJ&({bIv&6RGgE;s8^0MzQb&}JYN
zQs^UPR9K(fXg1L`CpVj0)yXY9K>pV!WfU;J)-IRrSF7EWV5LcMEuaGJ at pg9-wVMPk
zbel}q(b^u5NyD7q)wLimYz36t at qEw_j)!saJ~Tjv=lP+}cX<I7ljIV$Rqm?wGtiv=
zWz)pY!_&3iY;VEA(>poP6w0zOfu4WT1h3-#3V33Y*(VX$8eM<wIQY7Ea(tuFn}qB~
zAcXgtE5n<RLC#(SlBweB%KkFEh)Ef3bYx^M&7LkVQ5Q}1Z42z2>b$@$?OS6+MK_%-
zkMT8q9{cUY#3cTCTCz6>1RLzlBK;<iiDZEs*nprIXw1FW_>zMX at giVo$Qk_5Da!BS
z&DMIgdgTRfpRg}I&vGQ_EXoZO^Dpd^s4lqJ at w;e*?@TSA52rai`KCHyt&FkS#Ywci
zUR7$%7rbJzh<Rbj%{EQbK-*wbw-AtJ_HyjF<I1n?-tphYzBJ}`ynpu}?B4Ok-Cx`7
zc6 at F3yT^8XY3vE0|K*ymUc2M&>)vyn+wrOF at 6PV{-0Xj!bvwR1d*|Gacg($iPD>g3
z2itn%3o6^)qgZJ#$C&=bN1brq;l6&3m+?u~+;4N2yF-u1kpB1q{N3(e>K>j?<2Mq2
zCcyU--;+zH*FDSKZZ|eAHIrxAv8BH+b~}HK08j75S)SVp$~g;so4dqa9;E*=D7tO?
zF1Ps at 3*hOuaUS-*{}s5De}?5FyB`1U#Zu1s?tK^8wZ{(=KTG^&O#elkhn4>)Bk->S
z-{y9?)2t^pJ<#KOK#*;q&zndek6%W7Ccr0wOZ{KDZ26yNISZQpe3!q(fGdfwG5z=E
z4S0}voA}3943PGg<4)pVApS0c-Mz$r^nd|BMEsM$rT#}*&oSbkQGAy>%lCZ~@yA)t
zds$9|YdOA3{BLCgSsWj=lY5r<eTNM2^uHYZEp+%5;#V=fd}TrC{3M^dhxnCf$L-r+
z>VBPcIL!Vrf4<@VD?tB->8r%==69-IMf`T+pCbMm;_oB=$Hd=A{L{oQmkxr%)9nw4
z-$MLiyY2ppc$xUWC;m<1e?k0Lh+lqz)&D&U2K+DL*ATyT(EzfA%Mkx*;`lbI9wp)*
zAzmfkApYVd1AP7O0={kg_q(&d&xA+qe4paG+}i^_|0K(qVmZf{?J?q?Any70&xwDI
z_+F;p{t|oNZxZ)(+fDpJ_6v`nA%02G3V1Wy{nNx-<a61#M2<fq{$=vjg$BD><QvxC
zE5L;hyN4~I=fgVj4-o$f%ejO2$s-2He#deg!*fNB?R?y>&$E*|NgO*#>f!OffIJd@
z_Fwk!^?a82{|oAWDF`Cz&jt7- at t3fkzMOgDFAwl_;;#+xw-LW4z&}X*O#%K8 at x=iD
zBjQH_{BMbG1o(Zz*q~{6d};*#`y=oxE;agG@}pMLBa};LQ1-BP{}6DIGh=KQFSmb!
za>jo_!}Ha<iSK-~mA{h}{?Ek6h@<)Rc!c;~;!<rn{)+faP|h~WhZ6DAtp6h;>i<8q
z{=41jK)<|_<@irlfc^B?NBl{C%EH&@=@I3hWBCsUdf at _W`6K$`N#btI%D=+ni>x?L
zuT^}Pd-da%&eQpN;L`7YJ2ISN%gqs=TQmHhQ4cv}mm^7^p<w&4!EQGQzHR$%cb4_>
z{p%{?4+Qv4#6L;g*XL&7(!cyiH9pVse~kD`jvBz~x)$+c#8;XA?ZiJ%{8{4n5`T;d
zy<Yej at u&D+Kg;x=A%03eDuQE<75zN%hu>oON9^QUpwBQqe+O`FuO({`|Gqy@{HXwc
z0JzY3eai~={Qns7`-wxm>+v^WFrl0Oh`?)!Uj{)W_&cd6P;EVag!l)Ddp<l&{FjKo
zjp=VE4hO0pUnTwk at jZ0|_7Z=TI5t+%<8{RUC-HX%`1icj>iHn?TbTX_i0{}k;CkXS
z#NR;tGUA)W^8tP*@lO!{9MeBYe6?wSujix0-%0!irhk(7Bg9+8{}k;qtlj^C?d3P{
z_wwpRU;yn$EC6CzkL!pRiTn0_F*=m=ucre(`EjHl_S_E3 at q6r3O}e)N7d{+YHa>iq
z&wV%XCyC=ykB=yRzI&Jq;_=@g{%C;zp5nXQ)s!<{4t$CDo&f&}@f!pDe*+i#JVZMD
zxK$V5;WGR^J*(ds at iF3;wGDrXot%8bR?2x5anI+s02ewu&G+^7d^6Ku$MhGnoI3F-
z;-24bBYueZYnc8{;%_DXFzb1S_)T3)IL-8DiJvC!`S6#CkMn&ghTLxwfAF{!@J}q~
zi^M;E!hj3-+^2|t`lR9aF#X>XUp!^N#Y}(Ri;Qm3t%kpW=`SPxbHx9J_!#kfZ!_RS
z#3za0c)J1Th))xL>L(32pU*u+{Qtbe at He3U$gx5EhPT>v$4>5T#6L#-`<VVe0T;XC
zO#xp$#PpvzZ3R%xyDt#G><+^{eV!!#apDVn?%!zn=ezTE8{qj3AK_4b`v%jWW_ at -M
zKY6F6uk(FhPyFhiGThTS16=AqAJqRArvLl at kbdr_rr+(J3HmQ~Zd1A80zQA;2s{g1
z^u<TXhi|vXxK-k7tmiE2f13CM at 3MsNVEX%rPyVz4UY~xJ_ at l(HVEQMBZ at b$7Plt2F
z|BUJPF#RibT0LL-ZUa8c`dml+ at t-j~&-6LsFF#|z?=gLq_>-jP%b5N);y=v#e2eLC
z2c3t>+q>B=Z at kwEfSS<b{U}G|_BR6h{{qXu at x7MrADRAlh)<GWJ85_QCGka;|JRU@
za(rk+eO`2t(Z_F(`HUrZpB<6 at 4_SY|G2~TD|L4RP|DypfC*HZ#%D?x11K91|uM_{1
z4;k*u`3muMmh*Eg=UL*7pHHXXiG~n9{0-t{J9jPdpAFJ?iSPcPm9xh3-$i^o>*?$B
z3F5CKUS#@5h~G~96~zA(xQr|F?2jbB`)j7Zn9ucc-~uQJssA~?uh%={#7{Fl#k6}P
z at qY~P!^G##T19 at 1^{Es87V$qL{tVh{7=L~f_%?T;yX)0V$kRP)R}A_sZxDsJ{YrQC
z^<;dezffLe`xWjq=|I at M#^c_w;*B3s`~o-qN}tlsE5v^?z_%2C`G6nwPU7KnpHdwD
zli<0}dOWEAKJXhhTTNF6SHB2)y6u;`t3834;+>$w_U+&2_Ix;<<&5Gx-F$#QL4Ft`
z?&ZK3(q9Za<jlO4^C}j174f4t8-Q-B#}5J at gZw}G7y+IZfnVg#cW0Q;^Wl$aIq9@=
z)d0S8NIACw9~(^W?jM2w)(HGBf%|t!7Wa3+<$X`*48^4#FE;!v at y`;z2>3;)XX`No
zAnx?I0UhdM{!X5<Bk+Y0_$?#wXav4K0>1;eZ=+;=?i!K)67buw`oD1mK05+m9D$cc
z;D<-xZyACA%n1CR5%_&0 at cT#LA02@|I0AoS1U`oTHH at BDjljo8;5U!JZyABVc?4b=
zfgc-z-#G&Rg%LQm3m^WzBk&&@fiI503nTD5M&Ngiz|V}p?-_xAa0Ko!U5-fUmYZl`
zamqwyDu;cyHrzzzRHJih%S|BmVZyKBPF_T9yN3lko0b~!LK9eqvnpBnt5xsfSF at 6e
zuJzl;PE<D$+J!KnNW%N$D>s4tQjtxfMBT(XPHsZWk)P43ZULw_{ck)@)>NZ9O?g_i
z-frq9JD9~s#pKZwUF=1Q<&B8{lla|!d=+<wiQ}!-gFxVQi8 at 9EnvZ_Nwd{o=PqI3#
zVN2Z!%rWaGS`(G(T5kj4t?NxZSbwjsts!PJzG}<5BIK}}2rjAm--tT!KLtjNTzuU|
z)Dz-MkPQuj7r<He=dfRPMh#cjYIwU1S8jJZUBrcBN;`^5i&%exC0^Lm4GWgI!)N5F
z(ZQ-I+w?O5MNy?0aUo>|fn}X&wRaK`TUgGH*tyCCqH~9(Kunu&9WIQqro{@kty9R7
zxYGDvYdj{EXtFZudt~7T#C_GP)jh`%i(6|5n4XjN5k=rS1Xm{afE=>rEfNjitKzx$
z0vX&84=?SrAcj+y6iM_VR|;sjVnNrzdPu at h29f@fS-&_VUW?>c4hYi+%Q6{kWl_XK
zq9#!jrHX_|%X1|z-LG^@)KYG-0{(6oK$#|W7+T^tbkvXp9|evQbz7?x7{*B{E2b9j
z3 at p@5KROWzC2xf=z8PC6nNAi5M<llw_R*bo=9Xo)6Ir-IRjQPWSJq)mj}t?qbQMjJ
zIAF>+45`10D!l+*R&wfcfp53abJ(ty>32?s-VJQod*s@^y7KTl39`pF;os@**y$QD
zRs^iYEsh2vUfE_EL(^ZJ+$WBNVE0#WCIVok=y-Pm2~E|Q)G$VM__hU7ALA7%MW_wl
zlq!fC7`0&fIaU at Z+euN<<q{<)RwL-${%X5*BsP|G;gUS*){>gH at z}(+PQzE}4QxF=
zuqJQFq8n6I9>bjilyS9^`YYbpYUsjSWKBdZTd1(SdIEf|T?zVv%hPILV+qC?^Zt at 7
zSsAgbDITlL6Gtv5H}@X0VJYPE(8XUP_TU$iNcb^AsQuczm^R$>D<)lf;r)ELNB_j$
zKo)4dA at Fo3uKp^MbQjV at QVS$Z-(lRFcB%dj4*g4R#hFs_vsh7-jj~HK(DJdRqU;;B
zeVo39-0RmE#3Et{zLx;l`U0!ABWyv8)r`78Q^S*^9zO3NMb_5JmIE>Q@;wK&l6)D_
z##Xbz+sG`8ARGC>Y%}|V70Z<tvC79A957789xItSCijNli7K6Dv}t>yMN#?Ws+5dX
zF0xJj5gH47A<B;I-AkP!OC*o$KKRwDh>wKzW;Ce{uC(#y9f_7$VHePIotzWWS%Uie
zi&2A2;AZYR5!{em+yNlCBU!MN!JDyuX->MHlE_=;LH=Ny4CNp8J8Dveim_xPiXvl0
zX9h=N|D3^_s?!ExEkf)Kksm>MNegM%Z880kYv>~4WNF^gdG7UAgNw1$43bSQq~8fi
zY)!boN^FZ4cg(qPKY;ko!0I8TYW&7xD9TQVgPWjv>W4cJc|6$2JZN3v8{v-QvQE{n
zh)nYaRvYy<p<{NCFIYf~h3(u1uu|J6WS8}Wy0>@wy9Z*F<Es+7+bi^eY}R1Q(6FAz
zen4Kxh6sMAgrLH;u*+H1!(Nm~W;+2XIY9o at GM}*Q(W^9rl(u*?T+<m=LWrAK1(YVM
zkgx;cllY!Vn14tT$V6F-ET23XEKV9yMDnnEf^#)eI%C=PM7QD7&=gV)DViw<q at djQ
z_nxx=Tk|$r0*N9WSpfD;(2ewkX2EXmq9 at F7rco5oMm4bCxA-~kjU=w8(HiW?c>CF)
zpkx}Z+)8b~;Rhna8mE=m)FLQWh&xJE^bI9V5|-S*9p3Q at GO?$>|Flf-cwymDk2kW)
z-LQPoL>^Q7RT3p0Hh3?Yqh+>t<e%-Aw<WhC^4)pZ3gzGx)ZhbyCbx?Tl57p^Zms33
zZ54}P5%+G^e|ls1?t7_i_Oy%?Un&yp%A#1XnlO<wx2!yE9A$;&mTi5frqa7wwe+R#
za at U98Yw+W2Pkc{i+be6B+>mvu!|>$pS^*^`i*(}wAz^vEm<a12*+$*7oF+Sl<r{v-
za>dLSX0+S<2+@#ti0`PiJMh_^!5uG1r-9_27~wv2eH;r|ljU>kj4*u+2g!9U*<f{I
zIFUR_jDdQpGjgyTg}F~2$wX<|-$xbu at 4)Ly8(#LR!giLDg=^@s38xH8(E`CXJ#akQ
z8dYV}5uX#`hh1#TYx|4^zpB>XXA}it6lPsy7MryU?wE}fx~4y9>2|Q|uT~`3nnp44
zB+NpFVe<-ZI%NAFa5Dr=Gq~}x89|WXVg!iZk_BP1<B&kuLoD7xU-Qo;KL3Vvvbl at m
z@<xMSmNPR-69oJHDHg2c#Wqm!cf+s;k1kvfXd#LQyO!DByS5QykV52foWj1Tq|Z`<
z;Zsby8K)xgj;*>$MDimLc*(>*2%0$D96{b4o2ucYXWQM=Z>L}bH@;3Za~LcCv7z_#
zbjZxI{NK*<9^emu{{G-Ok~Vo at 8q{H`KF;sgANliGGBJMp`Ckw3!VifV^v{>LVmbWz
zG&9IE<k@~+_Hs#tL#E@;ojcd``6aGM4u3wXSNIqy&pw?${~+*xN#uWw`Tg1F_wN|i
z|A&$P9}@YmW(ED()6YNO*PqpKS^SWDzCJTd;LqRdZ!kkh|3%<ZC!Z{Tz9sbMc|JIN
zzNg<o=AW``?tK^94}X3pk^f5E^7Z%mSAj{L{2ZsB=lACaS)P?DbNlI|hD*u6-HquD
zA9oR-7483#w8=xl`YgYpcQHQ0pPvmHEVy)ch5292a(F%u^Sa5yzrV-s#t(Tu!t3<#
z at e*flwCfKZ;SHX`_kSPoWPTsFvFAOOLHbAX2<tE5H_80-AGXx<%rE^jd4%~tf}6?w
zN16X9^MBGa77GdM|54xwd5im(U)Q(u9?KBY%U}ERuOgYmoOu59>-;Wf{_uG|pFcl>
zyh3}Q-^asT&HR5TFNcHOI_6(ru7u%85}*GYpO)0ledAs`=j{~#_0RRd7w|(cpMU-#
zyE88hi{l~xV7t_3 at u!|74l4P4A3t-H`Ts7N7{AAY>!)y?%<tE89`XTeLHe-%QvP%0
zzxvzc-+|1@{6604w12+bOdR3!FAeiEF6#9AEmN32ync0 at e@rv at xT>?v?^Y8J$4^Vu
z$F7a at 8|LH3&VJLbH*r6CgwMYT_XYFqKjznse9Lk@`Kn~@!RJr$`FqmI+<DA at e}Mby
z`15||50bf$G5?O+(sz75j~*P6|Cdf$%71%>Pif~ce|1FuFW+q`eLScyCCuL)k^kxU
zTFS3o?Q;%){%Ph9>G#FowEWwz9iHFrI`>l}@;~u)OR*zpaG%egKfwIyr#Sb=|70na
zf*U at chkp@3AY%2_)&FcM&%DA?z7D7Vi~qhlmmBOJL^98Ng!J^#%dFJj4IUU=Iw8}r
R{BPZ5`9FoYm*f%V|NkG4mR$e<
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/icall_prom.profraw b/llvm/test/Transforms/PGOProfile/Inputs/icall_prom.profraw
deleted file mode 100644
index b8d2fa66b3fe7b0b3e01719bac71f465a9f89016..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 536
zcmZoHO3N=Q$obF700xW at ih+Rz#(>hSXnb_8GgRQle+X!Bv-0j*_5Z&!|Isa_p$rT#
zg9Tr0R`|PN@(G}-_m{bRxnSyH<~3MC)Wi5NeK3CXOyeA%t2#9>{R^P>!Q>|p(0^4`
z!z%Gm-hGc&%eVP|q`5NC^e=$wZ`cKK2NTd>WH<b}+WXurW$JC1{T68Y6RhyNA7mZ~
zFheK?Sh&LMfYAoV6}P(kjr{%2ob>cH)k!{c(&v)5-?qN~PmNuYQw)!}OG+(!{zP5%
z*^%W_pQ%n~WazIE*v-OIaqG12nKR4`EYgh2z&2O_Ntl at +8fHH%oM7&Ng*!|h0PahP
A5dZ)H
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/lib.cc b/llvm/test/Transforms/PGOProfile/Inputs/lib.cc
deleted file mode 100644
index d7de23c1509dd5..00000000000000
--- a/llvm/test/Transforms/PGOProfile/Inputs/lib.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "lib.h"
-
-static void callee0() {}
-void callee1() {}
-
-typedef void (*FPT)();
-FPT calleeAddrs[] = {callee0, callee1};
-
-void global_func() {
- FPT fp = nullptr;
- for (int i = 0; i < 5; i++) {
- fp = calleeAddrs[i % 2];
- fp();
- }
-}
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/lib.h b/llvm/test/Transforms/PGOProfile/Inputs/lib.h
deleted file mode 100644
index 0a9f96226e63c6..00000000000000
--- a/llvm/test/Transforms/PGOProfile/Inputs/lib.h
+++ /dev/null
@@ -1 +0,0 @@
-void global_func();
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/lib.h.pch b/llvm/test/Transforms/PGOProfile/Inputs/lib.h.pch
deleted file mode 100644
index 3916caf3980319c80a99e741e8f2c8088d4553cb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 221372
zcmce73tWrs|Np(MR<>$O2kU6bVV&0jm9Vzt%#ibGO%Y0=$SHS=%wxzo=Ta!5A%w72
z$RnO1<UE8B<{ZNRb6wkz-}m|cUa$Y__5b&J)b9JfuJ`r1KF9a<x%Y^~qFxkpf(T|3
zgjx9^jY92JO7*Eydnwg^a;jIEnpdP2wJZ^OXoS2hArF3s at gu#;s2(*`ueEBwQXvnX
zg+=uGbt_BgStayPP<_f|-gRnPa*5h2OX#B%dNc{W7E!&MWFGlwDy>bv&`YKEs-pT-
zt1|*&aK73jUj{?Gj6*~b|LLw at KGh?vUk}exs&@_5$2iunOy-fT_Fjw7!r4AS#RRh?
zi&3m)9MUm&s2Ih3#$FxUw1~~vpTs!KX6zO-PU{#-0kcrY*w1IORtlK8TqfKt(J_CU
zDzMy@#VCTYeC9Devqa3;*X*&xx<Jgx6)<*knJ{7}n{klOC}=i9Y^UThcM{BlI!2zD
zafr_>hM~VLY(^<z at 059|ggzRzU$)Q_)KvXT at f9sWA-_Kh6A1s@caD%(P4#p(sS>ti
z91<{3a~VajmXg8hCtw~Um^(on31b&XCt$J^ASxf8|90z279(HG*bj=3Fbc(tgTFr;
zwCc}iC2R&LbEi(}0GkDE9aJ%n>6id;2tH>qa#f7N99W5QTE7q|*1omT{=6!+A9z=m
z&|{0xqg3q&9~4wCu>H(xs`pwoFJH(5pVJ6^RY(UFvTCZ&BC1cm+FK*^RH(hfMzru*
zEAs*egzH-HCaT9;a3z^nJ{sgz3L_#efc?R>cp7jk_3s`*t3V!1^#s3dqI#Dh?-tdl
zz!}xNGNBJR{8||}CamXG1KupT<PCSL)I4x-rP at n@mn at TcHL1O_WggXlgccKfXp#H*
z{9MntA)5U)nO6<+MGvEQdc($HTUoz$EoxUz^@eM_B~RGWS~W=X8$N%H59}2}5QIQr
zuw=i51XBsh<umtYF_d6i_{?SIYLO)l>9U3%6f<^#9l)G?26_fY2V?QUr;%NiI!3XI
z!CKved059hOfd7=3~=bvFoI+j@{#RWtWM0G8b&U*Xr2mz at 00+tD)uP2xsq{O%-pXx
zEE}zouVWU%rIrDK24Mn0a7ahc9lc>okONB95b&NQRBt7iPv{Bm4YooyMK<)rmc>RZ
zp?H91N~y?{TmEGbQVez;u(C!7diMtN{;s*OurWR=st2HgwrYi*)k06KIoh>V*vp!P
zzaIaVC`2}9;Jaw2Vx-ty0dps~>~M}k=#wSnHL1NpGLRjmB=9yh@=r)@kY>WfQj!57
z0JA}};QWw0@<?!d$Ra3Tu&!{j!Mi|CA#V$$J#a=U@?&r!aQFy1q!`c}UYJn|t3sMG
zB&(!n<;YV?@nUPKzOY@`G<I;mpRsY+?B4)>1>PVB at JFQ(f(-=>vW6ipz;!1o8T)mN
zqguvkEhAS0F2Yo at aemTqw}$`9<Uci~&)i{gage{nOh|H&RrawN`}H|M$1KWX><3r+
zx%()`G8wNx4I1QOlX##!jx$?{kf%~-<kNqqRmg|nh2TnhLmbkv_k|;`ff=xM2oPiX
zfSf?9qZe}-d-&kl*j7mlm<>tmkWNz;4oZd$^Lvca=w^lBoH!yNGs5TH|G{JVXTl)?
z7;*^?Ssp4YLLZ3pEVZbe8Pp6ECj=@GU}+E)F82{k{e4!gv);5NLeF|3$}a!O<g{64
z`}j-{;-HwB2T2+V0_YBh+Hci{PfsP7#h^>@2oy|A2;9?P9t~p$Y=Zx9)5P>-2u!g-
zxFX2 at Y?R|mvY1K`7jlA*36|OidjPd*8TnZZedr(3kvAzGC}ZNV0cTUmyrKF)_G}XJ
zpt384zObdRtZ-LDK>W73Y?NYAg3M8)sK(hC at -Vssey5`P<fuiD%^*p^qELllQOFYT
z0n!ZQC8#5LP@<#+k`Kbbuve&_aH(XRmLSU_UzVV>qR%w|k(&e~CCjPaDz)DtwRg49
z2hw_z%nQP*6etD?Q^Z)DP0mw0{%21$QUSi{Aq^4)X-mg6c%v9;{$Li9wT{n(LVpO;
z1}Lb9p at 8B*N4bv6Jf;&^{yuw$n7Iqfsjs~|bUN$*`k0xgL;eH10zLqFnl-}zx8=l)
zQgAh6LO5-d$t?XKw_FA_1yUbWB!~tSB26;LNnQ%IXIQ)mQVN8ZLI(8>Y+xW^`KUno
z<v>cL>IqpzJ5={jPQu|L^Qe(|DGVjlPbu^)0*gmcnt`EUMrjnR?3J&EN=1v(V?a68
z(?H|8q5$*&R)SG7FK3gB>OkgUF0dxBGZXQspX|hj-~0i%IiwGqgL8Fa(?eqB4h^GN
zz&NZz$p(2b#D&p`SeyQsEoScHqLNgkVnFr!Ny=E4{}@O9OxgnLKbC-4Q~r9KWcSD8
z!w`gAR8Jx7!7&TDOx9}u=3B@@Rz>*?YRHzL=Fiv+<RW|&1VBI`s0~|#p;!KZ!46=6
zu?c7n0}`;AhqKUD59xB+{UIY1a)_nF0$lum+l$8^<50R*qRL+gN at D|YW3q1iu at DYg
zP&s5wNc4GJX0eX%{|5}X at qP&dz#yZsM*d-F at b4_f5q;|XB}!Jv9~h8Iq5d7l3G0{H
zqID43a^bH^1c?b8Szq3vECBJUf%Js at 8fre|Ztt)$8t)nz?`N?9>QM@$1J~|+nJ<ih
z@?m$eIV#F{kj7B9=fSB#>m7_D6Fd>Z9J1|CU$p~mXix%$^Z=O(RCZK{gIGT_iS5l~
zVR}IIsiPvM_A4xdDf(M}sFbVyDusw+h6T|KcYzjShUB4Di$wbJ4i%&fgol(2yXt3Z
z7-&3-`GLSdlt2en>Wo<946j<0tWlsNdIHZdfmo}~NHL6%dH>4 at +G4{9q1RfWmmI<V
zz65QZ;jx;Bs0$UdH^{v*RORZ_89R-$fnWfW_EH&(iE#w&uu%e-3LL;dXn#Jg`1#mK
zqiHop%s=>b#be{xW+|%_sufO(P`1LvEQ7wXfz<=w!HnzI;~=)-u^tHuRkm7Wdl?@&
zAZuacA*QJ>g<<@b&4vRV3gg=tZh?xycvV!7FrKa97G%5{A;@57xHfPgqcO7~H$!fX
zv2XrZ?Io8%N`*7a?~2cuX_V at B$D%DV+(pceCx`VBxdWP#vBB^_jiLbT1iJxyf;o&a
zgHBbT2vB?pn9T^|Qwk*oDhU-l2w?o+pn++)=!kKIXQ^H~{20z_sO<ha_B;REUTD`1
z0RK%6(bNAp=+|*j2$afT#4vGd!&+c9M37O~dx6qQg*?=O*h1kL+yfp!5TY{(4Ej?M
z{~0?z+IUumLIb1;opK-t00qcm9LJOoxF3Z5F`ZIw3}}^*hr>){XQpRbkkoVea2#Nq
zh7=76O at AnY@?P^(GH)olMSAxFf(5!p=T=$--2edD67dfP5DLhP`8qy5)+iTBn?Rd@
z)rnD+F>q4jQzayE4W_85&5 at IBlyQ*|+6rD_QIm`V4+8<?0)b%yjX at j(^Q?V3RnE^D
zR38Xq;BjF=lZ}%QMT5N~iL?d326_|#M+Wmk2t>sj#~S##@e&EfhVm~yPeH^C_jb^^
z7 at eh%{tU*gR*M3SCo%n0Fn|Qkqb^`Xa5_V53Sp8bIA9nr1)lQ}$pte(Wo9Xi1CcvJ
zs)CbsMY0hQ><Rn;XKZNo0QH14&a!efKsO^mqP50JI>wG1L=7S9myoDhv(_4C;D}Y=
zqpAiHrpyDZx>j9L^5<0O{1gkA#ZWv{u$9(^^?uDp88J+<z_=BI>c9!~d<QBJZpjqE
z+H3xtje8OvTTlk at 4U;VV0|R(I93heri3VF2Y8Xn8z=8Lt1p0gpnI8hlXo|3S)X&1Y
zH3)=@9~iO(98-nJ7*O~^Ht-MrQoSM7&}qS^J)DLiHld<I<FAu}+e5ocuS%p30-bEY
z-A`v>H`Xb$j2O`Tf};qWxT1{nG_VHq_erc4o<^f#-HB2A0gI~NVj-VVh!0ob<8Z8H
ztuPKZ<UQyN0OzG$GcEw?#Tz;VTLi&iXMFGzC9qoLpTF90B0IzBRDYJybCza}lXc!k
z-J&|F!3+gjL(sg+mx0rIgoTwDMb#h04gtsKgEGa}jEm{>8007HO at 0t6P%WVkCN-`N
z2fQpq9$ABZ4U3^Os{Ul}og?IBslD!~MTh?!t|zOYCa~WTF at xo7XuQD*_g|7fQWItq
z6*qo??FZ@!r+*c~fFtl>zTrHrPhI*=u~r+gL3o*0kq~+x(00IG6gADn3MCSB{9}}o
zz^(ufIcUC)SV}V}TtW5KqC<?KRTmcZ$f&hEl3DsQg1N9fL<!_t!K&s{K{1e$s)RlY
z$YT&);>Z6JK!Oj~S?DmzS`}hcB~O8Z7}Yj?i3sCAHBQ}yn+#ABSazX?;WD6D=!63$
zQzP`i6b at 3EN0|7TaT074ya^om_k_)wkn>9kki+5p2Tc<=-$Q(&h=qbfAhkevLHRh2
zV-ATqRr$Y6LwOcD95C(QAX;`YijG33IXw_ at N{nj65z=f=zjwiaNduq2RZHYp`d{YY
zfYY<@f0<wL!MG&}1F8}nAqsWSlxnUnPMAUH|HdL{tyl)f(juFJLiKI$-xaU#-aw%{
zZxs4>vo+U-p9)nbAnEUa+7cv#V1+jdI&!Ir!B?U91Dnss{HX~AJnBgTCCh?@9P`dN
z^=D-VdxAeSw>JN#Q5tYstXLjCi2!@?)~H3ZjQcVK3<CJ&BDgj{Q;6l%&7dSTPfPV}
zQX9J85P<n$D-_DWqJY=KY2vd{tU}z8ISBD6K+O+0*5>PS=wFPF;UEbfg;<aPwFv(=
zt)jtsN(O6+(kL-L!veto!~D at NYpww_^WZP$qS6@^k`J{BiW}7 at Y|J;KRB#4Uf`gFg
z^b17_Dnp?JS_YsKC26z at CcRL7L>*fioWfXr43>brt1k}ry^U%^M=(&^BGjRU+~EQD
zu{CK!jTms4HMZ;WbjA~+PPNgvDjZK2sXd?xg4$r<tH=hB#-I(2__u-z?HOLUv8v)-
z=!FAOz at V@l=#Cg8fcwp;19YB(vlbOzR(R>_eOQF25vBl|W{^v{KbuoI%1V$QF=BA0
zGOBl2u#Z2pM1$A_&>v`wKnwuuV=eCs&r5(9gXhZ7kw61^lIPcaEX%5&VU!vl>(pK~
zDA{GSv^gYT?t>Z&3<Ei%rpmY|C at otEol_8?BEUEbvKkjT7mMBB00%S!<!4VhFjLU9
znl{)t7U;50RcnN+R{MbWBF%YsHi~wX)YofLYa9h7FRX2d@%b)P5pwE{4}lzM;Ca6;
z#^=8~{plp&bkNk$>WstTGzZ58h#K?;$h)g?(he{Y8%VXP(Krx11o?@~D~#9OI7)9$
zR=*KOt$9E>0j64_u4rR#P#Mq}$oN1@*dz7lOVGXE+kpC%B4uO at u}6`o?|foj1Fo at 4
zC*Ih at kX}GK&>9p~NHq}F at EItyQcYX$XP5^`fkZ7uc-I5F1=B;?fjkJ_Tcne0HNs?5
zy~@B4dhP(F8ax&pnCcZaCT<YwKEf*vAXK?Y2t$8d_zgy|(+C551xung3(YX57%}ol
zG#h9RlAxI=$|55M&b9D{gH~zWIu1~v^{71sY+WZfY#a+N2&Jn|?FZhC1;!;lD$%%}
z{;*aofdd#SpSuA=htyYY1c2F~F91N at CABwnO7p?})fsJC8Po?}4Glh>s at gaMs7Q&7
zhdMD)$;M at N01Jbx1sqm~&WfO0OhvTUjFa?D9e9HXXH<PY&sW11n~NPc%ZLXV1u`uV
zS5yFT1=q7=$ZSB5SXajyyhYgTWf~*|(0^D&>Q5L at Ru=BD;@B+FNgn at 4fqu7@WUg^G
zC;+?#xLqDz723{4aL^RvqtZX)eoBCPYS{JA+EMe3v%&pA`Jix=jRg!K_o!8?Q++T>
z0NDYk>J~5{_!`m*?#`+GYN$Y*F>{K^HG(zc@)C5~I4u4NscAGqqP~v-hUV^Q^nWI_
zf5GW?>xku%hM<84VHRRM;5<AyVTAGWjVtK`lhtpsVSj2~jv9`saD>d5U_?wphexP^
z(1$M43382~@XEbL<^h2OJvV5bDD-sGdyf&?_?{tYpK%66Ed)6P44fR{)shlV(o?CA
z#>I at a3Isa{I!wYr04jwjf+Xq`Z<G_Yi~t7Mh8E=wL%#~qSKROllN>P0QLKMo2L1{d
z;Ia@@Kk>HyiI)Y!K?;OKh!~J>v#^dh^amvP2Jm;N%{ub3agT;`AZQRN#y~{$LWfBX
z{{evV3<@3ae{_(?iI0_?@W&oe+ZU{-FIL9FJln}&Z==E>XX=9nLO}o48ax<hvZTj<
z3g=m?<~7Hw*!d?Ocs_7*$be9u4U&ya1fNHBQ*F?GHt-YtQd+6stX}nkQ^uNLP(4JW
zfSE_aE8+hEfZUe{vw^Odxaytp=V2Kp0aZe+`BABVEDSLOq`FS#1?8~{84K|{Xn3^!
z&lm-un<OTy)to;x3*G~Lzh*`bdtwycaNdI4hQ86F*>cXnE%YZepbT~Dibclt^!ya}
zl0f-D`{4Tstl at Kw>*;AJdaDiD7fLeH8s2wU)N`Xx=+^_a?*qaB1<;U*`ScgfM?gV5
z3cOE%&Ixc at _?KMFKhV<<{Cas&ZC4|rQ-ho`<B6-mee{AuKp;+rGPyph at 5n)1twbk2
z*&GJ!0J_fy_rb*-kW5=QM`9d<9H at c9g-*G^kV<qpXPRR`#n)HyDqQ^`n;J5?_-*r@
zqOyPhn9zFz-(c0wZ>CQ;?^6+}hXM*+Wuri%$mRn5ezwA;#Q?TxfdLG)5D=Sy1Z`v?
zzcY)B+0F4lpr7eI3l+=49F(1mwOaC^`DXuvi^Y6yzD*@49h(v=Hf+;aI&z*hM>4+N
zMMiAqvQb}~<LPNWG=_``K>VgTlD<m}-yt(J71bG6o9|J;EC5k-y2d}|;b4Of%ZERP
zqfTWmFl-PW_L9V4*~^<*3XTNOB1EsJ;XRYS?$PYqH1iuSVp=~BN>KGN>ryW5)y#{l
z!Rt^J`}IvFBc3R*Ii8lW6C$3y^iMe;Q9=DxR}5=DoIqb4fY*k_xbX;9IEarUh<#)m
zF^nhNJHP;_p5Sj#z!m{nrb5ev#@W(bQt&2-_Ma_!5FAl9+}SbEDLLh@{~;WZIygP!
zrah1|HA)!hJOxYX-)q5Jj^=X1w;s67x>AOiG4zL&h0Ub`{s_ at mt@cvN^d#ixE3b+p
z{|hjDO`urGfG<t49G5kdTdx*`YW$84Flj`RGHRMb!YLXmlA(*hJ!X^)^s-3k4Mz^>
z7J_ln*<(?;aS0g at QiY!Kq6|j$0H&_5&Y+QIBv`;7Y#{D>|3{^RjY>Uhn8F}0lyoE-
zRCU996o at 1&DXpEm!5Ile*7xcw9vfvJ#7K4Qi$-CAT|lKNlYv>_yvr+6XK*yXo*_yN
z=?r)oa9!iOm}YOGFxmGC+Y-Lqs6*r1Dw!9wO at B!Stefhsgkpg_K>yAPb!8N4&oD_R
z<4$*h`5{Z=MxL?1gZc at 1(22NhTtSE#rwqM$)b~LQy&kASnB#<v=wign6EpMKjMGX~
zfA$0a#hDk*&8%xHjpE`;CWLp-o^bN~^`0<F@)HBMDG!U$7vs=D#L$aURrfVSGHePW
zAWI0}QK=Tv(a~QC<r&-p^$O7`38-`lSWflZS0!xq-}=))L4gs5#0FIsC^u>j4*laX
zP%;V1Cx#P+j%)$n!hz%hx6ro(3|3|4XQ9NK2geQxb7vB}7jqzph`wQ|=a9c%VfPDf
z{y>P52#{(hg^SeTe4i1}zAJzlMdEG|a6<eg8R!)MdV$^t7EMBjn-ci;7;uA?xTO7j
zei{ynd}e`;ZwW#H>DsSDr2rLCIAQ6}MbPK6P5=4j4V14SMFOirhKGa=kB5dcp#QlW
zzcBy|_|^h?AqTq2LPYuy0YCk13E~L+oxr0J1j#k0a?J_&kAVLOswBX+hgA+iAqbAi
zi?;K0^bdU2TOGY2%j%(y{*-U^NJnoZ&1UJCvjk=dDywH&s}CeAA<62Mn3c#jo2jEu
z)6x^Q^l86+fH99$Rv!dbk9G7%O8QhCeLCNa##XAGYAV92Dx8#}P<e&ZmWp6Sg_D-%
zT3hZ{OK~Zobji=?QbX%jQXWz&>RJ}=TwU%|n(kDV?o|5Q2N<KE!LX3E|7C7 at a8bD<
zMj%Y`|DWwBk!$sUZ}lRH^?=K&;}hxLW#L_`Gs4O!UCJtg7ty+um4}p7blF1d0;1+r
zbSV*ql!c=`ZV}<%Fo4oUnbEaG<Rs4sQ&a^1yi@^5M(Em#U`>UST+}t6)+NiRG}!wh
zK&Wu4q_~!ahn7|ZD at 9$iL?IRe?#Vw^Z}wEoNEEZ)aaoCAL9SI|lGP)=RU*ksm6)BD
zm?dkFxxt`~8v0YPFSgeoHbqwc_wm0h&L_e at 8C>Ys&3|_x6E-&ymgZYEh*@=FD-$-~
zAZN3igo>x&gR`1f#&N~G-tdVH|9<{-1^;e at E1@NuV?s|4mt=9nWhU)hz^Plp?R at x(
zKf#MjPEMK`>gP9Ua&laX)OSK+f?vYqX_Mj;lT&8;bn=UjpOxT~G$V0J?1W at r7{d*U
z4G8e>6zd-x6dfRq4w8n%c8(3=O9LlNjQ01B<xlA7-zmCNY)mH)f^d@)?BCI_tq
zKWvk5^qUY6L^xqW5GDe4e!T+`j-*CGN5SF?@NWtp0OMgWj6}cKCi(&JkwjzgP4wW`
zeYg;yJAg;m|ApTI^hpMhtp5?fAH0O&8sost3gfl at FUciHEEQaGsWOUrIu|hIMtr!N
z1OI-?0H6PFepKcM$Ok`TJ-lma1vqb)I~iU6h<gr7HX1r4n{y#+GrFwJ2+OYsCRBrp
z%7aTPy42DR&>w*tii^@iw2({S@}<VAQBYJKRxJv#oyupu6I;y?6j8cq%U!D3gh(sY
z(f9n!06MEjY^w%HYdWjfN#Jr20#>gzC{4Wte at n8`|Aqk#Dyxqgs|2pqTbuw5mjon6
ztLI{?M*<ea{)a5927#3!pumCI2mw-JDpn8JT4fu{Ho5KBr1nt2(TVE02<R7_IMnE1
zpDl9+E(u2u)F=~ry$^Rb*h=cm&1=UsBm7ck&hU#*oDd!FHz_f3QhcmmTw+2jc3JGU
zdWV(Hm at uK4>*5Q)<k*?Xeo-@`r_G$0I3r=EpSb5h at r=ZYlL4jow4{{enSSw;rM__)
z<}&b4f at ll>cF?ojBE`KRa;W7w0St3ns;Q~1ase?sGKQ#w=l?(C`S3&k!-Dl>-ds^+
ze>N9B{`_%+I2T+Xhz#>kw^6)wnkPI#-jDv88UCWV=o&>L`r88jb%cK?5lHJmw-BT8
z at EQG32o;k|Ff~ENk3bVC#D=)?D{zAf7YLa`e4pev25vy%#1J&%$BzpRa0A5yT625G
z(0y=e3Lnvu+c#Yr1(#?pT3K&YbcMqH-+mna?E&0Jd*}lHqH_si0Q{9&a77|jmb at P^
zGKQMfLXg>y2xv*=IJk*i11K at 8S_s+`4gr*^Ugm;K#VYIIBDg_%!wnOzC{y7a0CU_#
zkrUaxsw_A6xHuc~Cys?fNKBPUR{K!&puqOm16V*!t+JrNB9||jaBT$k8wmt6Atu6N
z6^OuH1|uj{AWP&db4g5u<r(U4qijfp_sw(*hjew7`OzR!Ve1gk7QD<&KoT)k<~8~|
zRVHrk;%h{};Fv0~dS<UgT2-%AZtkRsf6GOjox-(O(#>2z<8g$F(0&sTsohD6T*h_I
zrX+oGi<?9^n3zJHCkPd}$n5=+HxZyF_|a=zm94j?%!17`VRS at xL_eG-27|ElW+E~T
ze`U64Tvy}~=*I%txETF{A8C{|&lXu4vMTZ?w{(I?0mRjGcAK^$s)KM5&CTD`+<LWJ
zcn at c>Lksi5EvAdiVI%1l6n#2ni|vR~B21bxIX>BE^0aOQu_6BGK_pb_mXo7L&%D*k
zKJEVa2XD(NJI3~$U3vX_)Ol|7OY`t7+ck5Ztq$+Bsaz$i3jX at yQ_21Xc6G6>+i!gT
zDP{ZUPa!>h-dtEdcjnjP4Kq*qyn1&x at o48S-P1-+D*o(yB0TQIx9=-7%llaDJM!#R
z|KN|?z8~u at t$dO at f4Gpb#QBQ!@Xd+$5A9=r-{vy#bDCN0zA4>#tiLbr?mx(Rz>lV;
z&pv*go^Duj?fbVt?;l6*wt9N?<Ohen^A`rc`cXaX3 at vGzqTkghuOSKU*TxNg6q{`s
zAewV|cyZyLiGTkcwXf#y>(}r4xGiYe-km)~DH_s!iw~h0A$e7qw_Ek?IbD(1{zAJM
zt_$8 at 8yoT6yKIo%;*DX^rsaxBH$HD2S+#W1kcErvr)j<K`aj<5=y*}h+jxA($V>Ho
zANq~y^LkqNjiqBeU)}Y#7;@{HxGpU`k9W$yMO>%Z6@$oKuab{6X6~?Va_ahz{b~2^
zvv#jl4}KEk-}lK{N}K1k-=43Gn-CGy!Cd at 4Wz<#ozlGM_`?yXu?UixzGcRd}d5>J1
zd%V_v?I at tW@4IXYH7L15TK&+{xCB-7`2JgScGOB4^*xnQJ*vM{jIHh?Yu~1N(xATl
zwkD%i_(Z4J)?ShJNjMbw;N9ZDjiJiov-_Ve at tv_@dOiQdk#63NwJVccOF#c`O$#Pp
z&3NV8ROobe02z5<=fRj2j~d?GcYhze*|ciq->087qy*<o7*yB!c~Y?W8kv4@<<MC?
z?t!gs7rpZx|MG^zsDvvMj(c*M_sCXef0egf`RsmulykY6ooHxG--MYX+TZOnd3S?+
z&#I1R4zF{&aCg^hzZWGDOa3N%43`XBwZM4=xp)1JzSGyf7Cf9Xx+yp&+e=qrE!&>E
z;k`+pldodEw*6I7HJsNq-O}_4r>V~(uFidT at +i_~{G}f44}EUzdUso3a`m`F6ON1?
z8n*1yqfhU%cTd&qs=CLzT{2G0J~n?tt2xIn{$Qrvf3karef*oh5)XA&vi3wjJN9VK
z(1yL=ByaY<8t~%N7^(2o?U-|8N>)!{jM;v2$B!-H<u}T1rj;EgcJE%c%YO5O_4@}t
zn|gf_!^!W!r*`*uo at -raAC;1JKE>*s)7FEuEi2EOkBtdX4ttgx+&b{);KZ9&cMi6h
zbyzGpxllaU_hZXT{<M%TQCF_tbiBjtIY!<8{=F5!`$swjSns{l-|x0!#sPWh`EHsQ
zv$or>c3=Jah;HSqlS6tu+H(5#@WK`+x6R)9u^?ni`_ at gjii3Ccluu7veLgLArcAQt
z#yw%;)A?fyJ8OqeDbvuyV}xI}ZMAylnfFf#uS3j<ck_n5+J52ASUSCE>9xK=#j8tG
z`)p=h>JU70=kc(@+h)NR&W{=4GA!w%<Mx#)TVI{AzO(LY at yu&)`tQ=dNIMZ3?0NH9
zO|2XI`>agS5w8IDsavhnaxAV4J$ayb5YhVbCyN0y$JcOIl|A_T(1q{o`Om8l^f@}Z
zq<d5}ZO^VZ=bg<a- at P_q?N-U&^{4C(gkKnXgfg616V`guC9hQ({n>NO&wV$$louS*
z>hWhufWxaZ6FMj^S1o(Exb=WGyA~#GaG&ieT4OVPC39Ku$HMXhUB;KXcgQ at l-MO3d
zyVtelH_bRpx3Ajs<ALjr=TVH?E{^GC^XH!EFMWOQ)Z>DMPsi?7y-8WVg-?6A`+IBO
z+pT=gzM`6 at Ih$#2FP?C}JYmb8XY`(P-*<4S&~!}O_&N2Sf3m3Eycg#Z4~)K=)z3Hl
zY0z_}WSYZT%T&^T>ias$;t8DgC*B>T%>Q`qjSVeg;IdNFsAYmCB`x_%j>LYzsLD2X
z?W)|wE&PI0*6*`Fo-n$`JtE4JwKjlF8+L)AIh@{6Qd7k4-;tiVZ}eGm=n?gjO}k#u
z`d{|B9Ym*H-L-PW`7%L=&;KksBD`!DUax*SV5-Q;Q8YEj^5UX)=DVq6hjFokFWS-D
zs(bGEcsPM`UBzFU-c6j at K5S~i#Fol24?J7!ymV&q>Tb)QypcA{yO*-7W6Xm-TvOfN
z1&fXiesO&9{(}RK+kbpeEqXNaEvK}>t%&cJ9pXRp{9sXP7xVNP6^!9ttA;tJl=RM=
zpZ?h*fBne5MC8CjJ*vm>JHC6aQHB(3T-te!$=(%;%9^+Rs=nn-Il^81Ky&8)lUmc;
zU4uG*-mh(OFKFDOhX=;qXOx$j%%lVh2R)qA?Vjt71q1qYdp#ibg{mMcS^9Bj_P2eU
zt{dt{%F@=>FEJUrzJBncmiBFT(Av))SHYgQQgG%~MTec81G2fx`&ly9 at Bers_S}ZB
z12>#{Y2VUYHl9c~xwQXN%1+yTk%#wsMeKQ&f9z6&M`x41BZ8HTJ!h7NCVV_6%YAms
zba~70CSUR6uO}kg8UC62ev)yDTuwB8VU1rxtC-Ij^;fh*DWhI==1O(Ly^jToK^N!F
z*fFvF-Lcn}eF>iMoEq)E at VQCHX){W at tZd3D^KtHG;eBXrVpZMO+^0*@n)(+|+RyJj
zzjLJ9?Y7qy9<QEx^@y at Q9<fK}$J&^DtK6==c>gWg^^D1$kstSp7dE__^?Bf at vs<$+
ztM>SwJ-{A%x&Ps}YtQ%Ik+-)S=dV4M2^G}hO|GJs%*ii1q@@IG5z$}D3cD4E`a4V!
zwL8&TUiY_Xjz?Aur(;HiocsI;v2Q}bQhqko>S}zd)*<Hf^G<t%ZA1%_I&e$eYWi7^
z`7%-BC=x9pt^}N2Npb1^C_0Xp<Y{p=(~MUUV3{p+SiZa0qY?Xuzns0sMnoU%!cS_|
z`z2-DiQMx;6uA>UkMG%gv+Ln!j+Sk$6C@)e{0BtT)PyJ$ybtj;s+3-Km;6&!e&KVh
zirfmO)vn*QxBUvA(`=j3iy6}@;xhKe?J+NIiWPQ=-`uHb@#|^an6)J&^U!y~de{=t
zkl_iVGeReNY$~i+<+7>f<UoznOVa$Pz||pf`R1OkW6yL7QYPj&bQ%zsY1P|A*3EWL
zn-=quJYG?3QorPGTvq0vzy0XO+R?{-wv6A_X<o2qsBY&pD{hlG*4A=$kav|sW&6ps
zL9^QoIAJN+pPinuXS8G8lxv!yb~AFP2~*C@$+o@|Hn`V*^Y%8K|5|0!xQ2cDvh>Bk
zo1X35f<kk<OdMm8b+^PlrM2w!wGok52Tto0FPePxW!=PzBYQgCY<E?BW6*)+QKm<z
zBj?x+YZ3F9(%!E2!^ANa7Gn1m>xPBz3>wA}431uZ`Th=??@NtWzdK)P*WcB}%)Hyd
z=I{KaH%|T4>c-$(38G^+lU#P*{kUec<qh$zgf4LTPv3(J#L+2<(>66cvA!GEuIApV
zS&w?37~(l3q_3AUVBMh-s+aL&)N$HW<uq#ls=zzf?e1TNu`lP0C^#}@vhSpX#p|xm
zI6G{_Wba8+7q2 at qW7n0h-5*>&H7|6v+kDTyjYDcC%uAWr_MhH%ygB{$2+j`~Y}&_{
zQh%swY#e3&;}5NRpPK(HQ+Fe5cwIwghtLQU at 8h@IOXl3`z}eBTUAO0BY`amTLtC{i
z2^#sT4ey{uq&Q}dB1e93<c0cu<9&LheYnTZFJ?Q+O4zF{!bAF*?D at E>Z{*}oJ=-aI
z^&Z#GV|7EH!EHm<=bHy4T&VYW?vvZ$d{)rSz8UMeQ>}YZ at AKMH$Iff%kaswEPJ2bv
z^h+Ha9##(wsQkP=MmIF4-Iyt}M_vD?T}U=}UjNH2^Al{(vx9~#?e}?E`LS*XIw%}h
ze~B2}cIaREy{6dpwvO_y*6sIl9+!AmH}^v3?7}G}CX+Aclr-#f$loDbefh7|!xZb?
zd^kR$QGTN`i^in3+Pipm;fT~$Q{YcjvdPGuIfonkY}cMrhh9FvX5G>iZhKq0h=#Qd
z&CHKXZPjPd?4gTwzP9GCg$wGFde6zZ*3eh5R^9bXu8l{brAzo=$52^*K(fj7Xx;uo
z=DmUIO<xO#>U`}Mui)-&K|Sf$qppLOaCb%#H`!uj*Lu#u85;kHfBdY!uRl8{nHDs@
z^iIW;Iir`Ho<aEiqbBa(Ue&t$hVF8*yDE?JUA_5pcx7Bo*}!ENrWPhC+H{V5(`NeV
zP|CM!{k4l;-ah(v^kzw?FD`SK8 at _+p{&3xElj6DuYiIeiYF$3H^x}n&UIo`~fA^Bd
zQcm~VdpfMN`o#L$G2VX_M)2mzM9R6s3gujC1%IAe$p4xlWPcS3HFXrXUR}qvA9>^Q
z7m@#`H?P-KtrDG*Mm{-pVS2zslhe{s!H?cnu6gwS?&<o)L}7}y`-=4+COOs)aT_e*
zTyg()spvu1FVjD-KAn5TyR$CBqwOZy!Am9=SEp{PY<Rlv at j%ym4_5kwo_sVga&qv3
z at iVtKuA5L(wIspq0Xr~oMu)hT(?zablmEV_x!r;}<y6PW`m4K>PoCX=f5+RrhXXfF
zzI*qs|C(`r0~|GLz8~}`UwBh->dc%CZ}OP4ANEXLvUG4- at ZKv6)?JxgQ5IVw>Duzx
zrnrJJ8BVPf=JKl^U!9!GSlhM~`~G!mapTj(tH%x{?UlW4s9yCYFy`f?s<Z!OJ(FbJ
z&!4`1*w)#f&Cb|ciO1DGIT6@@m4bh2-tDbD9+k%TJQU-<V_{a0J$)T*R`%SHyW1hY
z?Z=^4o-4a<*DaK-{Q9QovvbS8p0>?O7k=6}XY4xj+Ba9#DQ6qb``Pu9vcg-e;?6zU
z`NH;7`#-*Z{cPHDmyO?Md090y-W-|g=s2g_r7ka{9u7ZrtNVAewecRu;4}vPkYp~$
zoGuftA&A-)J>Ujv3BXSz{G(ac3Lem=7c5DZn9YsLNKP{Ap42FDzL)EA%gy;ty0eOO
zxl-=(cR7oQW>dMum)k9<<Y||%*#IG{fceJ5Wq33}Tx1Z0JAG&aDXHY1Gvg{a8Wtzg
zqJ%?K%EMog(n?h#=`Yol6Ty)do(@Eny!=~hu7iKhHww?4eyAH6Td6u^rc!Wf=TbIV
zXQcU&fl}2|T56<4-6o1gp1vrM>*%kWLGR^GKYo#%T&a5DAXv_M-<`I{I^)(PvZGYe
z!?F~Rw^3^4>H7n at PX5{>lsI?#mSi%aGUtn>YB{IoGUd2+MnWjrSxSn`8Y3-|pA!<k
zG;6q-d4_eyoluga;MClpoRw6PXRQQuclz{MWB|v%{xB`OTwZ?KMQaghk at kv+<4aZN
zEPKI}GAGhe!MT${yDq8Bc|=#il#SJ7CysyZ1hdj|dHNU!ttE(bo=D<LbB5668P>F$
z0i?5n)3Ao}L{cd^Z6Ppor-w}>LplDsKw53NoKozdwTiU(c#%luOUaq^Dp=)YAnB^$
zyx&Io2&??CP{9<N1hN~)zd%ZBESHCOcG9vUEq2@@a`;l>0^NMEHLbc6$y0E~9Hm4?
zS8COk0){(%$TV^=$6uaI%T~+7i=DK#krr+45e0lH_XEAxV(W~m&ZMV;Bc4th7F{X0
zM^V9)02Vn6R+&eXs^#UcXj;2Siy{v~$(QnbQ{*tkl|gzdIJ)k{#OO-$Iz_;Ar_Zt?
zM{)dB?aXRnm5H6T_K_CSLP{xLsu^Ng1ye3eA$>t(Luj+2E4f!3RWQZ*204!7uRKC;
zgjMcz)V2b<6j8K%spPVS`4a1l#wld5f>U{nb{3`_aTZv))4x9^XMmCe%(5%wl>H%E
zXISMpr5;Rq(X!VPYg#;LRKaO%F#@KKrZn)S%62&}krr|E(h7O_Npdzwc#u%R+-sIx
z*GP-~^r{MZ`a(AeeD-Ei-h)oYnis&_vYupD1t-Ri`YO6oa+^)E-03Nq<a~}l+0mrF
zLS8<souoBLYe8w^OLg<i>tV`X5!qeA>E}xQ4w`?}l4$8pZ?%NX0{ikz<dyPtA2&%`
zaOoD5w*FG(O>^E-Yg(v~><yY9N*N%n6l`XYXv$D>EjXS(wE$wLy`7|8q(#7T!rNae
zC^wB;YMsIJCHpEk5doBO(n`q}24Uk)zuS+ at 24kHzt%6l7{Uq%pE$XLHg8Zf2nal#1
za%(i%U%{#VN}UE%p0pxi%Ggun7Fb1RT3;zIFY=Rgh_q;0MhSx;onTQ9f)z{2fv|mB
zS{elJQ4V46PXAFtDq;J3Oyy_f<!yZ=-jNomag-Q;DZ4+Dx6C at DdLTJc!HHi;y#!Mp
z+K at 2i>Nc_j6#m7e;EX)I$V1{2Y4M~#CEj0}6U~T&DGh_k(O}<=)O*rO;)EU1%AM}G
zpDYEJm~2{gMotOylK4hi_>QI|`%B65Eee)d(-H=dV-=jZB<d^B*q4?hOc}X_EQ7tY
zq1MAHXIK(H2%<(}J}7yPSv{=c(TyArarc(;U0RtVV-b$-bp8TT1ABQvlb at A`$G4UQ
zMOu`7CGuhW56pPWt!aMU$;qJPuap53DsvvPNSHEwAz1^fyrvYulzS{m$4HBYr9_dx
zRMp!gZn<^F_SWQ7(AZ~U+=NPPu`}W1PM=>#*20t$qUx-il1P(uinMs{NR+^o2Sfp^
zvYbvPC^&*ZV%mgC)fzJrrZ{#b?|><vQ0igIaF(PqD7lzY<}W46E$d;*-R at +ff-@qD
zNP|_LGYD6A`nutyj^kh2ohm;k4?klk35&ES$R_GwFCr`6N^4qEYjTc)lQfTZX+kCU
zh7$=>0wT!w9DnUcO2IifMbS#q74}j_H26!!w at u<!T4($<lbi>3=}fsdp^{w2AX-DH
z4j>yj{*5!KRj^8ljig(o#hxw1dl2l6Ndc@<)`46AnJSF(3IzMuf`lpW29iyn<Xmd~
zIeGcmR+8?JLyi$m;4qg>>tV_^Uvi;>6Xitt4%=VJB-*&s{d<yZ2Y+1$Gda|VP9c(r
zNDJlPl(qp<$q*~vD(j4`v&f~O<Ri2JF_k%+Tu7L5{UvGZ;7=x*6;#R7y}L+yL|S}z
zp?C*Kxi8J*V2Wi=a+!i7389XIDOaoscgVUcNe)z>X(m-LrBgdeWTZuy2PG&#n)AcF
zV3jq^sSmka!KoTVofcC`<h3MW%HfryvxC3ph)I2wJbZUMNl(z27bPq}%Ae4p9;O8M
zC0BxAW2k8{mE at t8M0<C7$K at p7!Cy7WM1Ec#ZtE`T2O-9x!~{r{7tDEUtTRd@$&HXg
zTT?HAV7C|~OxZAu407<V-%l+#FE7uulk|_YI9No)!;}=0xHZ<a^Pc2p1*hJXaxbP*
z`<DgL!JWQ!JQ?iZU;CX}1*^~<Bm*E_Y$B3j`yWgTU`kngaw|mTC+aI$Wk)L#rVKwx
zhB^3GHJH}JDnWjdfsq!kQYrHTq-1}KdJv2uCAWi*S<}A5Dyun!r#t=RX;SRqpZ(QT
z{<oY$50pejTI8>w<OfIvb1Zo4tZ6SMkcA4)d?(s~*h=CGhlDA*BV-h4OlevGQ#SZW
zhJun4C`GWBvCO!2P;^F-dtsIJ)N!$uIU8&VFLye7CpiLE at ieXaTb}OfAsH5F5!#DV
z5+K!{XB5CH4MWI%5c^8%v{-OUI})ZW+)a)FQ-+w<|1A&y?j;!>X(1U$DFeHFV${Qw
z+r!CXQ1WqV8cexhNBFwav$l~*4*sPtP2?Bk>1iD#V<Ii)hEeJQq)9hg at HSY}RtzAI
z!7Bc=OR<%Ly;KsW4C_HAJNRe4q!wI|m&aO5#=`cO5e)%S&0W(tnBpuXPeA79Q0~Q6
zYR@?le(rRqdt|DEe}M at XKELfu&H;s+3gGj5;yJJ#ck-lylWbbL0V=60aSFn7Htj9U
z-R_bDWBmQd1u#CCqJ!l+w8$ABX^}LA_znhoL}`TO3R at CYFy$a2oLDK at MB@ekD{vuK
z!IalTR<%5QTZ^2SNQ-Hsi1vX}?k7s{MqmXkiN9gRQeyB#NY2z8nBo#dt^;lRQ<T+m
zii>4VEUYq+ at C}p-{-LIBw9e at 6L{x+77825lmD&>~+(5`qt;vnx(%mT<Sf!m=&O}H8
zQ;ANn%3W$HObKg6TvBkFl*EjQmE13;IWXl)5V;k?^E;udmX|9mb0$SvoC+nn1xkr|
zltvKDrzKGfd1DiyhP~XTayz-x=eUvwKy@#Ptc&vWah5sp;Gg4&iGfn>4QlXa>x{WA
ziCe&M#u8U1RtmmTb6`q{GkMs-zcG}eya?IJEGHq-qI4`VEl{c{w at QU64T;1Z1xLG(
z_7L{+#hKgLo&NbLc?@hy6Ts(tH^}4g`2oH5qMXuTshtJ|^b{pEP^x=vSq0NAW{~%w
zfNrIIoLEV|bymTY>G#M};CS!pjThzRFGIA6kaaInat^72qYl`dvm#`ci-TvGu?eO{
z#0pmTZUnbh-1ufXK~buDX$G3o2=h+1o*ZWZ;mx-lWzpbIkP=b!%5sW{iaKFcms>Qr
z44;RmXWpNW(f)BkgB at F22=HLaUwClEp!1{;MvHgAXs(|YCbOw9JvT!`F;`J(!mqTC
zEVP_*p|gtO&2Mw4Td%KZx$s-(&~l=OH${nfz}$JZs*XN<-jQ+h=TV4gQTeS4p+v94
zxw at A<oEND_NydCRsr*bO)S1F_8&Zg at DWdWxOh0ql5mlA$bJjB&+H$|vSmxzp0+koh
zmdS)!Xv?*|f<=!lV1TLTBs^fnhCt;dJRk)RsITvoaUTz8nurIiyb-whA2gtLJ|58c
zzI%np5+S%w!2|f>uhmU~XkSmZW6h{ZyN(-b(3H}AJcUiO`$yarX)^u!O{`dp`p`qK
z(JG4<=*0+7B~(;eB9Qjeu=f5YI=E<(v0%Gq5>%y%PrH_=Jxu`+%8!ebF)HdKi<-;U
zz0D9vuTV2C*f&Vo|6Dg01oH8jGimD0zd~5KjK(0fJ7%Koi)o=L^RFS02YWAJNi6HG
zy%~u?{t3m~>6A5k$t(;~^1_(}L*EiCaN*2ClBkq337S%sL<^cFzKKB6|Gq?FgCv%f
zH!n}ZAl<r{B~h3b!J4T(Pr4A?PPW>YQ34{KS9#lk#w9x0*1dFA!DY?u10*p*QklN6
z%am6HaUfSWeK(Z~TYGYe19IlFXFes&!E>IhFh!1G)pX}T3dY}u at f9I(_UX_W?KJq9
z9nr&#sR+%Qo$(ke&^r+;ut7Dp^TNAG?8X<^3Z*oc&h>Y&zdb#R_D*BP1U$NcZ9N{_
zS`nr^XVtz7g5}@DrhE at MJv$cf-5V>gmbNaYel^;A_=akVL`BVD)vrw-N=N=s6o3?{
z=*AsQPjNsX1s9x2nm4~m)y;vAK}Zh_(n$LnTa}GL&Q at bdY<1b;lQ2kVAO;a at Cq))v
z5a~s1g$Ov5y_tw4k$1)*9Mi88leZv{+(*?YzA|jJTcT4i$lgFR6-Y8zIs0sb1G0kT
zAH5Z}>8%j+52z at fSG^5eAzOAY at X0^e3JZ2&D}1lkTVdf7!UVFxcLlP-Bir}e50oSP
z#g?7S*kI)-{^hg%ozPCF-NHH_9B${78jsaAVJ5)>e>1%sUv~%z>9+kM_BXqT!`3%2
zNNFcCEjaBk;=<V=46^Gc1{p<}=yWmxfz&79ohF&yNO*q~@ANbVd1N=HH2o3YsdH!S
z`6Kv`Gq+-phC5hY((rtz1Jkg&Qn1rznVy^$a{^0p`ywR_lAC=*S^7KpVveQhrp|V3
z!imu_ at ho9ZTAFS~m`;q~L~kx(&nXc+Uw)!9A&BQyoh&4YT5<NgKswT%=41#-ff%1R
zfdY|LV7e+X`4krN9mcP)7f*LThZ9A}G;Gt++}El~oFUu0I+Kt9lhUhc!&pd2<=iBK
zu2fZ-rm&K_As0=5S5D!8=eKI;ruhbK4$H-_%*-TU)3K8N<y}pY&R=<8kks<FrblfN
zNa;=tQg7PTRx=2LtWYD6idMSr+HeYTQ5FM(j2FC6m0(GBxnK}g`c~RHD+E%Ij6uxJ
zO6wxlpp at md=?*fS$T?<~`(3=9XZr0-XZP*jxg(O~cp(m!s_=mw7hFRi^?Px|@ys?{
z8#5e%JUD&}fmAr(84@@Ifh^vLlc!=Pd$MIQ21(tAK{S+e9Y@|kAXUdPNH4SN*L#h@
zW#}OW5xG>4b)SbNxj7XpHYI1m#jP0RRS^cMP45vn0;he|6buq)_U4*u1OlO))l1 at 1
zdF;?LT+aH>#vrrVqpcQ%pzYLOz#!W6g&~8UAW7r_vr+Ptn~i>wx(R`lU)AfxRlDg>
zA_iG76NAiQU%faC=cOaZT~v at f>%%*BX5%bG)*o>s2D6wJ^T>-9-EqBW+=v%?mA*Zh
zfpjteU+T*D#WT at m0=|4(zFyM;*)9}czNcJ#j|;~(eEBi_<QROp48EP`&2OZvH(g_o
zWX>*0LNeEzMRlHk7dgX&7dYuvv>s!L<;l5?Eb^#zW2=Yb%?Z+!-b?A7e}qk#I57?{
zb|k^`-NKJ&H3|tfWbal}2<ixld{J3X-_{g?GB at dSJ;9Kq`?oyEDEBfU$}_3s+@=$Z
zsp;V at k67O9WJ0K@d2MSPgp<vY<b6bze2DZl#MG){H>BY-%Z^An1JuLX%~^+Sy*HU)
zC{=<Mp_wrbh%>ldVEYkJ(0jEwy`-u&x)c6gOfm61pc>I)_>x)|bf^54m<H7+qg_AO
zHuLa8H$|2Lh>`V4vwJ^ohZgemb0MG(j!~a+>#~FpK%j-ZXA*B(Ix)H|Ne$;HP3iq~
zyvjWI{s~i&E$M6C5sO#QqN4zm86yjGV=qSHk-QqhRH at 2tv3a?+6Iz;b^fJW)mTs at H
zUftWASY&D1Tlk3JbUcuo)w|x#MBUz=(>Z+)qs$X&Pdn6u6tuJF1cz^CEWmf_hfGHL
ztXs6qbJ`vP>2t_Vin$~`*JiFl8$d<++^~w4Lz<o)P?fLVz#z<>7{{X0DBN*UQTYZ2
zraIad8zbu-QNjtoQHAn<UI%efc!eoaxT7!9gT;3CnI6uqkRBeE1|j!I6SlQc_QN}h
zok7?tRRr_uaP4?Rv7*2K?MGDh1!>1WFpXB(bE0!Mw^-O7$=?_lLQuf^i@%HxNJZAq
zD&LEw^|y~tz5LJ=q?Oqh)4AY6BXdqXeru0hXv0yf9B`r7 at F(_rM<b9CcUzj}DD62D
zb3fX@#CPKEha%W5i|35 at O~X$0W-o;<Nl&+*n0D+7f>mEDrgKQs$WirgO|P^<uvw?9
z1QdJDl-!C9yzvM&;`2jO2}nCN`g*H)d`I#X!zxXGNMjTTmOG&cNqgBoO|dbMj$pSO
zK+<N8)_Jx+$U(5H&RCIDdrqQT9;Z-BaN~LJZNHk5sY at +Q3#DaTi&`qpx6wXuJPx$a
zQdDsirMiL3`uQN;#!SK9Qb&#QnRyt8-rj52TbOG~YOWw}$z6XPdyB75BkjoqZ&~a&
zO7AU_o-g#?lH#^${oGM#M>SVN5jCn^Ts?4pcO<{|Yax<<daEPd)4513RFgui?QzP+
zh^ID4{?P4M+jF9C*~}k^K(zDp+MY{!VRIVaX<UHS(qKAr$o~FV+X;J+w#!>R>0cg<
zVb2y~ZI9RR&z!SGu-$fHZKt`Nu>CO@!8UHtYkQ&FrL}#BpgUtWVOWyhFzm}{1gp8f
z2T5z~7&PYdbZo?xd$G3Tl#_exwL`F at _F--3QMTDFABMCYRq{oz?d8L;wljjp9Jz8E
zr^I{1u(q#2&&{s`(spVH)^@*)P945)LE6?m#jzP|>A2;664v&Tt4Q0lj=jcTS=a)_
z=GVS at ZEF@j(`&oXZJAB?0eDB#v9=2`ecQZ+ujqnr_pBpqCFutoz0-0&Q;@bVuB5TS
zw_R!<(blt&{L1-O0`Tpk=yxmbcR?Uc_d-ak5t5Qjk8avV1VWs93dAY>f#a;t+9xyw
z(s?_r7Q%UIf!2Kq1__yOh1i9XvWvC18v+^eAp}!mdTBS`uLvaR=2L<yNq2LSe$9S`
zK-9_GktAp1b+1Hf4AL^q3MJ~22Nf({cLXB%96~~3siFII|JZ~;luw@$p_24yrybvF
zKhcQFOySAx3`BC~b)P_(s4~?jx6`;J97DR>Bkp<|{x7$GS|i37{~a^NJ574VnDpIQ
zK!Lbu!i-Uyxwm`$cZ4tagz;B7eVNy&L+Vm5SxGa8;F?zT)$N at bQrE`rSY0Q|x0x&2
zAR#5TAtYmjL`NUcX2wzklGV44;6a2srKRb<AQ0INtn<vos<+{nFvyH<SY4+d6mPjO
z1A&ZL-vz0QH0w4a>^u&W-mj3ltX)HW<VOeq5tb~*lB8-A1ZoPBq@@)Gd6c`Ka+8ig
zsyYQDkSsGRvr=ayiR!TyfedmDa;%+#K-9xBFvuKoBC!L5uq`pj)ABV-#=0VqhPN0b
z$85Q4+FS&pyZQ(YFX{e;Pja_o;lG7pGd)Y+yQB(FiTD_d at _&KZy{QGoNO-}5muTGs
zuH4dcEy__;`cbqleV*o9##e0XI}5QIUzYEn7BJAdf}wcb(j|Mnbo<e|<ZN6--ne=e
zD^H>#B73<GCyM!{-5<(YAPuzYhePj8?!&*fdZEy(9rGE7-r}uZIP^r_#QxFeOi&T&
z(jJH2XPxL0D}(?ydr$dc#>5sJ!3OFJZe}(u@%c$4zxXwlKf3jdldC==`DG<o{<90R
z+#W75M at x5)z&WZh{q~Xtt+C#|2BZ96XU6f{Rfgo}KYoltFSm6=S?zlyzk1gO?C at y?
z2 at j8B`ET^c%5TbjxMj;s1X8!93j%q+q_KV5EeM4BpblyBLF>{2T^?3K>vb4pp*Bf+
z4uf<VfI+wq|7kJ00|KcH#RYDWJg!5-Rs<q>jX~Vn?AcN<6M+b~u0iHFD<@N>PcTT}
zKn&8B`g-Xl43gXp$M0JCwhm?65Qz2z28nJnZF^N32KlH5S(?32En^^^*hgUy9yOEU
zfr&w{K^P=oe!|!D1OgG?)Dwd?MaOcUA`oiV4alZv|B}}~%wr;u)?+bS^Oo&q?(;?4
ziA%xkqC`H$y>2<yNn#!04LWJlRH}JQB`Pwh9X5<7<Qst5K0atg9h|_cpP?`Mer=wZ
z7q}x3feY4&%6#FB;J=ZHRfF{L<$mORZU-|g$uS%n3YF*X{mw{|l*f2Gf$Ck(+i{RK
zuEjyBk#C*VcngEvc!fe^kbA)G2MHJ?@dO50UNCX at Huz4m6XQbz2I;Im?(%gOw$4!u
zqBS?4ExCh0h(}nGRqio2Z^j}JwXYszMdR$c`_=^HF&DR&@-lZ+FX~)6BIc7?nd#nT
z1*#Xd(`yJ5AjZ}sR%k;om-}ZBqLCFnqe2J2Ks0jksGgQUpA at aj-&I}5AV*wX5Fu2V
zq_}?rjn;~D5=*QI(A)dYEzNR))kF(7w_Ml<N!vKYlN9u`=S)zqX*phhXYdphELknS
z^$g-6`E$YxQRN-fKAv}A2O`fhyPc@=W^T;Ni&)(fDPi?mM+rpSBx>I3%^2iPR48dW
zLXxxeR?o856cQZcTbv7#e at m=Ot7NK4AO4j^N7{W~j|<|_C_=W$n}0oGce|7LPW at rL
zWr at wlbt6WgEtjhYqb=w4uO1N)iw+lyJ^G?8TXd#OYLSnbGuH>}?Ow#$cEKAEtm;@Y
zVXst?He1%k4X2XPqV%Iz^o%iL_$V_<VJF)XuQxKjgsBJ~bhTH1ca$+^P`9sI7Kzj{
zCTI#OOw~(yky;Km;<*9}oFKwGG;yBAASDPp<k5LR_O{l>Mr^i5O1PzP%mI*DZT7D^
zjX|0^h9XVgY4KeY$3aR^mg|*}6aAh+jkaN0gbhkqe98{l{rx^$GN(OL5jK6Y>3)1C
zX&>gm?;~d0eIJSyReS|`LamL{Fx?15q|?v!!3T<gF(Y#)VItkt3wuJh11XjFtP$+T
z6}Yk1v?#{z@=!to=d68i^#_X5q1VF&dn^~%d*Vd;Xkfi-`2w6sU%8`1Y9XH9gYJr3
zI=U(>iLl4hR;R{eNxor8*mk$a>lR{3e)L6>Oo)of$`#>8hf4r9(BM^<BL>(YNoH)q
zlJr?z(`watEXh}cB&p-|l2rL&Nh+eW9dmDDNiOPB`j7*6nTz}o2zNfVvbaYNztEFN
z63w$~NGHAQhM&}ZK(3NrJRC^^--G`6 at HRS@n%*CWbu!fd;)Sjl<kcJ;9V5=T_#K8s
zUMtqt9mdg7^Hv`n`>30<)1=4^-rGz?7A*aXAx)O!SP&JVSa{=EB){p7$+_zR6btmC
z(zcl!FgY))#IbN-$EOXAnBiCcz_C#E*Rk<Z&=wTF&r at +M$iJPzu`tn;9 at w=SZKpo^
zI@(T--QaU~TyP`e)d=kQ!^Ey@=3zd6X98C2=;#I2-~F+PS7Mz^J9E_E<{Sda4xWWP
zUuBndwx1IXJU{n(t={wN9Y<r&-?d!t`C}-F%rp2<z?+6?YVzVtpKeF6i4WjIL9N}G
zBZ6Bv?OYi~vxOt%@YGvv60l+?kG2#;+8K9X?6QRzq-iSdA<XX)<8$gTQf$FKy<!`$
z&oxa~E;T({tn^+C%^wJsvYogJXm at N_I|p<1>NQgk$5_Oa503AHR4o~TnYo+qu0H3z
z5HlB!!{>;zr5g9gYcR<6d|adJc4XN44o38#->Ok&1cY{JucaB{5lqF52j>|by^xj)
zM&cuUwdqHX at 4N8^yI(`i;ow$|MS=r(gMSUBAs#+9=|G$Fh|HVz9)|h=isU!5881B$
zNZddd71f(xV|vkJ=5Dk>O{ji@)mtCpL+Fb(Ki0AEv1q;qZ%4_ at 9$qvKZ|4Kv&Sl>x
z<Ic~=+j*itXq-?kSo{?qH0~5*oxGOaSeH5+xnJdpP=Yx^qGI|EmyD&TfGs?G-imnG
zu9L0r*nJsf6ma|fxGfM_M!wI#j?Y$yx8W at G_TdqmSNO<~G+Up_nBN9;3qz9V9u(qK
z<~KKN)jOQex9rBL>}2VSm_rz3^HwXA&p*oYZ1xR6ij7FoE4C!`q)bp-Nqsaf&Oh&r
z1p%IaO0!3`pNecc%g&MO0x9v7(o?n{lc?k#_(b+acw|{UuJsYKAK>%v*M|q?w=p-n
zV~-2Bj`^(3sb#48>&Dg*_Q0<Fj-SZUp_eA=H2q7HbhZAaiLO=fqBv`0vhZaZ+!Pw$
zkK;B0XAB2@?#g=e=;Auu*V<p^B7oM7 at N8!1j`xt=3*O)k8{1)>t_8AbH~eae<M6g~
zvJUl~ax;3;oWajy>V%!p_^PwGSrMb5^+1<7Rk$%2lUf;tF0=o}0>mVr!HKc4FHHeX
zC2;5(_Wlh<TiKJwRZ-nzlV;mIz>P%nMAUh+Soh|iOOd#B-|3c%3X1ix$ZF<rKZIF2
zcRFFFR7o5hIy7y;t+1z+6c8ydcK&K{e<~_}Q(BrO0mz2*AsNH)ON5ds&In{2eTCUb
zS1k71Bm_b_3~r}ghd?OB7{q;I(m}yR1Y$bH9)oQ3zgQk-hE(w+1cOXG8)4Sn1%Wg^
z!yq{hpIs!W7^I>COER%;qh>OeWPl9@**yKKY&a8vl#Rk5(=zXvDdA)W&8Tk}MCFj(
zu4z5q&QZN2lafobfZoA&yjx+At<lrVFXCSDG+zudE7Hs|DhPq(?7%wFIs~?l*@!^g
zF6ebKNpqRo7rj9<9qEWcwx`dde#Dkl4#Xg7^sdZSJ_w{V4ucR*3p?p<A&~SNXVG at t
z<8=#jL|7*-dc_`iGgiF_gS795LC$8LH5-h#ll28}hwIeXVZIV?C*us(Nqp1{{sq*v
zUOdtYOLAz?*osBiI_={z$fe9=<~J-!eIk}b;55fqcU&(C260blQmW2jNxJE+bJ+Tu
z at CR1xm+=_ndS;L%rz6^qszC22PMX$93o*!7y>$|*Yjv^st)ib3mgMN0YvI5=!8)E@
zFvvZ61L{x#NY*L6pE!+b+q4RAXQkdc)822&O2pQguQ&0r0}1ITv2_}JFvye0ZDt3s
zv&lc`{lw|8OU!Hp;&wtW$+Y at w;?Y==TYBr9nEpxFfVU&nZ|7C!c;-Q at ldJ^19hK9E
zwpD8pNcb+jB#H3CdJcXaP{qXCIq9}AoQ}5>5R4`H7-?me;*7Ra at CZwybsFD6vJHVy
z-s$}$F=AfMYYei0g+Wf2zZ6ztN!pCVAm1a+x^!tkAhpr6Q7 at Wsxp_ZzA?}}l#m#5;
zWbMLtKX4TP&`0s*=?gA>!cF*7`nSxHJ->(8V32GH2I0EQP-0O(;{G<z<=&0j at fh>F
zzOkQNm6TV3-wwFw-&0(r%&T~h-DX$f9jYYf64gCLv*6uVOJcR<;!}z9C_#G;<>q|e
zhu(ZezZ(s&x-zLxk5c1?O%l0%!k4mFM`;{rlH5y#CW#Z{)O~m{1WoMIBT*(Caqe{I
zQTGY%O|h!+NGm~JD7;9z?}-M)pBjqZ6Wy8bMNUkCimAVhTF?c(Hd1|=2(OKDvp!rz
z>xRGBj9#(jrNm?n`9HjUcX(7)^Z)DyNJ2-NiU>#vMOr9=iV{K+f<S<PfQZXxOR{8>
zY<4#ZMP3M at V?z`RqEbT<5fBkkA at rgmA|fI}q=SeE*bw=BX70`AhLa87zkWW?c^}^F
zxu;B at IdkSj%YnkZUJ+}D+vmLSlK|w}S0Z?y2|e9){#l0Vxkm*c6YFRGbZ!hoAZot`
z)$IObubvmECTLJSk~yy5Wf^3w232S1p{~PZklhbs5Twx3!e?vXp5~+;wLSd*@ZU>~
zh^B{<dnnOwX#QbDzoTV8MRX4Bso_LFp(Q;{bOvqI2%=xnywBi%tp)enN8)p|%E-xm
z39VKV(d%gU*>L|It)-plL$t>nM7z-jI*EQnb0%Xxw6Q4|!$tH0+T94nEJS-S6?Hez
zy5qv}xHSAb9skZC`Wo#itosyNdM0WYpiS~(ZXeNHw1$476=)r^h(1T_l}+>w+S55$
zJDO)S(aJIS_gMUU9ML~$lb<E3Iv#6Ad*FXW at 1b>`fIG2hy(bcVi}p+|(HoQS?>zi_
zGT?&dokH|4+SIAI);f*oO|&M{iQY%+GJ|L<TA!Ij-=U41MRWnp{~XbOXw#p^J=hnB
z-a>2kBGCtE55GjT9j)JNBu=9xy-f5ATJ{_wdWC2vTEkbdKePwtVm`FHUc=wf%&!wY
zhlUHr^a9#(G}oI%SJB4LBdYQi){S-!%{w3KMtkmU;OHHqrD*NmCHe&I#RWts&_*pJ
zx`y_ at MMT3E6P-u%Eg`yzHf<^3nGYDEd6of&Xp@(t-wL9WXlW~n{zS`tkEq5fqIqad
z-^X2Gw63d(_MjzxKy(Z(c at 5DOw4G~-`mZDU0nPp)=nHMndi47U{m_y(pdVW9$ME?#
z61|Gn;1i<dXk9lEZA0t(DbZmx>u12<=fEFY at 6Es&+A~|wuK at kf`ff!(H0w5^i)dNf
ziEg3I*nv6}JBj9_MeM>MIocz;iFTmTUi^C>{*9LK1<?^S+m}R_&~m;)UiyBbS!lJt
z#zl6t76*vdp>_L)XcyXmgG5Ks9Nz+#Xud;$CEB#_0Hecz5n9vl0VA}oM?jB1fF9A#
zqxp`aFWR&p(f1hoqBZ>qebKre$DYvop1_{atcBPUTGr3l6WWZE*wZQO2`%C at _JsDx
z8SDcs;VkxnW;=&{pqVaU4`{V7Vh?C7e!(8lx?RE^&=3`(qiBxHM3>RJ{|2z24Y~sP
zfR^$*<OW*7RrI}vzG#l?=!-Vy52BDi!HZ}~e}S&ivi}BL{{j7?)w+Q?BmbfwTF6bJ
z=h5o^N3;N~)h+ac=z0n5UXzIyqqQ-c=wq}VAtrjVoQY1LjVf=VYiR$gV4|>46TOVK
zG|WWp!cFuETF;6m`U-7mB at _LOwx+U)9;srY9cT$vO>_j!R?S3_)lKv%T5JsyeU0|i
zT_!q(_E$|P!CEG&T-!u*(Hhn<(F(K)bxjn0w~6MU)xXC?`DpF$H4)V_(M+^j_nGKz
zwC43qv=%M*eiKz{V4_#i8Z<P~a<mSOOceKki4LF*Z)~E|Xc<jR^f%g9P0_EJiB_X^
zjWE$3w8Z8nI)?UM3lnv2iE0dJy<3^+TeLn8n&>;UeyvTk6Ya4!*biE4TkHqzsdm^8
zT6%lz32jm&_S6A;LTlI&dqV5j$wZ%{_3CV*Z_u88$V6w*JY7um58C9eCaU_diC#y0
z;1R3?t at EQ;2U_oLSO?lOkD2Hkn)h)N{fjoWyNRktndnWlCOu5_K3bP(6KzH7(-Uh(
z8yRDw3uyjW)Q>=$9*06Sy-f5LTC;c)eSr3GZxd}t>-U6-zDG;yW1?Tsvikz&{Qz^c
zS_vk44y{gq6TOSpc>v~3#F&FI=93t62*yNfHWXu`Jv_`r3v01n%<WOPF=(4ft{GZC
z{s&WE!Kp26vchX=|Cf%2dK~=E{~xtIw8dx>V~1FaR#PVF!RpOlv3`yd{hLo|zw%WZ
z^T_$nmJjo~(*1O_9t3zf{ITJGeIE$3SfqA>E8XI<c8Ik2{25+{Ju}PaitN<cl4kX#
zlA{Ju>xw)<2zB$^d;1rjG^^d7V{aeXg)UYGt5)Ei<!R`PVPS4>MpnArO|vj#I%YIc
zjV+Bf-F^EA=;Ls9Y9C3VcR^H@=YDrhJhSD#+xumE?4Fz~pWVlEB?IPLFrSHPj!fH7
zr?SN|IKJN?OP`pi#6j3cY~Mi{77M{I!++K3 at o4T@t9$LG_uoFM)!}ob+c0FR+mh9V
z)?oc}W!!q*!~d;@aWSkmpdABNVlZRCE_HdpCUmS>9SmsoXQa7o7MIV00yC)=r`O at 2
zBO#E}m>wMd?(UDPV4xwqz`jvKF${7SWtatV+ at ZyZ!&Mn7zA@=Gi__t^rC6-#b_?KY
zY2TSb?tx-Oe>1h}9+TVn_Vs(xGP1LLnT&umN1BGR{3?*aKv}CT=hrCU_W0cHOa^ye
zRcKN{Y at 3mOQ@z^<&UP|pJt-gr8dnp7A5bw<yDb&=-eu_OMDZLaR{1#Kwh4P`H*tEU
za^;xL+Ts71P%5Uz{R+&pg=jiOretOE=%(6G2jM(=m+qBUhlTn4-gKL140XE?lnO9*
z>E8Fh>V`RO)+C>k7J#B4NAT4nBhR0yZTMX%*)iJh%_J9wU5=$aGV<_7MrLCCQ!zk9
z&q2L_g$6nn`bY9gA07F at 2aRqY1<a6Tb65b1(H2h%6W;l1uswx99xG*8Zd!z8L9AiG
z$KU<!WpzMbrq|!TqsI;mXvm7GPIPY=e-KS4t~9xQ1&+}k5Q96zYWFddXy0_gwnkUt
zy~j;_1&p0!OM{zsFDylXD{f at Z4hmzVJeSAo@cB|)fk9S<!WzUNCW=4t+86iSKCv$)
z%PGsG`j7zWLMXi(7FMlL+0v(f=Z=Iw;=k&YCV1{UvCU643`1zVPmAinijWTdMh;%5
z%wcuAlG7O!xG at G7K%kIt;)A0K6tZpEeqTzY&u0;tqCsIE<i*djfq~uaVc}spU;uD~
zgXV*9)&mkI8ZxqBtp<i=32At39$>&10K^+WX=9mtSodQKs~NgG?XEPcgrzN&Jv_Z7
zF2g7Q9d1XOBi*0l@;Siy$&?S_)lGQ*neGeEv1BMAT(i=0tS	u<RK^LDrEqL+=7r
z_D_Ilh#43l%p<y#8PbaPU~Bm5v*pX#QmkHr{szt+-5>v`AwEm!AJZ?okEL%+--Lm~
zEQ!(h|CS*M1D~+O4~pqaU+RPW-U0>}{ql_he2>GMW at kB1saVZmP=krmPIQ`F|MqqJ
zY*xSD;kCQ6JA&_C1id~a-0JC$g at xHN@W&j`UUN{s=T6_dXg0p at g70Ah6n&pUWAJ at T
zd~YV-#3q##j4}CJJ-&cWx(;frjpm~tFE+e=xgZsE&1BJ{(Mck3n~NDkD7$DzH%-8d
zEihyDyPGenG7 at Bz=1WbY8jz$&siJJU)uXC$qI4(K25mnsbdfXiPlu5%G%B+v`;x3a
zM~6t-2m-q)7$4L9vhyCG&gSu0vaMd1HOcL;_#J5;w-q(UXbgy!c`AAk!)Gjc4;hzc
zv4FsBkc<{vN-Ci$7F82sd-lZsPs1 at Nm)wI`o1qVKbTAL{zwTc?R24t6dhDXBpEO<Y
zt?tS_CUk%H28;9*m#0XRF}!L0-6V<%w&{tj`;E-)bZ2CEom3Buu~Gmqg|7Ulkh=$}
z!IwkVvGD at Y>QhhrxlmCv_9TzbYEQ~xA#fCkatK3DD{V$MHNuRmFr%4}H?q72wiPuf
zp>KS&B`SKr;P`<t1U-fSs?(eJ-x()XFH(u#=e1^ch)i+OeyG1gLWeJJDfbAE#UScG
zXdoL8S%Bjd9ZEGHWhlKea?{wLQq|`S5Zeau(RC3fbGwIcs;v)eiG^L#xg!rf8bhzr
zhpyJ0_ww4vo%e@^`Mp``HYfQYyWRzAUmN*Kd7~K2VB;d$!u98 at e#jN4)8V!FTw@(n
z4YtSt0q`3We<@wxXLq!_=v8buNx1yYiSY*%&BP)W+TI`+`$AClkgd!wUZI;17!>7e
zqIb4Dc1}^eqq$ffg at ZY&;9D~-+S2Kmf(FgF at Yy@ii$K{rtZLDg%tX~t5F5mo1sY*F
z^%?qpB0E at oqOZls8p3fNYj(2GQ3Oct6Ipov7Wco(<Q^Yu9aiQe0Fp;RQzlwAGQN5R
zF_4{f4EE{-pa4$TmNT<eJJeybz`C$xM*^sou%u=(!pak0MJlpL)7}Pa`Uy~6GoiZo
z12ekmIA)wEGp?SvKPNm4d at ibyUc?U@!Ovz|`>y9}g~d`~8ekDw5QQDVH*15jVOA3T
z37BjZD%r4Q>~y0E=kPk642=Ew^#$;anKqs{e?2tJX7$0gqZSa9tFg9?4Xa;Q_UE^I
zl6+Zq3k*JoH{I%{cVHHDh0ug^{qFdg3d3YOZERKAJShR~8x06Xi*VdjJZ%cK!nA7y
zB%hzSJ5|w19#}js7>X_{FMSBUpC?$@Ts(#w{x)K07z2l16mhC9WL%Ebo6b_y=kQy`
zI=mScw<Dd_!@{ltAaC9BUv-5o0u~@#B;gJE8`6BdEO=M<|CKOIf$jF~=n&vIA8<6$
z?(P!{6usbK!^$mmIsoLiTZrK+ivLTcQ*VYhTP)<(=(tll?w?remeCeY=bDss9NY$J
zk14--Hz8ixL$br4W=#io2Y}uJ6thJn?V(Zzbkk`J_ at oSY<b-oD%YNO*5eLzdP8R{M
z1EPI?EKB*pPTT}={U_l1X{7Hxg=sZyZO^1QFzhpe!{gMlFC(kSc(PbL?72Ec?NtLl
z8_L9mTUMnqbZzb12UZ8hwz}a%rQ00zJoMKW((}}bUr*czNz7W;>+olR2K-|@4vU?w
zd%r6qoou?!ylWr>@ieu+Qq!;iTZU&0%M5A()HV~aoO!o>E#n$R0Huyj&w!ak2Lasy
zfUcR&zq@$`bFD$QY7Sn8msVqaCd_-j`>0zru{vm<_MI)!mc+ravGMFBN`wo_tOAf>
zqTf%fN{KKmN at grF>ovc<SPN}~l>A#H;MFZDO%%3;Dd)2rP3g1f%gsdBNA`0mA`cdG
zWEYQJGpF7GLYtwlnf`b;<~Aj485q-t;LhQ{>QsRL{o~yWH&_X3pm$m_vmn@<E{E4g
zRvqTY2k^Xq(#hS*ygpdiHa{k2>AxR_qgx1x3M<`IL<<NBJtMR1#fIN&SY>5l8&iSj
ztoVPu1`Z0C*;jN6c~fg%fY}<lRpA^Nl#R&%=d8k*`7&mBROOFq0U<hPfD`SS_f99V
zvy(!3RSP`p!opxLL1+8vG~`hO00j}R!sx9ER$ynl9Zmz6W?{!Wg-dJXt}9 at 2Q|Ji7
zl=4AH|6w{a)nCy6J|p2~TM^N*di|7uE}OC4`cWrVD3H at aAUQ6(1F}>LgKP#PzA3Q2
zKT45tkxnWEBfKFyX;8T0vMRX{W5^NLVkIP3H&NM5N*TyaXED$`87RUU at t$J%XS0*y
ziiD}0$&M?{L)d44K)-q6r;jQS)P%K%BSadl)&K<OO8=HozDlK`S0kCg2M+<g7370f
z1%GvBl3}Y50U#}KlK?O?X`k-QSZo`$^pc{JbG%tTpPi0_3uep4+ZQ}utwNa1Z-p|=
z2L&7#jTBih_)%sIjz}cLT3~nfjE{}A3<BSW>ytESM-*vYRN54tRBsj?!4$QH5jzB?
zNTKDJq7YMbSWxdHHqIofG&;j8F(nZ`v;+!oj?ic41wpI|7|1!0Vv$094+VyI(`pQV
z0>dLpp8IqVk6yw{2S7ptWOa`g&Kaq&cD5(OV at vmET3CPA$4+*j at 1sEhnn{J|Q&lXB
zZVNWgX0R8jB%{zj3)VxPESC3J;e_8q!`OyNanfb%_#T0K_rl3Pse&84n-0M}23zie
zEq7n=j!o&5G&aR$K_}c9q&l*Y=)!Jo6q at 3ITxJpk7R(Hd2<xNsd5mnPp2cf&(-o}g
zUaYC-f;knc7ZVy>1Qz~rIuYC>lon^o0u3Rs2*0cfY{Iv(O~l~~4s};pMvHC~$Cu_n
zTt5KVA_QOXPNmA2D7Fvckn#O6$x5bXkTcHU@%w;AFO9FozxR*s6P1`~=@%2%FJWNc
zs6Mnt at Ao>m8Am0iA3jmc8efW)_v}k<Pa&`Y-v{ZNX;?wEQL1prO83}OQ<8Eh6H8kL
z0Whr00VAnA2IQK-I0b3cx4+Sabb2$Aic~s8p_eQ`PN?Aj=>;#wsb*seoKjDQFDr-1
zZVx2f9DHD=5!NcFj5aYdEBB}YxrxIN8d2D3Zz&|KS-%pHeh88&Rlqzlcjw1SUzn at K
zddY>oERw$V!XpnU7}TO2c7Ri(pUa?~yU<MJEI4iD_>@lhHn#&oq0OKLr2XJ$*Mg%Z
z!dEsJr1UpPY&f=nqp$_RY!-0)Axw}U+ at 4zK99k5k$VzwFGVBgmURJNw1{>c;K1|0n
zvm%kl^ybb!!x~3lk!IY$VWUInc34*BThQi2>0H7_aDYo50uAEM561N8##$8a^N2&_
zrEuWv8_*0+b_#FXt$(bW#^a~?vfG^8C4CsB2J_IBj_}(wp!73Y*qErkF>H_C7I$Y^
ziHLR_*wZil#uaw_H?$mFKDapal5pO$xd*!%mncz5N47&^;p5<t*N`=gSC{CcTvmDV
zb8hZE^^Mf5d9i6(?i8<29E9V5$w48MNrk6MpjNa=HEab(dw at k=!L+%GHsttAiGV38
z+t6tYXQs*4oSUIxP6mjBjzgs5ZV*jY=SZQNn1jQPIH`+jxyKj<vOyZToiq&FNtX`O
z)$iR at 58vZh5#P@&n0+_PIh)&>o@~M50B4-2=;Smqp8L!y{O_hhD at BosVwo0$$V8zK
z>vN?o%1y(us0^9)`9?3nvCl at _B$Xy0a<Lopnd#-ITg`QwTS7BkEQ5w2dTJpTK4R+L
z13T^I!qIINpo*oPWiT<aAe`C>-M(TyG@@(^-4K0002werw(x2hLK1$F4?=PUwu4&w
zxjmMJg<0UcjzYM9Kj?F>5aSz-4t!<|6$u$-Cp#lOU93*v*pZoJ$?n`S(?!?eYZpM^
z;n=g_z2O}5DzZDEb at +Vin7;kbT5+fOjcP72O2s5!j at 1L!cnu<Dr9gK<LHqA`7(H at U
zbh3i8TY(}0;3isBF#TR5v&i~{V?1{11PkpsS<>PKKh&$s^Z_p|;F(#HvtXC{2$e--
z#5H|*#N~yr_cR8cbSE90OVMCHw$gB_9(-CKb;YzZWZI8%Ki{mF#H_ at 9CAIhv@M6B;
zc|)UG3o3=BL-r<(VZW5tKqGqq6J#GW%6r-vO4O-p78b-*_1>f0>660o)sz{tJ&_Vb
z at xkG-XjT!QE6*1a`K;uOZd!*KGiAolP201KCcm{vb#VmCk6BH$rJ&kag^t<pwi}~;
ztsxk?i>%pJFyo?;(cygC9iwRoAX`}oZhKH03W{VLVAL6_Hq#E%-k<q+LpO2d{FCk5
z8agyC!oJ;+`$Gx2#=#+q#?t?h-R&|xHc*uZ`pIOGPu77ZfUaAKyRvV=fZvoD1M7SV
zAm(9RY?qqoi>QV(m4O4Xo-DT>>j?pwOp<}WG<}_HgtISQ3rf&7faNb?hOY`cjbr->
z%n&$;*4&11IzPP9i0A%#f%_$P9E;)`UPSvC#9oTQSjcffpTms?RZ%P_K96VPz)l^o
z5hReK<M+AscN#Yg>FV>joMR-yL7@;FpUUEnmd49Cn|K3oeouP*7}X(PF_`qTAD?#i
zvl`%dT)d;>ck1k-HR#+OokOV5`W6m~JQ+Do+6Ka{f+-8FeU_9hD-ALAqr6j$R9NtO
zU!&pagQ4MeTX5v(g^Qg-hXKBtA}UXn1-?vr9N-%+;5!qwI#c0Ajr&VjCq8ih8^Zl(
zi#Fq?9oS4&YzA>2Yvw|QocIVDMw7F1$I%@%OKvzeF$6qzzR`297&oHDa?(5q%1F*d
z2G)i<AsF~d?x20DF`4bRM{-9tQE|zZreS4Qax2zWwSY4XFapICM- at 8IE^tev5cSms
zo!B*HCy63p1-vgz_gBHSLrlk#QNafn0rwXdDn*V}$GMk at ZWR3Q6Qf*Da{0ZmfxJEk
zbi|7oYPHZ+g{{HFKiuSQAd*?ak)c1of2gT}D>N+uQvs*e*rzdC^*mJK93jK1=Kq6y
z7)!a>@q at DC+QAp&qsOtBnX;HVlfr6OEyo at OX1Dk}R>TwMitM|mhu5VDQ$6m$X9^ku
z%VVThWQ7rv3O5`1Q?}*tdEIgVaTyMkTV`y#u;2L_VSIdTaXBsN8II95hsRI(AhBzL
zm5x1Z)f7qyNCXa$bppi<6{_yKH5g{V at v|}92ZEXI50s+c5we|!9;>8B&#kwKXQq at 9
z_}L{=Dkdqtq9QVqt^O387DIyaqK*IxOwPz;o3tlX;Ssj&_}D2Y;O*>(ZFd1XLHb?N
z_tjMM7$>Ib_Ut4k{nkKfu0U_V&*M%jz=6-jez=B_P^@8r*uH}nj#Zs|S9-R`=CV^N
zIO!z}J80`;C5>Gzj$ngy at e5=IoB#K`vKu{IXfF;IF2R&7W!k4Et at 0x$D%qNrW_3~m
z at H!B1e5$m0+~mMKSu)S?Nx>q2>2_KU;~Mf6a>CN%odznbthQ9dqQsS8b9p@$Vp$j@
z;sf(A7n^S{VrQgbv2GfG#U^60BPThk8g*b=hFv>4+Jy*pKP<&eNt3#7s1z2^XinOX
zZ^z)<q@<w1e~*h2u(C}ex$Rq at cuv8j7Jv3>m|Otvk3fGDrIeh^O$RX9SWE_Aw?}xC
zf*#SGnOP~t$!#X=w!Db-w4~YnjlxX$G#d}t`IB7K8nLHeKtN{7oYd_ at -QZ=_US#kh
z at e%)3CleNsIqA)nib}~YQU)v{<UEkNLMWXE^_nTmyv4+W_UwUdjwo0UJ>%nGCk^8<
zF=!|{WhMRi3CrZTeuJYe{i6m&_v#b#WK19Qx}x{m3~LdNV2?IWE8<D_S&GF|27Hz_
zvhB%RD|S at qM$3NC_;)=ZR7v=E`lO(z%RU#q21#a>elsUcwkR0X!+l8>j^fq^IKL7M
zzA)+HK8Cuu;F3J&MaUmn6YPN}!o&GUO!?VcbLK0^v3YGB_z3niX8j8+3$Jd{h$j^l
z;<u%xdEHL<EgoO-IprKcAPPGD<*mU_r+pph9pGrK>}t-!V8IhG&SAi^9{`0kfvpwn
z%1ZgLGTEO*30UPCP`R1r2JdF40qC|4-R5rX at vUM5j`lJ(eUQ>u0mU$E0r|FD%RHtA
zcB)_>8->5-_xN$Eg79n{O1kaYA}DMa)+ws%?Vwr&v(EvWtq}>eAecnKym<f&+p5UV
z{`t~Ql`3$Q&PTCwlpcXK at +q~6mORjQi<0PAq$#p8GXrY20J`EH`DA%;faXvlx~vtr
zuU at z;C~YF!5;~<Ww!a;;xjLvk0LisSr(cCE);#d at ++cDh(-l}~dBC6oV1aY|Nqc`)
zR3_*{xJ?sqHjLaBOIT|jSmMZ^gK&}pl;WjZ0DnC}=tm2m=)w7~a>B;ul7+L5a1;e+
zc!cgXj~T#V{n$LddOf{ox;4!qW(^{DI7Ls&;`E~gy?d?x+<oIhM}(S at p{H)Twbac}
z0OE=e%ciXhtQ?dVPL{K<;`6X%F!CG1$e&KSJ(bg&?4- at u3{tu==Vz1ZZ!3j5k at yQe
z#^_0altZ~Pbp6~c*=NWFr7AF8QAh!Q+*-=`ZYscUNEOHLUrh>~9nJ}+{){ZQn}#4h
zF<Q*JZ+_lZ;wazc!yf1%=(U;n&`jTMt*GKz^PxeIMV=@{VQKFI9^dx(<E+ue(+qq!
z3Ul0oFmDU4HPfM>5(SKN1jN!GM004;7rTrh7_rrHps@#ALUud0bohY<=T&vXOXFmo
z(E$S}5xmk^c;#rRW4dV{#^h{y6a9#{%s9d^+HZ9t>gl8n&}%+{@QJO#b0Co=ORGSX
zodwrFmmI`R8!?Dq206EI<4dKW*_Yyl5Mrxw2IwkX=<34Hog76 at HTxnsBG+S8xDX)f
zv4aGeF8v(rTnF-bJfO+ev59_t;HOHVVaTLv?{QKp7G#wLUFp$qR;4gYS{jQZo6k%8
zK(ddCa=uplg`3jwMH0Ta_CSTNjcCcS`O?9}lnjIHtbp)FQmZ|RywlIKQ{+7R5PXD@
zf{^mtR(%x?-a+Wb<8snE%za*#6 at K!WCydSmJG{m2?m at V_HADtfi!PPia+1gdS at J5H
znQDc6xL6T9nyn7+zI|t;k=z2rCxL=%Ejm}a&%%<I%ESIj187WCds{HIj5yF)%(_&%
z)yeBI&$tU=2F;8|0PrIEOp$(d at 3cY}nSjWt!v6I_Ub*emj1&IjbqBSNoSNMivd^I^
zW4i<KMHkrs`nsY%>)U4kt*j4_*0P^-VJZBGDb3W#HY&IWCV4thpfMEFrAB$qOC|3l
z6zBdO)0cR-CxftQ8L;uuWx!>sz^0k){UZuFi7d`SRF;jZv)Ip10-A_zpH@*YtsU|s
zIOJ#k+Jr$rl7U;<2Dz2Z!|e6)`4iQHRrk5 at Ve3UNS5?J~F=(mj&kzXccL9bFYI`ym
zM?$_$03shkx3-IdowTCUb*yj!z}dF(h-1n*yW~+NQCF<+s4zi0n-jqd9C at X+r!S!q
zx(W-m5Bja0qVVkifkNkyiFt-lC8y%RPPfoaUB+B$!^rAt`)I1sAoJm<#t?qm41TOF
zOL;u{>9JwZv>ulOgFLUR)kmJ>LAv9W5BPy at Nok@X5GaFXp;6nutjxzFiGzAZTLuq`
zwIJ$Zq4qkp)a%IK_OM-h!Dww*EJ*FLWTpG8P6uat;PQ#b590t6Hj#z&47z(*McDmL
z^fFVdVM%Tph9y0TCB-)WF-x(+^y?-`pt!)v-6C+&N5H3<dM#=*TA{pbP6$mOYt#IR
zO_1!kYmTm#W5yt}<`~leXxyC;>t^a59r`d6=542QECJygJOmk;1laV>JG at JYq-o}?
z9Pv6Z9Y@^|O*mPlnh|*-g^<6fc?Pr`Y(7ZD!64g*=K?+nPZuy`EbS>5^G?FNCK?>P
zTO>_Ew>;@KBzU)uG!5M*qnnwA=FQlk>;oDF(I<%rW&vdB;FqC`k`j%I2cC9jRtDk;
zpgprFp5ehK>_RgzA?G#Y?%uWvk&0~0Mn0JfQMuZ%6 at C|}JyYs at Zc4;_A(+ohBO6zX
zVdqtk at +bC6K#CR4^)L%NuLIjb%LSh+h3aCi1=ty`?B#v%yFzeUQj{;n82_69&3QmR
zvDxlb(Vv>(Ws<W&$j=8^MoUje-pmq-lag*tEugP)kr9(8pUmV83(jn(vydK-3sa^B
zU%8L&!OE`+lrr<`*JJEuc#wJME_oQv;rh*(2BlXpjW at 61L8CdN=>-=6#%J^lF#G-7
zZ%kg5Cl#^G_oi$<jCU47mJbkdN8qG0lMgaEbkH+~(>3(ej=nq^hP#A)m?<}8;dhDz
zmFp;@=^)@U4ay^T+nDzaNBMjVuB8iIg*Z7ORQf_*)1MS7^`wAFe8O!9F-&I&)E63;
zmKg4{;%?4$FytgG9o~B0(gQ|PcIpQz2^ioyfbnuj&q<1rs98|j`Pgxgfdez*((K9D
z!$x7^@^Nx6MM0Q6kC8%XZsQH(nc5A>0L7^adBDzg>~C(K=RxD{Y}WJ)<Ub(sV621h
zxNQU|U&U~9L)OeNN at 0;ClJ>(u2#7_t at _!Yv_}a-oc5x~h)CvcUv@@YjI=<(D*j_t1
zqmiOqwVcip;i_Q}QjIVq&TqFp`j?S?5vRfp5~L6Mu}~YBa~*~^(Yw)0*DGcNe1l9m
zK41;+fXVQJ47up!gnEkbX3w-Z6D1LdixeAU*~vXWGOUU+QE<J?>UAJ59!@HJP$~e;
zd at B_HL0(1)H1jbKn~{yM$dMpXT)ED(G%0P7EchbD>oZ}_8M4TA(a$tf`f65erbSE^
zc1OnuZ+vR|`d=j$CK-j1yaGK8mjhn9Bu2oNklb|&&!tMX5=6<DnE#q^`_{aR4Hd$~
z5dmVYIUI1Nv*4)vg~oR+3hpg&a?U%@zYhaUyYe#MGY$#D<6A))USu<K)RIhqRx?rQ
zyF-SRW(@Hi8fp)fzC(KL33+Ggy&$=`=x9r?s3&7AJ%>aMjE%HJ$HrTt68q9ImJSdP
z|3HSB=*wu=DdTxM3*96w1L_S-Tu*4}>*x-z*2j<>XmH`i5)SF%NN3;(JQ at FVJCI2d
z1+4R^tNZb&2coM_DRBWtyGP3xU>0D{-0|3BEC~*VEPhx~&6>f=;9Ljne28{1 at 11{?
zZX6auJk^&%3$T?2A`ZS?)c6r2kr<&VTty++RZ{`fcOkESu1H3kTjWOwa5xJin(6!K
z6^|&qp(Urf;brqG7lDpKK&Rga<xHHtI56*r0?lJ5Z-i9 at G_7fN=l~0a=%9PI7ti<8
zw%~Mw(`;IewLb(H{<JMAC#c{s#Ggh$a6BLkbRwkwMrFTNm^fJ71OR!VK(O#+BQ+aa
z->-HHVl}oKEhC;>G$m+XB<{k+TZ6ve2#cMHHqTNHDfR0KC3SoUjJ;np_t~;^JRHq;
z(31~zO>}<SmG(xwi(vNhja!T at W|R#o<16X=TlDInAqcsVIsuA`uMZ>h{tg at T(FSbr
zpltB3ZA)e;HcTLNX)g|4ZUVK23aoEz3!WsIW2Y>*+slPi%{^}qp5g8#ErC|*4w5oc
z$mHEm8TFTJpV`A6>2o1u>jQP-?Ev)qD^~57=E>sQ3qV&6$i6Ce6GG*-4^2`uoqmd9
zFOF{h4Gh#lD>u1EZAtd$ltCO0IouW>E;6}6-ZgddzPC4b`@NLQv0i%`;x6F;O9wH-
zE0kM2Na1$IrFJE~EhzesU@~<3wLgrfQUFSdXqd+VwdoKuW(r^2zMjG+`YFFrWv621
zRoF;)&rzh1DPNqoOB%W*X$%a^6qnOa;~;T=0+pDlT9frnLc<UUvLQVCB4SeSW6RYh
z*FRG+EIW`aG6R2q6 at N!5gmS;b-jowGS^$qLRP407%0vw=hypbzjZb&=Y`lYWrI5;t
zfLO1nMA#Ow@%`cl4Fjwvuxy2JoiEf|H!u+{r(>cpndt6vi at sKLoqq0Pr_}&#KTyEk
zlZTfc9FS;7BkX;P%yIwZ?j?+C=y=4jA|ULZ!b(u6q=|22r7&Efac86_bMl%AaQIr_
z(4>@4-P8h~4wp}xmfQETqQr~x`~z{<+TiQ=1q~5pY|KaNurbtAr3ibjRUvGSnaTx{
zz_5>iW4fZ5P_F8q?-icO at dmE=9)Pqk3Ee(;s>f*d{Sy;8pD;pKboX`OQQ9}z{e!{8
zhHIdk*nG$DM|4HamvY{IMoU0r;xv!VHX7X_r1>yzpv=^D`(JG<vxn?T)^h?6!IIr4
zV12ablN&gipqrd}$dpr=nKC-T<}_2c?H{UkjHXXJcVvya2+Y_DQ+3-O%-DofNd~Ic
zi~M=4r$pp|e9FZH`$1 at rZ4VY9L{#=XcCtjIX7|NURZx%&`v_{ua9CR#2(Bgc7H!|Z
zSpkyY<#vc{!lKqgI>ZW)dX@`n)IoRb2ebDDO_(XhJ{LJkh;`d&Jr>^%i;pQ6L{(w}
zPCG!QNFc0N(T7gjgb&-`L!{c5)ARLV<JADukuY7KCinLX7(`O4q)X9dW4^P%nE5US
zas4LdPq|wlj|?oXCldN}1nzFgv-B&P+D)Hf>b5d<|DI1BQw~8v+UXA1DM|2S_?S!6
zhWCK9U%~D}XyD?8Jr!Y#kN74%a!@&Of-~y}E`I$UrJDy)Fv)nJ!vIJ$x(-~tcDka6
znXph-Mx(61L0K&Ye2LrrUnzazbrd at tH9#f{g$W1Q)1OqBkf%@4^7--p7c~`v8eHzR
z<3@)NP8o~kb#Msx0E8wQW=|Sq6aX-I-Ig4eKZV0+eiU<o9|Jp!Z=m8m7JTruJy?DK
zD7h23|1y?oChMsn=^C7yx(@7V276k2o+=%TDRTI68QbW9(NOwf^1=dzFOaB`k?wT6
zY<{~-j?){%`q&}>a+ak&5Z4)pQR at hRk{73PxI-$b90KiJ7pal5eNH*$I)dHhMNX>N
z&6X?(pktWod9hqvJ<q<TkV8 at WkDc~|SF>dwsi*!}tne$unFQI{czzX&+ARxnpIUR%
z*cG?ky{^#~WYVSkaB;&yYk<Q+K#7^s0()@NVeH`#>>+LYiTMhNa2!oH05h>3PH8~V
zs_pldb>B?0a$f{!pAeCgd8$dNXChWXSs_$m42Cx2fa^k at 0z#(!bVr7q$g%H>rzYuZ
zfY4v=OfBPPMc9i3W|IxDejXhkhKw>%R+*^v(RiL+AedbiRx;@*w&NA7JiC3*M8yWs
zB7lxexx98!?9K`0_B^Xnp?;HF2kcmS0>}69LKYK)3Vp=%FJkI^tP_<`n=CDHEetMX
zpqh$ghtmd3-vg+gG<oS+qkAe~@;H$dM9VQ_hOBam{Y;KAr5}P$3$&m(n26RlU~`yh
zTDkTh{3P-3DuHOWf at r2q?w}^kXzIt{Lv;h-SOuYm*s1CJ6}s2XBbb=GffzaqgrA?h
zD_!)x7m_8-!E!~ro4f(D@*M>ey|DQ1A;!IFg>%Gy%?G9bhNXwli<1|X0st^C?%9Bt
z`R4wM<)%$hkR(it%L)O5W(@Qq=UTm3mN^6Ub`S#13^8P;*}<l^(_u{gHKv}uc=*q%
z2+#H>1%ga08}Z@=w)=XS<_%`9g06TW4qe}9vhN**JaNRV9m@^J<lRK*y>+VQzeZ6m
z)KQem%_f%QzS2qfQGQU1nciOP3?6TiBhF9^jK`+w?a7l at s>~d?lPcFaC=W7X5a_~8
z at 7f)~gHvKM-$XwS<-fbV`Q1jJ#mSBUONKbGMn~Y>OpAj7K8KEA?*{<*#pUe16$oW}
zQn2YHJAH<A9T75IQZ9JmHYV6h081P6G}E%}*LNB9rp+qlee$6OQJ;^N*{7~kKrM<r
zCsN!p&91l!sr3ieXr>jVjfXp`7!P&+XhoA{zZ$1QJjrJDQz1;sZ$(YNU)uM$go^L^
z_#d&uGC+_?oD=s0HWor_1Kt_DkJ*p}tHFV5g9|`}Fz4XI%YgFQ#m!$(@?f}#g9Q>A
zncWP*n&2z15cr3a%PL*ReO*{ofe6YCWh_323efL+!QaN7pM88k3_^~)apI1>_&%P+
zfmodfxjTKaA2uKh6BsO;CYNy_fyB`QSR%iRT~km74E&Nh at GD?|%$jmqx{WuP8bNHX
z1O`wfv&qxx#wc`37SfNhaVv~TnR5gX-b1(Dry4ahQoCH`vt)T_07hvb!+&{4%LB6E
zIM}j{$cFD0o356ie4iVM+R3<)hIAF`1i?93$m2+v3Km1Y2vWUIhWuf2<<rK!h#1LY
zbqHm67Wh3a3q5B4C}`YB?mbU|=yZ#k_{o09igHX37a^F&3O$@y+%Z=%2ecCpEpc))
z+}xqk_2l9%|Kru(b~-9|7bym(d>+B>so>orDIVQ2rQ7LK-A*Y%L5a24DFRy`EDHNf
z at WDFL6Bx{k!OonT`>852<r;!7rGv<a4s;N<!b7r;b4^l9<hTjcQz5_*aZdw7wG%ON
z{#0fi6)<w+*qd(mp>!k`$@T2c2i-^twML(BF&t`%2H!{*>Whuw%_nsG#h$lJu_g6;
zsL-fX4LeAZ0WUW>KTe??c1%!>g06$SP=y}@URivo#H~@F4+2lG=T#59P#g1_>1xkE
z-&Ulo9(D5-N8Ku6>bn7=tHGrRX5R)Watx3$)3qkECzs$EF8FD4+Z|~c2;Kh)6hDUz
zT?-09A9Vl(d!rvJ#FpY;L9ng|<Lwp3`+M;>>y4AKymY#8JH&?URayiA-%9p+qi2tu
zEE<H4`F~QpICDc)tJi>r@{nman)Ix$(vzrQw?vm26YH_bo+5s4mfJCz6FIcN7~gV_
z8QLFlnCDqKLOhxUU;o)xj^@Y-=!`FT;QXA+1zrXQ%w$?}D3%MRX(MQv*kkms%Q0V<
z|7Dj#i&|~cEIF)7#bUM!ahE&&lBYDoC?{}v=Kv(ybXijQ9YcfhzLr>10N%$_uK<3<
z@>5oXg}HpV@&sY`5W)*fv3fIAI$dp-T(E_jfQ#t!!-VxxQ(ZBfegcWy<%1<e!7}Hg
z)P<sNDxc2FQV3rXwzQ*;^PqvlLI+irOzNxzO7-GidIFWs@~gn|JB1FbJIXk-hcmqZ
zi0lTKRG$(|AVWEy2PvKxrm7Kh-(n@=uBEBSX<Xnu7LNkZ79o<_F-2uY?NCCG!y4c_
z^r#E$n7CQ7p^NVJ1Z?PVAYzpW_<Auv#j2-5$Z6(#)ktavQ0rscAIUoJoATA1qFYs9
zJVTwIXmA44=9x}xsWb?_Z9iSaw$EX>22;qYP?nx!pCdtm2&kd`psofng(WUnvY|=a
zz^5PwY`M{rRi$_qD3XUDFx;58Wa$q$g2g^^T+|g4T at tcs;u!5#<W|wW2Qii83?>n<
z8;X^g>A at Y(WQE~wHcS}QM#%#n<^c~6F3~QfAsdo9z|{CqOpW%ABR!N5e$f%R;VfbR
zAk<Q at +%eeJa_AVgHcz(JDMqRN$JIA-b(E}ngn`s0X5bYC&p4m7JNUMxpCu3%ndPK9
z6ph{yoV>?Et1ZFedJ4-w>Ii?9`L$1<gnn^>t0WvtWomdKf<e?h=F8HZASp&W0^_Vi
z>wfybo<?aaS`@-f^L+T8^Fo<1u4#p3oM;N8o)b-9g%x;KgkG=HK at 0!{jk*G&PhyB(
zG4rP?lZb(Y8|HKcy)Fny<97tDxyR;?1+d5SIDpg>OPc2y%|etn8SUXji{Y59tB_~k
zDX(|rIhDK(&M>D5SpRNd3X#wqi=G1|=@}$bKuL3iqx+v8{x&Bk_0g`@4Ar&4avjD`
zH{*{7mL-tD!;641&g?YNp#P(|8%wLf_d8^lPwx0A$VD+b>PiJ-u`hxnrhqfdG-OB6
zu#6je5rbX=oQDL(8169w7f%3&h+6L0a9ojSS~N<J2D7E!9!BstqFSEW at k4VXN{}dx
zkTJSE4~cO~P-2^MvD84AJG%?0y8(>Z5yF1<@@fbcMV&WbpnYN at ILp|lpWeVee-V0e
zO?jq45CNab*8l?oejWt;PMO=?G>BD+kbeexv=MBkJ4&ft!a3|;f_DBA^Td04$9P2(
zBADm%X-BGgz}oMCoOjAw8MjCF^^pA~U6f?RGD7 at K|Bf>P*yhO+Z9!bY^J&@dm?`&`
z3Sg at oOXGbsdQvtyHs<;3M&~(O6Qjex6ed~x_?Y~*ilw53XFbkLPQ3=b&A|@F at 3`%j
zCyQPm1Vg4^e4^vgwF(jGp{3%Q96k_TUkrw)1DaOSs(8EEnQsqf{6?7Zxw6;eqf1!N
zD>B3jryJB)q`lk%ELqWH3COLfeDPvaHI#se|4CSyhlJc_PkAMZs~_>HiWV4rRhI&-
zn((UUIBu)`%-1v{z(pSj5MJ5wM7?n6DqY0nVpp%ou3lf#dEng`H(_8;lyL47KWI>&
z7)wmQp7Bv!VJQM1voxR8lIM6sox at G7F~?e&V_{6UItryTxAK{{@tVmFFl;?x*hMjK
zCMxE!q&yhnF~ec8d at 3ZrL|wpWYKsMYhy|EwdCYGYje$+gT-O7$J{kbhY7Np_KBd#o
z3Sn_}A4-g8`+Od9VZs+g`mNZJUE={jhx3s1TD^l}5(inL`t`IV#tgCy8aO!SNmQ6R
z!e9cNUct`r2t>?pzbKZ3?g42h at M1}XV^4pAX7CC|`JktK5a0*EFV{u3uHVsBt>eVb
z1Y8NJuP&L8_hH=iLCr7-;Y*-(u3TrLj~t_#DJx~`(_W$k*exLIgmCSqDQOQVutT99
zhu4p at vC$pLhHfOt`n)Vl0+NiYk#t8-yy&}RZid1xMYSO%u&4#*=Ce=*yKI|sdVnI<
zG^&wYCM)pA4k4b at 2o456T?QD=2pD#qzVfwVk7|(%Ff1#Oix|=)B)g~Sfi+5B{m=sk
zggEt>4I+3%ptY}jHJiFIz0#vWd(OkArU at l{G37>EBMCcERhdhC>V*((*wx*#<S(1{
zuycl7|AA3)eWOsgvS$o3D8RZy2lYc?C_1W3hncMy4qwI0-_EBCTsy5qp6wi+aOVli
zzB&EQDMeHkAK3Y{1G^UR5DTzkGkw>z9!?{)Lc15?@z#OR{ccI{vshe}&c}zJ$_@^f
z|L=qnwei})fOa|n!T7vz;P-(kQs@$<xEoWL>4&B(B9w({M;-=ax(YyA1MP>?XL_?w
zEYBw(mw;3F?$PzyhV~4fqf4GBz3vLvoRvaH`2wIH1FLb<Rjj5iR%4={PM1|7kgdiB
z at G^D@$WAW#;yELN#n#noh%=pafPNeVB%gGgd`RIlp)yw8AhLWA*`pvbGo9M;Q$?dr
z*50(hSluwrXTa~Npn%S#g8+187#^q^JLTh-7)VesfpStUbRyznO?WG(>G1DM7ZxRI
zja0*MT#n5|XM@{X;QvOL`Wqqo^D$#oFHU=Hfb-<XV;^Sv<@Bl(3eyL280|D4R7n8w
zFH?f1o+BOYPxRU^gmrbt>3c%M<fP6?=MjaNB)I%zNlX`In&NOd)qv1&%kKUz9>7f(
zF+iRSaHGt1`e*@GU=~vNw`n6^8PSKpu~!EwfH}SwtNu5}S|U+NyM!|wMnVN(%1pOT
zmsRJF39&0?cVqTjWk4y1{zk7aF&|#unflpRith-$s+ACL-x+ue#p3Sf&avv^++ at Y#
z!mv2JzY}|QwQ>-l`_~|SskfQ{dU#UM6B>J$Q{@vr8<Hs1M#$nw&;=gQX*RF3QH<EL
z(mWiPL}_H20zq at 12%Ebrq=%JAO3`jEaM7?_oyc21z{AzAV1GoBEP4=yomNc~Rf0O$
zD-xl>(h-XkdJ(tMXJ^OqCg|l4EWu0-&*V%{ltEDlzz`U<;fn`BVGWzz-%%wGw%&2N
zUgAQ at EXaaWvYN&_53Z{kCI=KaW<gR&hK){wdHH1qGqq^;{G;r#b7h?38+{{mNm#cF
zo|LF?af7l($uul!5IhbZe_ObqO|vr9A<ih~V0BzW6!~M$PcJL5#fI?Mg`pxHm!ZUC
ztLPuuOf`xTracXk`c6oy)6{bf73$1FzC>}c%42}$YK(|5NbKO>lqmOTw)?QiKOvyY
zW07Wh_)H at +hhY09z|J1j3-YiJ^lBm%=wz~`IdU4D at oyRLe!$N}PJU;a0`KrAh#{13
zZMLS5;YOZl9==ypMF;kjcHAqv+5b%fjHPX0vOU5Wy_{uf25e<H;C;Wq`-uwI3M6k4
zIg9+}0^Nd?sxRy7AA2$12n=@Qd|4i(?E8H*81y<q*k<6)uS=YeY1)dp5Km)#1|IxY
zx(%B8S0lb5!h{vb33KUNjql1^9dc%3qJD`4q^CQV^>vtj%}yT;+j-O#g!oD*m;`KY
zju78dv1>m;ed-J^3gg=;6uY}3GI;pTsoR(-4RIHL3Rj=i^A~1gzI|ApnVz0n`tw_C
zB5;9tHtLr|!?!(i=c0EkUn at a!z9p<^+c|w@;E0P4wh;2s(j{>ZFCRSl3Whh4J$ScB
zT8VD2qFV?#gLmsltI%yOx;d9ND&6&#lf7*)ErtMW&I+rx8Htw<aeSV1IuEw`Uf3#m
zYElIInoq_IOpH%pKk$kUibJuy=25{H(}h-JF|Wzi+|JSh6i7?k4{7wLbV)l?^RO`}
zr`-ecx{_1)B2X$;v;iwJ)99tE%7uoxB%VV}f#(F^d31%yj*5z4+SJ1Q-LTg$MMaF6
znv`lJc8!Xi;xXXGM8rRYipN!$;;bxX1N<3GP)_;`Gi3`!{jYcdZi>L4`^%qmZ~Mee
zoAFzY{5ECjkP<Z+v=Z8xm};y*d0HvIr;rc7Ka1Z(XqGdLbKLNTlar1jklYQU&T6)B
zyD at 0O<q}a&fh~`0(CVyGhIG>y49O+@%=FxuX9|mIR5~-<c4%>VRtpY>j~)V6nA|_;
zi=(uqrN`CXcDe*IdIKYx>G`Qmt0?|HqByw5RWi(x3vKxXu<`uP13`<oh*nR86n;iT
z{|ifl-ylK#L|TFs^acr;>7{1hJ;H*eL=<`xw#$2ofUth4!tZKYi=23&D2Eh39t@^U
zf{rLhvjZ at 9(=ovOF#vXU?AwnjF$(tP at uXA0Ah?R{)kK at Ub8!9AR2)ds;O}u^@rl^y
z?9$NbMv at n32<yjlpRt24E7nCeQpd(>G=3UtAq<0=Y0jCn(qE@=MZ%xrwAQ@<*_^3m
z)#GCUb{$G)IyPdaSDOWiLgJ7s6Fpi(%)MIS*cL@(Yex%QkRJnT1^HKj59f>f{6;X!
z%A^oD1aAsuy&Zedu6P>k{U9m?W1*-h+AwIksu=a{QtSl8YR^J^92Qo4C)lJp)D)Ax
zE|V at S1A;z^0R%rmzlBrH`}jFTEhH~x$hnRX6I=5LM%g0g?SVK*ysp^)Msz}6RI>_i
zu at x*Q#>h3nVTN}1kktbhsD*Zz2NAjy#J#v#<GmdI*CS7OoFZyyOi#kEGGA at k+mbsD
z7)kHolY9}l`FHHykrtr$GU>hC*?O3Q2MOrekyjlc{%L?sMUb<ZR^D;=F0=^4FURmJ
zgUf#Sw`oA$$FjjyQzPaZ?;LB_ at c7R003GlS*fc1Z+pN=j3N02zk$ij%pxN&0LE+bg
zXV%5;{#P*{IW))Itt$}_`Ca&6-OhwjrKk{?ny~TT01di88zx%c?AiC(8M!U5C5yxI
zk7M8Akg<rmHEUO>%&QkyNpi~h=RSx`yD-d#rLUjoA@!@OCG40h819T<>hr0Wt5yhu
zJV%M}O_*qxOjK|tcpepJbnk;5bWOhBdgi|pFT~*rp%jC7T~M%V=|8vS)rn`Z4sz-f
zbTHGNrM>Km*wf-M2G1rQG}07p&(vT=C0PPpfr9A+keg_)6R&ad3w at LYSsa1cQ2Dmm
z#}NwbB*=_I4K4n57Gfa^0ty#HckXVXXejM)J(Dx^17|NQVN!k}pBz})>nX*k(ET}}
z`YPOsD}w58&OEhLQ44w`G>}*~9AlOfbMT<kA6J~0p+)d#=#2c9%>3=t=f)`hu@>Oq
z7equsj)A6%7EU`HOgbZA?8A6%G3#OHS6S at z^6BAim#hZsQ!kLc{IIj$XUe9z%BS{h
zNe#%zZ!s(4WM at 2IDm+%?!x}={R)DF2?CN;zqVk*|T(Y(RGZ^g$^<4z at nW=DR#jY$=
z#ZA&+Qx89|P`%I|g>x%x?4*bxR1?T@`(1L6Et3m+P&HT&F9@)I-dT6M?rb2B8WBI1
z7F_RvM|8tUGttQkOG&?B#E<6b4hd(8a-T0@#UXyRvy8KFXu;*!;bSu4xv6u#YPb$B
z{wC>#zghutd{-T}JcCLS<b})w%a0P2Ts-smZ^p1j at eTPd<brHmD}47$?7^B+sV9*S
zZ=!mjq+<Vp2n2Hyz-1kR3t_YW68q&_43HiP34H=b^^JM2*z9i@%0!o@)?Q((`K3KQ
z0;x&KU_1|cn&`LKd6QK{uwF(jZhmT4ldung0gnMLsQ(*#HN&`z;tb2qlmVUC4Z~h>
zmQg2_1wvZ at rKt#nYg1iiy|O14=$FGJ+9bWNpIKL^aKDHOK94d~Io*u)^1}=!`eW+4
zBSuEZf;V9(k<$qjTLI`X(_g`{=od>T72W<?`tbcKRRCQ47AyyGU&F-r$;AKc{I_D!
z<0e|t)~k#hU`M;}YdY)vSb at BLq+~CC6!#`5GFHeeG(Wf;1EF09gI*Uxs~8bC*odNx
zq)}YMUEXF41))_I{ZKhyNi^YtRa_*77kT0l21?cZLU=4v8i;biK`szZ)#R8rjTZzY
zM;cY)5yv@>(GLpkRg246qJ+AN?p2p~1ELc)7=mV|>iH3GmR*9|aB@@tg7^z?seU%7
zzlq361{SnY7F2WEA9r|5PfoM1KrlWl_^TDV@=--FYMEqsEwIS;7)!%Jon7UNI%Ofq
zPk#bI*M!vW&!5sp8Co~OK*dF4)2rBDB}nP}&)%lWp+7rdq)EUOGNz_o+ftOrrN12k
z`N$83ZqRXAHH!N+4Xyc_F-ibsE+H;XBYsmxYIb&hUqush at U6IN@d0dtUmP=2M8w`O
z<<v~SYvn at fg_BNV>70)c5mEmGMXzQj*-(TDmzK3aA=Lom>=rP#*j0v%hAvzQV(B3=
zy5${~fKsej0^71CYBjCwus4K%I57DNM3{+MCy&clR;*b9Ts%Ee47$Ns$G>QJb}J&a
zbWe?KYHEP_hsv<+Bg(dPK(OZlhQ<==>zbc)#>mAI;_!Q{S-5hx3s{&bz<NBc*BX{G
z{;YI|CAABX&KYaWz at bBUY28Cd>}`nOwKq=KgR{8t#0r=3KxLo|JJ-s<0|@#zXXE*s
z9{HYztXkxKgrb7Nw{%*1xECWoZrbfP|G5tLHb at 7)+!U9;M?L-V+WkHo9Rhz<6NL0l
zPU%qgwa`F<V|{!uS1>*xzpQeptXl4Y$*@x<7&t9xUJ$6LF&5$!r7|ou=%p1LFCBoI
zmvaB~RQ}JuDzabKlyXSj3e%neqC;rJ+4qMk49-uJBBX3A`uiI2_!zJ~BEKxP0<w4m
zWYL^Eo?WKaOyt8GDOxLsH;qBX^{_FN;7-2XZ_Pm501HH<nk>`GC~V4r9Dt3F6hMyL
zHEXvqL}hcOSy3c41aiY7vNb8cLrwN-IatiLo-TfJbdq`hVWukEv}Jn~>27=!1{Kfw
zU6}Tr!HO5LiBE-R>}S9JRbhkCNseUD+iBpsB9 at 3?YQ!3!B8(uoimSNi0wjyk*IC+T
z+*BT$8Hvp}%OD1vtpX-L3eor?x_qFR_N=|Nw*e#@q%KIdmT0!De9s|e6KUGbJ0E)4
zvDK{n4}w*f(h_K|z=0etOrISQ$Y(-Ogv*T{5a)2r*&Y{+wvHAR^=7!U#nq?+H*6yW
zqM62?&5mXc*P{EnrJSLo>*ubBXP*5&Xk1S&qzwb;tr*Kh<C8B0dCJ|%CcFzPW<cQK
z at 3`(4O2bjHzDovZ-vN%yG%@+*2(_=4W?`3$YctUA9Kbd)?s7#15eQl855!9u(L6xz
zIrPWF;rV<03?cF6OBMy at B7Ujxv)=|7kTRB^=u$KQ<Jan8SZY at BB_OxDXn?#suEIrA
zu!@&t6_fL$)ciHgw>EfOQ2;L!2d-pB+}Ne;G4NuwwwBr8n7gF+%b`I^i*d+e9PHga
zvctL4?6Jl`y%0+_Uqi(qBkcfwD+{H+efHSLMdk%uFGHGmC!Jt&JMtpmO-{e5SbUP-
z0Mod{+pe!dn4OlTE;(B>&$tGQMNenLeX>-#0itdoYt7HkyrdW=U~hwmG7O95Vj6fk
zJM_ye#jrMHee1{@4DenN<h at sh-G<z%zagZrLOhu0gK4|!D*VMY at a#4pRK-n5hr<H1
zHKEo$jlo}mVpoa7`bAr!6Z-a#8W^LcnhlBSkGSA**40qft${t1;{LyV7D<KrXCv|1
z+G#H at Q{XP|d1zOKi%Y}Y1pki{p}H<2NKgwxH3~csCgSA7|J!mp(n)<ebFdsl%%%-!
zZG at 6Mic?%9_z+C;y9Asc<p-<k%lao23c4SlX{L|=Z|mrSXOj89>a-K<_&9W3iAu#9
zc}r<P)FnFvRGku3ZOji#S6oUhpkyymRCE^9?;4?(PxAk|gDWAq at K>>ci6XBzl|^8F
zx&Z?FT_E!5uC7as{2+_AxxGGLl5Y&%1n&3_sEG>l=ady#5(zyUTkIp!etX1QFE>{L
zHbqhDq6&GOVS!>ev=I{GS8(0-X>U|f0)U#iV+h!HfIu5BdSFlf`e6!>YW_e6Jn!5E
z<(xO6V~$9`y|;Tb{;@O;Ab3mci7)Onl#4#YP@`q2{rPvU1I+YP9`JZa1jNDQh5tw?
zx<2teqK6K(^oSoMVJcWJmVTCYbXF&$zlEH?Pad^_6YaPQ-o+gf-75;gB^b at sbn*8w
z%qbK75ZC6s)V{%$F^T%qEHDy#U<iigb14_DZ9xYS_Phq}Dh$2#kAi7QUC6*AJ2xSH
zrwgV}Mohm)v672~nYbd at o2CJV03?43fu7D!{nyBWnjOFohRZ88Lm&qp7CCS}?&Hmh
z?9dbu>$=S1cS%}f at cYql32|ER0=Eq3WUT#Z^fc3 at U48J<p;kGe5W$07xCfV}eRoJb
z{z9n&ul6d;Y<xXh=D8f|TU5#>yjCrOxd)r*E4%$Ix%_oS-s^!BUvVI%8gS1?KDhOG
zHol$mfqoVx#)SsYZctNy3&H%JoL~=Uao%q*KZ9~zrw?{DOmr={pn>yu7*uygF!}e{
zhyDzeSC?_TyAovZGr)laui`(uX%+r_5`VrGvGY5{Rt_9|;KHKAaQeYl>PY}zE~WN%
z#mr=4fkmB)9?O9Aa=nyW5bzynGeW5Qh515v|MH_U2z1<N<cC~=INL0eDt!8}Tm^=b
zW?Z7=Xefl{NnpuLb*9%Xt<0ZPkYc5 at 07KVVW;$mKSPI>a#_LLS7ND*K<e8~%^UQ^k
z`6+y;MV8NF;VkzrKL}fMdd=TTkWJAgYzM#ePOY#{P7gED-OJiAKKN3xlNJE*KLYS3
zx-TWZ^t at 3CMdpAWzQ$_tvU%8t(~8cp^vX%P9X(rL&5p)M%?Z2v4zK!2)aeFPMXsod
z`- at kF>S$QiF<Dic>1SV89Ll07y&+mS7^>t6fm6HYr%PP3L%kXgML at PUhe&ESJ$Tt%
z=HWwF%Yz^*Gj$9`4OvNa6}`5A8ajrRQ5TnoD}?3il<jrd{baq+FwQ7QN~i0P2{UDT
zU3bsfshIoxNDUYC<O{|Wh0os<nH6`=`*V>!TJot>engkaAU}!`*(;^idWAw+f8kKc
zpuqU;jyw at KeRkhG%;yJuwi44nF&^m$VD<q#CI*cYvhO>+-KQm}i?1w;u_dp;-+)j$
zD1-Gs7xtUcXZFi8TT~wihy;C at De>I)lcg<>1Mi0SJNP!t5{#HQy{wY74CD~>oGAiv
zSjt$F5~$GJ1?>oQir7aCq!H71EiJkx#Jps%?)f4<Z at l)y+%YL-!jEBL+Af^rg3CEy
zFlV2B=|{yi5kI)tO{xi|sUbqZu`KWNqUp33DFa1ucIneC?SW&JUeR3@*c65NS-xlj
z`b!At^CF;~VZDPmzG4d11X|ekzyn=|ZMZ2F+jv{Hk+JN09fbfn at EMq_JlJ7AK#ami
z)2pbjAn}zAza+e7fKmsE#Lr&VV<N}q<f@<K6*w5AfN59xeQfhZ6IiVz#>81-6X~KZ
zHy&usvy2NSFA)vm^y$HntR{N4`7<>Yxu9itmXO17=*`!dO*FaJ|4QUALEGbb0zNoc
zh^3im%DEe-*xc!t7|l1ft?B+mupsP07%lQ2L>0PCJy&)h3L2*=sEo^KnQ3}ho>#%A
zuAx(k>j&Jz0?VOI4_n*O7*5jV>Uf<(;&3v7l1C|F!J=_mfS at su#rMKZ^n9=EZAM<?
z5;D-i{2YT5n?b at +STK(n{?K@^>|RX$(z5&e257hV;TMjx&(T*l8i!xV+gX;sz35e=
zqS|d-%nj$IUL5&*DOEsOoqie!d%m=_xg|3!S=Kgp`mR<AWol+MUP<9FJ0G6pVzYCb
zJIi?cP}J8UFhQ!&-s`*9-kvg;&X?n^z&ra9govwQcbM2E at 6=7f#Ace8GPG+&E~lxN
zeGCC(eSuxhGf;S3B3;rce6UdXTVamdQ*Jq>gXTa*pA#Zmx~$|I<EYMNqY&VOADc4K
zy5>Q{?zol`ftBqMp}k?*(=RKr9AOf9P+1cu%uh>&Lq1vNxS&w0n1?<bi3Wnw;~;&a
zFb8Ve?4D7ArL>y;_ki|R$TmJJW1T)~fiZ>&n{3&=c!$EwMOL4kqiNbw`2~_>$h|Gg
z`WGssk?nDhwWa$r<%r at mtj}$-#;v=5>7eKY{mB~%USGiyj-Z)nTS}0^a at igE>KbIJ
zLr7?Q^Ly`L+lU){69Qw3DF5Bf>u*%|7q~kW*dK=gmx{RlV*0#FMQ5m*ska0WWeMsO
z@%MGFo@%x@$Aya1_$*j!I}B*1Z+aahmTX126Z)+w3nl7f`avz<oV(RfS!0pvF_;Y-
zfc?6%t8aV7e60A%{L+1inAZ&8>!M)d&~$Uq2M&cv*Pv at ff$-s8ACFgt*4#6L&Bynl
zGDQu3zwDjk`h}l>UM;Wl+&hvZakTlI)@)%*{L`4hOg?z4(;&x8bgEac77AGf&Mr8n
zdj%VLLuNcZebKFEfT<LMLW%e>9*2eN#Jf at U$btg=s11d~CW|%8pFu-(v3H_B&vJQL
z{nAR0a+<?QU7UJixZ`iV#_r=P?}iJTT77~(3DHkjVh6^=&;cERyJ7vB=xW&1_EL(t
ze{`Ry#6(N~gv7+bJ at _RGT<hGVcYO_13E!>xm+EUB+G8zZmp=iwgWYNqT|alPTCiF7
z8S$uDz)Tnbx_Ch7;*XTzwL#flI|~Yq6g2<cyl&7tpc2EQ2^g_~0Q|=88roIn(N1p~
z4TGG`16WOTbNBc<#%wmASW1^kAoU)I%UXilkof7Prv>GRmE9Il at rw{BH)Cd^@d}!_
zNi3cBK|$~(G82WK at 1CQG6wbm;%JK>H9*6W9E;L^){K0xmc6!EJAmo%TS#1YpY1PA}
zo>!9BPmjazX(S at PPWT;)S285q0_Fz<=J&Sn&Q=(v=&DaZzEp!d@`XUNe)!Zw3bz-z
zRfgC>G6<`W?BoI0r*jp1H=rCe`8*!$nIhvi-!r$f5)<PCb!K#}^I;7AK87|^tL2|{
zQS^=n?30cpc|(dUaFhZ?)oM>!Z)|o%>4O?D!2TAvJQ(f>hAOQ at P#jQ|CL3%sV{eQC
zLby$keTK4)+;=e;0}kShI+gK$opx_64<6kpAg<$#Gtr8hgd}2DnvH2_8%S)ekXe`T
zb<ZjQ(u0O<-XLhW57SJLr9E6cm7Atus#KwoNA5HRp31-&6J?A?&$m(Q{TD~P?8OnU
zM)>AlG at PL?FRMHwQ(!p8eol;s9?Kt|YK(75x{)E@=pk4yp<<Q9?D at xG<S at zmXXw;L
zm$t%Ty_P?O>>HcI<#tjcc%rH7w_o6|ZW at fgHj}^h53l+&4`;X_BZN#ZVz|xVFu0uI
zS>Lb)%W+N#S!j8;d}A(0*Ai_S!PVT;z+)68TJ%tRQ%Cshu&jSb_#&sVn}uHj<zr|*
zx~YOS-6d>2V)<*&a<|*^XE`^zJyn6y871AG3EnM|YM@)HY++=0rAZaTkiw-`$tuJz
zzhbVD!9VXvHPOi}vn1`Awosu<xbId`r}P<Yn?69Jne4&G>q50LUK+-;x48YqKfYts
z7r(HDvbHnRj^liIiTj;eef=F!#(mHWuRNWPxVHqoAO(_r1-x1hGct#|0ee*h-lJxW
zAEd~tKt58DaO*%eaQ$P#^{J)I?WR4LyRXch(PI2J#)Kf?kDq&|P3ZBZ5Mbt>ON}`h
zvB+c^FgPA168cFY38a_czv}vZv7GqFE|&sXH}XxHrl$e2KH>Oh_oNaNp;n!u2i}zq
zl%_bK6XDR744DbxCq7Zs3qNX;g-31J3i%Tv_G4k{sjl)9Ib>;|{UQ}ZSpeV`pd^H*
zEl<i;+yM4MQI9qtjvHan`XGU6%h#q#m at zRXQoA*1p+-7p^CJ28Hn%5JiSu$9xOz>X
zJ0pB%kea-r9Af~H3`}OG7hLbD?g_68w^54FDuMl8*z61EZNAdPGqzxe8VyFz1tPm%
z3@<Ge2j-fORzZ=(3QlI9e=k-!2GGx!Q8X>!^K_sMAg=a8TrZ!WR-aP{AWR at ebQisb
zj==*k67UGt`IBvn9s*8wq&vK*Hte>hCE2Y$>Z%)qCqarPn!6|R-%#zPL_E+Anf9>A
zv^QMM%6Pp`jO7im(D+pxJV52zHBT{HvwbO6z)-8nI3In#!{Xtup4S8`syopzOjm&E
z=7rCisHk5(UT8QK7zWUW3uxaeUNjzh$0(1;qUVQCEbT>S%`9TSgrcBqpBBP>`}}hy
zJx4A$CB-c}2 at Nd>tkX at yF~e4wVNrM)1^-wbrLo&58(r+${H&41-PWvhJ8JaBfW^y!
zoEN)3U2gmxSzJQKtAW5KKxPOnJzrMIK%VU&w!-es(ixAeE)9Sj(KMvy&O-MG(U$Ic
z`PuRypwupS3{Ddz)dn*n^Y at fdc#tRD2K#M<5aF`$58jjFin^)aFDCA(n1Knjp2vf1
z`VUNon!ht<`iwGGQ)pT-OvcBbu*6fq2rJ@~N_)tPwF7OyNQ=SSW?CH|ZC2!Pk(Vwd
zTQtLNBd9VJU|C(Zordf7HNjN7M8>cAKgsy9<iHo*1On at qha@ViDY9S<v9%#EGaHJ9
z@=^Hw^xNZDI{WgI*bKHBsFI7<xx-7QkAXBJ={VN;IyxchF(a=e?MmtX5Ww+4{BEX#
z<$w24Ogr|?ivz<601+P`7nCxTo5C?vYnf_Wi~K%Jr3U%V@{wjiwttQ_n`q~rCqGfd
zqGr|^%=o_G+i^gNiN20Ms1}q&QGR~3j7g#Zy<QgC_-%{&3zU%|8?)TV0uHE+BS6Ri
zLCE+2M_D?SHsYIh^3Bony-I*mD+bR2_MM`Je+-{hH)xImmK(VAk_SruRIpqa|7|eO
zR;~^YfGm7U#MsaA!3z2 at uUP<y6=-I<=&C<}PpnH#ogx=(qBntxi}5YhSEluPMs_EU
zn29Yn#)u*GOBo~Lx)?^BhY^3-^ZX~Q+)G|J(QMlTAb?-Ek4maeDN6T>(9f at BOoSY9
zO!Sse(Uo}p#U!^Qo#w!|{s4lh9Q|I#=UpfhpU=nVzsGN{qY#SZ*g8 at jV}K=jtKtU8
z{S`pqcXh?6KLh5PixvMKL}~l*UJ#UaoDk-<_*Z_ziA)Br_(Py)V703x67c7Y_ZF2V
zhSMGVE*xi|O8KLjSjcRk!9+L0EB}FmP%S9_1hmZOqGkTubEisujLi=4b@`D^6JEj&
z4CAK07-q8!W4>^NZxGm7vBkk>3z5H;ujqTk==?~*A!a-)es&Ae!uGa#Ly;eWGr<h*
z9EXV)3NR}6J~%?L?X+`{;@tIa;Ewsi9aZ*r`mOBqbwjw7t0s;YNL9UX=Ad!aTB#Z2
z4dy{zRu)#Rwt_FXaWZsyVB~q(>|HZ|{Y{|^r)zYU$CZ|bFd-+4j-?skMy|$hqFQ?s
zGgM1PGetz^P!6EZPp9Bm{X+JCp<&J(yyxJcdjQ{eKm>Iv)(BGZMzYtb3Y0;r0OIbM
z$4gJL(BeU7q4jbE!1r7 at HCM6kwaWfkNp{)+i{rQ~sNUW=lNE)8wcq}d)f=F{)@b!E
z+<L5pQ`#kPn`w at 2P5#xGp>luk0Wb2oFNYfSV->59tCW!oTV}Pjav=9>aAAU1fwmsN
zV9Q(6&Mr*7NTA(tZz(4sxXW at CI6a0Hn5jwc9Q9>lw>@pN&4;IX0Y@&&)TDPwZRvFS
z+*BJsyeo9kbY}K13RsHb$_Ddt4KQ0?_^DZ05YMDtfcObO+(a!ZE-d3INU at UNL1z<o
zjB601zTBml`kJC-m5PTeivm+!0i6c~LJyX;k{sHD!GDsKM6S3e=);TJBN at xlw+A3*
zrVbaj#+3>XKAbmb)~f(W4FIIWD8~tvDYU~5yBu~L$JkqClbtVof56Dz7Q8a5onrR2
zraEpr*W`zWJ`)^unb|Q?k(?|<GC7Srpk(<qz~6*>qV`e)MMN<-YX%t0$9M>irv*5@
zN443<H!%|W$MlQtW9b{yH(}r~OJX$szXkDWOWeSO!TseiD5mA-S}?Zy%rwm~##l7V
zm1|d}<WL-#Gf|kc--<@7*ghKVwT`iH4Bn2q=IMUg2-P%149mos|1C1w`TC<Sv;=;@
zuOe=TmD<Bi%hBVq^mwXb(2PnXza9bfPs>I}%#8fXn8kzWW&3vGRb*nU!!p)0qrQDe
zVN#6 at 4MuBCkRLZ(9%y;1#ARj{uq(l!_X*<cz28sbgY?*;i31UV*@h_?hWxgsiJTX@
zauAL0EYJw3CBCF$rj!dEJFstRjD;0lb(w%c`TKtw!7nI-_L1JT54%2zUE}SiiqE`U
zlu{o!e0dyp0gp5h?p#{$M`tNp*6u&Rn8d}0&K+ at Regj6~b|BSEnKOUAr4T%aj at guu
z`vui7@!KHy%!-%RD7l3EI3(BDp(P-by#hpE#ad(eAwah)J!>>g(WPdVI9;PF-n~ds
zpjvRGI96Q`#9U9fcigCc-Ah{>+m_nm_?S5#iyL=gdu4`;o<7O&w$Lpd!VTN<PABZO
zZZ36h<k|<u<5cb57;nPN at +;Wolgmki`z6N5^^56=A#duS4(-K5PMmrB{Uoj+yC0}e
zz|<2fzCKJzs^k~}@{({P&G at o=d(hA~*fw4)Z#nHU>mPk1v3(Mv1~Dou^tZm7X>D*2
zKl9J;6_Frv9yi^z%k0M?(HcRb;lZg3ed3FBA7>Pxj8YK|TJ<q+-j8d3D}Fy_%wNzL
ziZZ}W--5hCXiCfHa>K&h8dKA7SOG(@(<v*0)+J=g)CqLa2}qjK@^ZY9UDF*_ZxY^6
z_S0ERa0L^XXnJWYa8njKe1{GwL$l)eUgcOss~Up2w2C1MK-OGW;knWjF7B~h2S5LW
zZ6jf0Z^Jwzt8hgdhd0|{vD$2S9Rc-;VNOz8^sg_{?WNuywlr>mYv|x=BP_%*fI}16
z!t9EvClw-tAIDF{`-+|cIRx&jBc|S)GwDgAsV7Byc*JVh#c~;O{)&&kG0w_pLA7x7
z83(u=l|FB;czdFx_;47}LXCAI{V0;rwrJGdLEbo&dxM->@f2oTwD)L<Og_A%FiIY&
zVH#O9N-3zum7i_`Ha`n2m$j^03Fk9xe>*82q)`qaG12ngL5uM*aclyfnu9n at w6f*;
zZHk`Ok|#=N#SCc0)uI*OFP_m&PhiIKGUM8oYd)+LhPn%QNPM*4;-?%K$e?b_v2o_$
zaSCp<If{jk6%(uw;j?+vyJN$k?to?Fd8~nwJBJxI?~V9Xk%EwyDA|W{Ijyl7MjdkJ
zXWmujGkX%9odLPt3qmsl^}9=bB9pI5pVqOtC<cytOFFIC4$Svi{16q(2@%;h!28!h
zU^`dTTxncvfa!#OE`olp31oJ!@cmmN8J90p;8kQiVocr8>p8*kzL{Uk`x|&L86^@Q
z0mzp at xTCVhsQ-PzCWqnZoU>-3o^SvZI6dEknOI5v3sGmLuU3pWR3*%kmSzFhIURmm
z3he=e{|83<stgGGs4XCTL)h`_pjL}Jhx$V73=~8h>b*=o(16T<w~S~pY<ri_&)l>F
zz1PVX-(5Iaf)n`Ak%ocPImrQUqW4~ZAS^5gh8jPu`5MS;Ex_>os7HdHu1jo4UR19y
zTz_Pyryi$>u#e$#8s02<TvwLQ_G7sIu(#DY;|+K*%W`l_!%jyLS9wVor*P&Ej~RuS
zbkdwSLo}3=bvvUW?V{p)4=Em&CPG<_F9HNM3KY)VLB$|Jun=U{8vKHS7r~aANyo6%
zD$?mf#l&BgspWNPIlRdP%Dgi5#hLpm=?NwQP4yaJ&*bwA<ScFnw7hlJC=_MaK7W>r
z#=+ at qC(~UX^-S>R?&OBT4L~qYgvr$vo!NRraKcG(u--O_EV&-|YYN5Vub;_Z|LEP)
zQbJ~PM3O0}JQfd21Izof;%#LOIp4&g^YO_p+~x1U*ltR|*q>r-GyU89+Xsy<g@#QO
zdg6mfG4~CjUw+;w7X<bH2)h#a7_TjUXQH)4BxtCrqIMBvu~k)rAY?&;s%j*eM5dV}
zlbK9XTUA?CwFI#gRaNzB-y&31Rkc;M#ICBUs*0j^s;Kur=lf>n8+X3Z-%I;`Gk5Mi
z_w4uFbI-Zg{N7*A>YP-PL`h+qpe{H3d0NhJ;jx?2fsD#^=cTlbBnJ%YSkWDeG2?l5
z<ct?4vA>_{Fr!{dPBM2*MHr$y_Sus6S#EjpCY{SO69+giV6yQ{)AAF&_OgVY5hbt!
zloVwU75q<rrDnT7lqO6!)kJ<HP-PH7A at h!?;~vWI%~QwCtViRjW`&HV6i;BKTTJ)v
z&ikX&>YxEF2<O#$|8*0ADYE7n+#$LYq^Pzlem|{{(4|*brT9rqBL7!xSATrHDXmcb
zLen~~duLo2dlYLtfw<u)kijUPaIcXm+F=hHvBnenzs1`-{FYKt(Va(s7~aHT*c&{o
z<}RO!8er^TxE)QI7*D#vfr1A(8<_i^(q9R$-muabtn}0))-j8kSf>frF^bw3Mvmbs
zGp_RwjDq at XdpqVLioVzd-oC%5?~w|FDkcJ^Z-Hz)mIxXDsSfi-gnKYArHh?n=B*df
zU?K?x6)tzD+0Ujmv8VwoXB5v)^x9q&T_pKM&YR%LXLsqEd#K?sNMKFu)K4_r74;|S
z>WA_Vh`l3V*M?xT4fR$tiMs&%Ev(jX;%#q_V$kThP+Wjgn}RV$(Rg{qBr+egHLA|!
z$}pUx?k*C$Ykc97{MNzsgrD+uLO`Z}G14HKX0<A>brWzuVRGjNjECi`!s6N7Kf>bz
zL8;%K3_87rl at ayHlD))yn|Oc;NaWD?$jbzoA`KH{V}cgFLoQ0DjQlf)U6VmOA9&co
zO1tHS@;>4s{CvAV5IcnJWUF01N=T9~+8=f*8LVSO?>%{&$l?c-S%9*2$O!K#2q-Cl
zTeiutV!L^oFg<#swll!m4U~rY;4ai&0pN7eWfbAPgIa6-v$S06aC&D)rGr~x9;hM_
z?(eHwCGBt^yv;Or0@~?;Rw&AYBgQhdpYwk?j8q`K-scxEu6V<2RdjzvBDz6z+vO>|
zY((2&inp05y31c at ijMet9Dm)zf39a?Qn;Sk=^`80zJ)(Lu<^gY%fsASa&v98 at w!0G
z3ZA2vyo5z`#S#<v>)sQ8+aO)cIv+v8jd=jd(+e^L!gk%^8jDVg$L5!-y at t29DiL(i
z7yj!rjKx=W<#u%zMK$Lj+(A7+ZRQl at JKIH!>dK8wAOa2vS)T1S6G%$Z*7Q9O%{m1r
z9kP6+d|RlrpX2cA8Ep6n{tV(({prHRB}`X@>5O8i{;)`K8N;Sx*wCz}gk-}D^6?}p
zO?k#s0`$<c6ui#K>RaUX^g-n{DGH=`5c}a4lHo^wlRg0L#Z>?>4FH(3M%9oG^&Ag%
z->K9FdCsxWXYIQ2gjX2QXPj=G)H*-S0K;BZZkAns+1_GEl-#4hTM?UE42l|&DbwK#
ziBsrA#h#Kwbj7aXK!My{-}ceEpL|0@!BF9Vt_x(NmDgKRhIHR|2?Ks+WmpixJ|{9!
zGei_@@Uvj|f{DIM`H>ipgcx^Y8#nxdeYjRMaQIf at 5vRfXAA<LdVq|aEVFf0YT7j2<
zF-L|-uu(_A3xMqy13$_I8w3fkHDFO3J<$#?IfJf9#bY at B&Bs)zVG-g58SD^`#e7wG
zzPERs&C*&J7Az}DhESMM7@#xP@{Y!ZO#4BiE?Ia}o`btiD-`ns9d7Xt-k<2BejZ^f
z6xhmOah<Zf^KpsKsJ3@{h9zZ~o$pPL1)`uYkY^A@%hOI%0MO|=IwNLhupjauCbS^*
z&I)Nv_hN|X!FQ|)lzae`%$is_T;d{Bg|?@r*wazGtrUyg1#cR~?2u<~X$i>bt%Q*w
zz+6SFG<(-%&qmS8N|g9S!A*mh?|=JCXYv!O_ovuhdGU5pTU9}S_M(v=UAR$ALT!eX
zI{Dc(nQ8NZ)}}zOK`dUry|Na#G~!eO?j)FD6l>Ncdj1Md;MXCtMU2X2zFiR*O{z=r
z1CQMh^6t<|TuM77gIXGw0;e`+zRyFlg3DJ>+fePm$3 at s4@<05a7$*gF)J9MMR^gXH
z(Ak@@scpT>Jtmz%T?LcGOq?C#*bsc{@2%Jwo#INMv55XlUL+jt40%M&F=D~$&_z30
z7ya1#U<ZoCI_*og9To$Da(g~?KH`7qzo<W&)vrK`?^0HaJ5`Tf$FyX|-aGMHrk1fy
z!_h1oNpRYNd=r6PY9U|{`$LA*mGnKS+iZIlpNgvk0|`)ae&RsL639CjPZte<@pus8
zK<_TevLvSz4CCL{!Zz#Sw+BK}9+#9Zcnwz&c^sDDT6Q}y(kKr5*Y)Qbo{7=U6v##@
zlFx^uBTUv;7qz=nj{4k&+*z1F)CA$EcBw%e>D at aM4G~iiR6(qFIP~3X%qB;dCvh=c
zC+2w;N1-hncdP!OPb4;dbl1 at Fl7tjwq&<{`lL%%_Vsic*Qm9h^fe*iFP-`7|izl-5
zYJ`Qu5w8h-U<Nf$`0v&$TEJ>D7lzmh at idB)y~lYt;!3Ue0Ic;H*yp6b?VR=&jvO+Q
z+jiiA_nE!^$hsz{&!}~Tm9|yKATgP|$unNovWTi!YYETwXIAtL?X>}LPfzLNVBNoF
z6?N8af<TgaAjx`=#30U1y#DZg1G#lG5pVpHXTEab*Gt-&Icu=3SPSL%49|SczgeCX
zH0D<lRPOI}mx1pO0ypH%Tz`}efID~`<ha74?<`-DA|*r-L%<$s(y~T~D6m8q{>fcm
zx*wBo#N_vQWVzUtZKy*WUJs!Qs#>YrOWd>_a6t;^KbGFdT1Yj}NGnm}ZW`3{Il^p(
z6?cj%R=~@gbejziL0bXklNsgym4DwMZAf#%a$P<zfH?fX0u^xajSrs&m=vo_&w*>s
zk4y2y2G4a<9dHvx1g567d&LoJR at vS8C9Qf<o9Gpq?I;O|ZYN?nxbOvlTg4KbB*Egm
z9fPwC&8aBwx?sf?Z0xJH*wmvU$~r5DACU{kgbG<3#8a{R>S*UmPDTyTWJiuYB_o}(
zIMTA{-^k%GK!eo>0DhvjWvp5Id<!|9?&n)2v?FY37bLiL?5ckxYi?z?oTaiEs7V=y
zwJ+*cMI$2+h^fB7F8svP7o+}>j1YVwTLIq*G{eAc82I$=XMT`OfZAFPwZ2K9&j2&@
z4*cnhKFX-k;)9_%QW=GHVs(;F(b4z}R$c_;APMGTR=lJMoo|HPp~5&Yvx&K+!HVpC
z9x8_(lR%hn0^ehRN`q)((Z7Yl^~z*evR%A(^GQ|jdt900*y(h>91we=%iVf3W$2{G
zIFVM9ugNzF$>901P(R<Z#I$Ph^7q;(I_ at tK&u4|03{|s-p$n_LEJ>mXJw{WGKy6 at O
zZb9Rrvrw$h*4L46X6iy2Y~-!9wd~y@#jUip2wjB;ui`gbd4cCF18wAY;?Uh*TPLBu
zx^+K9lZ>L{?gPWM46pdpN~px6<;`XY@)sac#})^VOWZ_H#N4F|Ph*p7*r9mAa&2&c
zvpWvlldN=65$69Ih>6b3m5(e9bVj<Az5{JV5uo}K=zeiU(-B&qk>0>Fs at veVCPsBs
z?7tsNF+nvmm`cVGeUEh^T=!^EdqZQa<YBWR*f{1W<q!GTr6>t{OkrSF?73p8*D9%~
z@{V`K^nyK#5goJpCmR}@rl^`>G?Zi}E0bQaGne>Rz&h$3qNt6%@8z%hPHH|!>-<11
zT5yk at oR*T7i3)BQqm;z%H!1l?SFZ=9D)T&*ezzOa))He=`*|gYyGr44kYhQMBWaS)
zl2_rT46z!*oyUXwU!0F3P-H4ad2DG4(`=yg!%R^TA5O)G10OXht~@cRjVB#+vCvCg
zG6T^~c<4|-4zRmX40f(!5rJ5x2&)XPT&0T^VU8T!WSGq8XafZ*Izve5t{UBxRy?xS
z8R at Z`P&o8R^_3Re^0o0W#gA50d>MrLB^JMwN$cNr-V&&l6jVOztrBB5z(iPM(j5<P
zN~uFV5A&R7j!j$Py9^pZR*YjN<$a?s)9y}mm1NB=M0*`rsC`U<%*yjX7L<ZSQ6{ic
zC486}dvcZJ*wR_o?!L$k#&KW+{?IzfH7y<`V%q(f!633$+!{sN!YLxo(*&fR{{ci8
zmE&9-rJu04KSPvjX*fqp`pVADF;ndbO4%I+G0B~j=z$t45|=6hf!-xRp`WnE=F5(x
znupC9R$@5FMX#N#7ytGi0pQXp<zaeC0Iaog)n_D}aOp!+oA68r=al=wm|bL4kGZ&T
zqfWq>yUr=9VH}Y06|07KDqs2ap*P-%JrnwAZ>f(m+JZz1Tt<T!ze2ad84-ODpneXf
zA7w&TWbM>4B<o}DC}k4uuy#vUIYqI{I!k8Nc?5Tx)oIvVW1tKVh;*m5bEDW$OgpcI
zemoiquLv+E@$MJITI*`9QFaPkxYuz|vN*DHfU4K<P+!S+Uk%nD0J%i9&B_;bs;+V&
zqHGZNNoLO#E3TZA43abX*!>Q9gm7SU{tVBm%1INnK7)m87vTviR^I_Kpit%Rs!JvR
zUP*fN2nP*@s(c1>uB#k%L3?1ZrDx|kazz{t3<j_(N_p%aa7~&}x%{S@)$pm59HQmG
z>xbBzL9F)*q(uw_kUy|+m0tYaBU^w4zb=*>!e4K!eEpQf(d2S#IP^Z2I>|WsT%HUS
zZZO#(o@`U)%^ye%ujDiGs|SVQ>D^cm{)}RCi`!eJ#hvkNyD~ZvPGntZ`OWgusAGnu
zlX>YcE62@}cvn4ZX&O`wgxmx$=C)V at c4~={1{e3W3=s$2k;%mPYIpfXk`1I7hdUdu
zKZGlcEzq_}`NJt02mS=S#bOwaKUo28_qGad)Uk at 0SNU%DpLXqegaUqP!(q15avew!
zvWW<6u?aK#j*GSKNn2E&_2cdvS7ID}5och8?7YRDyPN6sk>hxM2axnf7W^Mu9Mn76
zv-)#DrP)C-Ke5;HQ04$-01X3p<QCQF07s<7r~lEFwyTX)^h<p(WHmNRLvA+4kc;|B
z^hlxI15<U1wbmiaaiey_Il0Jq15Qv at 1R*IzkkDqzkuDy9*CQB1hj*_Xsx{}V=JL&!
zbgJhownGe~p={CZ#TNv5q6`rH4hRs)nDpoHis%Ea<iLota3imPt|u)gUXbL}mSzoa
z?^*6-5lGRH`Qx|UFM3VO%C(u0mKBY~sxc)_SB}%`i^eoN1xK8o*&|VAMOWQ}ES(I*
z7VubiM$4tjTvGzPDWYMTzhKV1>;odZ=mCiS!vrY#QTb>hT~sR-Kb<F?+bYR(deE5L
zv0J=UCr?R5(@k+2yi=JWzSH8RuW;;#i$w<<Q5DY3G<I9>Uo4p_DQDMF+wMMUhd>v!
zWX)lieB!)B0hc~^KV%+*(N#!wg;rXvJwPG%4pE?FYc4>6kln{t{TWxrxXN-fUsudV
zQAr6<B5$)<DHrgyk49UHlwn|1W~Rp`U)WDskd7RfwPb#xLL!kp5cgNv!(Nx7#Ol-I
zOlMl=9MHZk3-;ray>>CQpo`%!*wa}|xbl<f4Gv-&A_Y#>%S`kN0lF39$YBV^kH2L6
zRt$*I2?DT>(+UH>!N7`pet6(<cvWm99sc`6DtAKW4Wddw at CL0Ivs5xlsksiuDp+j;
ztp37Sts1)Oy=Q<Zis_gTpg|=JYS4i54q`@Vf1GPWo*g)cu=htSEm2($A$ejnK%EVQ
z7)5aC^3R`Cr?s)_NT%FA8(ya&Of*cL at b!K|1Yh!*oB+3_6=*SwCALPW8RcD(oP%0w
zDPZZjjObc=02PV_0B9ytsP>-!bgJK`AryBPf>V*z)zhveEFuj{%;P2MW_R-|Um<h2
zH5bBE7bK45j~is4I-<2}IB8L&qc+IVg~`##{X2`OkKe`d at 0x`kd7e%q-QD$q)M7!K
z2-85d3EIpcT3njr8TCxhM;BhP5N7HsTeQ&7Dc{p20#T3en{l2>M$R{i=Z#izyflgE
z(K58*VaZ!iqkV2~b16`;3liKiw4jmp=uW{pKDxh+o&5#?5&Q@^EkC?b!^X<vnEg;7
z<P;i2M5xy~b`-3n%W2wgHLhdV=29}~%Y}bLO(1^;u+=8?(^;ewotJM)M%yXX#x-a`
z3p^Jvt^_ at bsr-=A6{tRb{2lANj;<*!q82`#$pq-MvO_ at m3P@?C-qw>rms|`sim15x
zg<h^IvaK+IwrrBL6l`cVcrj|F$)m`IQgYZ1!c=0yblszCgODo}10D4gb9A?rHOEMf
z5BI-u$!Zx)=~5_lqv*Mkv<%o^48~4oVJAHUTHe;GS|#>Fg;O{lxd+g;;dOdnO2tVO
z6+Y53#75YqFh)b{qgCMuF%RO`hUu7aY3n_$$;VA6&WL!yU>=c<X))yt-h5xzVivIp
zi-q%I{d}OrE_wqcj{{Uc(LZj;CCNe|i<N>l9tF;*M9(BBvHp9cwo;_?sk9ieR`=&I
z#0TUS&hVTC$c^IVOUt|`^c3<LXC>6hE~w&{FX`Oj at Lf+6$Zi&IW$@(RCreVN_~@D&
z?3$R-hJ6fPX`d^d!s$kmvV7-&3t}Lig9ALDC6Ud^f>a*BUJc at vfakvUhp_ZOjq!d-
zNipIs;Q&bZ9~7KH3|;wVdCC at ZX7O;FZE9<mu8LDyT^g1V`p7bSWWgR_pYJeZWL+v3
ztz`^mLwL!GlROc)ILcm$CG`3IGP_cK$p{iIGbSuzcFkFNufHUSI1jjw1J%JV|KmyX
zS5Ezdlqpq==@#8J1~u1`l{i~(b at N{{|Bb#>6(XQGO8enlQcX<Me3|^}cImX9o|BiB
zZ4wVK|1{p<JC~X-_685pTd}BP0MEw^&-BR;<v<}PSS$btome=EL#KPKPJ}Z>m at ojY
zm%z71F++b?xOfc124UEYxK^_~j?HROtRY~CUD!Ozoaj#zDavD-mobe&%wC!KuS6J^
zCnkEpT^NN8`iZ&v^R*WhG2dX!H+SX3k)jdk?@<eOcrH*d*DKH#kpiH1186 at nFSMwU
zqyc1ybA%WR$q9tLnwRbEik^;3r2vQc|M-g-73!<#9dYzn5W5~E(I7qy^%OHwx&b(8
zHfI{n*OgR<Nz8|&_F`XRVZiN9lK4ZDnLG-c-2q}>0OuIR;?P&dOJal at XD){$b^x$X
z at wYfmx1b*FAq+x9_61!@CJ&NrzM_5XR2M;E+-TsiA^z|{C$9T9v^?jn(ivBinATRD
z#O~i at W?3E(kgxxi&7;#^1bl!VbR-aKF14scn(6iSZIkinELkj4{gZ=m$q|jYbm%9t
z^3Y6V;MLe{J5??1g%L4|FZN80pldqyIUM)u?v~KMOKdczGpK}4Y=uMD%CDZ4jH*&V
z15fSvRm=$(wRjfoFZWb=C^q3pHrquaxb;=`9Jd5~yjzkDdJwDJ2h|6;k3(r0#n+*O
z=4pd!tOXT(Qz$pn{m{7y at clIYzTUIEv-Uobl5Mr6xF*7%2m%mBvHj9IUsdZU?!Ofi
z4hJ7?kE_zr>k)w81-UN5A3&z5o|Qp-mwn+G30)L?ai13kf}z&);O`#=h?#FJN3bf~
zeQ8=f>8M3sr#;Vo*OU!eS;aiEH^4{DK;rEf1PgL_=EHk_34FY=@~m{R%1MvEM7uej
z{qZp3k{)WS4Q3 at Wc+_X(JZS@{gBF;`D1MnNU7(ZBaHy;_@;Mxm0zUIhy2`hvA#>q4
z2t&2Q4B|vwhoM at _@X#H1SZlEq1f*BF2Jvga>6VgS;}@VAo}SHUh)pj>$?tL1J9|?h
zT(aF|d?+q93gkzmBCgpTSME97K(`EwG0 at Iq8ICgna}Ij29dwMA?Y3ceHJJCWOb(`;
zHmVVoA*#bqrb}~!xOQoJ4gH9K`#eE$tV+C(n=7xBlQ=<bbnHsqNybnkbJ;ETx+rOY
zb&XipDE?g;QBpy9o`Dl!2WW-Q@%g_iyT7mXo3I;q#`=C(m2$k7`=OCRTA;Bf>QP!~
z&d<cdv)t5_R5SV%4i^_Nnv#w{-c|19ETSWp+r-;9{N3z=<TDgdQIu at a435@WR=<z0
z>g&C&1LbXTwa(|5mCIKNzv at G6C@qy(X at vltb(qYR_P+SQrK&y1Og+Wk2BqJ{4veC5
z{I5gk7>?%wxH_i?0@`|dV^wL`hdC=xsh1 at w0jhmMM;|lSKA}!<^VvNMT(v#LtBOJH
zucn!3N2r*8n4Z;h4!ozum?H<V*R)K&`HLd6%FxzoITsgWoEee}n$uf=TJgF?{zxHA
zfJ5GevHeWTFPB!RV78}NkeDJu at biz^zpI;b&sYUUO|1h<idY=SH+z}F4W at jum&^|3
zwY#6Abi{Y0C7x<ST+lH7KlcT$a{64Z+NGk#G@$XS1!J5=_Z7!8K}GCS%y`XKg?Noe
z=2%dnM05i9L5$UqRgJB5n0LPAh>7nW6CaZ_2r6lwI^i%jS)n=g4r(tmVNdaphKgzq
zQUMFYD_1lLZJF$?x)?%NW|0fbeZ=6kuJTzcZB(4imQoPann4lMvtW;D%&Kko?k<)c
z6eTA*Peg;%>v_udK6Y#uow4J4Jns3ujepXLBrgpI>EVtU8?pK%X8ca80zE1{SaYo$
zyoY-UrS(5--zYl!-jJQ2v`xp9ovZk&n at 9ZB6?S3>Z$0YolGi*rxDao`@h;q)FS>$*
zuVZP0h|a0$`GSE03 at IWJoZONbF2>2?slovs&0u}fYs#)K{lTLHqEM=XiWN{^HkE<G
zD}*Wfh2#jpJ20M+EC6xNnKQ&l%siN9?we!7nJ0rvfC>XX{f}iL(K*y2M&rX*Fw`gp
zx`tYWA3lA6p#%SZ5T`Y6OrHXKb|eLiBk9Pt6zc8|X3Cdy^te17JVej_DNoQSUTxXG
zfn)^LNE98XTzO|D*xFuLgjcH!=;Kw{cvfv04`t&INYI2dzLQ5!AH{qTv{dxIJusWR
z>igQ|%h9Wubd&1R58WFnSE+G!kM;;Vgprk^Kan!!ckfj&IQU|Qgymwvlqv57YOSq;
zM6@?b!?`{$Q(Oj*9byuu`y6QzS26MckIZN}<xdGG%1d7qvvK(a#JX=mZj8cQWiPA8
zR7*-umS_d~eggWMebCG<+F>aQ)}t^;eDjH5P`uE#D;-4lz`{ghZ+WW at PuH4WMS#&n
zhaSKO<M;j;WDvG^{n~fL#oM7d>hQ*1|GU!%634+sqTZU;44QQTe52Vcl5grSZWlE%
z-ECGfW8+`V(mv2I+tq7!(FDFh5zFoPM=Wa>3$g46SQf2Ca$Xr*3DTNDvX8jed`Lg_
zjeIYDTL(!wLRccQ?Zd*v0tm`U7L*A-#)XT8821~Go20Kq5f6&O{+?vyPVs=pA{GFi
zdo1V0Q`$T$X?C at zbVT^;k=)JfG2kAr4_5v9LM2x^WroOuvvUoT%=SG+d(jt?aF?ZF
z&Xh-1fg at T61BuhI=A6F^ODPtWnAELnpFYV+J^MvRbxVZu3sJ4_TM@)MbEgC}(AfjG
zToCD4{7pv0JRb<Ni>^ReIUe`nlmyR27Or-E6<Y8O=mw*h?|}=8umcy at fs6U^?~kC9
z1z)#5>`N_DE${Y51oeU{bBZOo$avjG2 at B#gNaUM<#wb4V0*OW31|)9+l24`t{VBO*
zHj at p<a at 4=I=cil64jlF=@?;SI%emZHGNly3L3ej;ajQ#ElSbyRWi4&GJ)8J8Ee~g8
zDk+MJ992 at 9OX`Lb7d#4b_(Nl#0XYofiz&KA-iQazLp63|3~bTYKwxreT2u=(+cKrc
zI at L3xhlglv6xKRfx$K?@M3JvnhIReKS1q4CE*&$}7a*>a?+}Rc7I5HKEq`1h?TRiR
zJnQjv!U6v%5074|y%aIq)v6dBphhOL8u`A;=55sW(wTzA>X7clk?xFCgWQ}9^Dwv!
z&}BKOrm+?iw*krwVn>zVI#s9umzeJ(c0oH^S%7!@zz(v0fE}tcU=RoX-smlVs~{&I
zNTjW<z%ZjYq^mG7tQKagj$wydjxbBCYo+=r at ERwBbDm_759b`&E at 4_Z+Pgbg^~KOn
znITT;LueOU0pUvC$Z35D at rDTyK46vp$KPiCat<7W4}g{#$19(o^3`5Ris<n(ZK)t4
z92Kwv!RTZ!P)lOfux}+Dj${KR)Uz7W_77w7a+QxLvy!g<gK-s842iwG_hGF<XXd;3
z<`wXUQC!(u?SN$2h&PlZCR{>p1wZrz#;&Xy-p{Kj)6+_gbuWb|*I-e;u`0cZl-uJ>
zm9r?Raus1%F0l`N(+i{)aUYNlVJ^NM-=(qF^??Oz=Ian(C5AQ@>o?~0|IPVyy at WP&
zU{wN_r$Gy<Bw-MKxn2uDP?zWhn8?D!eXPvZM_S&QaPDeKF+vOmHOx%nN=07p7b%uQ
zk4i~BMDz1x|G?746)M=(q=@RE+;o<+DwjiaQx~~EgKz-6hP;QMqIW&42UT6P at XP;&
zjJ;}Q4~74c1SX=fv)B0R>P3I(c12>XdkGBo6AQzW37kF3ox?`L28Dn^22tzsFCIB&
zbf+i2!~8|qDC#4~UuTFt_<9n)Hi~ClbHew>oGmctGpkQ+mJv=-I+KTb?+xBu#A>$g
z<p%~SDy3v&v!p2e5sb0T!EtpjU*UQP9$GO2mH+J`8(*6MT-~Ay7rko}20 at vRuD?FP
zoJLV^wbu#@#78yZnU)7p>jjRgqm9}ktgR-)aJPu6*mrF{k<~9+x>G8%qD{;<=M+$G
zK5L3g&=gykIM2#>MoD&TWisQrK`Y}M_2DacE4?@{p<i#c_Tnz^1hMDVX2^bCy=kiC
z=}>1No2h`y>P>_M=duKc2JTAcYkzq2!_f2yC6g?8a%=&^2Vn0s<K!6PhVZiO9?WXy
zWbjZJtoN83BUjhoED0{vYv<d3KL~g-wqz7-E>EZ=5uDB&R5r|Y+^7#hF9!hIv_c%G
zoP}CD)8j0oXd8HL73418nnS_Ux{$jq0JCkb7pYTI2r{|8=22K`x^Xv%?nObFk{0K-
zHm=nVLwznI2t>@~dRH`29rZFHN>v3VZE!)7+wL{V^t*J7Ys&smF&W^vm{#W&N+CKW
zWhl+lS;zu|^a8{&MW0`k4t<3-*Sp_6pydPJS^Vnr-Vc$S4LAm#l9d at QAz^=SdMlxX
z@;om(9Yk{wok}wrM4w#i60f*&mr6VdT$S+PzO7y~YvUSb6u}w>?}SoFI)YE8FaZYy
zj=drque9uJn<c{<))uWDreVfD5YPc-S3NjREyIkNx&uUm7}#p`VrOCy9iYsdJz(R9
zuSkVcxwmHmjeU9bk}oB+yDwBs?mmun!F9D*G={X=Jyfen*riILJTTW{Cea_#-- at OG
z)uMK360U3}dwROd$KC at bn8)5hYT1_o(qN<vBdG~5r}HVSOUhv*(<^QD{kOpLDR4FN
zUl*6))9u0L at Ft+F)w}o{Sre(29B~<+k7vD}UUcJeN&K<daA&azKkTn5(<~!5$s$QD
zy&B_3V|BnX8yOeoGP%w$z3sn^P}xbAe at pJ#<I+{0)+up&tJ^@}=RshD$V=#7qE)Tz
z<${dEayag>1KUqzIPI-|3zD=3ok^%boy(2zgUDQB(^_!(+(_B=L^wawRwzzk?LsIc
zgBafG&`Od7N_t8eHq1sjYw5}KpdQD5m4V*uMI%QCez;7_3=AndsfF%(62md^JjU0X
z36H(6y-qJsAM^Lei5glA6OL_Fa#Y5A22L2}{4lW^0&Qmy- at 4r99f?!aFa~v|M>wt+
zx{VrB7{uGTp9e|0g1t9Hh>)av7h#_x%z)z_HLY39#I!{`?W9265^Hn at vx7}u<XI=L
z{^Cau6+j(^DTfHrmd?<AtwB(uD9W9`Nb(XuOODmzjOp|W*JAN1KxfhFi_OSJ(bXHb
zenOO5)x_h$d!(+uf0ibmmg}oF8-aQsV7>!Drj>0Qpv69N`ctSdr;V*u47eKD#Q%yf
z at 7q$L0u|*Wb2AMh_63XHjIueeN&M)lmrpxzpd`b6Y+xp<=2=A#xpFDCVO;pFJ1;Z0
zY!%hHRGtX+$0|t>WTW^{7o7+~U>B``&JP1mdN^^EI4EjDNxsN?_{gmz at JQ%3rltZ|
ze&Ul{N&v%tMG1VjP<-}DLa&7$EUWsq1HrOXB=!?|A&aPkg`#+&Pc;i!#2qX&iIvgf
z++RME1c%PBXk6s7j?^CTX>16=ht)o6zYzsVzUzaEMzQ4bmB%R$fP~kUpKliFs>DY3
z!$YFLPo_#{h7<<Qv3Riu;v9ra@&d29wCwgLlD;&hx*KXx%268Yl~ulsF%Dj3Fvfya
z+nUv{?3Y9#D<?Of&c0aoLzb+yfp1)tMir*QQ8bC2m}?e`)rPWqatA!ptv1{dLs^L}
z(5T(8tWj(#E4NN^N65WG<8Y0CH4v*;fM{)MHTa at 5T+P<ev}76#Tm>>Ce^J)g!ze4I
zsSQw7uQDfpd3k{MvapnMXBJzrZWlIcU*&o);zp^Q)bWj^`e(3~L3~|w)*x{ZA9a=Y
zntY*|4Gc78YHll<e64&1rHZb&10Vh(OYAqR|G6#cQ6x#ErPyr4UuSWB8-RVlthK{E
zheh1Q9G5W1j<PuKH7Ynv&;aPE&pX?d at L@d)?h#+YSxCz at A!vj6t}Vr47Y>z2PbAXT
z4wRK_BQuq0hW*LUrScleTVtq9u at -{&fNjOW)#8PU6->DfJa0tp*|m_^dO(mt9Md&(
zjzV!74Dl at p<0p<M{I66J1~5flIN^?*jbWh6n?T?3%MI6PGsD>yC!2B$b3_8fxgMrF
zURElX`n2YA69<S at Hhi2SW|d!B>D(D2PBIQAV*%T at vt>IEX*Dr-;-kz6K3vhG!m5me
zbE^y6Nc1DdMmD<o=BO1m at fe%mD at 8qWwRTXON<lev)39_TPkZh1tOJrFR}y?QNh?R;
zSoFcBjN(>V&@L^w><1`;aBPc$2+P0(w=VzZQSqJh>~^d<k*W4i?hEeL>PS&a=EqRP
z at E<b+-7Tt3>4iuXL!US>-vwsidu8R<QN{w^gCJv}7I<JOE7<!*7wSpci(1XW;&ZFH
z^Uz!yfEt7NFR;pQQ~{N)h5JQyi=m}g0wh{G927B#2SvM9Yr>-d&J`XVrw(k3JsO2!
z-z#UejKX-ZP(dYe8Ux;-jaa>hXi)urA#j<^<Tvhf at 5&--V^_;~SAKoU9o2?Nl^W2<
zNQi^Q=><>>!oPKc%HDMsJy3APXgff6{R$KqMZmsC7WpCz6M`R<0l<JDpC$y_{xC+?
zV{Kn0=+oz9N0$A05-;-OOPRJoeM(zO{HDe`+}SP_fx at QD$u;{-*{Hp8Qt^Nr$lgFi
z3?t&Hsc+Bq at Q;-I1IotDg;FN!rq&~j)t)->J4p|4(_7pha(A~@a1cospjg8i?|~6e
zuNHXnaquKcU0N@!kahzv+w&y52iRYQzi0cH)@Wsi+$zYqQsho-!hUwM4QaGbudEl5
z#}ACUj&ajujc=6>3XKEO1DQfigW`%LE5Z)E$sJ|xfT44NdsKnw({wo{fhY}%I>Vh=
z#!}dFU-Qcn3iEM%HD{~G*U7L%3A|*hsZKf05ch$zr<t?ET%Tr&2l(_E{xrM~KlVaU
zMHE8_4)ceRYjk`F)PpDjm~%lXL{wZ8TEt`cZ5{l!&6?L&YQ?9(8L1osqjHzA+^%(l
zU$sNHQ!6|&aUH)O%Z$}2sI-tQS=WU4#H1*A-{?e=)GsE!2VJfa?-6TJ#M&TU+^269
zK!;pdg?J#vPee@}IznO at q65ltx-<DoF_!LOqJlovsh~juF2aE8BjBv4eT@!F#)02H
zxYWQw45b5wL3HhNrH*v`VAs$y=V&#gyBu4xZdaCmDoyXIddlIvX0Q-Xv9lJv<}!CF
zcg84j at Xik7W5pe4yv4woQS_L){uK%<ISca)LK~H2(M-i?FIc7?Q{z4TEGl^+&H&c~
zKs}>~Y2D+FkAQ~V9nfe8S*ee|7%wwsinEyUCFX}-eVX_xEw8jfoelkvfXNIZ&dYQb
zaS786WB?PU{@H;pWho!ZqvS{$c1L`(rah+WGjA<vE^QtzC*vjyKXur<t!TBrYn~tO
zm1auA9oIqPDrgqOH0#%=emmJZs8`lBUb%>Q0J>dg&73%Ou=h|1Kb>m;t at Al={3Yvo
zxtY2%;OA1|BSZpNo^F&;SJV26PLzWKb9=Bn^*l9*<USK#(Tb$n6eB~VLpPQIYj}6D
zuLkObK6EcgUK~5b%AWc{B5E)%rhA{zBFva at A5WNd<>xEfhi7=ImxGr*A<z?)Gi?->
zsbiN(%ug3t?zqcRY;_YBwOr|TS&F(SSJifL6~~zg3{{@DB`qQhOSWfLv|0IZil%GZ
zpwA*$!Pr~-C@@EMAs8xy%J>^a{=T)Jkw?VY=g6AMLiIv>KIgAei{~&g1ZsB$_$$AU
zUe!68ur~Op0R!ytJz=;=!GtR at p-~k29vUgqFmx4$7PdarRnmie!ON6XZg at orv{qMa
z%qWImsl~0z at xI(7#={<2fR^EF)_y8+11VFDDh<QWFEbyG^bK2kkq+2a^EO7UdEq at Y
zWkKAXUI~uDavNd(Mzz+hOh*Vyhm6oovO&BtwaV8znOR(*z?GRb9>8s7;Kl^$m#L%4
z^T0lNEP!tY{iMWXIDdK`VB5^5d2CRJyOL=}+NryQ?Arit2}{~L`&v|L48`N^QY9)j
zHaT%X99{qoi0K-gD82(vlEP}-jJEc!)mM=_g7i4zW at gqw<FCxZ-7b>G(nTP^%wwPF
zJ?ogQT8~a~=*jSQ1VuBk)O%B(mft`jG;DI1QKjHIrVj_&&}qi{-wv(l;>jWv==l!Q
z^kO+G at -`q-?7#r3Rbvp-*K{^XbaFl6&U8QFZiGdDfP@<nZ2YjQq*tBQM%*f4Hb`|0
zKPdJFf<^2B2=M>`uajDz8cjMwE^!V)Z3BjU6%09JjcJAUw2_j7Knk80=i>b$X1a+#
zbZpk2DO_~GOv#uD at 0j*YJ0v-RN<fN&&dLR0Er9+M_!8+%`m;ugj+k{QW}Q9tzu%-V
zj?I*BPqT`nP>xlZ>E=!yv`!Lv+%$T6%h_0Z4gL&bp8nG9MJFts!W;Uq&mXm<vxk*p
z-F(+~6})m7>mx at f=p|2|BA*^pje%G45lHb#Yn|gdYPfv{$)3;WwNI_J>d2=}4y at Zb
z4ssmJwP%C6G^n$`#9Zp at ctnKVHAlC?2LHf%W0`f(JxQM_l~h0)rHTsWjeo%6wc<*{
zt=jX15|g*vQh48|0rSt`LZet|t+JZ#3~e at Qt<n{DhVMZVSN2(T9}g0^?zcD(JM$vA
z$S78=F%^*wR>LtMj}np*C-Iw8K=`UY5AvjKDGscO7Ix{j*}%kl)@^Inbj{ZS>MHEa
zZsBl5o2#=puD$YMONlj=NSB*6%`gd#c-j*84lLpVb`ZsKP&&1h&eO;=(lROF$Ei%9
zEq(NB5RxJb0haqPUAFGalTZ7o=Yg=k1FTw`r~78=oqWkr;Kx5MCwwqwTgSY;y|rF$
z5Tb+>KU%~Ke}CnnKni?<gJ8sB_FZ;dc~7THJqJEIg9A3R<oy`*kT=ccu}=V9BY2|S
zYX<)=n~s9~R9ArPD!>`RSl_FM3p=+>DbKhl3%Wc*a?h=Ho5hqz&wrCshr=bwG-sf8
zB*<}+?b<#sKw88p06CI at Japx1GfDLLT2GCCQS7T3@AvSPmxCTJXV0Wc9xeFCNA}gq
ztObKdK}py1{`~Z8s|7b+b}<snO*XC|i4 at P#K4tPzfX~W#Zay3W_FlpmIccpwQ_^cn
zXigJDZUe{`@J4?N>SWbM=hVA21Y-;N+VL{Tf0FlcZq2#sWGmgCoHOE`0QI+))!&7E
z>#s|*rCBm84(#8WFYbaMGnkqFzB2DTJ$7&vxpBp|Rzmz}``<LC?O(o9^CndY^laKp
zUD8u*=}7j%Ym=N|>B)uZDOqAOoYu<>$JIU&pGoYmUewu at i@Fk6(Fwe<8;=@n7Nr<W
z^()cT$J!}Y!Y{q%cHpg-D+h29^ulwX3Br6qK?|j;SmdbLQquCdhc0DAD0XfT2yzWX
zG>UT5PH|dyT28(VzBt?!dRAF3?8P1uAA{$RI7%i{VP+1%x57+?5N)HVlov5r(qin{
zx>Fa$YCzis&{n$II#gPKQdJxospkB=Z1?5rOgMo186TDR at 82l7AnK)sraM(<oCW`7
zWfO4q`vU|Kvr%ept_4L&6k^i5RHfRaxCu&r%#^J1=;7hw4u&tpaH9y!J8)5}-5s!o
z?pI?SFwP$uD=^G!D>f=Ga30eT_f_mp)C+p_>Zme;SwF$g{6w|98J_P%-~%E)oDQ{-
zgITNf^;JrbwERd&+p|DZwX1ri^k`H?=+gBpy-z$EzV_li;9JDVtg-fkZd%t(t$alZ
zRvlsZ;&@Qayagqa{#9=4=-LR^3a3HL7g^gp>21R}(PG27*f7%C^46 at 8*uz<Hi|o0Q
zOLz&2m&ynt)H!Y8P3^H;&8Wx_MF23EEpy$qV;W0rigT8$(Ur?{Tm)2}V?;f>- at DO7
zhU|C at ssp`*_RRag9!QZODmg$e!jx2GD)L4gk&Q78y+daa#el8`phN4PwY5BYJUeR{
zvwIN==4+1G8dv?=!~0VTu=^tr at D092yPmLftt7OmQib=v&P(|$5aJ3;RkOSw3bcHm
zVN1zImrIk0x{8Uu0R1vU7jpIWRpcB$<l&<(V3=qIHEse6gj9W?Q&Y!|=%F8gti-CV
zh3;J8A{28`H#CE2sXHoCw8E$i9u=lXAG?^04OYYkkoKlKReKSJsi=sWLA0wHSfaf<
z=juK1wQ2$IuE4HQJa<(b(P1E^*_4ZcW at GK&z(CKfeL6#S>#6!9``O=tb;B6Mo>x!e
zx(II_ at j^HadV2^Y!60JtjN`O&mjeTkpIew>Gl|=P>JCHIEAM0`U-!`KK($VOLVPT}
z6U at T^V!`%MxxK0`t|J*BHD>D$p3eb=zGD$h+CSC%Jwu_xq1-d%B98bi3t#_fwf9Mp
zJyOraMS1Rr?rUMfue16evQ{T5jtjVHSf84+qx|Z$B7eyW;q-x<RlCVqn`=K#9#jk!
zJ(~M|_`JmZ>b<$fiAllSpRjbB)(S6g$#{NuZIKAE3oC48?;|s>$$afoOJv5VPc0Kv
z?<2epL1GEhuj)sdxDa+QpFyzh*T3bYRN)dx{)^0?c~^ZW5h1iZ8}0^mO*e at AM-4WM
zIT-vL4=&70&7 at tCUujBDvrq%?<P=AKt_V?G$~R(Z(ow!OJcRrV6w9+<AwTg}*a9!T
zB=|;C;r$aJSp)F?TYWobN%2N&hBXJRcEx94uMxn&TVc0)NM}lpk-1s7Cf5BEtYZ}K
zgxNlq_<%<9U8?JBw;w+^h#$NY7UJ#wwk<b5RfK?0=a}^G>W(srRv7gcM&UJ>OOCC=
z3^^VOIeu?#quyF2keuwi$>Hm9%Hw{9DLgUH`(>-cA{GG=IY0!mnRMaE6A^&p0z*3^
z>}a%(v};nRrvU at oS=wjr_nyf?N%PwP9BGk&F0}p}-SrDaJFI`6*Pokrqn&iXcE=6e
zg?pAmw!UT5&0kydTk6y8dV5VTn5j4`txb<==1;rmJv9~ybYN#VH~pFX3!F3v$HO(y
zzyt&@(9<_KsTSi`^H|?3cKs61yzonMzzkw#-aE;%V?$4kbMjNU+J05+`$wK(b>EWK
z5~GqMoSZ>V>?jx~{NXlR8S87qs_8b^;_Uy`nApe&UAH#)Hd;~AqagS+h!Y%S*h;Q;
z$W{BHx~exdQgLR6X)}t?-9NO5Y53tG{P6R&{XP5$r6zR`Fjy9TjDE;rcVDGaqR!qE
zxI6407cJndFg5<hzYXHcwK?4+F>^){-Fab at OxXm&ZWLdw-Cl;5 at jc@ECnqNK at 7Fb2
zz<uKhU&Oz^@&c1Z!~iA>!}N97FW*Q<XF6qAkPuHnkz^pt#0qV9-=<cH3ZwuuyifK0
z{$MKX-M?39Ud-KmJAm$=LG2;2XWAdNB<n-7py#0b at P%n+ at H9uOZfhgM$JMNqE1m6t
zuN)Ke__SkQ-^p?XfJPWnnVo_Yd3V3pI%jadaISNv)zk$YYqH+>J#5yhig3=9C#Yf`
z{Pur&2WP4}9+Qu=j#N|!wdEFazSL+i;~WO++_VuRWJOF3O^|eY9{Oi0>!0&sowrL=
z=Vx*rrGBC?uLF27iof(XYZpzh^go#Qud2G0>qulMl_La0jpEX at 7t$ms)!ZF13=1v?
z>MrdczeMs!oVUXoPhb<w)svVS;es$nt at 0JX0Myt07+7E%Bk*e8ho_~OFc<s53pwm?
zAQm%<Yhh1UlcE<{92&Bip_*0#tU-`~YinOCr=yfL3CP>PQPgV7C~jVT!b@#^5CnzR
zA7H+>fw-H~ewJ;Wt22?yA?*t_o5(x8z5iN_gd65+PwO}aV2~$f5dT!|ew- at FlY4-;
zEHNRT1K35f>Kv at -OQZh1TCmdD4Tj5wBEn!pWW(iAh$iazCu3=I_pa&{%_D+0gJ$Rj
zg5T@=<p?bSuy&5Ks^ev-qvNa^giVi3c2O5(ie+)~Tj#ZOE5t#x!E)o7y&uyXglg>=
zG=T?IsCI6l_WB1~4QtH at wPW~xA(R;+DB(v&D39bV$|L#hP{(Niq|!A#suptd*>`w}
z%Kday1eH&q$MFHodI9|oF3_q74#VMmtZ1BcFi9E41=xBdNuv~NjM;L*8|0azLyv9p
z1?hmpZMYRD-W~BA4r at z=JF0~1mhdAoW&vg8F%12deSnZDh69AA%%0Ws at Si6-V6wf8
zoF~?Kk4GT!rW2SVp0#4|wWiDHR8B9-lY1s4CPjCHLlLSvGo=v()suRw6^gD{?LA(t
z*0o}fnof-40>%F4 at x!G0(Cj<e{@2zg8(0yTp!^X$%kzN^yLcPeSi at MWyY7HZA_#@y
zC<<pn3cV|GxDjmL79wj9^{4B)Nk}=G2g2=P?egsOhB$JjayPV!@C&v>JfA(#)F>HF
zg;D5b69);00lMy>l~FY6XAD<8Hl^kaWvkVKM3Tq$8mv&GYCQt9ULe}er6t4vh7C<e
z_|Ae->q@(i$3V4ntZ|!Mn?pr^D8VxtYWOlfM04QqqH)@Jm;$aVPE<;CUisC*nTE<D
zwODs+j_k7GD2T`0N-XL)RDV6*MeA#I&$=VZ+HA?s)U7mYj8_l+)>YJ={Mx%Z50S at 2
z8@`8PndrxRpiXVF1)gzdcS7(^pyeufFud9aLnT|F#M?FD&qiRXcFb522O{T4rkn~g
zAuGaW=6adEv7JvL?FRAux-(-W8|_MOabYV4ES}0L{)Oo}+J;_?Hv=m^!Si;hR<nXO
z9>MPilj((+Xaxs-0x*HptaZ<PB|*w>^IT5TF)-^o-d4AD^%|4a=+U*S)7j+Qq1c43
zy_385i;flt3A;e=UHk?Q|E5QOt-CY#gSH{q*-+kDOutpfBu+rJ6_W`u1a=!w18wcF
zJ)`JlyW>&BSbZ$UCBZm}S`38G)f&|6Rn50!g`@Boz#GH at 8K;k2J9{;PSC6+v+>;{y
z<g at 0bw2kBoL}*k+1eZgvUjUoO+m>{8R_jK at INgQ^bPreS?y6ed-{T2?iQx+-N%&JD
zD(=hN2vG(Z-_9DSf4`W`l15OSeB4~HMpy_?LI4t;^BvewP10BHs|FL_oAGZN;5T&b
zXcU8N%gl6yA@{<PlAUTwLHS=5=v4{uoUX;n&+Lewh<XYDr-17f%uhoO1iq#{Yb)1M
z=q;3%Wl1d*h2V?jtbvDK`+B-0e~jf6ww=nvahSLn^O31qlf_cUDVHYB57X-6&G=P2
zklrX>o1V6!LIr1Om{ZWQ|6pgYRU7M3En2By9t_P83JF55VO=8vX{2{E!C;u&ez8H)
z>7;;)&Y3N^98?^DO$gB)#$dGL(LiDmrvVA|q_TQ}1humONlQRt)wfarWHNZ9lzF5e
z+=u at Qo3k1i9LW4JD*WG#l~CD2eW)e&K*hh#2iZ6D_iR@(xUdb>=k)=SUCaka>lvgs
z!<*A_S-D4<gWVqERo*(VP$w0YkK4^axSPDryYAmx#60}|Xa4<oTjnWkjF_7qA^)N}
zcxoBbZo+|f+oZDqUxj5-{9VMr{!$&22?q*2cz{k&8Db~wU}M&zldpYLK`VFa)gQ{{
z=R0gU9HHmx7k~5UA}_O9L>Xpl%HL0&{;G*Ab(cYi5GVBO7Tph)x{<0`>#(~t&9}*f
zMmqtM*@D at 6_PXbE8(>fhvX}#Ww8ylwuZ<3r4jTp5aCTczn>{~Sai9Xgr}J1F%&{%>
z-lL6Pd~qYQ!648aA7XCG6T>0qD_P9vud97t5_3B3;M&z4Ivk5#ZDuiFaA1T-V1&vk
zWQZM at YbvmX^qc8_-It_JNj!4r!Zg56dO#h0GJVCrQY`^zSe$i at CN_Q;OhFZ<4PucG
z6yWg@#tdN|{WRPXNIk2(<-aL;Z(;|iPsVdlGXj3`x_97Pb&rXS7E2-gkUg>3%YH4~
zZgCp#cgggv=POh|{ve9jWQeZ#2{LcQlJM#CB(gd;#uYLY^|=^(y3Bi8S*>B7WOtmg
zB6mJQ5v)QZ))cF*Rkdi(`S7Qd_M$oIg~A_<U5n|vW_rg35<S#7quqH!un20QDs$Ib
zTa%M?CP0i44Fo85PcAD};wCH&!}ivOPy17oI;1#m at D{{QVC)D>%DQ#QVOr5-8w1zP
z&Q0d+_GDaj=3>`#c_StLHZ_+V5TxFQMLNyrJaB70#!_kc36FQ68RP~VK<p4E#)fN+
zu4=VUzS<V6F7$N-_ORhvwF(lF)%y>PQ#lxG(T$Kne16R{GY7>>xaiLURvKS=UCtsJ
zV7W*hv1R(oOi8*ZK9QNMX~0;74Xj}Fe>1(F96M60>S?TQC`7Rme(=q at YY(>p4nq;0
z;czvN0U-wQeYJ<{b<%67cAyfGbA2R@`N7*HsCI%$erBxxxbEa7DhbM0n`$1xWSrGM
z$232#yMEo{RSqtE)K|-+Ri at cdpG0eyG)cIahDkPIl3nZW{@{_~NsTYtiVk4lcX%7S
z!@sI2IW6?!n at R$j#3d-leQeeCNUKDOVyyB7Rxygb(|>DOnalF2nKNQ5zDoi2_fAjR
zCGj8_!{kbhx{diq1MTI+erb*NVkYL<j5YQjXy&0EmFoHQ at VFABWB<CbwWU*<s%yzt
zb6va?LEV0X#r98stEa at T6s9wI)F`V1yF=kFgE)M^QeBcfT0x`B at 4%h^g?0JS1Cc*U
z+^IODCJNRlI;uQWP9Xja;+K9MXHcw3%^K9^oAWvJ561FuwmJJHH{F?-<BahuQ}@NR
zcL2(7{d{K?;pT254z5ucZbXvA;t+z`SDs5-aT_xDDd0K%sHx3j6Q=IM8~n3hyAE2N
zssu7JY-uA91v&{OS)R4R-{B*@cfCN-8+dcY at L+cGe3z>&ZYm)d%GZGywfpVfaZKC~
zL_t3*{q^nQG=@FS>)#5WHeL%R6*NY`z=kwWM98plKUV#>AFcXFh{c#Sh;`4M=?kBx
z7#QRAbtEo$l(Sz74*vl7ymQT0iBodmmLt}4hPU(I^o#~tvDLU{lswTNM(Pr)NpbLr
z=OsK*f=aqlG+yDB;h<AE<JGTNuaGFm)PR2~_lR__>r3Vk0K6sXjf5DCJuSzc$`zmT
znqq6=M7`^n?q!yj>Jh7TD-Mx~79+9sVGLo-;)i<CQ3_NR)*`(-ssj=G$&#v%Xqm^$
zpMdeRF*<9PgnlEb4_A<fd(SI~Y6e7wG8oTPU$R(6EDrV__GbdT`qivI>Lw19pZ&Ny
zNw{>vNX%ZDaZ<13yFaLyGaXKI?51q97z9m6yR6=qcG;lhv9Gm}V0Q=U1u!rdG14F!
zMGQV8`6wK5H at WYTqM#G$IiNu_kKk8?)X60c2alb6 at Mu{aFjl*c(tC=CQV9LNjn at e;
zxx(3hCi5^<A&!7E^C at 68hz@poiIb6?A}(RRE|?FknoFK}K~lX0Qyx*prKv*z)iFTz
zqWwR+<nTE!R5Y$d2~_ptOwBF_cl4D)&RL{W({LlQ1#|Xhl0+x=Ow<Yy>!eiDr+hs{
ztrR|D+t)p at e}a$Dg54cj=m_c!XPJ+=KJ{;Bb)mErD^5<_^WB!5pNXCh4OB|5>y3wX
ziF&FLC*8A9B9F0ZioHJnaf#s+6Q{|lT at 0-4WLn1AhwhNZLqEbv)Hq0G0QPsDKmK5^
zGOu`6p2)cZXg7i9YK-T;i3MAw71TI}>mi%y0TF1-5WS?oQB=alM$0iEuN-{hqE|qu
z=%6N(Y$pJ@&V)?6Ui6igLkpY**2G|_?0c*TGplzTsckrfpovmJohl8IP|fB-<yna=
z0n}t=F*x>DmVoSoDKT1x!W|QALO#_~LJ`#_FbOT7e+<HYFobV&huKoBnW7D(fEq#|
zBc^(9D$l|$vxvjTeR*0(@dw@?UT~oeaS)_ at 4?Ku6LkG)dNC$hRE;^bSn#4hH-D}LL
zBTEKXkz}hNHO-!%lg>v3rBZDGQ1?C4 at SW<H<)i^c7+or<0RZ_66!a7CM)+5doH-{T
z9LCrWPznLcyVrfy#Uxu22x7mBS>LsPvQ6Tm0 at PB^$*`a$x5><D4t3#(e#z`HzItUV
z^;3-P0}>{SEh_n5Zc3PX&nKqr;wZq&VNAVW64_oW{O<fVzD&Cd6?zYRVHA^!b?-C~
z6_^hbHWU+1Dp{hNsG&5Ws|^eG1Mgt+^@ol=P>+p3=+(Sl@%07GC6%ol^WCW{b-?#A
zn5?+uDLK<#iNu9-B#zYdMBpw48%J}clGa|T+^flQc6YMe7VPLY!}>vW+awR_s7+B*
za`KbYshc9w|4pI+u=N;=z?{S$?Il*_Bos3>*AT(b2HC6)<`&o4F6S&*P1Zu3JfLkv
zBEY76IfMA9#QU8al9M{a(@Dh2equp{k4PX=`_^LB0YKY=#Hx$w98P96GaavUfZKf0
zNma-(@fcyhF-0px$;mh;q7;igC4+T1JqXRU3O@*O19k^LzP`PS)@xJ at i3Kn2Ae^T`
z*|%AY7bm{&afDHd;YZ`UFi;+~i|p3_v}#OwN=p<Bg&OO?YV5P(8!1}Ycqx+CLJBFl
zjOQ+h><LEmG9N~c0&7_P2 at FPMWiQZKL~nc_!O*QbIDMuzqLiE*pP0zk at o_0x>0PNy
zCzwL{MBD~CzhZz_>*K~Q&SLg=@MjR~?2|79fGXW%6QYtx^CSy9mL<iU1s*VplIw>r
zOB;8d-`&=xJ~mweR4z$eAX_uSlikzH7>2#iW<;&89+9S12;2e5?fg#wqfv)>L at w-O
zx=E)nl)@gCZs%x{#=1^~hdG at k@5_>V-Lxiz>4tCx=X#3qz`+sT=GKGNAK|)ED<p9e
z6Bj^%Z!L+^6Cwxu&4VFCU$Ca%W`Ae7q*vUkB9mVHi!m79j{*Lsm^`-}*ukYRSQXh|
zeOuD~SLqDwypT~J5iQ2ATYvyY at m=xW-5#ogin$>_z|#TA!`MHt_3!MJ<W5<tX)zas
zwZ%b|o;kh4So&Vy!^0_&9t8KmwBIKllszWp5RNE_^AO$@v(k+a!ZnWq!7NT;;CleU
zAa>fPEz`<;nx+G#C<VHTnf>>c=u~K;2Mo(0*5%kkC at VhGQzDL9Y`}T27YW#xAEWkQ
zM8(Y%8=~R}$=#z8laxDf2c(8hT_iQXbVi<@{YI=;Pl_BV^sI2+>7~ORc!HVako|;F
zg2OE~${{EnGBb;1=17TN(N?nXk73%O5E-NR_4<L`J{)M~J!S4jKyYpR{c3;W0^J%o
z`_d-HN5%75gZ9=Mr!a%~E%8pGGwTP>(9+T~b5Y&KraVtWr7OD_tSa^Hd|o=`%Rs=C
zmtadT0lfxsx at 6}qZPctV%}y^rQ$VgiKvh5SN3pjqe{>L~pc{c06@{_Y$G4;EkX>SW
z^oUMON{)(+=@B0n4U#1bT-ftCYWDd@@k7P^@VZbO2MZ0y5Q8`$5z|jLl=jRNIxSH{
zhdJ;p4uO2gcPsJlr$avXjinjnTY<g)<$K<6F%R<|X12IsZ<FE7K;R0Bu7uCYfS>l8
z+<-v6RPv2gdr7bA26M)65eF6bE(ROKl at h%&v&1xG;ZSvj`(YGUOU`+Z9dJR7iqL?A
zv5Tt_Kgw}nHNfFE3)$e9)-2>V>}6XdR at 4?*c2!uujuXk(Y at BXJH27X?`dE28?;QBR
zqq%t43E=Otinw)s!mDJ{IIBQ8Y;01|b)yMk;-82=E0HTg^|aiNcNP&wfzk*z%XcHZ
zT?(Lv!!9uQPwaEuvwzfE>o+KGl1ZJ at 8=+O0428K4?${wS5qVp<jiRAx(EML9u|?7b
z-B=7492pC~c#V;1j7<7mYt^{;8jLJ5Y%;UhXaq5YelsG+N~<gNm6a^!&7jW!X5mVa
z_s?oKqc}JSn2D<Ro(iv3T0gyttktv^dy2zd9y|Jo<+;kC**bj_`OH!qKIzX)=)k16
zmq^~LmGdubge2<fGloY7t*_iu0>Tx}VLyO#4RV2}3al%uC+XIzCBEN at X_J_3o_OLj
z+{rvtqD3w7<t~sAh)KWU-PL%)vq31??1ON~6F_*Qc<RQFFKXSI6uaF)&#b6OE<E>K
zsG03x%BLb7*QNci;`ekc3&E5h at _wE^G<lRHNT9vzNt-KT at EO4TgZZV-A@d-T2&!8I
zwMdGPoJ-<%iYObzv+Fm=ZJv}HE7iZ454or6-iU3jmwG0W1|F_z;8V}hpe8ep?vN;|
zWNz~-e=~S_2*Va~qZl`oR82!1M)Wd}J)Y1*Q=3UYx6&gjC4pxv7$SlhqTLgLEp*VK
zJkWBXgD#tY=Ow%3qj&tnlvcC*3i;UE0O0N7-S&tqu}fS*1VY^_cPMWm$WzMX>3zsY
zQBq>KW0=;&3^Xu5#(R4}K88^^t0RN(@{ErwN<4xq6SYU0%cCmA=!v|+!IAy0O8Hny
zJq9XMO(L}z*jtM~Kao76)5~P?>0su33M87TCcJkn>Tl%hr0o_&BCb~(jFAc5o19dC
zi-!WSqb at T}sW#CJLh&Y>po|+w^a3h*6i~Si=q;GbAk2sKigpqX8-e@{d7LHkp;rxD
zWw8^~)w?W)xleR^OGg7LX$YsG0jZ~6?u at waBtD{WClx^Th%GOMdvzMbF$&wEdzA=t
zc-_#IdeS6Nip6DBu%<%|+Ppw#5mA6{JVqgKl~heXu0wvJI01~<d8ZDaxU-Af7-{8^
zh53i3OM51M;S#zyd~N}w+{B)ZV$`9svC`>|b`398Q%7?gwp<B67<Hr1S*?SH*J^aF
z*#Kv>R~g-7lFEG~om5C#G_q0`vT_8nGA94~s#1CtrLjZGJ!|Smhy?fqaR31IxAWf$
zD9 at Fh;Taa=i1ZFP)gZ>@e{n{eG|uLWLeCE5;=|5RH6;`QS}!}8sFRci2lEUw=;X*Z
zby9gOoXV2`FR48vdCH7r{RT8Fz!W}ygLT66{QHL}bf$DZ77JC``gkCb;KLb(_oy5)
z@?%Jn^98tr|ABCd5A&b$>WihY at 30ooyoO;0F+cy|TXA~D)j?IsXCrCMf<yZkX)Tgs
z;Zb&_fW3=jnCvIk9t&p_-_d#(JdlckbM3yjflYcWjl`HIIA%-9KYbCiZ3xZ%$@*{7
zX${X*SZC=4u?2{}#0KZH^_xDW2L?(ngXlhqG4R#^@<`r#kf7>!DC&~ms~w%Ul=P)O
z-TEX)$9Ic~qJalhkM67HaJ6o1(Ys8i_Il?biIi%CXos(XsKtVT2YF!W`YA$k=-K16
zyIUe>0TUZplYhS6yj;@I1<o5{BCC>{*A8s_2NP`5p;2=s!E+|ZxYLTL at J2IUVsp~}
zY+&#%eCLOxYD%OsneEnGl#yNuhPuRdbIS~0l|o6Ogkg`FY*xOFH0Q}cL-v(^VJ@?B
z0m5%!+57%b&s|akM%^Wc8Qq1a(g65B%>298>z%}ry1x<(;l~1eDDu=zWbct5kRgJ>
zPXFT#9X_;y%S@$(g*h+j-T66%`1N+Mlb<*;qxk9aR4NF40!0JlD~-jZN8D3pikg^m
z38p+UqjZpD8kKlQ1nTlfqAq_4V7D`hj^1chLz{gA7muUVM`6(t!KvlMu}4jZf*_bK
zAJZMXG5=dhH#(y at YNGujj6Du|A4~f8vZT(`=5d$cn@~lxW9!3bX at OI#4vI7Yw->+}
z#LsR7pyWFc at EPOuWKvFFiMctDrb);d53 at cE(4e98`fWzvr!Y+f`xF54<DZ?4bhhJ#
z-zGw#sY&k{#JML%U)P>h&32blTpy4>1NCQsBo1$)jq=#@O{lz&XGkeHq922~`G(c?
z#iU2nz9f#H1CH+lknoT!DL^SGWlgnZi72qic#@p_W~U{+Xc>W*p2-dvw@{GdLsklx
z59!`-BF?=H+#ZdwcpH{~rolrA?(BHG6WsTxS}qkD<l6dkUapQ{20c?M`a^Z}XDPgS
zXu%(nN9w+~u`3rhjj-#ln2B%QNb}YM7+2=0q9dsMK4bjOjPbub9NJRTo~T|A9Tgle
z5^4UOu~V)oWiwgL=rf1es_~k4^Is0uq|~|cF1YK at uPn0n@++>B%)fHnQgo~)o?9EZ
z-3Q#>%U>+7ZOsVB+S7oW4D96Ij2~x8I?9<+;Mrrn6<ojWtfT&$(c8Nx&OzUiSa~V_
zaGF1)pK6X5lOwVJ6 at UTzbLf^1C6=TIS_6P6QTo#^DgQw|T#&!vx>wi;_hlbI#Tzrn
z5O37PsWMgchY3G{^()QnFj3}^VHx4p_TVaXvI=VphP at 4r`i6~>|4ls(DHNTsr-{rV
zm33D(iNRR;R~{AU&>>NwC<cjM=Rv{2Uk>zYdZ2*NU(RKE#=!KDuaDG{(h-sJkxg;W
z9b9Q<ImUKkYSwD=gH9g82%J}_)I}`IX`TL&NzP0^3g#kAJ}{<RQcrjnR123_{y&s<
zs1w}vU&)=u%NpG6j^N5{=|IsmAkrx6>Y}JnqyR;~VE1*~%!rfJ4Wf!+#H5kJ0F|(m
z)lEZ()6<2EIurVnihbeu?dT*w*y9G5;q5&``~$(?b--mPG!y*GT5YAALNFGEi$pFg
z=mqSxad6g?-U)(;waFc^P6m?iu_!dXIcGy%xMp2rqvCtG-tj#2kO#4FM&mk$Jj9`|
zXpukL3iHnAowqnV_)o26BXB7YYzDOF0Ii=0JFKgU5mBc41~Hf|%#kxdjv_z=G94U*
zI1i~h1O$ZzAE~H4x~fHokYf-9Q_~0HjDj*Z`~2x~^hv?Xo8h7=27JP{DB|#>K=PV7
zGfVYRP^F4gAFN0qLK`_eQHR6V4@;h(>!Fq_TG1Cw^(wRT^M^YnNk32@=xK`i4uLp7
z2U#(SPNl;mB=J`RS?)Lb)iHT9n8i;0->M^d0~~?kq8-ZhKr}G*F+<b2jeg=PRN!@(
zoxLEUQFJezKB5BQ1LX$I;wVV>2fUB&4j*+WNj09pN at 2_eJ!ba%TRMhNT|zsJOTn1m
zSbN0=Pg^D7N8^=7DqEl|wp+Y~1V at C&eX!E8!2#&%gIf)vpRX+ziksNtZiX<i)N9vC
ziiXVutx16_=dP0jf(Oez#`ryxi{57-_v^uneqvx7rDJ=_>lxxEoVM-&Y~W1Y+K_~d
zG%!mAfHZJs{Co*z+;Z4%w~ArV2Sp6{OTkl8v@}mgfJ1p?VgfSo|A*z|iXteh8_e2+
z4zDe)P@%w%@ILC)PKMv~Aq3hehPWU_%VI#<1CS00ervl{PUtX?*D^8q>K^_KVrc)0
z_b6zBD>S8)4yEG<U>!nN7Q_ifeS#OBl_<(l1UmM*jAA3O$_1uq`r$=h{DKq*&PKuH
z7cigX-*i~0A)|-J8pxg*`ct_cANC+f07?c!JF+xG|CrAgBK{!S7=~h0o2EYAYqF_`
z1~d!VRE(bK-Hpml6Wc(|DwuV&Z<~ie&Pu3b3a20}GBfd*WK~d$i4~DqJiws7Jn(HV
z%%34fW3x7F+bG7Ba_wW2Ia?e9NuS3T<GlPNQ;fwo4*tozjzLJu=pQSR!1V9l+^|Y+
z&8Fm0)&kcMYD;<%pHJ{Itwl`0w04Y|Ftfh*$Oi{2w!)ak1L+eSdpl?k6WMlLL*kh+
znttuVVd7=>HYNuj=_nDtPXZVaZ=&3U?@GV{y2^mSD5kosFXoyJ>pKF#PxWEJK#nlj
zoa&6_X*UOTkyJ3n)u`{C%e^r`WnW}#Iz9MLFGVLTh1RrG(FmI1e=N3h4>#*9&8oPI
znzYghfM5+X<h;Ydzi7o=iTJ?qqr;2~2nUAG<>S%(;H7vSuGGV5h8=&69naVIrEufF
z1IzT}4Sdw*&x(>Kt3Jw6BS(rFF2$Z(u}ilw`1jS?h^v=$pVVB`KFb#O0m!pV%Kw$V
z-k>}*5i6qcP(*X_l|d|P6TU-I7|v*lJA11b+icF at t|)!Axtf)TEBvm>iT%5G=e9aj
z(3hB?9PAa!0JW)kSaOR%#fRH+t%kG)U~+?4JJWbYKDcuaNO1=T_xG8Q8%uNkm86x}
zgZ*FOfLM><fuEOpRctw?98n!eoDQTI#papL;0Ju9MnK9qAZ2s#R=MRaSx=LQ!_<_2
zWDwhQp~V{{$j?Lu;=7y0uV~#Pm$eX+vHs)i)qL+5*HSx%Y-%RQO2$E)UI$Lm<GlaB
z7qq5<4|o}340OIf+nJrEzs!@)ZeUkjZAFB0^bN*NVWR~g<5|Y|k9r%miy;92ByV)r
z;mv<(4I^b8rexr9f<e5Ft^UIx?(qhqMT`T8WTK3s%$sWp|2zx)avmefN_YLJT}TbG
z7N%HDh-*bdvyWn$?Q4 at dUK$6_lwV|vo!H%R at YKH225(3LtVC+uckE*^DLtYyiUT)C
zn5764=?9H=FhJb*Lu?QD0MsmcV9wDjaffbpsVC_i=ZhMb_u`NBtt?qbO6$uVKiHk*
zY-yMAP6ixHSxX&llPo_1aNYyBwdDxW3992oaJ^9+EB*eQBtP7*l6}Ky%)1M8KNj5j
zloabz+Y6^=@I~Ja_(Z9!j(#cCt=mX0)(#A!%0)(TqJN#cR4B`tBGV@!F($sd*hq>4
znj;LTJ5g$%s|{Z<7pRqg#X{(FYNTxtr*2NQN{3oD5_E?R<Z=OcDmrQqzaM@{?<!xp
zcK;4Ld6lvA=i&XO(t(w<7WeXlo!SQ0x{jfLI{x}cdo09zf!A3e=xX(I?8Ye0&3yK4
ziTrd8>ygb)r{CW&>A9QDhe~=FR=|0Az_J at 5_JEKPjP&y}7cJ6?0gek)?kXjp6B(!@
zQVmuwS4)k;ST0sP!Fu9Gn>qC)ys`SsL{mAURtz-gXjWb~+nm@*hkWItp<6UA>Eh_F
z4o+vGN-?E6 at vXzYieJ*Cd2sx{W3c~aaQcgG4BWlLKC3i_BcwbY#ED>ab-%Rs7KwGK
z!no3?Cji`2z$)v(qh>XW379pKXEn_7lC6RlPvR&{!Osk(->e1qBua7~VmQ%Uy`gYm
zj~99Ua<@KjBh!-l6Xct@&Q%`y5W*iut%y0)|JKtUI at aOwh$|WjvI1+AfDQ3FttR=s
z_h#_XD-1!<EN>|(w5!p;(hQ!g>VP`+v<{&9K9(S>j}_Z6zXT6ZPE^!o<1U<9I*g#J
zn(I at GxQ|bJ at uyE0q|3J=t^^bJ&CJ`t`@f9)Is^7B(DE<~JJn<2>#`K!=6{TzXKHx2
z$arm%4OTscJtKm2MDM->nK;9-qwhe>x*PP=i^C)qL%qbZdTH3!M?Fqr=#zkp3KSVc
z;{nZgN)kndC6LT+${<Z-2jf4*`)D$2>3&J8+DtG at RGrA4pKcX9L7%D&L-Qk7M`=Sj
zPVc-owz7?h6RL+6J70YN&S+`5LBGTfWpr-Gbhm(+mNi<*C3e)%hdVi_JnTagrd`B<
zl3yhz=U`e`Bx at 4I+lYan4QFE&Im`R8&E^o>vFYkyUV~_J>&lrb<>*x@^0ZSOXic3g
zW<U^)qTQ^<SrYE3q>mYTPbuk>3`8%$rrT{8 at Rua7WJ8dq@2&wg57chYm~LP2dznN+
z#n|BoBoJq at i#*m}9cFEktG8=vwq$@il$}#f=#z}9jz_!%<#0C22I~J}N_M^VyWARE
zxwL}OxeP_|I78ZP)>EHrRUkEY%CO`s&!g;O0i3PpdBW&h>qbe~Qt#?enxF3Kwga}2
zjP&kD666>_7M!0{F%G1A6})Q{J at p2mwl@Y1#h{*#S`;B<EIJB{`iYntD_)U^q at 2h&
z-(5lCN^E;0rjMyn=WA&+w4|pood}Yi#_TZ#k4 at F8HmW{`E>ii3rql+Cs8W?d#J2tB
zh}Ng(>fjk703Pjjm^XunFVIciL8P<}cy<_TfP?~H6;DZ9R0jcfGphS}Tht<|V$pBe
zYv`|s<~%V0cp#nFzaXi-R`Rs1UeQ6omX4QR2;a<vmT$xMYp~v&g<>M+OlI9Qq(=GI
zE5O?KiRlWNI}8+&OLnz6(f-w0&SMh%^(Htbje$tMT99#x!WEp+?QBwx8WEJzeH`o3
z&p+)(h)f>v^KyxJDyiK`zH341Jpc!VtlRpiT}t>&0Y1}Nv|ihAzP)tr(Ke at a%X<-+
z<3+52{%*IXd8rghDRL&U5mHX=RxE8hANAl4JJPf5A`FCji`gfq?RfRAE81>Y at h5_T
z6xwuLFWN+IjZgM#Jw&Se1?pso&%lAxFojX%6~u<qb6JNgfdzZwf52BF at 0R~Lt^TL%
zT?^`M)&X>57zEpf?4Kw%F`-XVOkB*%)KIZZrCTG=%^)1!VX%m$fMGh%QP{TaIf*v7
z&G$^)IuGVu$!s$6NZb2b4MeRUG`$}>LZww^_hO7Lk_*LlAo(zl8r$~%yI#*-8XeFK
zMEi*u<Lz5dHXxScb|yWe5)ldQPIcU=diz3k=TjRIYTs|WC`JmZxO@?pJsZId)+%E1
z_XpfPE-6gz`9~feC&qpTiT|9DP(0wR^%BxlFWTKVAP=7OSsp*5M(8XpFPQCW@!3XT
zr}0dOnKhJ*Aawf~2#@M(_NZnTgdFjX9k<wo0y~$m0i*a}!|k=wk=MCrXZe)zV6l7n
z`(V}@z3e_EkMj~t-XJ!4A0D~w5%gE;?q>t^gJ4r+P#u{SB|)hcRRtR{?grxAlEAYq
zs!{6^T`D=l`96MdjeXfw13p5QD}o{!VhB{vY+%MH);K at R6v_B-4nAB{uxX}5a_9B6
zHIwYP0!stzYzOFK6l-Ty at zq+A0g1!NV94XzBf(v at T9<uQXQ0d-n4AgR{=`II?*!2z
z(gETJ4EM%a&Q|T{SYiO7sV?!x0^?fknU{0YorR0bV?Y&F<6GRnwFp1_wjRDRh_5&7
zo}`sXHExn(O68lnc8K?8FhJXC%=XrIj=EBy^A&E{GI^Qp1*c at g?0kdd3S0ERK1cAh
z-_7!!7DV+rFqkSap$1J`-3w;itJ5>^?mX#^S$V&yR~=M(NO_9TSrzfQh_K at A)1%f!
zF%PU;!0Z0#vS9GLnt>dn*{LkM)p42R`KeJ#6K9bw!q5K#AC?{YV6w#I2&U#E5(bBg
zUwbVAW4+JI?YlKF=<y0lto1ISosHE{BKwhZn8jkuF@@*&X+UShl&L6NhL{OzA7N_$
z?D{lQ%*Llb at u$aYoO)Ip5M~~5d!?D~=l*nWSpXCp#V<9w_K?(tdO50!?FeCp81{hN
z{^CUkSVbXpz)!3LPHgzJmxLZQh^<zZ5(_a`AXE2O*Cs4tJ~nX_n=p!#M^+4`=nx3r
zEv9>SXT7PDD%G!qAS8J!=oxL^0or~$^A6(FVGlrD#D_NYKPgEoY3Q7E?W^+oP|-iK
zS~@*zU%agUP4 at J3*U_vD`o9`G5NF$Vi;&K()PUZB>j7~Ud;AR6?d*|SOC$s<@jQ}D
zMH%H`!VlQET^Qi2_9nSKX8>s^RFP5qJs`nEX|bF>oh+`i(-0&sA_VdGt!KUUXMp#R
zDgyESJ@#3z=#Ijx6^#0im$_c!PtGi~AazpI1)(h9<Lfdjpmo4lu)+yug*#rpw}|oh
z{v>~YUw7#|Q5{P^U;zDY>usY@)WN9xJgP!FU3CH%eHZZBiy5v`VeXe&1MIxs6QOW~
z8nfC9IQrB_(uIZ7db<0Yh(ZX^Kln3<D(!;CdE|X5m$KylE>Qj7WiQacpu!`ErDO_v
z(P2}XdrXEqTfkFRyKVEHXsm>|zJo6B!?wOgyLBrm37DL3Qjkt5n5-^*@_EGnZnt|l
z1(Qo at odzieGASBv%=DL}#Ce8yhsnD_ClxY}HY!}UUSfQBi%RVM4D=Sg(J+dpHD7wo
zhd#2qPstS8tB1d)8<)K*{ep1h?26_x-^IYzK3=8S(c06<Lsm;r!I1HttvCZNJqbiK
zEBwQwKpd;mm7sVX=nA6<+1Tj=N%^ZP-I_rU;pbuFGqF^NJW-}7!9;a=q81x{gjkTO
z`yHI(n}DZ9;g at o*v-442rn{EGa`5(5ENc+0<b^F_GZt=ug$*L?_SXJ%7iYDZ3-De9
zjrw4Xa=?E at zyKXZat6?_h}l66h-#c)Ls>Phq(ZX%7XaOKKxYuoJpv&p8485VV%$Gp
z_`xJex$(0nP4H(nG-ewx&hxWRc at Tn<fyH64VIOA0F7nqFaU5Uw#n(uOsrm76iA$l%
zxyp+>D`yAbnhZ|remh03H=sJ_4!7TIhU&k}%Ax1LpSHQ=*m;muJPzU_!egaq0wm_>
zH{Xz_<(Z<dBrGAcx&w&3jvvIx+p&ui*iI7fHh$yh|47=vir2q6iZ%#?mVb*q-+s5h
zke^t)JX*D!aD9-Z4KvHYjjNI+4W>FXz?IA7Y{KXztZrVK{nHw{a&?!)QkzYpPg!3$
zgzK0s2I-Cp7yU7+ghvh59Th1CV$^ybm8?6ey%>a1xE%l^rreI=*N+b+gn?~1Bdjh4
zj^KgmH6OnxaiQ}9%z5^Rf#1=Sjr?mz_v<!A;fE&!p<9MBYO>n-tU^aO6Q2R|R6Pj|
ztd3^?s6DE4nGA?l49FPHM9;2yt+AwQ3e?ge6dD(UVAM=3S~)d4$<46o;t1IQCQ*zz
zTi`F}Q2?67QULfo07O0Gb~EUuAQYfD599^I-?Fw#tRx*9sA!A1Fe at F|c at T|aAkA9X
z`b%jTw{_*}3%6mB9L%itfin#<_qn>7xzzV+D7S0Oua25sKJu^Nu3{rL!&9bQGNULM
zn3biK5o!XJ11*=6pTXB#%`l1z at fH+5?{PF$>hn*=x75NME#x;wy(^swT}IudJ4T4n
zKvMuT)$rRVj!L?Qln1}+a*5CcD38j_QlmB|FQua59;s0e<#I-m5`h+>e#(Agv=8#y
z#cUum1b?GvA6iTXJ~k#PDK^^uc&7yWqPYe)p)pk!OFk<BOV8Dm)ZU{2v@@ITF|)VD
zc-<KiAvG$yH-7LAtHrmEj!n>>O8HDd$@1BbR1pkr{fAw!caHv1MG6C|>F?A$nt<&D
z^@)dO`V*Q&O-%SNCPek3c7?a_oW-1-GAu(R!|D7M<eYSSToyTSnP#ig+;dig*a)Tj
zFP1Ti>F(cIL<)XKUE!zeubC%mVa>b$C+$7Jqbk1t;n~na6QqYwqzhQ+y%<6$(g{ds
zO((MH328JzML<MEgaDxzks?SZ1msJJfQW!dsG+MMO at YvPKj+-JyR&=mMt}czp6A>-
zb7t=JIn&Q at BEH^Q`#9ycE}Wu;oN<Q9-2NKE4=iGid(RSuH#~dHp3O~c^9zY+4~tB&
z+QK6f=ujgqm{Lxh>qj1?Ck~<MAwOGM6!VoCh^dEI*nImzZ~WJJAU}%f*S9N4UhwH|
z^&L2{!9aNOnEZezao|!5w?6PNG&h~|DQ8>TgZcSzO<k0`A%eO&UOemQ=i9Xhyzbbw
zGdvEL9?z&rv0G}7olO)+?7rmKEi1q9zAjKf%I}b+Y?YaG2;#_=ZH?}4sFK<a7v^fb
z!?hoSg0Y-YD^68&dO<+eFc!+LZAPy}rru-rvTFAHv-;t<!0^a`*kt4_MmqtvI8jYz
z?znE0jT>fvmTa7gvZ!|wFvWa+4E*&&li#rQ(QT)Bf!rt%<uS%uj&$MTTW;?}!&;xV
zc&(iBorY-~U1PC`jRQ_3(mHyN9#mwzW!_ACouamRKy)huJ3 at P<+oevY0usR>r=S&X
zZk~sbNtzOlK~)%mgjmFu*#pdX$FVkn^Jb-y>m=#SLu}oewa35+u+bL*Sx8F7se{z)
zMijO-4>>?9G4i<Qpx(61Oru$<iLE<R&=~{nUzX3RVH;B$IeE*3r=xv(h&{7i<b}|k
z^(&}X{o!oSfW$0gRYtaGx9RLm_YPQ7KCa69PL2Gl5aKkl1>!PMmVSr+6qf^uvuhZ*
z7EfuS at dgt*#4cQ&4&}DHsa6to4+UMVH4c~IW?~NCjakc2Tiel63_T|&rh&5 at N6ddp
z{O~wQ!k`%#C0R>$s?3-&ttm1`61yK%HxclD3%yjF0FOx^vPJy7HTt0Qz#)K7k<>*b
zHzJ2E;%KgX>NGG^B%*%|L(o`B8Zf`Uo8g3fZq$kzzLPWSgjpnPA`y`o%aQoCykD}~
z2(WHM?=v+MXW?Wa$Ks?t7B-QLSd8FUWGB`%KWNHN44%NyU=TNnv$-3h%}&*zjcbc+
zBp2>?E|&|r<}WJ}52gKkW`7+h3oidl=ZAgM)2J}j&@dq$XLj#PCi%rz)na&u_Y(4}
z1;_S!Zst^dYE6ZzPp!wv;8VD0e@`6O%Fv3a>qVk4R?s(rS5reqv&$!Llpj7_ZTo7C
zbCSd~8 at b*EVcjUdWU*RBwRK%OlIEDi6hP`OBi1*z?ua$yFbyvQ<20dKjgh=?#Kj{1
zYVPY?C$+Z}Mk3TiR0rI_OH6gGlQ`PcOf*FSZ9xJ2ZRUYZM8Jb2u1^ngGg=uqCg#;7
zz}F!SBo1wHKMyosChnd}9g{!$BKd@(p63tXAr*PGw<u<XDm?hrFxuBgb6}vn(?DVz
zUH}TU=u+2E<j4>tC7Q+Kid)DJdU_Z)!?sN*@ET&EysJZp+p(Ub9&bNPaY1C>#ztb1
z3PHQnHWSTvTCl%d79Gbj&W57dBF8?ta+aVh5-<q=6lLroin(>wNF>A6WVk9eaO5qO
zjZj_&Mv7Sossab~id#>bh*Wqo1)g9TD(PxdL%C=@nR2K(6IE(H@(+)Y%}GzDYbeYQ
z#B4C~8))`;f8A|pEyNgvHWi_jN~-aXVH}{HKY+LjK4|tBfy7`OP^!hDwWjPJ&Tym6
z&i*H&HP>N|RxW#Fbwh2}M33R&^rR-tb_$|o^NaG?rl){Mg$0W8 at GBFQw)`BoGEJ$6
zJ&F8ifM}Laawk-?Q7~R%2D1wyR~3%96W+pd2Rfs_?$5dFmE9rMFtHjH7txp|_>II;
zIK0HEt(bReTZmy`0MD6qdCwVNNR=4NGOy at i*dW=C8t^!_^0t2!xk at Q7fefd!n|Ln1
z#a|;0%YL at t;Ftt*cMV~`g0x%2YmaIkQXWF>>qo08e*AO>H5~0|O7(&7&aQ`Q6_^l?
z^Kf{ag;tjXtd4i1Ah$9+5^pm>;7>|Ouo#3&*N`i4jqJA64M)dDeIO>G8~%xVp_<tV
zpBf^U5D^70uqg8qjrCJbM6DKE&F{n0vAB;>yR$fu+H)FO><^qd9ePZYnYgbewSw0x
zd>u(A50vZmw3HVBp~<??20D=$6&WUC;5j`D{Cd)oJ%$G8xPA<|v6P+Fz^X~i$m`kL
z+`f>?JCnOnMJ$}}b(7o;dT?YR1dNszA|NX}`<+BXyWw6!O4MqNpa&snydn2!%^l)z
za%nXJ<)p2xUczYWGSc#fyM~o0sv)~~p<#K5H?w<eH!y5%k<hWaJOd-s#;8JXZfkf(
z?I5+;fD~%tkdWV4_+d&zw}Cvw+mD)tsB;obG2|m9on={tV*c{>oZY9?#RT at 4Pta?O
zs5LU^31?7)ZSvkI&Q*zYjB`FiYCS}gM|mHn!VYH^+VmLYT$4GUuduHr%A2urnzS6b
zMy<fNJ(We%ZT}($m#V at vl*hZwEt>yZ6tH;;hhw?$T4hg~Y^Z1YEk-*(El<rBOtMwd
z7jcF{;%%y6$2L_DaKSH`$F#|=_lu!lm51eclU at 9Y{EXx#=QAh5c(9DlcLwtdSCu%^
zyUc0&zUeqe>68v4_ywF1JzJc~Qb)|#f#osvN$`Tc+!^+E7igRaLUKJhQ2(U96{xc1
z)p`>{0!E5BwB7$PW9VlZvW+({{W;|K9(A~3VCmpiwoyFkd=-5JNwmN{#eu=Es#iXO
zLjn`R;vs^YAE~X2;08R(cDqu^cjtzo at dv@P0dwk`h`T^x2aXbd!p%p_AciKn9jRk(
zcoGpi#ko7Y!eR3Rxy*3rRo<UD``+I+`?#TdkLBG`eVTt5&3Y~Z_YeWu|0*DsD*Gk;
zkbr6vuq_V(vE*<VT15ueub`xV5fDqxKZJ9CPF+}bZi$K*=8?EAu;zpy5^*1F#d1P0
zKhYZ at XOge_Q?zX@*1l;tTBcp8kuMC|*EC7Q!3_jqtMILx2h(_ow>kQv@@SzJ5&dY?
zD8uYQ?omWLSfej`;EV7Z^4R|yb4(GP!5lks<|HHqnu$AzwPCpO042T{EZQPQZSypf
z%Svk(D<#7k#SANH+em*yGgYpsQC4q6;BO&tEW9T5_$_bAC(3@;QB;%X$d}~o2gQk<
zQ~AV);Itd<X$2(2M~Ns|G96Je7Ll6NBG=f?=n at OfjKpcgpb1yg(F5;SF65~lY!_kZ
z3g&}L<P&3)Hr#d^PbUP at Mccw?>K0_m*hkIJ848COB1_`3U&Eo9<teblvD;ehGjLm8
zoW$FR_A1g1Wlu{gxNrKX)<#c=>(Q3~-o!ZOd&COMquVAeF{TParh<8;eLIRQ38~5_
zCMh1+#M|&-BRrT?VNQ}E*7{v;7RbxfBP*)u1H at y}w)Md at RHMAccqJq{J{<C}MN^s4
zV|q}OKCduhjv;AOP3bPCy(1}rQoqf$boRDKB at J<qA^}2a451zD&qYfg%XM_lqZ*CO
z`yPH?Tbt31K}IKY1D;>u_60+ebR1c6h&^d6A`mHh;uWIUx6RCJJ&?KSEbxe)9K at nI
z)(lTih|i70(Q+{hb!G#y#3B}F=OK-h>V62kAlZuf#F9rjI}F1t{d5RbP<jHQCW>-N
zg~Hot38`a;?tHJtZ(wg4tJ5$6<Aj1}6-x%@A=s2cod^~`5)t<h%d#u|X1G3yN*fs;
z&Z4$@Bfw>Dx<=fi2uGZ%aHCm1ClAS|6lNy+_W_)>-wv!*-!OHPiy&CMv)7P~Xx#Og
z at vU(i%NUV?C~Rh?v|*rop{5jr;t0JucWfKor6^8B!Mh at yqD@I-2CLmI7WiUum^Ug^
z^gzQY&p~b*`27ZTLa(j1U}o?fwU1T;En at q&fO~~l+$PrW&SIiln%nKpZ6yvF#CiC4
z>D5<VJMfc*+LC|S)#7j=!;~d7iSD{$*=jAyGe1JLh~175ZQ?vaEQ8-Y#18{&zmYd{
z<>Mk+>mjLZFOc^?ROp!J3#i<~Z$u^j6?ujg+ksi<^r at tjpRBELPM0I=FKb{@GjQ8T
zL-Vz7P|F3GH&I=haN+NLG=}9`#0JO51&I at 2w<Vc=;8D>d#%d(D4w?IDNm+`d+~z+H
zXRk9qC!;NP9|o`djhpk43OlYDMytfZ at UpeGLza#{wlde|pXY4;#ZW3*3qq-EM|FD0
z?v7@=m#|8;a}Qk6E6^74%beCUVa0*jP!R$?eTYl{c!jRh4LvD8I1x$@PVgkK1iFhD
z?k;|_`(YDd at Z&K1k)3pOx?!1Hf5`4JO7MNI`4<Pyy>DR1`dYuEbE=P!3L|}3C>>a9
zgP|yN5i2A=fJ-7p3;+uc<M>@o%1a_F<wq^>s3Tl#e?IE4N*%n*Gx1_MR<gd}A at r?n
z7oARuAnO{5aX3414h_g6?hJfpJPJa^iFIVheOKX)GJV16xi at E9gfTrRR80h}y)z$z
z_BM;t^Sni#0$?dYE0MQ5xRvDh+S$&NUg(WU05>^_8RKXaPyUv_x?2Qd5ez+$Ap^O3
zdV1BrppHbe2eCvt5`2RbTto=~Qw;<_ at +NTh%<M;-Sd1TU@{i?DUw at bOWc=w~fV`Da
zUJmF!YDivGXxZ6ZniB2EhlrPGw%>9s_8RnaB+Z}YT0np;F(5h4%F+}=V?#nj20F+;
zc#7nm_DNs0d}+gkjt(|O`ToV_TY0;od;`T~#QGA)x=PyT5rzSWTsn4C*F;3EA$NM!
z(%f%);Q(M+)Y73S)oR92L&Xe)dJUm^h&tO70t_n;`ns~?=wAwtLTK5tj?q7xm<|7a
z=Ty{7_LyrJ$zgFQJT5pgBu30buHHqDf)i+uXPhwf*)~mf1&L>&7h&tSY`evfC2}(F
zkk3#Qu8VVxf8%t~pc0PK(ss%JL=pYMMbyYEPlgCaw-Akou3X^USj!7wUp5=PtLl%c
zcNf0kl-TxXR}DOcHW6^ez%c?7t--<K5i1YT?(xf=c-C7xz9EXjqc7l5yJUCrS*eL_
z1PAYo)O!e@({5$2lEbrbcp63GbNcKK<BT*UI3WmcoM_!gc~qM at -0V7}ZHTOn#^H2m
z!(_$3C5n at VV)Z%UzFzOTncnjlvOHq4g}v{Xyk)&1hwQ`PfFvw{V`wDqpmrv4kJ2MK
zHq@{}MV(YQ_Jtwei>~QS<<jlF{rg$88%w*6_PtiCY}fC$pz`VKb#AD7`3=uf at jExx
zXi*EbE`!_QdxJtQ8vDg)-VoESJf6i+pc%@~A_k{zpREp!_?2fG#~y at tUviBfn*4{w
zP)W6|g&4;o(stCU?d;_+uX*FBwD^EmU{sV1f at id~Q##^B&&rB_Fg#euRo0p|WQWRC
z;$%(Q53Z8SsR{6!W0W+mH(<Fjl){GtUvdEj4r-oWI6t08(j>~)LmE6psMoYM`i3sD
zR`SdtGH<Uo$2E%Nj}{d{<_FmVBEv9JFMw)6)#F4L%BJw-DnA*9{aDa%g5y+8D7%(}
z?O*2d{$Nn&pH;Sx9hQiOp&}Rgxs>xW%Iof3Lw?FRrTy}f at Iw=;$@v*==AlhIg@?;H
zak0tTWdbx)u at IvOdaEP$biBzmxX{Repdhgv at l3|w5VYO0z&-<W)QUFPNzmd<l<q!`
zO+w3_RcRj2r_=Glv6}8(d(ydqTa;nQG1{H>5GmVR9x_xyd3BnP2#b#q4S%qKl(f$)
z8 at h4o_q7N1^l^#E0`K}84aGx at f85)+^f)pq7K<O$&$of2 at sGXoxKYePr|1IIeD3K#
z9Q58+svUB-UoJB at M)jlgj6jxt==FY<VK6KgNP-(P3u-K8Vp>{;Tk at pj!i|g!3)6AO
z#CkOt#12l)<d)?x7<!aY`vu`usMYz9{gVfEuBEnAzNtlfw{hs3P9mnb7<anadDRKd
zRPxJ0;u4$;gp(<0pYL^QZSm2OxQistqqQC9);9BWx7o(AC%QN4+(=5=Ra6`g at l{&O
zHw?pEUPf_ngr<n}85GA?kKJsp at q*4`aMnm3&(1#mZvtGYPpCsvaj;Aek=8ODJs3a#
zDJrAm>4s{bmK?Fw`M{dv-2PG7+GBmG>ZiB-WQ#f>AQ2m!8GHt at Jp8H%_a0(VnmZY&
z6q_+9!EXSI1_dm3k!{<dSFi4h7_BU-OsGu<(NTGb#izY at Q#Lb?blyL1CK53j{0xCF
zZdq}P`>rOzCRbc6 at Npuuo+T|;dl)zi-S>1le{>VMcL`t-tCIiTTo at PfwJWMTDur<I
z$2HOnq1x}l*{A(!sFr7t@^#yv?KE_6{Ay`9KU+$IhL)k;Sj2bR3kDmi7G3fWiGjpj
zBw!u$qz&$!1&g+Dww|4RpI5hvkq&LxkR&`D%u4>&<edmP1C68gH*E-!fmlAoUz=MF
z4_EtG9{1qhHIB6>qMelFcCu~IZ*!em5^dYtBE>Yg(4?_!KRv-Hz!+Q&OTg-5SM3qv
zIPSPI+=YuL+Tm*{4tJ;5N+auw4sR41EY2fuMseO`KAv^J$a^WLu`(V(-4#6=kjAZU
zw^trwT&aqOfl(Fa0{q{gJ5%WJ3 at t0l2V1O>A-J+5yGpNaRLpzRTrOr%x0Hnh)Zzr}
zb6>oPqCKMZ9VcP`X~UBQI7BZ(FmSle{$wS)-Sxoa;1sw at Fh}~wf9KpOViq`eX;fys
zqvo}6bb(^nq)rkmWwKg=b3(#Z+H1~F*W;8MmWuuaqZot;9d%bOi6RGyN=2eP#IfzY
zsu`M=K4W)u{Z+v<3n4bg9#1N-?6~{;^|AW;_Y;u4%bX;f^Wmgfydbk5 at fr*V9^$u_
z<=u9~F?4s3nMW0b_gh*C<8xj16(4!ow+^@s$>FkyvyaoFi+EZiBCOFYQZfr{D~$Wo
zoYNEb(A{-9>^i{DryB+b&t;@fW1N(e_QYyr1OcPM5+HiJDsn4?bL(Q- at f{^RqvJ<l
zrWtId1A3Ub9t5L5h=RE|=u`6(k%^q7#;COPMhG5}KV9T)YR$}P>GYrdevCMa%0y at S
zuC#PNLdOL`k&Gr<6RZR>-;+z_`MxP11Nj&|R3~oHzd!CWOI at 4Pq)<@%D}fGqKe7ZO
z-3R^Hj2acq<$HCqcI?%^1CE4SdGJg9MZdSm)$O#9e1<VXG(8CdF&T+`nB+8P+P&mb
z=oGc*0#2boN}?XzYZ*D#bby5uTVO?Y1{j0^R%v9vMf`2X-N655qZxZ~t at _6v&IoZD
z;gmu+|D3*aTHmpEzH0L^{-MOotWLf^Or95S7(Cz^o{-2OFr1M#YeEaL85L<Z$0gSu
zl1=0wq*oD=hj`?*$juvCJpHPH(Q_1<(IeA@*u*>}q$0PUr^$cw17BP}wCg at pL$Ekp
z2Z05ldRRpMC+6c#Y_HBnAg#DL6ne6{xuJ-($AzfG=OIDsnd258+{tx<fFqgW6v}S_
zSBVl&eCHavak)_9;1VOz5Z^{M%O^@dnV*~YlCiSRngy=-1QojUjy(EpRC<!T<b_IK
z+AOwMutsbbacs-B;)6R;kspMLkr*mxp?oZ&T&pq*3^NOT*2Yt0x!CwIlJJyUi?`h)
z95{qWKe9)acdTndm5L>i$g}C%V)b_ at 8>&<t-k}Onb#CV<bsXY!1QQ36(-C2M_@(NT
zzV{88tBvFx(Gru;A^gDoNA(mpJFU3VUKCtr3H*ih at iW^t<$1%=K5m)~26!C#j}tp7
zHCGyLm$<x$(3+BnG!6vIvxxe0-3foCj(QLJJbIJULp0cNH@{)FBG1tADl~EZ062XC
zXpr(agf;^-NpL-U at E)XgabThhJ0BcD(D#|w8X59UE>$@sB+xaRJ!lRdqS+butN7 at k
zk07!G;ken8d7}-yNnew;SN0Uq4Otz;5oww7_^JNRW at J=kd~$S%vY{Ls7AN}4j(cry
zib&g5AvXJBsXVSj*NZ4yD>s6m at 4;u^cUq^5ONhi&G6ZWnqCMC&@h%VH+iKlWL)VSb
zoOVyqUb+WSvfrXM`&NwJYH&_-T4K45DN+PDF5M`%h>klxY~UOV5=j#hlYmp{jS-89
z%&a;MUUN(>1htY!h6Kb0CSxcsHlRvsBKW!tp1FV;56af+d at E#zEZh+sde at 3cMGVoU
z>0DwUYL<N={RsHMB`$<+JLclfSws|W$}L2XT#%b;kBX+xz|xaTt7L|+;^PLr2d_Jz
z4xagW8w{pa!y8{tXurYj?iiS9bes+10IBXyMeRAtOrw9wv1T;XmFw5~N|XJRUZmKI
z+HexVTf}>&!P>-H1ly5=9Wi(BK6L^;N?+LY$57!3JNaO4 at mxdOqLPL10TizGpnWZr
z>rdQ!+0IP4r25DQ1E at dPiXNys`xu?F)cEQHC4}}dIlbEaWFz>|2V7k7Pv#}5b64#&
z9X-7egwt1R!C{_pPm|c{jWsGy#NF0dWK=BPv$KU at Fjbg(LFQj66~~*s7mp*=I6cTc
zsvkx*!<lcTR?Jg;D6t}%<OXs2NAIYAUR at 2tlekIIp%D3nC16xRix^vRQ2|<e(bnA}
z0zN?WtfH`N!i~F<n+ax~*hDXQ(uF;lm`8 at hi4Dk*mz*IVpBb7+15>|&zJ8Fa)T^hz
zh>{I~o+Y!0Npq*fsX3<Y6hjP>w&N|Hq6Kthms2X9xklqQ8sqwO=xTk>udhEm6uHvB
zP6*T at K1(S&Tv>ON>?c6BhA}P3&6gFgJ~a%7<l52*ZEZ=+Mt{@<8R{Ws&+WaoFe<!u
zkwc`RV$xWDc1od(l at T4MRd2fS<`Co!k^4|3Sq!p8qz$fIp*-a~CUe2zVd3%CxDXt0
zrRo7mSTg&|_n-)-S1j|DVKqzZPEeESYP;wLt}p=g(?cwHQu$AnMR5)y1D!Vz4x=9b
zfqY!><oqiIJ*|F8;ql at -1R4pzlWaTO3InCUN}w+wVa+(WF?h$vrhJQqaN7A6jbnaC
z3_Zk(Cx_oxXT~Z6<@fEy9<+zfD4!Ki{#DK=#iclk`3r88D_h0#y(OMIrppX$HGrb|
z&ER7F47G}Q26n0OilWE`yQsp=WmPM_%Zp==;sJ)A-Y8iQv3hX*F-3Wz6%mRta){Uu
zs}NM^)fJ~W-H>HLwW1+xHlw61VqL`xMGJXq3xy&Ce0n(i!$M3&>k&f{>8rl>u51=E
zjozTPi1n>bpEs1hw&kH;%<x8orxhVc`ZkG^O*BWGwsM>{p1D3lEdh;pg#@8O$6H6W
zz>wMtb)D`=S;Qts{INfd_**&t+jjWyEj+*Ooxmz0s8*v|ALkm8QE|WXG~E^(7YG at A
zDAiTWZFlZ?G|xETpiN`vzAhEXU&zVNY&A56F8xJ^2O+qrvSdBqqoUb;hMxt92nZE-
zFl6;b{C1zYnQd5tlntNyA&P6!j+DIp`p-6T4?lOr&mJP{$%ae=Z<hz&lf+C^wNFq}
zvUb#SDtSx<g93#ge0T(~h(l-kl`HHS9+$*TTlgUFR&&$(sbWxw$tf$7*Cj;{ltXvs
zIY-Y(5rJ{hk-`thrY6I$qjP)LQb#O~yWXMVF*x%Rq!gzlT3ws3cJ(%#ng0NXuhQV+
zZxjd?Mf6-q68|6<C=JI<QfCvLVe=H=A%2~^W~rgsa~Djvo#_^kl|~749FsEa*STYl
zt8oBdh^AHVOvK at 5j>E~6iF4^>H#1CJYv`vPHmBPa5pY07_V#NSMz~EfMCHP>r<~+$
zli0`c>hxnSo3lG=1{#(>!Xtz57D=$^j4JmTGt!)jD|YF#Y3IY{bgz=4bQmi^IfLs3
z8=Dhd4oi at i1-qf+j^Zxs>fokyVg)<Cp`rw`dMRh-^|`KZWYT at Swz8)7Xo>~5GcU5#
zKAewbhl*qPy*Hv_5x=)upKIvBh at mKl%!{Kv{fflp7k{`<e~jn~Cq?1(53?{wh!Y62
z55oMz-K;DzT)c_yVG-K<A1OnOul>e{+d at bXLU4RTOmeqlnV>U5vxpn^yaBU7-Ynz1
z`O7R8HgOu3{Sb at 4b`&pTnDx;pHCQ{N6_|`M*@*Dac#((!YYOwUdry9FYPs6G5~Wdl
zigE+}dvNMX!}wC`Y#k?v{E0E4W_#czoPdIc@{bO(p~sC0<^w5B(S-LS=m&Fi%#T%R
zD`qzl!?Vo6bDubG%9FrqMG9nRj5rGOpz(RdKPDKWDj!U=FDiYE()fb?eVGz!6oIcT
z`y_ at 3hoCprmVWjivh$elSe}NMN+G2K%%@}pZPyW5 at pO~RwpMH`J&g4f<J(JILp at Sk
zH_3a6MA-<)q4vj7E|9wQ0j<F5GVOc%btaki-%<NR0}Mf)Swz9JF87~F62~y)P&5Z!
zI5og17|8h%R6d^96zuj2l8zgT-o8Z*{j=8J@}(ASI#3#2?rg-e$h=1_)I~=78xG<Q
zD%Ar-)FO&z{Pm%MVJhc`<qk*yy!!`L3pW>2AD=e-K+{)jUhuVEEe<WgR|?^$V%}aw
z44oD|-WCxT)=)e}OiApKhbTVpZ{rJm+Q>sW6TBZSG6lXC&%@V7;yHX>!@idEp7EO@
z^ypCBMGB8^C|08?MWZxI4)LsJ$W^)U<2Y**hf>%HUvWb+4__OJweU3tzIuo<L%zNy
zr5U2vkR5#?6g}0D<0yhMPg|8YA8|O3QvH$a<<zi6*^B^RwTA$^vf^2~*ic(kqVOTk
z#O<$~_h+{aDZ&jL=b`pU at QEAD|0 at kCeUoCU*XBMweR_)B6j8+VIohd3y!q68r4x%?
zX^2`&_yxgLPx}O@(c`UCU8E(6pDB&DiB+f}*<Voy)}d=Z>Q}L7r{DaoCd1r|Tx#(2
z!)!GX>WJLF^Cq?<!9MU6VzDwt#}t8J8GW(iI}B~25T->mnHTiTtj_WhjiZG3BQI!A
z9fzIf<sl}O2KRSR#Rj9GEu!_jD3gbXw9)uuxa!Efz0Hsvt?0C{a at E-Qkk(n5cskBt
z5$(_VJTfkH#74!A;=P1g;4mc1+afv)xpCa+5aKj~N!}X2)!vuut*`fomGr~Ca@?S;
zm(o2ZD(N{GHekW&?A5M at TB)y4anGSO at nMMOQ|@Z~p7so<fh{d2k$m1h{k!`0v!V`x
z8>h=e%|&kcW%zC}9StZ={3z;rDyOUK)B5g3?DJwzBK-8`iq~Ua*FiK))0QeJ4)PAC
zRg94l_<%j_dv-|=!-Na`K$jY|0hRp-d)Ys=ViA`jGd_WJQhNRt7ukTb`e-;lR&>T_
zcnUgh4>9=Zp-R*n@<zg_0OP4AlE;>gncKIh$Ajl>HBMYLW)!5HbsYq5)PgJEkks=|
zXJ`3vrax+37E0A3hCc0G(vaX$@-a>fD>s+LEgY_+!@MIsorb#FaVUCij at B5dg1ldy
zyd0kTQ9-qp$413t11>f^Y(#tu5rdv}3y1vvyh0zV?U(0s)KlPsx1-VZK%*PY86I#}
z<S&e;s^mGZsmQ;tdEgW1eWaa%i{rQ?vJ$7{>f+~bnA?X8sUD at xhOzn_6c;P at AWz>x
z+Csd$H&8o5?a?zxUK2;ag$FUS4j+;+(J=j?foe>Ey!U0F|B^`TYp6}(tz9SCB($|P
z0^EVzvWO2dTK%Gqjzh6i0|x<c at SJmKWS(UcC$^((1Sc)Z4fn-*`8;sn)`(G*No;Jw
z2Z8N`FCHSUwc+#`oe{c+)X##0xU-ukJDqLNPB+tnWFHi1evWXw_si#oBIN^W3Cj2*
z5o70u++B at IeQP8wauH*oCuFp%E~^k6)ux}&)NyAl_3Sh?VC7+h8i;&r1f1M at R)jjC
zWJw4%?Pc*9h+KKN at erwJyHqrf9ByRU3$GU<*Bf;%_3Xp<46gabp#<f%h?Q{N8qu_f
zaZh_D(_B9wf;N6FsF;+5h%RI|{%r1#29Bw3RoL&tqzEgR3vI6C6B9FjDn=RO->;*u
zwST`(-~ec5Z=?N_uYWYgvVO+Din1l{UIUEhF!;d4j6*}!nJf!UL-AUXJv8L7h{@i6
zwl!--m_eWw)j|zg$yIG?>Z=<I<M=Oku at JtEUUVRO(W$AwPEw1>-p}Hs0~*oah&Y6J
zJ#CQ3gN}5RTXaQam!e!h%NX~&+BjsZZ;1Fl<l>y6#=|D8hzH38nBguSHgOB__y_T@
zh?!4IRxxxmqj*=mX`>MdJo|Zx+3#)c6Xpzg*Zkd79)0&gu3SKbvD%p-**l##X$toA
zIkTsQ-s7BZ&(feLmJZMHd9fOZvlov~R?d^Z2PZ^}H}U%}{{7q58;7ghR9jfaz>dy5
zkl>?_c}TbV?B+D;yzRT4y0EegS!v>ZD2^L4N|;HfrFqdj>98Y9r~N+Fy>wctSku9K
zNa!ur+Mc?VPD>86Fc9g(t$lOroNTp*L42Q9s+<vZkP+26BetaeKHD&0(WQh0i#rH4
ziK}8}YLf|h&&`xgkW=_&JZf>K_q;@td9QpihN>XF3O|QSbhrDwPZR~<>=WdDKC!oT
za-~9^@-<g)lw2B0Zf{<xh~b^<ctmNhcf}e8-k|T{1k*4^8%<H;qb)ZNvA^}cT`ITJ
z`b`|P#5v24;VK7l+Mn8BpSy)uc^t<JgU=K2FrUcs_BEGVjfZg(#aXyn0WY)M_p)Gk
z_2J4Jj4;dF|F)s*cwvJ_WC^GYKXa`)G$a&DO4y5ll<56fHffIHw}_uohr53rHjtL)
zNDg!=SEr+AwG~v%nIFT0F6_ZCc5iJW3)B`&J=QvN8Eu%;mPJ?s_9`OdA;FuUHMNG=
z!sBqsRkW5YyIfC-$obT7-Ze}K^aEFp-r{Y<q!^NJ5f|n~tydYW6#XMggJCUY274)E
z=61tLaP0ypuXeHA*{$e$AjK;6{F~&N+?&+*B*lKj at i@1U-&5Z^;$}D^Uv{*wqogB#
z*OBKQ;;)RdMfBUf_NSEML{*vc?%l93m0IK%L%L~j&sVAJwXrI?6 at mH>nd9!e4OELd
z2)iPx#qHGe at 7yf-*thD%ICOuXbLF_3;a(Un at f3RNt~M%yMcg}Uo2S+{dFCrR3ftKs
zc)Sx!PWd>){`NlD#hLlYfh04Z(x at ht;Lbxlb=SJWLc}Blc?C`3Y3ifqhOvQMW^r88
zFN6k0?><;Wf%!GRFk~t%Uc``V`({%eWYk|=wTrZI)5OE##biX{GP9jh=NeSU+pPgs
z8mXp&?S!KsON}o0ou?;ym>^nmuMg at cOm!=-mGbj3nq at cm>mj^{_Dw3{>6kuWLAUx5
zGRJ%8{Jn-G>sPSs)gl#1rgd1z20EALW(~%r-k70yahTPf4KjbalV$-d4eShBMYZ{v
z-n4DXf-056CM1uM21O5R5ihIxY(vvxXgTlsSbh3-_D8oy7qw~exMrIbCg)#6=~}}q
zRHraxY0Yy{FH7QQT?Uah9#2OLe!(rc-soL!UdiN<fDcms6Z#Fv$!RmdX{lCwuEB~R
zV&Ksm&$_sox%0rIJ_=($*PFLYycr<^;7uIIr;&+0w!2^-%l6IAi3RGI3^x)3Xw^72
zRCK09Az$)|7V}>{Zs<-%Li!QzM4Uy6`lAWA7+tlLVUjqK7pP;y;cheB4I_7Ln!6Lh
zMN7~S`3#3I0T$85UEFM<8{+m7akGebDn+m1VX$_ at kp<}Df(;rfmH76z$xVkg#|F{B
zN53xLuz{RL1duB at JHcIfCpX0(9L%Q$M<CNI;@zEfyBDShI_N}psJMs9|0#DM-G<J0
zb8aF9bL32ng`RRK-G`RzYdE~7EK}OsdKTLH_nZ;E)i7=1AA~uX!|YS(O%t&Rbfu1-
z(zCPo&S-N<>{Gv?v-5tCl51%k#<e#&vi+Z3HVRsmueoZsy^g@|k!TziF<@w8t6{?e
zy*Exg@}@|rJw9Hjy5+h04$dRf;=~?g+6#_{waxl4mT>Fqt4sQGK7VjjmgFqVw(#El
zx!;Xq$4H(Ivx@>~J>MaC2$&gq{EB}54@(uwo7DcY0(EPS`PTe=;l+xD*`flm at DiF3
z8AKCmR at B8=M9^p-e)ierlqbgD;w3tl0o=I+x4CeIPKphnc*}*{r!tUVJCipdqc_zv
z@=qL at 2uV;RyTl-YG^Bv+ at HQ_xnY+is$98_(74CcTh#~S^%P1*q)h^zx2ABXffM!_c
zz>Te;C0ZETuy((krQ;QbUmtMT at k8?xBTD^60P0XC*Nailo)k0G3l^-}sD<-ta(~pN
zN*ve3o%7=iLtYwVxSVl2j1ssHuHqq*&dsSp0~hA~e!cy>f)jwXr^^J^tA!@eW_dM(
zr_}P|oIBYdG`!WE%#@+N+3L_iJ5Rt8fo*8i%W3|{^>fU*Z_SUCC9(*XRj6?>?C|6H
zdC3!{jJpC)TXN{1>})ni9TBOk*FjOy$#e-(%mY{I$~A1#(9NG47>hm6VjQAH_af6O
za?woAD}8ZdHKKBdqdoPUHjs`&mBx^n9*4*Iqn&xk4yB|t#s430dCnX<BE&GfVXhF9
z5aW2if-WW$;<SIYGyH&|%h3c~h}CGjAM&tZ-q25r=J%vq#wSpLZzERohAvuz6HNL^
zfJ~5&a%AW4)D9Jn3K7e}KmTF=xv<THZ>jy$pr0fMT7v?jNwia(@Z%vtNl~^JrF4<I
z!ImwA-)q0bUBlu^Ulr8PV>xbyksx4dV&j^TPpjJGC0vv;?G7?*4)OsfY at XdR-n1Eo
z(=7COC!c0%hyhYP6p)Ab&TS0i#WdvAMa1yCp&hL1_*O0xK%^xNqDYhlJ at 9}dInRm?
zRL2DNO+R#ZSRZ+a<Y1Mc(z9y@?jx7 at 9b#sqP}Qz;V!ofh&E$;<`$Z``zuJw++W3zx
z?xJB64-k!9j>h&%?!{(OZgxc%@*ea09hK_jv9J_CvwB}-!6Ibmj!Hkddv=FA5E7#v
z%bxCZH!{Leqw}c9{z%EryhcWFw-xS&aEkYg{@b`+A$!|6K6P>)9P$Hhx_gH%yQD6D
z(aR`UtUHaI>B~8Dpv~%ohLw*|VWEwpTLgsS6~U13NXVtKj%wBf`)_wpk#=!Q|8agR
z<1VW98 at B!7zHuYCe+>6~+5MrRV!nYzCZP%0g5zUHikrx)MToG6_-TIHV?*tumnrxJ
z=*Q?<&ZGAIbS at 7`lT at H>!BYmqp@;bS+^|FgPtoV!jt;N}vbQL*_vf7tN*KaV42;Ay
za8$53jCjsQ)w75bqa(jE_7e0w4$ivSy-gARn2K7NS7i at 1f6tW8CZCqAKc*x3eY#Sc
zf$IET<><7|!J^e#GdDj|>Bv#Fd~y7a%C|l;eFK;8h0$+#6_OG}#0jvpRAy-x+jumR
zJI31P3!O8f)otQI%`qIYh(FIgqIVKV8fvJR40e8m|GYhP^sk15%NC7oPJ0UtLz^zk
zMS92Kkxfj6M?b@(JLg_>ctx2Z5qEwYbacR&O5EF7LYsTWV=yNAVD1?YPJ3^3 at UMoV
zq at FpLSd)E3OgEK}Bg^j%jdPxa at p}lHF(-Hp3AKoSo((*y<{e+-h4ggf9qmY4#DizW
zCK)Pid`eJcyfp!td=Qm!Ay<Z6laOp;J3^|4kUYd=B{??XkK~L(avqz75BcW^{|65L
z>1Y>WCX`9OXu2KQ`q|E^oz-zzaAH7gs5LGct5LRuh)6LR%)AI{iHFF4{_`JIm(0>h
zTpRDG;KUay{&1uu|Cp<O>Phht31J~tY<`Jw#HkerS|l at gxM9ItKIx?k!sr3^Q-S-4
zqM7+$=j)m*(SY6!#sV2?S_#>2?&wPST&!|m6KMpPJ3*kgy(x((_}YbAQpw7zdl-0@
zzS5~B$+6sd80i{|^m&L^^UQ at 9=E7FEezk4S9JO9VXhLRIBjbPMic_X?hk0~_yQ5$4
zzJ9(w{rozLk;oisI$C|Gcz*s*^n6}iNSHM=PRx|4UHl%U*8BODtvtl%dp6p>I6dn`
zzk7Bj7nR4jl|M+l?JQbVJ;W38kkj9DULD{U1O}ko>Byi()HrW=Sv4?JOhrO2BRGqw
zlj&9 at AO)0x at n|OwsIG}eHZdI at U15*jsO)`89fvudiEbfgp;fQr=)C>>txpYu0sa1t
zopHR1GTw^<gM66h?%N-Bk`AN&E#l}kc|IeGR^r|6dy6!T at JK+eMKl}p=&X@{fp6mY
zszZD{w$RXb(T#A6Xj%E<GDEcC+<8_q4Nc at a_c*PU(#KUGTEeHY{S~F(dQ9}kDo4S_
zg}mOui-)z4Rn<6_9mZU4V_<dmm-FmXWFNGNQQRhcGfQ_c{NQ at DsIf?(9-Q;6<MTYE
z2vX at kKpDKoPCK1HHqS6Mb4=M;zJs>6KvI*c@{s4<w$08PvRQAVBOEv0S0RME$hLQf
zMgHZ5Cd21e{Ci*{*Qc|!SO0#!`}d=@xBZld$i%Oa;C!OTuz2GLNDB7gw at Aepl$;k5
z(4+Ev6B#5V$`hSA-28^N(&PDU^JM at QyHga6U_FwA_u8LNKB^X;HZZ1%FE5Aq!eMjH
zuU_Y8Kdd3=3z4`HgAIbnfQXPdEYXMH-V49Y%+fIX$g0t~H~HVE?Zia=R#`$^2wjn(
z0a&o(A(}+#zGOdgKXBN`-q<V(iKoNN&(XDSfi=YGv at Nwuoey#}<;!{YiZcttk|tbn
z-glcriQ*J;C>uG1#f$VhU#UF^AIMZrWOl`np$J^&6TxGOx1;?8<s~I5b~Cx<i}BMl
zRQKTX?(a>~LB<St>__e at UkfqRDV~`-4*+~I0QiCvHzHj-ZX62%c{MQdSc3+JC6Qru
za%cvIH5Pi?60%lk^h5jqRK=PgCoLkP?Zy0tI*;~*nuDhA=$0Cb{b*8jqtzlJ?V;I3
zErdpwx*!3!?Gp1hEqRhaQZTZ)uT0GB at 660u4t+PIJ&d_$>X^l`hV9$9_=qGrfZ_{Y
z*d81RmzkcYe?gN~`y1x=^GOS30*BQicjGcg*QBmlJIF-ckalKb66FH2A)GVtqqhAA
z*w;ki#=a&xL^^B5fqq)q^r=!B+NPu6$iGD144&Nf=vC at Ek@fnvavd41`MkI^<-hQ;
z6p at Hb&*V&>lSe0keWN4Dn6ju37BM&d%q0UGM{zo{@kww`uhCn?^2+}kM at d(n4UwI-
zjPUI at X;iUd*zyosQIePEJ9Y2n(+|mhDjn^33!9#8-OKAEPTLE!ib2d`R<=FiZc53_
zC>bsj*yT5wcQcC7?o1>k{f3Y%+2$Bl9$*fzI=#Nx6TLVL3n3@);XX3XL#!QRz8;A!
zprR;>aFp9xw;n+Z3OstqCGdUbz?tf(kuNdPEaYvp?^ehM53ysIv$Q}uB|s-MsbW-V
zh^e&OfMP^@1eD7GWjwz&z`%f$;u7Q}vJi$N3%SS6923>Vz$hG#m)W^sYt$l=_W_Zo
z&;Rf<{GkmcotB=gs2(&`{K0L6aXJ<ee!vmlSGk_^xvW_9nxSF<+DtQ~9XD;plzLrR
z3z7 at IePqs5z^ZaqX5D^<`6zgPTwGvWvdBeu_$3GRV`j4RWCt>*14RLpz;ot8hs>g4
z6T=V{go5gRxb2fSC?J>RY3)r+Q5iL26rzQV^*r1)64l@?k=^~Ahr1 at C2HYjFyQ9wo
zm#8@(5Eqva5u)D&1cIgQ0Bo7YAQ`!UeByW>KDQ9H;Bzv3K5mjBHaziz#Db+BZ`<H)
z12YYYj0uVejuRHNurIkHogCxyk6~1$FCI9qoYz8)*u_KE-!g9vQV#%XbF!e&05J)n
zdUA?So5U<m6h+Kla8aFkUVpIr6<X!!dnTsXo*d6hnZNWkY~t&O>-FpQ+7K-SiM!9d
z{c>BwIlYjec=0D9S`!iV5ZBV(Z0KQWCkI~iMUt<L$zwwg?noZrV9uKB&o4AE<fUBP
z4R$Q<KE)5^IeveRDZdB{j2&1KXjI?_h at 2I*gO;=DBH3S at SvM-jd#D+%Pgx-d0#&;;
zSM8gX`;=GR=&RzPqCV1Ehuz$MK96^2^c`CsH3dY)VxB?UeoHx<@45-h#>@6?;E{*8
zm%eQ|-GZgX;>ajX^f_+_kpOfni3$+ at au}C_Vc$JBakGhrh+AFuGWU50x9dT4{Enqs
z`=ZEl)4h!QaHI5%2<mE9VqNSm(gW!wnKx_JRu*75!P;ajj!#nX*1c9|yigtj at Mu_G
zQXR?v^YFhpm)?`M53`NKPzW{*QO-zC#xQgZ_h&CMU2d>o8IAAw1fv77h?nVIr{q25
zk8 at 1<uYe;?;5t{J-Q$slI>-A%^op9jA6SJBe=?%sAw0)^Ne8gv`Ep)m^r$;gR-PCB
zcgoNpwY}IF8pPRGp1#9CV;iTw at Pf}=ggsK1M|*tK<&6c)^$<m?^lfg4+$ed^isFWw
zxyVurvh+TRtmxQ0<UexRqTji~^|bi#GCkE!BMxh_j at uiVSeGh;%7yzS3u5t3sCMZ%
z28mtBO{(;+rZ(e1Nn4I_ at VppwJ^MJ5%P$D2V^|W>&p_I=Gmr%kx4T@>UN7?8uE2SY
z#^{wRai><X%FAWyLa5d#wU>(djW3cPb`XG7l?AlN6OGF$doX at 4#tEsu%f5=3U=#h3
zK$<{VM9s1O&LeHqwNOzMSrWpdm0DHY9%D-k6jzYw<#1c;#l`b{jHFl3&bZ=^k2XBq
zDo1{Mz*zE$It$$JP$ZP(SoDK$b;jnwL*Xt1?uL at Pc6G1O;Mu<mWWQ^H-I0NPim|9g
z)V)y9xOg6o!XFU}2~DR_JI^5E9-`jZTg%n at k$@?Uqkc3-PgDTz>X~E{UTlR;C}&fn
zu at _exIvq5wNVIV61}ti&#z4H$z-A!@joN)b)>!3v at x{Rv8jH!O0srF~(Cmdf!Hrbo
zmtxA at j@>nXantmvNE-<{5%s}l&T;K)^TK8-oRM1RVc9y1`BEOWA4_|gAtV)GH|BEm
zc1!yUE<B3v$VVYRl93-4;q&6}h3ZI#YpcF8uDn(dfNuLaG6N at 0#_oQDmd%v8vi*eK
zavHiJMz|)^u9&tMj-h_MXo+e(fva(+1>3(cw2o1 at U=kZVisf2PLZge|WOo^U!s+BN
zM~xmz;$4+6M5YbTdAcpgx?yD6LD4uT;y7J59l6<vxt#wC^G*}<u9Ik$15n{`;A7YR
zvu?^93vTvhzW|hZ8*ncVF>qI@(FXnl>7Tecqx4Br5$O$pfn#s)rZXR!@DBNAFAlN=
zMbV=>DAq#AEMmH%D|tR>xXE1~xp}5NFLeS=t%%5=v2!}A`<vRaJS&=tXbukAm&<18
zuCYFOEECwzcQzIWkv>|Bwg~I+3!Mx{YH7ok_m)Ssz^JJj9B<>M8r04^kB1I<;pqX2
zI08Ng?aF^wU4-RAPQqLPPc;?5+~^YyJ?z5ZGc>Km3>>@9%2}4el9d!d;vj8!*LLGE
z6K%~;*@<tDpv!R$vkm|ACz1(*^_uALP;nZy_Zpb6hltuW=c${{lON!+cb>aZTQX6t
zqN==f+8H9AUKw#3ic++Qm<t|%<B<%0(@$K(SbrOe7k4|V1b%4fgY<0)`A|eJ6s#Aj
zdGdc at LMdV@%3u#?+1LwBKQa^;&UVFPyAPsGn?M55RQTPLGh+Pkt?pif<I-vlm-K)F
z9_slwZ^OkjIBo`SJ;X;Z`WhD>Y3nOIwpo)vX0D&3(tgx#tCQ%4C=#TPO^B%22=I>L
zRButO at EFjpoy84F(k?>V0^;H^`ViX@$?rI#pN#z%k%PpGCt;Y<nR8%Lm4{B<t0v%m
z5Ne<wiqJz$UT}Vjawb_5cn4v3Cs2~K5juHzKbzV+aXrRjSS(*h^a9V%<ZwP4`^!c;
zWGT-!(^SG5DbB+e60?ifg?8OtX=FU;ph!lNgPr++9p^ARo<2PHTdJxGJ2os`@}q4_
zQM>6>76j+)`eBJWiXLH$vsn}I&Wbf4C_WroP*ei83$Y&($AT&QaqiDtu($xR76?O%
z46^A7pyn@*!0Q|A_16mut)+&lUum*0y{#mE28Nb~1_NO{?Xn8xJu+5S+mE0=KSL9k
zz2JL`vFqS|nD*L(#Y$BEtz7x%R7p7QbXiY3vqG2ksN1861XQDu&b%r~>xliBEFcJP
zG}Hv7YTk>J*A3I|;Ap<mC2|q5bEt6h@{ZgHu>p~Lle>!a;jP^Y7S%@2li`jo)}&vE
z7-#6&5 at Yeidq}7)AS{jr1)oHR8N?;Dq}>lw3>k!~!_so-8WTM at G7Yr`3xLC$hSGv7
zo!FBv*~k^;sWN}wsDU-Wyb~2CGLWb(oZ~BpXKz*4+GS at QH<D^N%BDGjEdiGvV$}<`
z@*b&4E<|Q-1FTxGYa7jfWkb;#94+jKV`waAxwd^fynCL{_wYa=18v-od;ZlIdNwnR
zb#SRIG at 743<}>q=*f?H|^|JOn3|Kc at TZ*Tb*-K+UwH&=eKCvaww8rs$!;(nrmR)DE
z3~iapgKiVpds(p;r9#q-w~U=INuPvk2l?XyLTN22ARZEQxS_=$=~Q_W{iz*iURdnr
zWj$V{ua9JugTEH>zu_bMs>})97kXHDX~R~H*aIf_3rgK0_FZVc$54nEn<a#f;2~)@
zu(2#=WBaSD_=?s5_4gqL^(NV?Z&U0jdR#gOhPxgECyB=4sH&qlw8IN7Pd2oxXf$QI
z+SMN8wa>U#AA524j;ANiR754>N<#!jl53C)5N0#h+vJ at P?P~d-DDOa2qF>vU8gCfs
zM91N|KW#kV5H#`<N$bKj`Q+F!5r$HeOFrB at wb=nZEJ8~R7Lh%CQB8w9N*5{SO=Zp;
z<D5A?JeOssI<4D;L`1}i$0)CHoa_r#w%%}xI-TLuR_0={Lm!7{fUWTXfjFgC73Ei$
z{mrRTD2Z-i_U=lhaZ0x2n)NA`7v1MJR)3M((-5qOxGHB5IIy!96}}lN{M7})H4IZG
z>cwLM<YgQCcz7`~<qB7jYZv5ozIdFg?21B*MWI3Bje{I2x`7<W<QrqF+*f;c?vXUf
z#nusY$U21OcJ=3+xw&9<0Rvam#HTn8UQ9%a=rASTc6S6hQuIKOB#FvH+;Wg15f9`9
zkZ)Dl>@*6{gyhGeChbB2Vx4U4=z`kz3JV?9Z at go?j{K*Z{}-CTy$g2_87dIT&q)c1
zjY6ZN^H$(8`_VkxGM9PLZpCK9ojmY~m_~Hmg@!djs20;u**wI{v1gp_vy;SP(GaB+
zfbd_odv?(<n2rsO9vPb;b|XW|FgNhX`L|vLQ=wDnRqml1vWR>+Up=LrlBC!G+}TXP
z(sl$1b&nTY(LcV&B~qw;UL6m7JBonmeh(z7>>fN?9rLQk#L)DuaTxLKhNs=RLKj>3
zFG3@!$Ebs`&=HPm at tl0CJt4h|H?2imtf{Qx>Q!Rg`tfwMh3^wvMPpf5J)2OBN-wm&
zYUma8T at +=F*B|9opUa?3&h;^d0 at jXnp|I?8gQtko1^iH^>XW|>Q$u;m!7-H_gRZn5
zr=r|KH#=drK;esGxy#*Xg>l+cA6qjA(NLS93RH0WW3ceUkAE|NtJwZo9kr6^cbTc4
zg at KhELq)>U)WY8~Jw1^YH1rUWhO8XTSy at F7)+P=k*ro^;M|#HHe9bWMpu2r>5DrKF
zUISmKj#h-zJ=Q8gG&19hx;*m0&`etvIw6ZC+m{^Ha+{bKF%pUShZ9rxWl5vl$x+nM
z5~8t$EVAITIJ>Nub2Ht3+=f@@Ny-CDHK)E1JAYQx=k;9e>bng)QAEJUd+cMwmrGk2
zcJ{RC2&I{(A?rBJjdqutug)ehtBDOyk|*BKn~>;E>R`lLWPg8-LF1}r%G3C)F9av~
z_w(y(#i6ZEU1`DRcgfXvzCrAu#mn99hkSGu|1er!ZM3`=FWU??)LHNtl1!wWpPvEe
zpD^2OxA5`?b<ChmXh=pEElx$CyX?!opHI$4R~b^#fjAxe7}K_k+|T=2U1aWoWrd2y
zs5yaL)jFHlkKh}zA#C5x#NH;_<NqMG at 7ca}s3B?ku_MPYs~e`Jw4`Sdy%%oTsa{s4
zOGUKxdjwIYjeVSIS(wzBj=RZo29V8Q71I$IvG}H_%NEgZoX=*b?iqa{$riQW2(tHy
zm64tC{7>l1%pGdW<17upT{8^LPobtP<K`b;)#XS9O9-z9o*0O at d5Fl}E(?0L6dS+S
znFi}f>t1KEvHW<R7=ns*h%+n7#CMyh0pEkz_xN!ioG~<I`>9I|<hvm$rBVOm7Y;Ok
zNC2m(aq`;>-OVptkrIsYjT7Doa5e(WCq}(&^)=OW2Sd=$SlpESpiL)?7#F%EIwagC
z?w|^g{F+hYhM3R2`9fh;RMp)alkx434d>G%y&>(@-{0E1m;YeDzP&^y6)Z~j5aNs#
z4r^YL0jb03ff+?K*QAMg=T at BPh1@E`++xzWuo8xDMxFywdkvDOF^{{M={XOLqeRR*
zgT+4x{Bu;8=`XWu8#oXSVTI$Bk(3be05yIA*QqadSI^^BCzd=h3=S7CyPC1v`P>5?
zh$$<}qEADrg0reF*{2>hrRU~xkv$RRQ5`ustNpt5#s<mH&RH>C$5U_2Lw-kglZ+yZ
z_}bd)BYAzx-W!xa?Vv(gfJSK%v#aJMu8#_(Iea?6 at t<cFI~$)NuK_Rd__3RejS~-$
zv2-R9qI7qk4>Y8K*To^9X9NP&W&z0<dwha2_7F>V&-J4jk+Zn)FiHecVM85QI?jA;
z7E{`mNF*JgzyY3|O6?5QL_dPaBCE83>CEmeu7j)F*BPxcYAj~(0UO--88K2+Lzz^7
z&-ujKai3M7^&4L50Gm=C^!Od?H`Cx~t##lxDr3Y0NGy}b3VRQ-Z$GP{F>+cbLej$Y
zTuDd7KIJC2u6>a<#<36j9ps at yoO>K{@egK^-|zmr8Vxq(te-}NJo6W~F#0&pIkYjy
z^av2xsPIJ(9>tD!S{pnxgsZV<Wk^>7aV*90+}-}Fm!T!`CKPW<+(M(Q%JpK;%W(H1
z8hDcYDiS}MyT-j$2OEVZ=?5J6^>KTS4MQxR at J~NhJuGMr9 at Ma*o(tjX!=jT>7DqUZ
z2Y1i#Vj+tpKFIO>z(QH&v?1|fcYO}V2B(ptfjlbzsl9!-28Xg*V>UD%`E3zL#`Soe
zM3>o at iE!^i7e+T(Hqgh_srnynKMOlgcvkTP5sq=;0aUxAIc{DW;w;SpTc#8G7IAFc
zJH6-yK`cfjB!SmVLeSJ^zUfc4rxreIZ)k{Af%rKna89i~v_-Cu<)X}9IQ3im5~O<i
zZ?Vi6!AU-|`@x242$kjpy?dkCcJk?ujO^(*!0OYzYv-Ol{IE1;6?Ku-6q#O)DKZyd
zy6%t at a~veyY-mn7aVaN#LQ#hdflzS`gXfQtAD436imW3BRtFifk5llwvkx}$JAC*A
zK0w at R&Zou|bzY(2advC?(ULRuR{O>))fqL9HRSStoVNVG8r?%%4)D&xA(zc2pn>)Y
z=q<3D54nEc{Wp)p#aejWjy-<X{;-pHe08=5p^Rv<OEC~=gZ#tH_T_--o}Rj3rO8Ng
z1d{x+{f)wghAf3mIM{G;gm at SXM7)L@!N>z$!2{YsV-+X$|Ef)e!;OF(fVRzK{%3P;
z2j+G<m0pxm)p(c}OWHxjjwAq)>LGQ_q<zOIwABiJ33wfDGHA`vlO(SHOH*J~(Ov_o
z>c|{=`cGFOz^Rgbr_in_xbE(mq|q at XUA-&uc!f4s;y+0Jm|~~@r|NH at -s)<Q#M7YD
z97<P3Q4IqDq)6KHc8On-`U~i<ffJDGAa%`z at h!}g0h=WKq>H`oPSvZS7L%f9sYoS3
zUo7z(&`Y67=*m~(gB2Rtjf0s4IP2;eaFQoRQt3$1Mz*eI11I@;x;miXI;|uII;0vw
zr{U8oX(rkaz;7w${9tviYA|RiCUkPQ40L*|L|4 at B>8gs-u87u7F<T`*8Ttl^XDjv|
z80s|w^ato_w1Vq2S3L`EUPyOup^Xm)tN{F*Iu1Aav0hUL;7$!Ru^TOEUqRnzV(-o`
zqThu3b{NPE2e_(93T-9u-=w)97JZrnR5e(d$3y=ba7D4NgqcSNfT{+<{2|~NAXnPG
zf<+2l4F*0{G4BI at Mw$y_Ug%EM&BLw_>{6xuPtbD#H8F<ORkVT=ZN4-gR_Hf?7sg<w
z0l=La2D|Zq4bn|E^jwL1VX#Na2YNq1sx)g<A?CtN4?bK4l);dMR2Qk!5QWsI(ANOY
z171j)W}|(}pcf()4t<ft=_Nf<m!Ox$NJ&?%6r5;7rTIhX-?-S3{RtBq(N*=x#ZA at 9
zm?r>i08%rgPWWEn7o^!zg(#Y82)r*KS<-eYcI4s~%w?;B#{t3tq-IE6GdX`Z!|sA&
zU+^^{UI*x^zr-g<o#^)^Ubz~c+5(UYmbzv#elw-LcXgv(Lxna-!Hq7RDdXXGWghO&
z<zZL623A=Cy6UOmI_<ycWB=v96(;ssCbWM{XnOb+YwDP$w}E+xq<!jQ=j;-Fs<gkV
zxGPx;OZ@;>H3_s`F7#_KH>s_;jF9>|sq6ork>&>qy>=blR?~a9n3uSion5;(-NJvB
zUw5|eBF)h*^!bW;FYp_HPIWO71(5nm>X)UiQMK<Y^)U7Z=<0n1{{;B=ikaM8b201x
z6|1jd!=QgIaosLQnhU>y6<q+SQ0Sil)&NdPnr4IJ<}PNP?oKcErn5~gY4(FYN8&jy
zZeD#$h{ga_^_1o$7rO3drljvu?5_ha{<iJ{{fUCNS8#_54I7n*o$7Xpi at OXLv+nka
z3B6DQj6DD!0#*T3^&8Aj0M#0*RLnbE%;_-i2i$X^S81gE*GcM0(Ek9ukY?4_nvET%
zcNN at 0#f~cI(*Y|1hozfmQm@`bb2(D#Tcxi4U#O{S((neL4UqJ)(3dN2?f@^>Omo*(
z>Q<?*f__fo1)FPbYD--YrHzYOrw4&P&5a$o*$lh$dD!P~q5JgT^=>Zz%u&o&fah<C
zbF2Veom6n0M*1^_{(39bM#KA?&{S9BV82+pIr1-V>A%M=ZtAwyeCs21)$h at u9R)ma
zv8&O>;i?PpWNBUk{cnj^X{)*ED0Rml7^{M|Nzz|whduy6>V4>+Nu10-Nc at IEBf6@}
zwbx8OQdjK=k5K4~6x`L_LD>BXX#I|6vlaS9iRbgtXs+KdN&g!98WT4!K`YzA^)JmF
z1o}i1y9J=_lJwh(y`Qi4UzF5UU#CjiIuko`cUqx80PfWh<2L}QrBWyS1n?Jt+J0ox
zlvU#KQlBFAGg7}J^_rcqDF8SGxDQZO+0G7ACk5B35t5dn*xdwPwhQ*r0fPagCPH5a
zI4#XYE8i9UE<jh2zz+cKDm2}Wbgy?ECLiE2(mY3@|1R-Yx;fnHSYOam0Sf?orG2~Z
zx~);42D@#F{Y8nt+Cy{ufz<Usx5DhvQ#U~dro=}pG_u{Pn9l<*&`bL#QtD)yEAjtH
z{k~$Sxz at f_dLs`3x*DS36BJyxUv5Iv?R5QD#mzI|b^7QwSa$=SEY064^pn7!0c!L`
zp9mn84t+16l)q+fDRnXhNqmabH$eC7r at 7O={a{Xzv~;Q8f?m46?gEko6+8v_3dO9u
zItJRGfJX0Oz6Q|M7r=8AGto;8zyS?_s~Qa2B!&K+#48WPTpd6vT<V(1_?>HFe?Xx<
z0$zEL<G&6PkCJ+tVn?nrUCfR at aV2Xo##Vr60I4*o?}UC;;?JaBZHVTko7BfaUoUaZ
zM*BXKv^R#TR1NP1TB4-SQS5(E at P8!kHO%?{Hqt!Jg-)*4gO;t(A1k=eaLu0>sXO~>
zG)<Q7HbK8G at j_P3T^;D1B(DF7MSn5Xg{Ir7`nPa%Ub-vxzG?#=2=f>h+D4eKy3mAF
z#R4E at 7T~HrS7_T6Tz7W`w6=k|3G;4=e<Agq&~F3E2jQG7Kvgyu^L&_3171pc*<f5h
z155*uS}JwTq<xQqRxJeL+W}Jm830mOq)xbJD1FV<K*cUf!P6wZ9{L%D{zjO?pRvFX
zDrU0Dbul|!n`5tyFw#4j(4r)5A at qZa{hQ&&|B2GgguYOr9R~hXF<1J);ZIkIM=Lb4
z-Qr><+Bp+i$&qBEsn!av)83P`F;ZWqxXF_E4d|6 at 80P_o1Kg=?u*;G51tTy&0qAO`
z#CJeHuh4aScY1+Hycr50^?}q0|3tyl6`bt0OY><L`eT^8N1<N at JOq$>EgEA?z;i&I
z7>$-Jb<Kn^w2PVO_d)9ztGfW-2fiL~6!2P{M(-*0(NbS4bxXYCKOL(J+7L-!3;hJ)
z3A(LOudUd%0UoNDb=MzB+H&YmC0=3_cHsc3ih_9#APexPVpl%V;VKyTG{sCdyQTRm
z^d?D|Hv&|Z3iEQnFOr at My>c at 613*`w0nb#-#Zn-Y0}ufq^|jQmOI at Qne+#BMn{`uj
zh5o+8Kau)s=vM(1M(eJT-N08!bGAZvxNu;WF%G<!f)h0n<}|<oNv}E<;~_u-fYcJH
zACvlHscW{zZ|!kL8d17~Zj*M4Ox)}>q0xT@$J5uLT93!x6u_OD4!f-YU0s&=h!0Wc
z0i=#We+YPUf at b!Yx at P)s-+l6*zoGj~bo?_2_yooLGw at t#uJIAZ^MGZ569CJ{j{ow)
z8oIc%x|lz4F}wP;PTK!w;;zUin(Ic;trFM&|H8$*9p=jbuSrNF;2S^=!1Gh>j|R}E
z0e%4715})>`{d9&D70t=*IoPuTD~coshZTu)KkI9Jl at 4jv~`kp(!`GJN!^onZ%oz9
z0aDjY7z-%oUBLg4=GvcOj{q<pumM2oXQ^u@?fcM#MmEK#sjf79kV0D^@qG%-_=h>=
z0sd+GIr<rZs?uTJ52!R<rT*XX#`6CV7k}2cn4iL2>Wlxo|MW*Y{1 at u-?`)Ve6xvk<
zFEGPAocCSmQ(esT*Ct8(3HlR2-!C=4Ql)O@^Gr8(yFvfM#m;jk_R;~}0C}k~uuli<
zlkV=hxcB=C^C5t)W+-@$g1<RSbMX=M6%s!Vz0lYCpLy$b|D!wAmo6^<L at VZnz<-hE
zy9&L+Y|V#w=nDZ^(yaUY$i-Z5j&7sr?@Du`)PIKlLgIDPaLpW`t5gNoX|DQ0xH<eE
z+|hpp<_hr^Kv!1aQvjO)*A;rnd76thQtu~q{Xbn#1$~)fm!;sk8&&@s_T}cQ6bD}4
zg+5p at Pf>9FkDVqovb&+s%ctXV6o6E^)HRdid&Grabb)5q0(vjNXld5}STD`z6neph
zx-CTXD7b@)YlxEGU$IY8aB_RV#jO8-3-mIJG*fG-r$~J%^uHutY_YJbX23@%X0rHH
zn!k0S>p%T!LVvE%YA?}U8udP~OO*E4P281Oim?-b)C}nRB~Io)fR|cEn5OCie-AJL
zkOjB^D6(9)#afZX-+?|-;%lK-T>-(N08-IX*G$@Xm!wr(sZuengL$l^tyJs|D7gB^
zbxCjdjf3j1;0~%0o9N<ht&91*Vt#cM-m?U_s$kGQH=(<_+X6S9-)httsgo%U_<CvX
zwA%64a0Msobj7?v!G8mOOEKqL<M5-l#Qhc81mN2N=M>sqiNCg1`?tH)r$XN(@$*tA
z7tPjTE)4h_psMvS-v`wG&Oz-Z at zK!ND|CkothIn%V7-G9An`d0&0*_|9sCb&9!fX$
zHfaC$k-F+roC%HWXMw&|vC9FT?|b!64Q~uuA4!jt`bQ at 2PP)))Z`A%zlDg{iR|;*f
zf|Hw)o3Mrq*a9fL+3{B&1^-^b$;Annt8G!-0#8uP4jX4|nc^l3_)W#EyY$?uV-7t6
zw2vfxtzw^};N<$Di`n4=Bz|vGO%D7WNgr!szgE)fZ+E!w13X-s)1`h<vDaM|+JW;8
z08#^?&jsv}W{v9ny{_1m%h2rFL$^tsC^LZX0Gv~3{2;I5)f+oCLkH*s0jbiwK<Z?>
zNx}7Bi)UiK2p|<Cb;3UfzELp~%~hR+eZE~d*8~Uwd<G!(BlJ4}@7<cY5%h_GL(;5K
zF;<f1>OW|d2&tczdc8dwy)X1wz)Wer1pSr&A)f)`0fzyu%6qSa@{WQ#s77prbT<k5
z3P6 at L-+*3tAI@(8{{N@|{Qnu?tn|lYzvf$CsZW%;Ss1^;uFwI8O=F3VQ)s&FB87HY
z;svs>b_M7Qa8)Bf`%Ka|nb==*p_Tj*^CN&e6%4zjZtSmtUgDs;KZSTlu?v#;WQFGb
zPlwHB>Hg?{`0u*nrp+OTA37Ec+DwJM6ZoHsx%^@5UjcOW4e$qm;y>vWoW)k~sS-b{
z&~%sHM<8bh5C- at Zun3Ts+9T~RLof5Qxyufcp5Vq_{c9oIoK)OBQSj17HJ6>BkCHf1
zjw`t8mx|wnn<~FxofJ^^7|t00T$Rm*_PJu-s^FI-Ug)^y!yC~1OI-JJf{S?z%;ywZ
zs}q{b0nlelT>n?s_kf-YsQN3;kOAB&f7qo0<^v7_9s)=eJ*ny4q#gr(jl?w@?Q8iB
z^9(>&Kq5d@)1>)l=vNiHBBu~9KrrC{Rb4juw^X*nH(v$UsWyf7rGo4BdFgvy+?PC!
zJpjP}MMX&Wi(LNuAIzoCU|$Xp1|anb^i6;h(wy%s*6aY|0E+;+IwJ9FQZIN;vuP;x
zK<HB?uK%;y#jMk-pT~Po05g^9LSF{+ErnM00tq2B`_q~Bfpjy at joX!yepu at FT-+7O
zarUn*%wJ2|KIr!VtuNv{5+ELs4sca}Dzu81G~4b{kAa>gak4otagWQG>j8B2j)D_y
zfHWt$(5EZrt-!MZmMgk1n%)=Yv68mZ#g1I$fc8YvOI~&Uw~jQ&Ku>eAJD`{?*Rb~s
z&{ZdiM?(Kdp|4SJ-R<kw(Y67908~}zch%&;-!h?FL7OD$>rL$G?{jYG4xe#0?+?vX
zQR=GQJ0>*M-W_hke^UY9%l{ukf9+3)>#o4p0UF-GIt)Nnqg>1 at 6!Qb%wQg#zdq`dV
zcY;D&tl+8}!uLx%@4qkx0_ZA4!S_hK at -3`80L)aPq_1#ePyZZqV|Nqua<_4w3-Ad*
zRokWcPw21QQEl?ZTS&LPlz%=1zFskt4_S&i|6PZl&4Bk*%(_iHX!8~NFA{&G(0bj|
zU2FPy7qf1=!i0Vqv?ng~3V)+)0HlUVo$xUdUoQ2ZrT!3lrGLnUQFWH|C>Q(LFdvk(
zTT<_E-}(O$F6PNFFOanD(66}IKa%EG9yt3`Loo*_IJue%^DRL2hgcf}sA>hwzbG_I
zu4-$<+rxgG8#k-m&~;x<!v2{XH?KXyS{mRpfUY)4{G3A5?H;<&sy)_hf}!sKTmuw;
zf;~<Esc5MaK3l=beA&fZ<|+C{!2hd?R{l)`{)b{V^E2!j_5%Q}YO4v2+~i1l!RMG?
z0sb%QL+Sn-=toWdeX7u2f8p at CH}HvynQU at kF8)$;^QP3vWL0p@*7%(y-K;TjdjYgU
z!ealas>HiVeI)cLioNb|GiZku`VEN}wpc_jz)^s=hXwL>A^a8aU(`_(caJ2kLOzRl
z2QUus|3~dn{=co at x}Wp%Tf|<#EkMNr#<1Q2ZHhwQqTn}xdlhv4rxVO^fT at 6`fS&=n
zdZ^$P3OVSyeGf?+rP!@d at FNON|Kuv>+MX8C1rQBL2aw8=IvZR*_hDCAUh?*p`h2P1
zhF-9U=0`KB>%aGxW}DQ%bFt5o<_bkEq5;4PAT<U035n}|k^Vx`UN451y8x~#UZE`n
z{!*H&7T4T%k$Noj#ei+nton1!g;xC)V>r6|9<YmdV?RyOH$ktbNo&!6%Tw<Sw at Lrv
zez~+i>f-LDH2aox#5o9fGGGQ^C*T5rRH0YV76D;^ywntFp8>sGDa~zrshj;5rP$2`
zzEd&(q2Tmy at zRd4gCsr``Zk5Ghw(dTF9G$-X#e;?A0TlX^e-iTQ0n at By8f3!FJBh?
z0zm42(C-7PmD9|AQlA9<w8Y7sXL-&3b*Ybn{te)?G?N=$St at 95b+fKF27M@CoQeHf
z6B_;Z3+VSu?0mf}A{dYaSPHlgAXT-ZrYA`~1NwD|*Yd^-bASnexd2 at q(D6zZ at dm&L
z;Hsud+8V{~2;r3>F$^#lum^A#psUtZEMg?!OMscmko1=(_Vub-#4rG<sn9n9E=qHg
z*N~3 at wv+l2sWZ{!b6DCxP~26lW)YnMx{3t;nPT27 at sm=wRJVxQfWZJ&rNF!#uoZCC
z#ZGlcc<CAz;S0!1MJV<&6g&g?6>0XW>F}eIg6saqnb4M+(8ztZ8+!FxS{M_dZvtEa
zl&WnJ0RU28NZnFLGdF<VAMhbyiKMYZ`8fgFLxo=Nb?v`iQvXWor=b_AtJyVzK33w(
zq)y%)0)9s^>*18Gr~OCf<_fOc{}=sB{Pzvu$bbC5W_`2)KwfHsiTyXAodS5i;rwq)
z7juA%c`D4C720J5FY%_cUlgb2CN!c4NqUado4lp{J6P)EX10Qp*;Va?{bfL at x1Gan
z19PB4n<eoJ3QhH^LIdajRXf7plJ<k8{weg0fJ4%(y8jEbY7HI!b&`0Z)Hf at 3>VNL=
zi_-lojU0ZG+uAN>qV;#7jhE(?E_8BxRH6N$;AI<IL>oW^Kvx+OFV#e&)rH<m;^bzf
z#GgTbtEuLupVU8+y6)F6ius|$y_-40dPm~HQeO)F5THVHhnqOy^Q8F)=+_jx!YvR7
z0I9*yKa at C`S4sRl^a3p%{&kl4JcUN?Nv(IG6>p{eHw5}diEA#+zZa#OS6e&6BbO~;
z9tM~q={pqro50Jrak!5JK1(s{Aw7|_`fWA0gQPx9>bko#iaB39hreXs*u|{>6K+CZ
z2--g;bo!@PduM-jf08AACiESE%hLQ<>bkq?@8D%*0I4BT*X@={^D*f60A+m4!+J;3
z=egM5kmiaV9RIZfz5s9lkgL$^`8wR_;m3luRMHPYe++2X5f8rtNX>!1RpOq0&i~hj
zxr+;p{z-D7{V2_UNxgU{%uxZ;0owq-0d!TVvjZpEHfg@@LMOX&U7X#vQOxrdJXgW#
zKUY<yE5<7TGnEMX0>FN0f8WGir+2k~qohv$ECimVn9cmoi&n0ib9{VY4pwNh6#Pfv
zj{x<$JN|iB;*knX4=>$?_PvYwHy5-1AL+OAu=D7lg&!n!az7RLCdK at Rg1796$8!K_
z09_qcaGj>>PhIS)_j3HFyV3Q2CU!{*ZK1?BDK!0G($9f at A5gTna~MsedAJK*{a44Q
zOE;O&efn6$Z~&=KrM>}rzP`@>>;G1Bp^t(2J3tPgu)p&^O<*1b_|=6 at emw=vyPrk0
z2k0sqc$#9~4*afSF5llGS^&}js`{UcIae`PeNS_n4E-C4?}UB>;5R_Cn+N?ziL3tJ
z0j=CX=dk=>ULa{lT<p|;34b8%-yLKTDF9N-pzoJB6Xd7SVDwFZ%>Yv8rB1lV5VRqH
zuEqo31h^?_#fCcU8UXiK%!$C4Nb?cs4-`AyKV5%qn8P2U#lxHq$WrK!fma`{x$7%+
z{r_lbJ_!A}iygVCVs-fcuEe7h8o5c6=5;P~vNKcJ|Ir=&TkL&D__|*$TxcU)%(^>w
z`b@=r2Jl;onf|F5U<_0D>tn_4I|V<b;JFIkFA!rA0I5AvzbSRyPtwZ;Il>H;_>T&W
z+~mMqAlTuKXsW6WyWTGLqg~9ZdlgTEy9?5-M~D_iedzuYSKUrGq3QOUUF-^kI^z45
zf)4{eU7CN8`gO%#_fOYLg=zkDl)6sW^<+16-F^}5w*oEznvT%?8UX#i#C3P17Y%pB
zS*N#BXfePiE9P~;PXh9Pp#A47b^3Rtf*%6 at L@~cM(jvM7A^|f1q$=CM;{cI>|Dt|`
zyGjvw(-5Gm5elx;NS~(AcLTqvn906$q~=G6)QP66??F2VcrNXFM>)cq2z-rV*8lk#
zw0EMh76C9*lNI_7;5VhYON_aD@*@Uz-<#N<QD{YD9skz{-cK=)0sbwZcpT<$09Ex<
z%##&-jl|C at H1)s#f_ua}ho%109Ckr~FI?Q at NV8{x_V4S^he(|M|5Cxp{8TYF7==0n
zSOCaN?SuV&>83^^*7pIr`clDl+5s2Zd1-zn3GE7?sxTL`ZZ{3|EsEV)1=rn>UN+g;
zzt%8Y0TU&C8T8YD7t&liMRVU7`gDn3m3oU*&29wrxe`AjbqcH6Xp49kpsKH6{=tQI
zQ<|HPfzWqAUTT+O{}b>>fNEo%|LGykL!f^u at eNYHAa%<)i)aXNrvjzj6vfR(;HMNb
z{rk+ttov7LyhXeY7z~&ISP5`d|43Su50Os*T_q}b8t`3;S$9)z0_H>j8-Ua&&@Tas
zPt?plQrF$P>Orud3fKg=B;6ML$RgeY=<1ZjA3=ZZV+Xyvf=4L0{vYXkB>g&ck54eZ
z2IwkA!F8Id&zJVcq+V{4MKlAD8U#H};$+?-@$(9e=*2&Egh%FP(mYh^Q(WxHjjlH3
zVW+z(H5vT_AOt`v1^PD<*WHLI$TxtQ>gk4V=60NP`xW#v%74wLI{fag;Hn>=D)fcG
zf0X7sQm^`%MRW(m17-tA?UTCd&soqKPt)wXN?o-lJW<l8L0<|u1*rKs))D|C0Hiia
z{hHL7h)=2Mj<gUhOfk=t_^%4>iGu5XkpA`;&i?drG3#y<Oz86 at ZLeZ?9e9Nqnx8&W
zA1QU+udiIpI{n}DGx)FQmyY;02A(F(+0d)abl9aze6G~@D0Z&l{3-3qe&zUIbrax1
z|NlC>6L6oZ_J91JbI6dHlFU=4$dH7}kfab&LX at FFC?!*bNJNw=b23E;WiDi at Ol8Vc
zrpQ=Hlp=}WYj^g!Z0FJQeE<J_UH4hTUVH7e?%{pkYwi8nr&m}$AWc2uKd-5qq^@g{
za?tm5b-RQ5kqOrq3e&{<)(*=rCaE8nq#U&0pze2+f0X|ijb1>(@mZJ#`9h-;>KaKq
zg!!O;X(XR(jJ;wM9Bab#pMpPUm2;1^KZgG8c>Z6`y`QB1P*_eqE}^edVH)&XKg>TP
zT^p%CC7<G*g!YZYG-%&9k`KyBj}M){h;A95aBWTLG_*M^C$`V`?$zg2EmA)$%+HS0
z1=nv6%kdN9Vii#n)B`0R!{t|?11Q<V%k?)#@>L`GXCwKbkCDosMe2T$zkbr?e(nwP
zn<90I_YTruBK4&vU%oEdCTYI;|7bTLa{hby+o#xvK*2FNOxH=zp^WccdC#HB%fh-x
zrh3keW}@KODvh6(kS`Xdb)^H)1hf{NM8T2ueR~vWJqnI9(u&g)@?)hxhWUR^`V%+9
zb4L^$uZ3xlpBv`W&rCQM)FmDjuTqzIuGznwdo!&6Fmisoe98|J`Y$T2ALbML3ewNQ
zx}U-{%Peab6dYs2^q+!1>ywm&`m;&u9-4jSd|p#tjP`}~Ddxn*%A(*HDqRxhw}xp@
zU-!c+`)C!Gha{;F+9n?7|I4|=HpM<-Cn$Qn5tdhk>Ce(@=6dG`1;;e$FJV4<UG{ki
z=WB;)^xTVK-8<4%NzNZpPBs7X81jVq`qFM_DEd9DyMMvub}b_L#Cr`7>y}B6ql^pb
zA_|UrVVc;sXIOqaNqyq^#B^!o{0aHoi!P5Lu}#e+b<c+7fnmBV$@#?V{w+QEU)twb
zeC7R{gyrr@>fcUMzS_MOYO^b7_i;j>#lp0<v~8FVt{WH0NBcP#sW1JBbpx7%u6Arx
z|L4D)3)*K`a^-bZBITa)U!zn at t$)z}I$B2B3<~ofM(Tp=w<jsbmL>FCK>ARa?-iz#
zrC*2n#Cso$lnZ|fOHk6IgSshU{pZq)VZQY8|7_d%Ds at 4B3)Nq<;y>F5=N<{``$#wb
zOPiow;*oJBAAu5&fnk1Wq%Ju3XQZ5ORa~qK+KB$``1>m7GOwmXC^&{mKMC_e`A{TZ
z{xf=mf at 7fcBeWwd$9;bJp2g+sqxNWYSpSLiAj<f~<#zvc6#gk1)<2iz{3_+|lhg&5
z+_C1$ei|r`i_{&Izh&*^HjhQ}!S%f(<@Y1`E%I5{dH#VCkB;(_(Z`Xxxb>IMC$>wP
z-V|w5Gm?+C>k!tzo#g!IVfpS2-Yr8(kAY#`q%d6{X_N2E%k67K@`-)CtZw#I>UV^7
zMZdayeQ-_VNO at i)ADsI>Njazsjv^cFjiBI|6Q=v6DK;h4-5#d3!!&5uDUuJ$qm);o
z6G`fWbN_#i^qUjzT{=vghiPJ8eUg+HM#}pl`IK9%RZ(*k9KFLdv7f2RYr?vdVVYrU
zLffECg)rYNQkQsbkoLJs{oJtb&m`vxe(nE;q7f)KmWSy-h49ZW>S}JYmw*PN;CL at g
zgZw`EGpOKpeWBoJFC8D||Ech2L8QDz{xmAEBcXleFimWmn062Ahepot3iGETbvNzA
zPxLBEJQm8Q*mb%5P$b_Wk`LOCO;Qf(PK0&w-`Jl=9Z+zj`ZgiW9j5<OhJV_t8ycx!
z8RoO>zC4a-`#Zz>wqZJ6dMwg5_a5&hqQs-6{M+a#x?!*VUX*xzE}wnh<?`L~Bha!)
zU1HlHJ at GH~(Ki1ppJ9K({mM$4pt)f=xbDkHKHAR(^@YESi#>o6k6w}d4Ee9opXlZT
zm)itwdnYN+PEroq?2OhOOt}8mFb&Svl%I~)qSGk*_X%yPO53A1!gA1dUL+rse^I{s
zkiB~pJ>E=G-lBZn;e<B#glW+JnJ_;$QWw-`IAX3S at pvqfPpk{lEn)pRY1yNf+b6c^
z71k}g%DEq}QkVHyLLWuLG_jwg>4TB;&&Ussl%s7IssAoKm-={ItPFY-{oBzeJa;%r
zn>0TpT+=m7H-u@>PvsvI&NT?rpsu(4NHi-_7u5f+W54zpe!4uq((+9s<;3fIUZrk+
zSeNod!u3t1{m_SDIq}-7rMvzQZG!7={`vCQ68mX-mAb at pLHg?dI3Kjx8EKRI<mG$R
zjO0f~^1(HU$8TYM&R-I)dm>B|&-Y1Eo)VVVC8 at 7`>hgVqYo83u{gc#xn54X2`Db+f
z=_{|lPq{^;ZkYV)uzWI7pa0h at uM6&7Q(adyDLi*fn)Wv_Ao{oC@$lSRS84N+y4_)Y
ziZj-x=vfpTtHLzM{}{;!<)lZJ- at SW-+M(c>6s8-b--Y?4*97Hj|A>p-f&T4i;oP9e
z`APEY(Jzs at t6iJr?0@!ISzTMS80|%A&t2K3Ql$KZ{F`C<`$&D_y-NL=aBb5t4eEP@
z`2}HmI84)>PiXsim?riSqzkW7cT8QTzdQp*(c`hO+%ZXgv`u1u)K%KdQFkD$&vGH5
z at 0Y@KOqi|?)9=Id#=or*(0 at Bx{>%B<>i3|yi&tJ>TKSns-P}k%dY`Y={}P_dbm?**
z6(jjaBl+OkZee*!r2ex={)b3DXn&*sje0i<j&@-h<R^ytEs?sQK6+di7ayyRI-}s2
z6sC!7c0|f${D<f1Xe$biRLK(3#J172e0Z+zzqIKYseey?Q=}a9(<J$oeYaO0fz~If
zkKQxLf9HJ4Yp%SuaHL#EzH_9Uc>Oy`>ONCGfzqY8vaiJU|0}H&Uf1gX!}X)IU5?VE
zjE~)h5|0PNe3wXF;<=SqsY^T;q=%d at nku2M`e7Q>zZS^{<=v6;U-H#cCtUNCv>%!i
zmUl`ohWX&SQrBJ{=Q#PVBIQ%^8Pi-oAGD7i)tq}Na(;~bu}C>v+W6RAs0B(q`iA+L
z(oK>2#PdO#FC7`9;Mf_a{}lYWCVhOYAiCPoBvL;}etTFx7pC<yTzOr$uskG5{mQU>
zQkp#@UZQ_H8i(iFONWN}ePLQNQ+(`2^xuw;lbp|)IX-p|N_spSsT&#Q*GbQZ`Mg;Y
zt|=d;PlRdE&%j7NX}>{vNs{y5DQCPcKK2|+JeEcBry}{_e6H&+w+qVc!t#hn{TGq^
z{xDx6>y_69*G7+fu5x}-Shq=fE^_{+8{%Uf(Im751;?o{4f5r)CDb*N4hZu>{WAGq
zBjp=zjE_}9 at 1n$GZJ56!`{laCb8jc9TcMmWM?$-b(!OXxSPrf^8p$X25lt`rm-DaX
z{LlN(4(oPEFQEdt{<BTBtJDSeY!j(}RepD*oF+HhMM;kq>PDcsNzQ$voHtKG``g1b
zxVDb`%V;KA6{!!-{gI>`)cvocc3zl+5|5?wKSs(yeY$*?&j;o5%1@&aVg2kR=Qk){
z2<w{UPq?;sm at bhX2=hT-=fZrt0+;VmKFqg>)CFx{SDuUZC8-b21xK=i at v-8l8A^J*
zewDhQ&A~{0>YJ{-?&h#uD at lFZNO@qGUnbojsgD)9vah7$`M;LSM*4X)l25$8o4Sv$
zQvZ#*Vuj;l_oM&Iu|T`sVcQf%uDqsnl5*1io^XB++LNT+-^vdZjgLK#qQ|&Md71oy
zNI7VisaQh$MqwJgHpssb*3Xj`zWK_&8!C58QkV4lpgbYcW^<T77p4V^U)g8SzOlMK
zVf}RJCUi6`XDpG>zE+q9?W0F)^<%?xtNx|UAL_H;@}Kt&`e_=e?-I#R4D%bMe at 5z~
z_x`thp^}&HRbT$qoEeKGzxKI0=@Tw^Dfsl#l;QaFq-QeLqs?CT{>=t!#+}wgrR}vQ
z_wCA5z73Yq|9er6>mc at -=2^oR_O%*Y3-6DM)#~awbrpNJ&3tb at Yh3J`WpS|&@_Wt%
z7dyCpvS!vqaBk`*zc*guH-TUJ-o;k$**$M>c8oqd$Hi`%?|EFuxY)1Pd6wdvR)=o)
z8&%)?89&50M*CiA7rzCZ<Q<#B-bJ`3KGvX!cbqfE#on?;Z#LKa1H*i)i=J#8XN_px
zv1Ggb;w`=<QOx%%8d!HG_q?o!cS#%gKJQb0J81uIcU9k&@O`6HU-|8}zPjsoV`txv
z@~xQP9`^k`c7AxH`8{DDvzzZ|trTaY4~(m{>j%(_iR78Nspr|on2W!wY0oV~R^JxT
zU%@?bv6Auyw|HJW4RyCy`n~U_juktw!C&{q#Y*5|!+G8fk7q-x;$qK#;#)P7?Gd)|
z&OLdQ)pp1o_L%J<X8Xpzdvo8L`z|i_*B#pR^PB(IJ-a~V`g{NJ4c~I}&8cLoJ(pW<
zPpqYHvEbL3!FV#ro)(_B!=IDBN!DbIcV;qp7F*K3!ArguGsgb_H=d4SjJqt?26yn>
zlD&R8#djuOii>@YcisN7pIX7b>brEMt>1(sv+w)0|NUzZVoNEq!@qV<dB64#?;2g>
zo6(<ocet9lt?-<sg5Rn7Cf7s8(<M2dTTOq1ykFwpEpvL`?iTB|>GoV|`aZ=@?=HM$
zPolW at D>~8{^PRZMH&ojB{Se*{ryD)%+5>n8uNTsbsowcK<{O=3?X%|a?4qJ`+K<WX
zd7d#WuI_*4Y<0~9&lJe$`8?i{yVo8pzSn++?&59zb at pabdyYe<Ux-DPK8nY5^2 at ip
zzdna=q}wZ(dLM=E_ulT?wDwdUHs2xr>4$F at b+%uX#eL(O_%^69t}0-kVlQ2L(YGS$
z_=LvBAih1_#CHT<@XgN$$##5PtaBUxuW5NK_EnC!*jIPQ#V&k=Kk=TU<KG0fm~3+J
zf5D8auV;sBXrlUD^f3pXwZo%ThkU2j_4ll!SA1MG<4w<=PmM4~G4i#U*iZ_7d~#gu
z^|j=+0I!vc-Ac#j+dmIvazk9K%_;X5SG<!&Kjp-C#<hSxy^<SWQ^v;*!uX|&+1!(`
zfh`_qGuI}I#bz4c=|yz#OV7s0dM$ex^QZ4U-){f<h-Y~2Ghd9bps)W`Qk|W_ncVo3
z>KpqD_<x2Dz1h$hdeX=1{idyy-%8mZ+BDJs6ET*!)bX+R*+Gj=>@~f3L;pX+mj_#W
z4!jiR(CJ%@zxOhH!ta at F@wS%VOu(%Eedy6p__fJ*!%q4i(7o9pEXp~74BmF1iSUP9
z2E7d1Qp21h_TKgLVlK~WhQ`HS!`s7`@Iu>1UyO_0`<eCQ`^xs7*OPs2ZC<(4Z|w8?
zKZ!GZBVjf at +C(23`EG&!-rwLpZSCc6 at GUIg!fVh2zuEf;*WWWljF*m0v%di=+|yWM
z!^mozytRp;#CELod&*~hcUK(LXoqM2yV=Kic-D`umKGDg4P(Z7e-cK_{}@hG*S3)N
z{a{O*$NXQ(uKw at jbLI&Tle5{``(cFJWM;3`=)tsC*eV&lbC+iWpBj_($?IESYIgUg
zg9rbPi at m7L3svxsE^bQ+Kgi)Hx>n|M&*1G%4`hQUAF$U0S0BACE|#~2J<}52+sGM<
z<vr;C;gL`6&1CQ)-aPNOnNvLPupj>VLu`5p9^l`mJG~oD=0mRWO`6Zy_g&u6t!qrh
z$qX)TPb>DJZ(GOkJ+<K?9v->b|Il*3J{jo}92=6xdj;-yCtE#2UYlpZ(m8%}D7G(`
z&9mP0ak2Et;$y>7vcvp-uLFn6je`?#c{JYiobOxgbnBS&Me({Ty`4DR`{g&nAN+gq
zRXAC|x;hpgtB)u3w)x%iclN>QbN`==Gx*lu7k<ZbH~lu=HBZOI`hJbKC*xx8ov~Mi
zKfP<w$7=qc)W>j^UTnPq4p)SgbfzU<o*QQke~<UPo5scRkl#wOYh_*YhxOPK=5V;D
z=a1wUV?ULwy^iMbyPx;{W|NIi7zQ)0W3!)-V|w4y6XWE(kKgFz`w8Xs16Ni&j33*5
z2cF*;-NpUQ at if`YAd3~|-D)5iyZ0j*V9^A)sh at LkeusF%-1qwi4}E;p7>7LMTY)|3
zQyDVjb4wl*3*bxn<M=k(+-~vv>>BX%FMPGeD9w*{+lIf=&SX;~r*B4#@cdSJ+&+2@
zV?M?6aXaZ(2V>mjx!F8eL1z8y!8!apMK^NMlLph`VlU at nQw4qVd=>1Q#lJ~M())Jw
z{q at 59#%kZ)WviVZr}x*!$BH~I)_f6`@@EZU)g)>9PWsO!u8?M-mrr#Scf5cv%5zs}
zV;;@e^`B&3xtMqJF2%*F(CM^!>9u>`FoT^Qhj;P*uR${UR+&xIp%3U~^86L8md{Z`
z97_h98nOdMU9tlC^S^gq>)SZ=`&YF76?%au^U!A{^nFV#cAGi2Uf}zw-}tQ!8a|Vc
z`+&WF%MU&p7h9SS9<3Lb(dGN!^}UF!WQa=A!L=woOzZ>)vYa=z>*()R*dl+5&b7YC
zr(L2CZ0H&ow5YeZ;#K;Uhp&dQUHGYY`Hq^q==*m3tm3(XIrOsD=m^J3>9@!0VyVUM
zuWmV72#c5S$>rH%EBZgS2>l|5Wa;8#xA!1J^0 at SsnBiV{FTW2?9EB?{xAePS<@PbY
zzBC;`>0oQ$J$win&JOaO5F59R#j21&o$PQL-M`1X(ZApky5lA>EE*tRRLr at 35)7K`
z85ta1(N4^Us!Z@(TU3UuQ}b*4+0&}r{094Ogs+93 at m*`WQt5A42Cu8qhb(mQgADu*
z{*LTRe)_$)s^|2-d)FAYzj_B*(edKq>I?d<cMX1=^gm}d$6^nY;gY-9<3`Wwi;J1?
z;oX|_bH90tf2zacO8nyQUwbB-5wFZYFYHLM%=<@Tqf^RR(;8bmd&<Y|)4}rf?q3ey
z%%iaT&wiiZ&&(IE5hLUAoAN!=@cE})H`6=hlgaN8Km7su4p;Z7>*&Y~X@~FFJ-NOM
zZ@$vc<IC9Pr{*(VY-=6|$!aEBd0?Y>qB>tahy5DU&XMB8RMtsN#en3tM84f&@66X1
z%QlO}S{U2icrsKzb93*%!pZDCymN_n4e8RN7h$n66 at H4(XFH4J+tI%`*fjP5=SGQ@
z<PXvDci~pXqI}6gJelhMlc$Q0{q{Sod(`hA#RXqyH5S*OX^G!rm(?(F2>Df`e=Xp~
zXYk-7`Mu8dyx`p^zT=|wuQxsO#E<JLvF+;KM_~g)v%u~Kaj_p7!-8XcBRs2P-gg;$
zXJZ<0AOAgujMzp!a(E&SJb=yLF60}Rilv$x$0G02yZ*-A^szlX6OU1!*mORw+d6Sa
zW-%`;KU-SdnF0oqSNq-GEgdhuT!J4dVeDg`nI#v)W+V4!Vf%IVA<bc>y~T>`Y)*0e
zr4JYr9 at SW_y|L_mNPPdfeIa$_AE9HVU^H1xai4CZ^mV=Qlp)85#Wf54#-)IH3~;W5
z*si4Y2|XP%Ok4-o($S>_)!1Ea|BHLRc==v3!jH$#^5H1$-(o#9gB~_7 at 7q_E#MzZS
zlP*K2ZuP#%9maj9=i49S>nGNOE476Kt;sEy>nHpL>o3s9U&V{R(Vuhd{7?Mb=e>V6
z(d96_JYp^{iFxVesiWe%isS(c3jAzOs$VRYH=pN{?6clzubQ^^t_mDm&1V1Z1M_cy
zr^emCmvQCOFS$+V&5m!Q+wf*yRX(qVc>8|;yZAUgewClkA&&dOJJkGK%b(fyAJ$)I
z+22Zjn9b&`i%0ZnQ4`;VZ7SaTgr2m(6TUC^D0sJkT~@O;(#M{-_*mWHzIBxh|3>qr
zH`ATXaJeIyrxtrp!*g=$!(K9<6DxF&#WrRz-dXIGESEH~cDu-jTc=c<BZkT09kcoH
z9X1T$UyIP)ae47=neWNcohq$;4*+JbF9LhW{ndN$(3rQ`Cul{6d+_Qre0YdH{sDWt
z|H%Kic5-U(()=jy!rO{Nz56MSx#0nGd{^Av(L0l5{Bu3_B93?xezYN at r90ViU@v?_
z+FoLwo_Lr{y!$rntq7Z8!yo8V=Thc|MU;O9Je)<>ZlrT*v(SOP at PK|jFV<@QnQKe<
zKCH1l|DrW#dKfg3+}T2n at 7X~iy7&StN?}bk#s5Z4E1r6f?|@l5|M34(hREY at eKAJ7
zc`OkxJPD_^wx;jnVWW1Fs>1Wi^cer at jfaJ6J-=LPT&ww8diM7=eLu!F7UNw9vEOU@
zoN7(Gl|GX9A~u``e^T}k2WI4ZX45rz^B37)B>Q6b8s8xLev`IOz(2CcF$orC^8P0s
zz8|0S&a+Ny?p?Lt*v<$s(<|bomi9d0>&tCq~`MFZ6qxu5aWY-E*upXqJ5Ov0e?t
z_Qo?-yKmFLO8pE at 1*7k?4^dC7%a=TLNqjR*tP_lnU*5LLI&ZQ#feud{!}hG*R*QK~
z)2V9Kkb7sc<7<uUI1J$PX27Ce`SHDmd+g?yUiLkXC-Ix?OS(SwJT^?PdK|T0JIycl
z;iq8HvTOK2`qJz!nA*tm`4if`X>aHh{28ciLHflWDj3^`?BUI<+J8t+576UU^w?fQ
z%DynLq3h}8?*rLsC;!Vf4ZEB!ZfQj}_pyOSFu9-jN}n_I*@iwBgM+g^H0C|t8*GKo
z{N4dra4g<<*hrr^{t1>Y=`Uvd#s60R)*j9f=Rc;?wa8;MKk*&?`ayi$3(jufX9loa
zb~qUCrZ4k-#cJLS{svFG&|PCok;{5*wKzbGa{YR1`=`A>Ztne`5$inylh3n*6 at KRl
zKN_*w&D-I|4!Y(1W9TM&G9K+^4~5?lJK|TppYa1fOTH#9m|;%>Wx~@2s5u#b#s({*
z$3}Q}<w5J<f^6)5ylV+N at NE+Mif-2J>D$uu>o;_XJ`aA}^~dP~yBOHQIv20kx~AfL
zVx1rSp6mfwUn&;+5Z$WpS?EM>u}x;{Uien>D>8bV?OdXxFW at 15E;hFA;+Row#hBah
z^b2u5pZVl@<Df at 7#``{1I&l>r)06K!3}1?{(_xkPmY2oLc=^m;_$<xa4xXp>{@qEj
zDP7z~=eq7f->`?T?M0m9SLsycKjGiE<Y9i<Pw`#G|88ftIn^4HT=#ql|6%b;?N;$W
z*JOm-Y;j6`v3pbd7qBH)7kE#n@?Xd2UoQ^IZLYV#r!vZg{Ljx~vDh&(NJ|DC`kEWM
zC9QE?N47Uxmz5N6FBhk+CwF!_{E)RmIqNp_8u<uW!ii3e#nZ;o`z7D6H`WGa at r++=
z_7K}@Y(4Oc{{Mu<^fV>>Y|RF0k=^}m>}frZ$Ipp1y1+8}F=+_?-(kP8I=(fxM&utd
zWaB at I@;@c4CG>UtoH$8ehr}c4GTA$wCboio{l&k{$!{hcn|y;c=>qY<3-mmNwLT23
zS_Q7VE-iVS9S+CLf5}>Vtv8Fc=<O%&xA-BkmVO!xvL7?bdy?>P+D`t7uUyLp#?CkA
z`qrsw{3dR)*!pgGd_>%S0=9k6hUiyb^BQ1YwL0Tn9zL#sv51#8u(^16*P^5E!RMv7
zrNt*}#F at X*jlbE<M`Cl>a^Ma8f?IvF!Muy?c9r|g#HSDZ7Q8mQ!0)$b&~diAQ2my2
z)&gRrEpyr8J~o&e4$TusKSF-S{a0S`&|Bi1=4|0v@#iXd1>;iYr?d2-+bQdsB4jbz
zIPHUMDeAXoH<INp`nQAZ#cg*LbDtH)*Nlz)gvVWt2cBLi3==<vSC5M!XIaDC$xq@#
zj=RZl3>=geD8j~!?c at S7Hm)NV$mMT%0q6Rjg#+wh77QHGO`J^svt)sLb;KD at dC#gm
zo2kX0nfIscb_ at QtF2Q!p{U^FUiVkG4N7RtcjH3UojpZq_x!oAE4JIe|?GA^FlU0$G
zbQbkn9gEGTqkZtL-7#~875P3RdwMqIG1zB}mFYnt`DHJO$2;IF+iUuzb<&OYu+EBQ
z*O=q<H~>cmEySVMlH(Ts7q3^qsbgK)0e{z$Uaa}ndXx`()%ERH!&TJfbK at H#)}+g=
zJ6cE05{n$AgJOw2pRq;yJ{JANK9?KcnzVSo9HyM6&vawZtNiTY7-z`;vBM9)BfmcU
z6<x3St$qAq-u<T|1$)EZ7`!;ZcaZ18LgHlmN?FHQ at 8bFKFW9MmGqc~S{BFl3x+I$i
z^4b4wi$8305&0~HKZEG)&X??ebmPx1(V0vz{TBO4pIXn8$-0{CWN%z7FCDCtihZ}E
zr{wYA4)Iby`oX8Yv6z2qYYy}%E3CY;KUveQ!rh(EYCqiA_M6vecs6x{YstU=V0(}D
zuSU%gr(H50{HbHyv)9tWJH&_N{3Sl*a7|q-Nma)hxq!W=H^scJZJkOiodzFk*rU#m
zce~lV`Tj`XN?u^clYHk<+oPrVfWO4;->_x6S1={~B(t7mzS#Uer<-%WV0Uoz*(cb#
z at r<Y^mZBe}e<o{lN%a8C8$gdMkZpE&{gIe*rTB(!Ezd$P$*wV3cW7-tptk#qVe+)M
zr#l?Z#Ia9wWCq*CqekS=8ZSGKWQ)1P)Me=5BKn%2T=<L|K4vp#%(D?5G_Wpv)LOKv
zSmkGN6FyhMmjd}<O=ofn>@%f(yY2kwNBD4?dsH<ZI&z#|+?)dsv>V=^-Hxa0cy*j?
zlhcj!+xX|aQgT|uuPk0ArroUn=6qmT>&QB=D-NC<60>x+U%{8WFBYsp=0krMCtnX2
z;7-wHe8<-?d<y at _C--23N9b-xI+NqH{cKoP{bAU*$v)Tt=kPoe{vKg_58ewW_>ODx
zh!OE?;*BuHe1 at loOU|7bYo5=uANIZD=J?p?8gwW(+ggu at Y`OC^KI#lVuoZ5w?;{=Q
zEbMPhCa?U;kK)01Y@;9jYsQW`vE`B<h-KJOw*$<4DSfrZF34|gPvKhoKviMecQ?3(
z?NzYmc-J*meu0hY;D~E>z@!~dis=@LCkL_**Y?n^Q7v&nKD at nEOzeIqU{k5N;^!)C
zpMN;|30Xf$kMt9dznk!`)j&G^jWz#sWS7Q#9<>k9PCWmWHe^@T{hI#aJ~jCZG4zFB
z;o(v|VTU<?6z{>H+_xJi{iuJ?9$#|0+Jw;J-8%#PnuI^FWjx+L1|NTRue4L`x!q4s
zQroMB;mb<G!t!k4L8(4kue1+kpXrhL_<+}^&WMLHiz$!7{6^ZFL(?Vf^)bF1|DXHN
zoY-%#iPj69Jcs;}-8=^qhkBNE90m^JqZYuUuf(ZrcIqh4_$GSZKn^QDH{PfC9{pX^
zcTsDo+V|T#qz^f^N at wE<+dXBTFFy}23iv;%o%kR8_;j}Y&(ZGpv)C8rKKwe};p2<5
zqaE$7t4onDy)T6yg^lU0p7fQix9OrCTbT4QJ;vvhfy`UD|7+qKcCZRYJl6}}z6k5h
z`3*Kz6F)xv#@^aEz5>23Un8DVpO3GZg#WR&ct(czyZ>VTGXs7;*NtwyY;UU~T{8Eo
z=94m;wayFThx5)Q7eg(y2Rt60!QGX2;M);#VP2T at VqB~WJxGZ^ZysYK?vau_b6sx?
zSz$^JR9Q at Om)MTI*P=_GyyEv!C-m*Uz3mU(y_=o27MqK2*EN8v`SDXcQDwUKZed*m
z*qh^RdUuUD_8vOX%=5d9FuV{R>=Q#h&QHO<v&P(Xh1hWl9k?idI)I-ah(p%}`@&+J
zlzek~aStAh%NrjX$p#<b$I84D%+uI=Ter=!@4&u(ddoh?6Z9RAkG%rh=~q_$WY<rd
zT723g_8qi6THBt)UhyseS|XWyJs3PEhigmeL3eQ~xz5``wlJ?GdpiA=c#K|^#jDAy
z=uRH`Kv&}EMyZDE{uz6E_B5NnWBhb^>>fP6+j?_}80rV{`F8qTfp3C;uZ+N}H^lEb
z`A>2lXIvS-i^cNN;gjb0`T~0oKZ$j6!VK at 7U6iiD(|-7y#XYl&OAgTep2pqkG&{wM
zp`HuO|C=6ZU*U89d=EQ317FGb1S~t$%yT4qKL1_3YDwQKneY4fMGqP^H{SL3U7FB=
zi}r0Zc>Xh4%$kXfeJloH3unx8&`I$^IeS0s<e}Ht32H&-7o+!saiTIQ$QpG{Wi5%8
z7UvJp{$bWd!>wu0ijU5TA>QP3(O)C&PmJ;$6TV$Sx8xPOqdWzz8BwSE;57QHsrYcN
z-=>n&tOoqrG(73fx4aCSwpfFA^#4 at xVix^sbcml6k9IF<&6kV~ZM1)b*X8~c2bUL%
z47P{C9>3T^NAT{tnQRtM_6(q_-{EH;7^VF{KDR(>`k}7&Ua>LSx0rq5X+t(L9j&hq
zlYX<WR|?j`l1JEEr>FU at y7n3B<H48wL0NI%V`8x6?tPoR-V^M59skR37Ipol%GR*(
z`&ao-tMF^rvy+Fd-M^-Pv*`}ZzMdZCxInj>@RhfU;q3Q!{nQ?K9oXsqH^Io%mB`|-
zwJn_6l8+vkXZ`oB|HTyRz7^Nq1#42p$A-hF&Ga=_%$@^%Z3z#`J}rJtC$29{$Msi(
zZC1`f*YtOymTQ;NpEBz2WSgbMdN4K1c^H(!`#$vdjn}LrufwB$?CTnsUWBjTAV%oL
z29EOm_}l=lJ&=}cx?8i7?bp5dQ~jsA4Hj7E91$B8xk;bqStmQ0-b3Hu+`(_i*xb6M
zwLXFmx%uzL at FO2ADE^AQ$_s3tL%PRUCLC7o5$uz|EwVpleox$CT-(`t8*BaK at EoRP
z*(RQ(`z7ep@<+tCZ1~O=-YcL7b at 01WXYtp|V(0E+|9;ke at L(#QO`T>O at GQ5!w>4sS
zcsPp8vV3K)p`Pc7Q^j}g-^Sc?mJ@@byKje!i{NYxSoxFv6&Tg`2&~!c84)?{{Q at 3l
zvIopBl{Vh^rgR+s{c?c6?@C6_H8^ekG055ne;yZ4G^Q8xva_Wh_=_H7KE}G>S}`^p
zSu&RHmB4#?|L`8ZygeMjyG!)A;Pc)S;A?(d3vZ2o!CzwZw_#=x{(GZ1>#Tm*K?$+Y
z at R#g+(CMQva_UHXc*ZvTIX>VLJbsUzkk{(pJ&zl$Z at igg{PFlX5)Y at grmKC;t6MCV
ztvCMC{nZQb>=T%DC;KMbLM{2YC#@aZT6gI8la68?ayvf<Ha|d4WIcJb`_uOhm9?`5
zucE(?i?Na4VL>zeSWai^@?~e}<uLz`xgh(;&)I3n9^WS5%R3XrHWlol@?+n_*6MV*
zNnv{jCG1U*^QE4~*a}Xax3BT8b>9u%5BP{4v8}e-*u}lxdH>j&qK>(qaBp_oJtd#a
zH at w!0k8*w0H27VVKQQLn<HZlt?9DCrOnHU9<?Z->5=PLmCT#i-*i;oyHVpS3g}IzJ
z=j5yGKdr~ZgT_Y&XJGI%d&K7KvNM}(#BL|Tx^d$?FWDp>WJk|UXLqy32QaioP5th$
zMkJH1W$6}uoY02+_?aFD;bM3G{{=e6PLA-=cTVDOU_%~!+4rXSnOzJqpFhgs(_j3<
zUOu0n$-<_(-j2udbThv_(cG{gKi^b7F7`C#KfA$NN_^cJ_LqQTed*xs<X&P0o`23>
zxAJlHIM)&PcfJ4~6{G)Ks#$y84+re8W+u~TN?Hd!g2zqB*?KbV9C3XYdskEVuIb_g
zb+hzcDv#LWX=7-^#;t*V&PT8CGd&;EmK_8yV$HePJYng}i^S0x=#lFmaIZ5z!F|3Y
z$A0`%PR1^>k#QXTxzHP)#9Q0{Y5$6h`ZY2B9OV5hdsTN~9$Ui8IdtP<dNE{~pe)XK
z%ouZ#<FoeT>DPk6Vq(-_h;`E#>&>xj1Z5z%m(|_yAiwv%c(MkJCZC}z+2Io~@+EUz
zYc84LEt$`l1RLpi%^UcER`A+272xg0ah^H92V2hAi`+st>DsKH`NCcJBF>yw+}@?R
zWO#^9yg&z6i!(=g at 9GhLX_n_Z6SRZxJ(|+-xoi%8b>yoWG~lzQk`3M!?n#eMiv?a`
z*A?Lq8(Ff34ZmZ}qo0ZTsrmpvv6kPr$MYK7c$lwiGDG}$Kb{N_tL<dd^y#~-)+VjR
zJDJ7G<ksLr{!&`=F8g9^ww~DWJ9Y1yYcu^<ti%S<SM$YBd|(ZBzXA3S<R1>W=OH#Y
z(RhzOWK6KBc+el3M?RPK+DqJLZQBcOyeeew5BCP~sdL%yQh4EBcd+aA at Zd)Gt24^;
z8QA>&Q+R>rBkr}={s(@dI_<^E{6jfoZHoU>Qdvv%BcG#mge@%Dh39Ov5`G`KNayh?
z53EQ{j%7=+yT0tUi08RC!v^EoNA9m*#}~u9vTP at FbC|G*t~A8EQ}$GEv5qNhFGqT(
zYgS8Z*Wf!!viC;*?`ul-k5a>dC8z~k9E-|KwN^dHcE=jSVmixS+sv?^^t?XFe#=O@
zB%V37#d`Du at mOhlNd3e-#qhGMXKMrbx at KaR0`^7G;;%fT%OOtE=TQ7?#jY~BZ_Zj`
z{_!xMJf_o~-gD{HgVyq}WXvs|d$XMyL+R`>F%+J+9mWQ35~qJ at -{?`}Lrv*zn{#{`
zYHHjiK1FzV7ax+hrm=0dhQhnA=yi!N#M^MIq-$Cq@@&yqe>+8Q*+G$C=~@}_XkYtD
z#{6(v>v^`(1%@S;uT at RlQrj3{#wszwXIbdl5^?ELdoc2I$zdxDxRs9Nd5diE<wrKY
z;2FH^W1V#)S;MKW<>@h;dF~}^$nWhb;#G#vttq;iOHuk`FQOz_G{4pwxCk754PLW}
z`efhbTeh2$FT57s6ysZ6e at VWTwcB9!u&_S44!|qCXw|}X#&Ho3E8QX1C7-u8(v5od
zS4yyz3;1&lePpbu)c;^ydH%)|_WFYQr}3*(W^q#{&w}LN!K-QFy$x`;)^0H;8y#QB
zZv&3QjIZ(k2hZiqwPm)r*h)GyU%KU}82JtQzK}k%mycF>_Ah_!TWq&F+*t$*r7zOi
z>xX!c<&ZT4-rOc%|6{)GlJ!_q`Ym0joNlBsY=p0$7~f8E+-a>qKkL=Du8_7(j=%2n
zUM)B-9eL69_8+nu_k#QQ#CyFP_b{B+XVonDG0DE0e)_y=4I@@g-pF_+TKg5U?s9H#
zCw}jHvEmMT{R at BjIR3uvJ(pmff8x7*xe?-zbe{8?+j6>EFui?7bG)8Sr^egy(sg^R
z`_Iy&Zk{KfgZE at t#eLs;P~5YN?!lLtcX-F^PWP=~ZZEqZy`90I)yL;$sp04gc=QuL
zI>mTk+UDQHEOg^~KJq#8=v$Fop5RyHTi+c#XT`@oa0xF9<MUI-k#;X%hmYg=whEq`
zmMd%z?RNP15dGBuw>ia~dGPxe_L7?aK4s4y at 3!3r^AFj#DJKr8DGtajj$Z<YVAzax
zczeVeOny%Vb`OK^yN6GF$sC at u7t_JIt~*`B$A*W=YmFHGGxyBv9kv_Au<`@C+CyAR
z-)F&IJSw$HoYBBIPrw4_zctRGhv`3iczp`ISZ9rcS4X7Zo^-Ac{<4La$+q4iSob;|
zL>1uoieb*v>9zDG)o^j{1^mU^b<*C-jbKH+Tj3h{);9Nk%hY{tOjYcijf0uiz`Nu(
znCGgJ?)f_W%WKZ;t at 24R8M%K!UX$wB_j_EdMt_UG2wTlPpE>n4-;Zt+Q;nb(bG+w8
z78g?R-TM7<H~B91KTyo~z5D6&NHVlGZ0Z at _t~uf+>FqyyR~4U%-C)g^U4Q&m+6geD
zvb}2MABXTo_rQr)U_DzJbb=iWwobpDjb^h>eVB}4?fp0M>td=7-T0<=*-#<tmHvDN
zJ%59K_d88)XT(hUxzV_0CbK8noBiY4=}h9Z=6Hl}#Z&RWFlYZ`Y^kmo at H)PjF3oJr
z-#uxM8Sfs&r+LrAX|k+AHp%33z7Kn5(t*jw+lu}75{tpwQE%h%qt?t@;R5~HI8BU`
z&9h_Am2aPJt;C+1m~X{r=^=g2r0qpIuz0KeGI(A8ocW;b#yi*=CdPMcFy7B^qO%Rf
z7Vh<G20EBtykEomAeH%!<wpm2|D%Al(o^smug=$XjrkU)6B*cai;C9No!F#4zv#lh
z&V<_w%$*<T(q5bir;n|{>*etDC$WZf6Dq$VSW9 at n6{fG%*FkBjFRUq0W4g8EChNxg
z;H|V38Kf-iUE*Kq=y83-xmJ1!)rF@$$n7_CZ^bsV!==V(2HFv4PX{({6z2}2FE5Sc
zXQX>kIXaVaJ^xtLnrxu8gmfnQ9d%e~FCiCODJ$NQ{(;)(7Rz?Drli-stk3p5$PduB
z`1;0xvOQ#NjZX*gWO5OB?q0=FeY6o4%%E3``OEXto3e{R(X++vx6TkZy(T`xw=QTA
z>ODp%O?Ew2 at lDd{DC>LnaM)3~+vuy9<uU1N=y$Z|4dT3)pW6m|rOQ$N8uq>(rmNN*
zJJ?yhgW at 6>^Dvr^{?20UO;^s}FK&>gWrt(Xy&sD)=;gKP#4Y at H!@01g6MylC^|O9I
zhEHwE;ng;A=o<I<gw1JR{j4}ShwI3sm9`U_dB(byPlY|{=i5I<)8(s@%dM>uJe~>9
z*N?)lC)oRw#&jK=yWToieuVy8XB6Y6vrmRfv!5EMK3TnmM#~>cW-qIPc#0p}hnK(Z
za<6a2 at Z!~Jtvqi;ujr#eChOW~D9sRY9lzef+GR7!m!BS{wa<YXd}!|t{U*Ptk-bnl
zIt*?6#oh#d=cBJV-{Du`)ZOsvh5gnB%kUSC_<#>Y at 5wi2Cnf1(b<}o%^~`&G$y9Ov
zJebd(W}_+maFvC04rR3`e%}UqjlS9JIrX1-a~?i+X4@&?J6alJYjinNO6#0^==)A~
zj0R7G{eRg{MX4rOPn5Ffj2^?A9&d`v(DBOrCR}bLme}wq+<VJj%wT&2b?s@=fgjL?
zLG<TMbHV>^?0 at 660Y=)-K4RSHDft8F9eWpT=<j}URP`UlI_PyV%tdsv3>z at ljp!_W
z%yA!|hHmL(9n+3&ydW;jZv1fhPxLD6DGpCI=P~!Z)`xgfeTRC~f2Z}ri}107{@o)U
z24+KBez*QR!*Bdf&&eSFv$0r}ZFF{txzU?4IqeS_XC*RQgxajL2RB=JJD;@D-WcE4
z6W#YEy)mXisAv~FI?eW4!x%cezaTv~mhbUrR|8lMI~&sRarvxwv+y6rSE`zIKfU{n
z%sVXR>(F`a- at FO_7J^Hkh>`Jd#I2rRm*wLY!r~+NeUwi<;2Bpjx=X*OY!|!T!oQTH
zFKCu=94_gZ4;c<N&pu?DdLj&zzs{Ubz>K+k=(h3Z^sc!mH!5k5AZFcum|dsgXH&zo
zC)jB_F;{20K{ow!*pHcR&t(&tRb^{;(``07tAJ-&kI)mklyR4R!u{r&i%p`X>%Hf2
zi+iBQM|=MUucn|{p56D)%U<%qS8XQ2fT<VktJAX%=6(P at K_BxiCQFp9tasRq?`C5g
zk4_F`D?i7@^4f21i5`ENj-#$A=mFY&N^F1HzQ7P`UOdd5Mtnk#EAd-Z+wu>_{>=!!
zY!<yG*GxO;!Z;X>y2zhpm+4~m(=XbGI^@RqlIaJ}{_Gp{O$O`K9fk`BUt%-;=*=KD
zWIPRz!H3QC;Bo8TK6F|64t}K&Ke?Tcog1&NA$)7Y&gksTbhJW%sh-8$g+4-S(T(Dz
z<ER-vWiA0L##v7rL*F;V-e}`Nct8j5f?+G?@N+}q{V;gq*;4Hf_!e>2`>8!Q#Iy_a
z>aQ>P9OJvmT$97s+RgYR`1B+H{uSMQl{~w^<h$9*bMk5G;^$23wU5MbOO)BkTN~MV
za&k!<-#llky%}&tr=|N2s_4CxbiGQaj4O3AZ!AUbRIyU$n+Fg3?kxfZ)4mp~0&pDv
E4>{!dJ^%m!
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/main.cc b/llvm/test/Transforms/PGOProfile/Inputs/main.cc
deleted file mode 100644
index 91ce87cefbc756..00000000000000
--- a/llvm/test/Transforms/PGOProfile/Inputs/main.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "lib.h"
-
-int main() {
- global_func();
-}
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_icall_prom.profdata
deleted file mode 100644
index 90f4ed31a7a0aa5cdf65aaf3f8316a7c1c2b4b1d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 976
zcmeyLQ&5zjmf6V700xW at 3PDydBiJC;2{b+%R9XN^vp{K995l=V9+*CLC<BdJ&<0Tn
zGY6*6ffwQcbnyq1AvU9nH%LKTh%T<MkR5Cz%sWg_`wysdViiwV$Awj#!4%>Xn0}af
z3wHB@)uW4lsN(~R!~6qtmw_}tR`Ccs?BaJEv5T8IVHdZ at A<oDk_-eDl-wl&bKvMvN
z2G|`84DnIs$%#2Rsi}r#|NsAgf0 at gd3+8B;r=ThsIG_whhF at 2EpPQvjy$wqSFvD^a
zGxN|*ftiMBO7u+Q9G|N?HNsFSm?=4#NqWi2*6~q3P^TGSI1Lv5n1)_e)v!uDly at JN
zQWKy`;-d@=({u8Z5_96yO7oJ-JX$T^=KqoAf_V}aL+H-60P2T{foPa|nB!qCfrT$j
e9%3yl$Y22lbqw4XU#RlQsM;7_pz-1QpbP-R%~baQ
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
deleted file mode 100644
index bc8dc868b3a8eb..00000000000000
--- a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll
+++ /dev/null
@@ -1,36 +0,0 @@
-; ModuleID = 'lib.bc'
-source_filename = "lib.cc"
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
- at calleeAddrs = global [2 x ptr] [ptr @_ZL7callee0v, ptr @_Z7callee1v]
-
-define internal void @_ZL7callee0v() {
- ret void
-}
-
-define void @_Z7callee1v() {
- ret void
-}
-
-define void @_Z11global_funcv() {
-entry:
- br label %for.cond
-
-for.cond: ; preds = %for.body, %entry
- %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
- %cmp = icmp ult i32 %i.0, 5
- br i1 %cmp, label %for.body, label %for.cond.cleanup
-
-for.cond.cleanup: ; preds = %for.cond
- ret void
-
-for.body: ; preds = %for.cond
- %rem = and i32 %i.0, 1
- %idxprom = zext nneg i32 %rem to i64
- %arrayidx = getelementptr inbounds [2 x ptr], ptr @calleeAddrs, i64 0, i64 %idxprom
- %0 = load ptr, ptr %arrayidx
- call void %0()
- %inc = add nuw nsw i32 %i.0, 1
- br label %for.cond
-}
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw
new file mode 100644
index 0000000000000000000000000000000000000000..a046dcd86d58be4aca9cce06f89f5c5d4dabd74b
GIT binary patch
literal 528
zcmZoHO3N=Q$obF700xW at ih+Rz#(>i3d^BkWXQ;q~{}AADJWU{V)&KvS`)0hK70SQ>
zGg$D|W`(~SCZ7PRdViVAmkXvIW}d)Kh<X?wrVqxCo at t!pb5*AXrhf(0KA5}$0sU81
zHLMa3<=qEq6WVr<y#P(W0aX7E%b9R at Gr<f8(!Z|uJ~vC5dK;(>?0yS0{S5@{hxrE=
zZD3q+tGnOG-|x&xPhV4=<TEFIE_wTH>+Ap2*d;l|@R+-#)UxMK)K#AySw8id>U2hi
r{u+VZEIbvrPWzrY!_2 at U&A1HgS_>cvvjgOQMkogsJ}^00c*FPr*G-O(
literal 0
HcmV?d00001
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh b/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
deleted file mode 100644
index 1e2df0185c82af..00000000000000
--- a/llvm/test/Transforms/PGOProfile/Inputs/update_icall_promotion_inputs.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/bash
-
-if [ $# -lt 2 ]; then
- echo "Path to clang and llvm-profdata required!"
- echo "Usage: update_icall_promotion_inputs.sh /path/to/updated/clang /path/to/updated/llvm-profdata"
- exit 1
-else
- CLANG=$1
- LLVMPROFDATA=$2
-fi
-
-# Allows the script to be invoked from other directories.
-OUTDIR=$(dirname $(realpath -s $0))
-
-# Creates trivial header file to expose global_func.
-cat > ${OUTDIR}/lib.h << EOF
-void global_func();
-EOF
-
-# Creates lib.cc. global_func might call one of two indirect callees. One callee
-# has internal linkage and the other has external linkage.
-cat > ${OUTDIR}/lib.cc << EOF
-#include "lib.h"
-
-static void callee0() {}
-void callee1() {}
-
-typedef void (*FPT)();
-FPT calleeAddrs[] = {callee0, callee1};
-
-void global_func() {
- FPT fp = nullptr;
- for (int i = 0; i < 5; i++) {
- fp = calleeAddrs[i % 2];
- fp();
- }
-}
-EOF
-
-# Create main.cc that calls `global_func` in lib.cc
-cat > ${OUTDIR}/main.cc << EOF
-#include "lib.h"
-
-int main() {
- global_func();
-}
-EOF
-
-COMMON_FLAGS="-fuse-ld=lld -O2"
-
-# cd into OUTDIR
-cd ${OUTDIR}
-
-# Generate instrumented binary
-${CLANG} ${COMMON_FLAGS} -fprofile-generate=. lib.h lib.cc main.cc
-# Create raw profiles
-env LLVM_PROFILE_FILE=icall_prom.profraw ./a.out
-# Create indexed profiles
-${LLVMPROFDATA} merge icall_prom.profraw -o thinlto_icall_prom.profdata
-
-# Clean up intermediate files.
-rm a.out
-rm ${OUTDIR}/icall_prom.profraw
-rm ${OUTDIR}/lib.h.pch
-rm ${OUTDIR}/lib.h
-rm ${OUTDIR}/lib.cc
-rm ${OUTDIR}/main.cc
-
-# Go back to original directory
-cd -
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh b/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
new file mode 100755
index 00000000000000..c474c41d0f4c68
--- /dev/null
+++ b/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+if [ $# -lt 1 ]; then
+ echo "Path to clang required!"
+ echo "Usage: update_thinlto_indirect_call_promotion_inputs.sh /path/to/updated/clang"
+ exit 1
+else
+ CLANG=$1
+fi
+
+# Allows the script to be invoked from other directories.
+OUTDIR=$(dirname $(realpath -s $0))
+
+# Creates trivial header file to expose `global_func`.
+cat > ${OUTDIR}/lib.h << EOF
+void global_func();
+EOF
+
+# Creates lib.cc. `global_func`` might call one of two indirect callees. One
+# callee has internal linkage and the other has external linkage.
+cat > ${OUTDIR}/lib.cc << EOF
+#include "lib.h"
+static void callee0() {}
+void callee1() {}
+typedef void (*FPT)();
+FPT calleeAddrs[] = {callee0, callee1};
+void global_func() {
+ FPT fp = nullptr;
+ fp = calleeAddrs[0];
+ fp();
+ fp = calleeAddrs[1];
+ fp();
+}
+EOF
+
+# Create main.cc. Function `main` calls `global_func`.
+cat > ${OUTDIR}/main.cc << EOF
+#include "lib.h"
+int main() {
+ global_func();
+}
+EOF
+
+# cd into OUTDIR
+cd ${OUTDIR}
+
+# Generate instrumented binary
+${CLANG} -fuse-ld=lld -O2 -fprofile-generate=. lib.h lib.cc main.cc
+# Create raw profiles
+env LLVM_PROFILE_FILE=thinlto_indirect_call_promotion.profraw ./a.out
+
+# Clean up intermediate files.
+rm a.out
+rm ${OUTDIR}/lib.h.pch
+rm ${OUTDIR}/lib.h
+rm ${OUTDIR}/lib.cc
+rm ${OUTDIR}/main.cc
+
+# Go back to original directory
+cd -
diff --git a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
index 27fea39ed0a406..3daa7c85dd1990 100644
--- a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
+++ b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
@@ -1,22 +1,31 @@
-; The raw profiles and reduced IR inputs are generated from Inputs/update_icall_promotion_inputs.sh
+; The raw profiles (and reduced IR if needed) could be re-generated (e.g., when
+; there is a profile version bump) from script
+; Inputs/update_thinlto_indirect_call_promotion_inputs.sh
+;
+; The script generates raw profiles. This regression test will convert it to
+; indexed profiles. This way the test exercises code path where a profiled
+; callee address in raw profiles is converted to function hash in index profiles.
-; Do setup work for all below tests: annotate value profiles, generate bitcode and combined index.
-; Explicitly turn off ICP pass in Inputs/thinlto_indirect_call_promotion.ll.
-; This way ICP happens in %t.bc after _Z11global_funcv and two indirect callees are imported.
-; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=%p/Inputs/thinlto_icall_prom.profdata -module-summary %s -o %t.bc
-; RUN: opt -disable-icp -passes=pgo-instr-use -pgo-test-profile-file=%p/Inputs/thinlto_icall_prom.profdata -module-summary %p/Inputs/thinlto_indirect_call_promotion.ll -o %t2.bc
+; Do setup work for all below tests: convert raw profiles to indexed profiles,
+; run profile-use pass, generate bitcode and combined ThinLTO index.
+; Note `pgo-instr-use` pass runs without `pgo-icall-prom` pass. As a result ICP
+; transformation won't happen at test setup time.
+; RUN: llvm-profdata merge %p/Inputs/thinlto_indirect_call_promotion.profraw -o %t.profdata
+; RUN: split-file %s %tdir
+; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -module-summary %tdir/main.ll -o %t.bc
+; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -module-summary %tdir/lib.ll -o %t2.bc
; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
; Test that callee with local linkage has `PGOFuncName` metadata while callee with external doesn't have it.
; RUN: llvm-dis %t2.bc -o - | FileCheck %s --check-prefix=PGOName
-; PGOName: define internal void @_ZL7callee0v() {{.*}} !prof !{{[0-9]+}} !PGOFuncName ![[MD:[0-9]+]] {
; PGOName: define void @_Z7callee1v() {{.*}} !prof !{{[0-9]+}} {
+; PGOName: define internal void @_ZL7callee0v() {{.*}} !prof !{{[0-9]+}} !PGOFuncName ![[MD:[0-9]+]] {
; PGOName: ![[MD]] = !{!"lib.cc;_ZL7callee0v"}
; Tests that both external and internal callees are correctly imported.
; RUN: opt -passes=function-import -summary-file %t3.thinlto.bc %t.bc -o %t4.bc -print-imports 2>&1 | FileCheck %s --check-prefix=IMPORTS
-; IMPORTS: Import _ZL7callee0v.llvm{{.*}}
; IMPORTS: Import _Z7callee1v
+; IMPORTS: Import _ZL7callee0v.llvm{{.*}}
; IMPORTS: Import _Z11global_funcv
; Tests that ICP transformations happen.
@@ -24,22 +33,45 @@
; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S | FileCheck %s --check-prefix=ICALL-PROM --implicit-check-not="!VP"
; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefix=PASS-REMARK
-; PASS-REMARK: Promote indirect call to _ZL7callee0v.llvm.0 with count 3 out of 5
-; PASS-REMARK: Promote indirect call to _Z7callee1v with count 2 out of 2
+; PASS-REMARK: Promote indirect call to _ZL7callee0v.llvm.0 with count 1 out of 1
+; PASS-REMARK: Promote indirect call to _Z7callee1v with count 1 out of 1
+; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ, label %if.false.orig_indirect, !prof [[BRANCH_WEIGHT1:![0-9]+]]
+; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT1]]
+
+; ICALL-PROM: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1, i32 0}
+
+;--- main.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define i32 @main() {
-entry:
- tail call void @_Z11global_funcv()
+ call void @_Z11global_funcv()
ret i32 0
}
declare void @_Z11global_funcv()
-; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ, label %if.false.orig_indirect, !prof [[BRANCH_WEIGHT1:![0-9]+]]
-; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT2:![0-9]+]]
+;--- lib.ll
+source_filename = "lib.cc"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at calleeAddrs = global [2 x ptr] [ptr @_ZL7callee0v, ptr @_Z7callee1v]
+
+define void @_Z7callee1v() {
+ ret void
+}
-; ICALL-PROM: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 3, i32 2}
-; ICALL-PROM: [[BRANCH_WEIGHT2]] = !{!"branch_weights", i32 2, i32 0}
+define internal void @_ZL7callee0v() {
+ ret void
+}
+
+define void @_Z11global_funcv() {
+entry:
+ %0 = load ptr, ptr @calleeAddrs
+ call void %0()
+ %1 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @calleeAddrs, i64 0, i64 1)
+ call void %1()
+ ret void
+}
>From 3409af09aec7f81af7e6e976a774aa945aa7f6ee Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Sat, 9 Dec 2023 00:08:13 -0800
Subject: [PATCH 07/10] resolve feedbacks - Add thinlto indirect-call-promotion
regression test as a compiler-rt test and remove the original IR test. -
`clangxx_pgouse` is added in complier-rt lit config for test use. - In
lib/IR/Globals.cpp, use '+=' operator for previous 'append' calls. - In
llvm/ProfileData/InstrProf.h, update a few function comments. These
comments used to refer to `getPGOFuncName` while the actual name could be
returned by `getPGOFuncName` (clang instrumentation) or `getIRPGOFuncName`
(ir instrumentation).
---
...trprof-thinlto-indirect-call-promotion.cpp | 98 ++++++++++++++++++
compiler-rt/test/profile/lit.cfg.py | 3 +
llvm/include/llvm/ProfileData/InstrProf.h | 26 ++---
llvm/lib/IR/Globals.cpp | 8 +-
.../thinlto_indirect_call_promotion.profraw | Bin 528 -> 0 bytes
..._thinlto_indirect_call_promotion_inputs.sh | 60 -----------
.../thinlto_indirect_call_promotion.ll | 77 --------------
7 files changed, 119 insertions(+), 153 deletions(-)
create mode 100644 compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
delete mode 100644 llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw
delete mode 100755 llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
delete mode 100644 llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
diff --git a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
new file mode 100644
index 00000000000000..08cbd046110e54
--- /dev/null
+++ b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
@@ -0,0 +1,98 @@
+// This is a regression test for ThinLTO indirect-call-promotion when candidate
+// callees need to be imported from another IR module. In the C++ test case,
+// `main` calls `global_func` which is defined in another module. `global_func`
+// has two indirect callees, one has external linkage and one has local linkage.
+// All three functions should be imported into the IR module of main.
+
+// What the test does:
+// - Generate raw profiles from executables and convert it to indexed profiles.
+// During the conversion, a profiled callee address in raw profiles will be
+// converted to function hash in indexed profiles.
+// - Run IRPGO profile use and ThinTLO prelink pipeline and get LLVM bitcodes
+// for both cpp files in the C++ test case.
+// - Generate ThinLTO summary file with LLVM bitcodes, and run `function-import` pass.
+// - Run `pgo-icall-prom` pass for the IR module which needs to import callees.
+
+// RUN: rm -rf %t && split-file %s %t && cd %t
+
+// Use clang*_{pgogen,pgouse} for IR level instrumentation, and use clangxx* for
+// C++.
+//
+// Do setup work for all below tests.
+// Generate raw profiles from real programs and convert it into indexed profiles.
+// RUN: %clangxx_pgogen -fuse-ld=lld -O2 lib.cpp main.cpp -o main
+// RUN: env LLVM_PROFILE_FILE=main.profraw %run ./main
+// RUN: llvm-profdata merge main.profraw -o main.profdata
+
+// Use profile on lib and get bitcode, test that local function callee0 has
+// expected !PGOFuncName metadata and external function callee1 doesn't have
+// !PGOFuncName metadata. Explicitly skip ICP pass to test ICP happens as
+// expected in the IR module that imports functions from lib.
+// RUN: %clang -target x86_64-unknown-linux-gnu -mllvm -disable-icp -fprofile-use=main.profdata -flto=thin -O2 -c lib.cpp -o lib.bc
+// RUN: llvm-dis lib.bc -o - | FileCheck %s --check-prefix=PGOName
+
+// Use profile on main and get bitcode.
+// RUN: %clang -target x86_64-unknown-linux-gnu -fprofile-use=main.profdata -flto=thin -O2 -c main.cpp -o main.bc
+
+// Run llvm-lto to get summary file.
+// RUN: llvm-lto -thinlto -o summary main.bc lib.bc
+
+// Test the imports of functions. Default import thresholds would work but do
+// explicit override to be more futureproof. Note all functions have one basic
+// block with a function-entry-count of one, so they are actually hot functions
+// per default profile summary hotness cutoff.
+// RUN: opt -passes=function-import -import-instr-limit=100 -import-cold-multiplier=1 -summary-file summary.thinlto.bc main.bc -o main.import.bc -print-imports 2>&1 | FileCheck %s --check-prefix=IMPORTS
+// Test that '_Z11global_funcv' has indirect calls annotated with value profiles.
+// RUN: llvm-dis main.import.bc -o - | FileCheck %s --check-prefix=IR
+
+// Test that both candidates are ICP'ed and there is no `!VP` in the IR.
+// RUN: opt main.import.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefixes=ICP-IR,ICP-REMARK --implicit-check-not="!VP"
+
+// IMPORTS: main.cpp: Import _Z7callee1v
+// IMPORTS: main.cpp: Import _ZL7callee0v.llvm.{{[0-9]+}}
+// IMPORTS: main.cpp: Import _Z11global_funcv
+
+// PGOName: define dso_local void @_Z7callee1v() {{.*}} !prof !{{[0-9]+}} {
+// PGOName: define internal void @_ZL7callee0v() {{.*}} !prof !{{[0-9]+}} !PGOFuncName ![[MD:[0-9]+]] {
+// PGOName: ![[MD]] = !{!"{{.*}}lib.cpp;_ZL7callee0v"}
+
+// IR-LABEL: define available_externally {{.*}} void @_Z11global_funcv() {{.*}} !prof !35 {
+// IR-NEXT: entry:
+// IR-NEXT: %0 = load ptr, ptr @calleeAddrs
+// IR-NEXT: tail call void %0(), !prof ![[PROF1:[0-9]+]]
+// IR-NEXT: %1 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @calleeAddrs, i64 0, i64 1)
+// IR-NEXT: tail call void %1(), !prof ![[PROF2:[0-9]+]]
+
+// The GUID of indirect callee is the MD5 hash of `/path/to/lib.cpp:_ZL7callee0v` that depends on the directory. Use regex.
+// IR: ![[PROF1]] = !{!"VP", i32 0, i64 1, i64 {{[0-9]+}}, i64 1}
+// IR: ![[PROF2]] = !{!"VP", i32 0, i64 1, i64 -3993653843325621743, i64 1}
+
+// ICP-REMARK: Promote indirect call to _ZL7callee0v.llvm.{{[0-9]+}} with count 1 out of 1
+// ICP-REMARK: Promote indirect call to _Z7callee1v with count 1 out of 1
+
+// ICP-IR: br i1 %{{[0-9]+}}, label %if.true.direct_targ, label %if.false.orig_indirect, !prof [[BRANCH_WEIGHT1:![0-9]+]]
+// ICP-IR: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT1]]
+// ICP-IR: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1, i32 0}
+
+//--- lib.h
+void global_func();
+
+//--- lib.cpp
+#include "lib.h"
+static void callee0() {}
+void callee1() {}
+typedef void (*FPT)();
+FPT calleeAddrs[] = {callee0, callee1};
+// `global_func`` might call one of two indirect callees. callee0 has internal
+// linkage and callee1 has external linkage.
+void global_func() {
+ FPT fp = calleeAddrs[0];
+ fp();
+ fp = calleeAddrs[1];
+ fp();
+}
+
+//--- main.cpp
+#include "lib.h"
+int main() { global_func(); }
+
diff --git a/compiler-rt/test/profile/lit.cfg.py b/compiler-rt/test/profile/lit.cfg.py
index d3ba115731c5dc..65a4953efa29fa 100644
--- a/compiler-rt/test/profile/lit.cfg.py
+++ b/compiler-rt/test/profile/lit.cfg.py
@@ -147,6 +147,9 @@ def exclude_unsupported_files_for_aix(dirname):
config.substitutions.append(
("%clang_pgouse=", build_invocation(clang_cflags) + " -fprofile-use=")
)
+config.substitutions.append(
+ ("%clangxx_pgouse=", build_invocation(clang_cxxflags) + " -fprofile-use=")
+)
config.substitutions.append(
("%clangxx_profuse=", build_invocation(clang_cxxflags) + " -fprofile-instr-use=")
)
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h
index b57a963f4d12c3..43b1e883b7c8b1 100644
--- a/llvm/include/llvm/ProfileData/InstrProf.h
+++ b/llvm/include/llvm/ProfileData/InstrProf.h
@@ -172,7 +172,7 @@ inline StringRef getInstrProfCounterBiasVarName() {
inline StringRef getInstrProfNameSeparator() { return "\01"; }
/// Please use getIRPGOFuncName for LLVM IR instrumentation. This function is
-/// used by front-end (Clang, etc) instrumentation.
+/// for front-end (Clang, etc) instrumentation.
/// Return the modified name for function \c F suitable to be
/// used the key for profile lookup. Variable \c InLTO indicates if this
/// is called in LTO optimization passes.
@@ -198,20 +198,22 @@ std::string getIRPGOFuncName(const Function &F, bool InLTO = false);
std::pair<StringRef, StringRef> getParsedIRPGOFuncName(StringRef IRPGOFuncName);
/// Return the name of the global variable used to store a function
-/// name in PGO instrumentation. \c FuncName is the name of the function
-/// returned by the \c getIRPGOFuncName call.
+/// name in PGO instrumentation. \c FuncName is the IRPGO function name
+/// (returned by \c getIRPGOFuncName) for LLVM IR instrumentation and PGO
+/// function name (returned by \c getPGOFuncName) for front-end instrumentation.
std::string getPGOFuncNameVarName(StringRef FuncName,
GlobalValue::LinkageTypes Linkage);
/// Create and return the global variable for function name used in PGO
-/// instrumentation. \c FuncName is the name of the function returned
-/// by \c getIRPGOFuncName call.
+/// instrumentation. \c FuncName is the IRPGO function name (returned by
+/// \c getIRPGOFuncName) for LLVM IR instrumentation and PGO function name
+/// (returned by \c getPGOFuncName) for front-end instrumentation.
GlobalVariable *createPGOFuncNameVar(Function &F, StringRef PGOFuncName);
/// Create and return the global variable for function name used in PGO
-/// instrumentation. /// \c FuncName is the name of the function
-/// returned by \c getIRPGOFuncName call, \c M is the owning module,
-/// and \c Linkage is the linkage of the instrumented function.
+/// instrumentation. \c FuncName is the IRPGO function name (returned by
+/// \c getIRPGOFuncName) for LLVM IR instrumentation and PGO function name
+/// (returned by \c getPGOFuncName) for front-end instrumentation.
GlobalVariable *createPGOFuncNameVar(Module &M,
GlobalValue::LinkageTypes Linkage,
StringRef PGOFuncName);
@@ -419,11 +421,11 @@ uint64_t ComputeHash(StringRef K);
} // end namespace IndexedInstrProf
-/// A symbol table used for function PGO name look-up with keys
+/// A symbol table used for function [IR]PGO name look-up with keys
/// (such as pointers, md5hash values) to the function. A function's
-/// PGO name or name's md5hash are used in retrieving the profile
-/// data of the function. See \c getIRPGOFuncName() method for details
-/// on how PGO name is formed.
+/// [IR]PGO name or name's md5hash are used in retrieving the profile
+/// data of the function. See \c getIRPGOFuncName() and \c getPGOFuncName
+/// methods for details how [IR]PGO name is formed.
class InstrProfSymtab {
public:
using AddrHashMap = std::vector<std::pair<uint64_t, uint64_t>>;
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index 49c96a4ebd5625..c6b63a8cd729b5 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -158,13 +158,13 @@ std::string GlobalValue::getGlobalIdentifier(StringRef Name,
// that it will stay the same, e.g., if the files are checked out from
// version control in different locations.
if (FileName.empty())
- GlobalName.append("<unknown>");
+ GlobalName += "<unknown>";
else
- GlobalName.append(FileName.str());
+ GlobalName += FileName;
- GlobalName.append({kGlobalIdentifierDelimiter});
+ GlobalName += kGlobalIdentifierDelimiter;
}
- GlobalName.append(Name);
+ GlobalName += Name;
return GlobalName.str().str();
}
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw
deleted file mode 100644
index a046dcd86d58be4aca9cce06f89f5c5d4dabd74b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 528
zcmZoHO3N=Q$obF700xW at ih+Rz#(>i3d^BkWXQ;q~{}AADJWU{V)&KvS`)0hK70SQ>
zGg$D|W`(~SCZ7PRdViVAmkXvIW}d)Kh<X?wrVqxCo at t!pb5*AXrhf(0KA5}$0sU81
zHLMa3<=qEq6WVr<y#P(W0aX7E%b9R at Gr<f8(!Z|uJ~vC5dK;(>?0yS0{S5@{hxrE=
zZD3q+tGnOG-|x&xPhV4=<TEFIE_wTH>+Ap2*d;l|@R+-#)UxMK)K#AySw8id>U2hi
r{u+VZEIbvrPWzrY!_2 at U&A1HgS_>cvvjgOQMkogsJ}^00c*FPr*G-O(
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh b/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
deleted file mode 100755
index c474c41d0f4c68..00000000000000
--- a/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/bash
-
-if [ $# -lt 1 ]; then
- echo "Path to clang required!"
- echo "Usage: update_thinlto_indirect_call_promotion_inputs.sh /path/to/updated/clang"
- exit 1
-else
- CLANG=$1
-fi
-
-# Allows the script to be invoked from other directories.
-OUTDIR=$(dirname $(realpath -s $0))
-
-# Creates trivial header file to expose `global_func`.
-cat > ${OUTDIR}/lib.h << EOF
-void global_func();
-EOF
-
-# Creates lib.cc. `global_func`` might call one of two indirect callees. One
-# callee has internal linkage and the other has external linkage.
-cat > ${OUTDIR}/lib.cc << EOF
-#include "lib.h"
-static void callee0() {}
-void callee1() {}
-typedef void (*FPT)();
-FPT calleeAddrs[] = {callee0, callee1};
-void global_func() {
- FPT fp = nullptr;
- fp = calleeAddrs[0];
- fp();
- fp = calleeAddrs[1];
- fp();
-}
-EOF
-
-# Create main.cc. Function `main` calls `global_func`.
-cat > ${OUTDIR}/main.cc << EOF
-#include "lib.h"
-int main() {
- global_func();
-}
-EOF
-
-# cd into OUTDIR
-cd ${OUTDIR}
-
-# Generate instrumented binary
-${CLANG} -fuse-ld=lld -O2 -fprofile-generate=. lib.h lib.cc main.cc
-# Create raw profiles
-env LLVM_PROFILE_FILE=thinlto_indirect_call_promotion.profraw ./a.out
-
-# Clean up intermediate files.
-rm a.out
-rm ${OUTDIR}/lib.h.pch
-rm ${OUTDIR}/lib.h
-rm ${OUTDIR}/lib.cc
-rm ${OUTDIR}/main.cc
-
-# Go back to original directory
-cd -
diff --git a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
deleted file mode 100644
index 3daa7c85dd1990..00000000000000
--- a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
+++ /dev/null
@@ -1,77 +0,0 @@
-; The raw profiles (and reduced IR if needed) could be re-generated (e.g., when
-; there is a profile version bump) from script
-; Inputs/update_thinlto_indirect_call_promotion_inputs.sh
-;
-; The script generates raw profiles. This regression test will convert it to
-; indexed profiles. This way the test exercises code path where a profiled
-; callee address in raw profiles is converted to function hash in index profiles.
-
-; Do setup work for all below tests: convert raw profiles to indexed profiles,
-; run profile-use pass, generate bitcode and combined ThinLTO index.
-; Note `pgo-instr-use` pass runs without `pgo-icall-prom` pass. As a result ICP
-; transformation won't happen at test setup time.
-; RUN: llvm-profdata merge %p/Inputs/thinlto_indirect_call_promotion.profraw -o %t.profdata
-; RUN: split-file %s %tdir
-; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -module-summary %tdir/main.ll -o %t.bc
-; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -module-summary %tdir/lib.ll -o %t2.bc
-; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
-
-; Test that callee with local linkage has `PGOFuncName` metadata while callee with external doesn't have it.
-; RUN: llvm-dis %t2.bc -o - | FileCheck %s --check-prefix=PGOName
-; PGOName: define void @_Z7callee1v() {{.*}} !prof !{{[0-9]+}} {
-; PGOName: define internal void @_ZL7callee0v() {{.*}} !prof !{{[0-9]+}} !PGOFuncName ![[MD:[0-9]+]] {
-; PGOName: ![[MD]] = !{!"lib.cc;_ZL7callee0v"}
-
-; Tests that both external and internal callees are correctly imported.
-; RUN: opt -passes=function-import -summary-file %t3.thinlto.bc %t.bc -o %t4.bc -print-imports 2>&1 | FileCheck %s --check-prefix=IMPORTS
-; IMPORTS: Import _Z7callee1v
-; IMPORTS: Import _ZL7callee0v.llvm{{.*}}
-; IMPORTS: Import _Z11global_funcv
-
-; Tests that ICP transformations happen.
-; Both candidates are ICP'ed, check there is no `!VP` in the IR.
-; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S | FileCheck %s --check-prefix=ICALL-PROM --implicit-check-not="!VP"
-; RUN: opt %t4.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefix=PASS-REMARK
-
-; PASS-REMARK: Promote indirect call to _ZL7callee0v.llvm.0 with count 1 out of 1
-; PASS-REMARK: Promote indirect call to _Z7callee1v with count 1 out of 1
-
-; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ, label %if.false.orig_indirect, !prof [[BRANCH_WEIGHT1:![0-9]+]]
-; ICALL-PROM: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT1]]
-
-; ICALL-PROM: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1, i32 0}
-
-;--- main.ll
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-define i32 @main() {
- call void @_Z11global_funcv()
- ret i32 0
-}
-
-declare void @_Z11global_funcv()
-
-;--- lib.ll
-source_filename = "lib.cc"
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
- at calleeAddrs = global [2 x ptr] [ptr @_ZL7callee0v, ptr @_Z7callee1v]
-
-define void @_Z7callee1v() {
- ret void
-}
-
-define internal void @_ZL7callee0v() {
- ret void
-}
-
-define void @_Z11global_funcv() {
-entry:
- %0 = load ptr, ptr @calleeAddrs
- call void %0()
- %1 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @calleeAddrs, i64 0, i64 1)
- call void %1()
- ret void
-}
>From fa8569890ef86c8ef47fa6c8b87fa79fa70186bd Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Sun, 10 Dec 2023 20:38:11 -0800
Subject: [PATCH 08/10] make clang-format happy
---
.../test/profile/instrprof-thinlto-indirect-call-promotion.cpp | 1 -
compiler-rt/test/profile/lit.cfg.py | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
index 08cbd046110e54..06a4a8b61602eb 100644
--- a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
+++ b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
@@ -95,4 +95,3 @@ void global_func() {
//--- main.cpp
#include "lib.h"
int main() { global_func(); }
-
diff --git a/compiler-rt/test/profile/lit.cfg.py b/compiler-rt/test/profile/lit.cfg.py
index 65a4953efa29fa..7015f09e207bba 100644
--- a/compiler-rt/test/profile/lit.cfg.py
+++ b/compiler-rt/test/profile/lit.cfg.py
@@ -148,7 +148,7 @@ def exclude_unsupported_files_for_aix(dirname):
("%clang_pgouse=", build_invocation(clang_cflags) + " -fprofile-use=")
)
config.substitutions.append(
- ("%clangxx_pgouse=", build_invocation(clang_cxxflags) + " -fprofile-use=")
+ ("%clangxx_pgouse=", build_invocation(clang_cxxflags) + " -fprofile-use=")
)
config.substitutions.append(
("%clangxx_profuse=", build_invocation(clang_cxxflags) + " -fprofile-instr-use=")
>From e49a8100912c3010af448bb5ba958a7ef0c057e1 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Mon, 11 Dec 2023 15:06:33 -0800
Subject: [PATCH 09/10] resolve feedbacks
---
...trprof-thinlto-indirect-call-promotion.cpp | 52 ++++++++----
llvm/include/llvm/IR/GlobalValue.h | 2 +-
llvm/lib/IR/Globals.cpp | 4 +-
.../thinlto_indirect_call_promotion.profraw | Bin 0 -> 528 bytes
..._thinlto_indirect_call_promotion_inputs.sh | 62 ++++++++++++++
.../thinlto_indirect_call_promotion.ll | 80 ++++++++++++++++++
6 files changed, 179 insertions(+), 21 deletions(-)
create mode 100644 llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw
create mode 100755 llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
create mode 100644 llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
diff --git a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
index 06a4a8b61602eb..e785cd8d7dd563 100644
--- a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
+++ b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
@@ -13,6 +13,20 @@
// - Generate ThinLTO summary file with LLVM bitcodes, and run `function-import` pass.
// - Run `pgo-icall-prom` pass for the IR module which needs to import callees.
+// Test should fail where linkage-name and mangled-name diverges, see issue https://github.com/llvm/llvm-project/issues/74565).
+// Currently, this name divergence happens on Mach-O object file format, or on
+// many (but not all) 32-bit Windows systems.
+//
+// XFAIL: system-darwin
+//
+// Mark 32-bit Windows as UNSUPPORTED for now as opposed to XFAIL. This test
+// should fail on many (but not all) 32-bit Windows systems and succeed on the
+// rest. The flexibility in triple string parsing makes it tricky to capture
+// both sets accurately. i[3-9]86 specifies arch as Triple::ArchType::x86, (win32|windows)
+// specifies OS as Triple::OS::Win32
+//
+// UNSUPPORTED: target={{i[3-9]86-.*-(win32|windows)}}
+
// RUN: rm -rf %t && split-file %s %t && cd %t
// Use clang*_{pgogen,pgouse} for IR level instrumentation, and use clangxx* for
@@ -20,7 +34,7 @@
//
// Do setup work for all below tests.
// Generate raw profiles from real programs and convert it into indexed profiles.
-// RUN: %clangxx_pgogen -fuse-ld=lld -O2 lib.cpp main.cpp -o main
+// RUN: %clangxx_pgogen -O2 lib.cpp main.cpp -o main
// RUN: env LLVM_PROFILE_FILE=main.profraw %run ./main
// RUN: llvm-profdata merge main.profraw -o main.profdata
@@ -28,11 +42,11 @@
// expected !PGOFuncName metadata and external function callee1 doesn't have
// !PGOFuncName metadata. Explicitly skip ICP pass to test ICP happens as
// expected in the IR module that imports functions from lib.
-// RUN: %clang -target x86_64-unknown-linux-gnu -mllvm -disable-icp -fprofile-use=main.profdata -flto=thin -O2 -c lib.cpp -o lib.bc
+// RUN: %clang -mllvm -disable-icp -fprofile-use=main.profdata -flto=thin -O2 -c lib.cpp -o lib.bc
// RUN: llvm-dis lib.bc -o - | FileCheck %s --check-prefix=PGOName
// Use profile on main and get bitcode.
-// RUN: %clang -target x86_64-unknown-linux-gnu -fprofile-use=main.profdata -flto=thin -O2 -c main.cpp -o main.bc
+// RUN: %clang -fprofile-use=main.profdata -flto=thin -O2 -c main.cpp -o main.bc
// Run llvm-lto to get summary file.
// RUN: llvm-lto -thinlto -o summary main.bc lib.bc
@@ -49,30 +63,32 @@
// RUN: opt main.import.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefixes=ICP-IR,ICP-REMARK --implicit-check-not="!VP"
// IMPORTS: main.cpp: Import _Z7callee1v
-// IMPORTS: main.cpp: Import _ZL7callee0v.llvm.{{[0-9]+}}
+// IMPORTS: main.cpp: Import _ZL7callee0v.llvm.[[#]]
// IMPORTS: main.cpp: Import _Z11global_funcv
-// PGOName: define dso_local void @_Z7callee1v() {{.*}} !prof !{{[0-9]+}} {
-// PGOName: define internal void @_ZL7callee0v() {{.*}} !prof !{{[0-9]+}} !PGOFuncName ![[MD:[0-9]+]] {
-// PGOName: ![[MD]] = !{!"{{.*}}lib.cpp;_ZL7callee0v"}
+// PGOName: define dso_local void @_Z7callee1v() {{.*}} !prof ![[#]] {
+// PGOName: define internal void @_ZL7callee0v() {{.*}} !prof ![[#]] !PGOFuncName ![[#MD:]] {
+// PGOName: ![[#MD]] = !{!"{{.*}}lib.cpp;_ZL7callee0v"}
-// IR-LABEL: define available_externally {{.*}} void @_Z11global_funcv() {{.*}} !prof !35 {
+// IR-LABEL: define available_externally {{.*}} void @_Z11global_funcv() {{.*}} !prof ![[#]] {
// IR-NEXT: entry:
// IR-NEXT: %0 = load ptr, ptr @calleeAddrs
-// IR-NEXT: tail call void %0(), !prof ![[PROF1:[0-9]+]]
-// IR-NEXT: %1 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @calleeAddrs, i64 0, i64 1)
-// IR-NEXT: tail call void %1(), !prof ![[PROF2:[0-9]+]]
+// IR-NEXT: tail call void %0(), !prof ![[#PROF1:]]
+// IR-NEXT: %1 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @calleeAddrs,
+// IR-NEXT: tail call void %1(), !prof ![[#PROF2:]]
-// The GUID of indirect callee is the MD5 hash of `/path/to/lib.cpp:_ZL7callee0v` that depends on the directory. Use regex.
-// IR: ![[PROF1]] = !{!"VP", i32 0, i64 1, i64 {{[0-9]+}}, i64 1}
-// IR: ![[PROF2]] = !{!"VP", i32 0, i64 1, i64 -3993653843325621743, i64 1}
+// The GUID of indirect callee is the MD5 hash of `/path/to/lib.cpp:_ZL7callee0v`
+// that depends on the directory. Use [[#]] for its MD5 hash.
+// Use {{.*}} for integer types so the test works on 32-bit and 64-bit systems.
+// IR: ![[#PROF1]] = !{!"VP", i32 0, {{.*}} 1, {{.*}} [[#]], {{.*}} 1}
+// IR: ![[#PROF2]] = !{!"VP", i32 0, {{.*}} 1, {{.*}} -3993653843325621743, {{.*}} 1}
-// ICP-REMARK: Promote indirect call to _ZL7callee0v.llvm.{{[0-9]+}} with count 1 out of 1
+// ICP-REMARK: Promote indirect call to _ZL7callee0v.llvm.[[#]] with count 1 out of 1
// ICP-REMARK: Promote indirect call to _Z7callee1v with count 1 out of 1
-// ICP-IR: br i1 %{{[0-9]+}}, label %if.true.direct_targ, label %if.false.orig_indirect, !prof [[BRANCH_WEIGHT1:![0-9]+]]
-// ICP-IR: br i1 %{{[0-9]+}}, label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof [[BRANCH_WEIGHT1]]
-// ICP-IR: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1, i32 0}
+// ICP-IR: br i1 %[[#]], label %if.true.direct_targ, label %if.false.orig_indirect, !prof ![[#BRANCH_WEIGHT1:]]
+// ICP-IR: br i1 %[[#]], label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof ![[#BRANCH_WEIGHT1]]
+// ICP-IR: ![[#BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1, i32 0}
//--- lib.h
void global_func();
diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h
index 829206fc56377e..e97a7f2b963606 100644
--- a/llvm/include/llvm/IR/GlobalValue.h
+++ b/llvm/include/llvm/IR/GlobalValue.h
@@ -42,7 +42,7 @@ typedef unsigned ID;
} // end namespace Intrinsic
// Choose ';' as the delimiter. ':' was used once but it doesn't work well for
-// Objective-C functions which commonly have :'s in their names
+// Objective-C functions which commonly have :'s in their names.
inline constexpr char kGlobalIdentifierDelimiter = ';';
class GlobalValue : public Constant {
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index c6b63a8cd729b5..fb30e59979c4a6 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -151,7 +151,7 @@ std::string GlobalValue::getGlobalIdentifier(StringRef Name,
if (Name[0] == '\1')
Name = Name.substr(1);
- SmallString<64> GlobalName;
+ std::string GlobalName;
if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
// For local symbols, prepend the main file name to distinguish them.
// Do not include the full path in the file name since there's no guarantee
@@ -165,7 +165,7 @@ std::string GlobalValue::getGlobalIdentifier(StringRef Name,
GlobalName += kGlobalIdentifierDelimiter;
}
GlobalName += Name;
- return GlobalName.str().str();
+ return GlobalName;
}
std::string GlobalValue::getGlobalIdentifier() const {
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw
new file mode 100644
index 0000000000000000000000000000000000000000..5efda10bb98a941c04b6846db05d3691bc36aac0
GIT binary patch
literal 528
zcmZoHO3N=Q$obF700xW at ih+Rz#(>i3d^BkWXQ;q~{}ABueD@>eRsa8Q&U2Q%6Ux8<
zGg$D|W`(~SCZ7PRdViVAmkXvIW}d)Ih<X?wrVqxCo at t!pb5*AXrhf(0KA5}$0sU81
zHLMa3<=qEq6WVr<y#P(W0aX7ENf)@gnP7$k>0eiSpPQvjy$#d`cE1Ih{ssc}!~BDb
zHZZQZ)!lF8?|0^;r?06_@|lx9m%RP9_4R*h?2?>fc+6c=YT5HA>Z;F<ET8&Jbvh$M
re~rLy7M_Y*r+v?yVP;^FW?Tk#tp$*T*#UAtBa{ORADA30ykUF*Dr$#p
literal 0
HcmV?d00001
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh b/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
new file mode 100755
index 00000000000000..9676b042a641ca
--- /dev/null
+++ b/llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+if [ $# -lt 1 ]; then
+ echo "Path to clang required!"
+ echo "Usage: update_thinlto_indirect_call_promotion_inputs.sh /path/to/updated/clang"
+ exit 1
+else
+ CLANG=$1
+fi
+
+# Remember current directory.
+CURDIR=$PWD
+
+# Allows the script to be invoked from other directories.
+OUTDIR=$(dirname $(realpath -s $0))
+cd $OUTDIR
+
+# Creates trivial header file to expose `global_func`.
+cat > lib.h << EOF
+void global_func();
+EOF
+
+# Creates lib.cc. `global_func` might call one of two indirect callees. One
+# callee has internal linkage and the other has external linkage.
+cat > lib.cc << EOF
+#include "lib.h"
+static void callee0() {}
+void callee1() {}
+typedef void (*FPT)();
+FPT calleeAddrs[] = {callee0, callee1};
+void global_func() {
+ FPT fp = nullptr;
+ fp = calleeAddrs[0];
+ fp();
+ fp = calleeAddrs[1];
+ fp();
+}
+EOF
+
+# Create main.cc. Function `main` calls `global_func`.
+cat > main.cc << EOF
+#include "lib.h"
+int main() {
+ global_func();
+}
+EOF
+
+# Clean up temporary files on exit and return to original directory.
+cleanup() {
+ rm -f $OUTDIR/lib.h
+ rm -f $OUTDIR/lib.cc
+ rm -f $OUTDIR/main.cc
+ rm -f $OUTDIR/lib.h.pch
+ rm -f $OUTDIR/a.out
+ cd $CURDIR
+}
+trap cleanup EXIT
+
+# Generate instrumented binary
+${CLANG} -fuse-ld=lld -O2 -fprofile-generate=. lib.h lib.cc main.cc
+# Create raw profiles
+env LLVM_PROFILE_FILE=thinlto_indirect_call_promotion.profraw ./a.out
diff --git a/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
new file mode 100644
index 00000000000000..fa5774ecfd0820
--- /dev/null
+++ b/llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll
@@ -0,0 +1,80 @@
+; The raw profiles (and reduced IR if needed) could be re-generated (e.g., when
+; there is a profile version bump) from script
+; Inputs/update_thinlto_indirect_call_promotion_inputs.sh
+;
+; The script generates raw profiles. This regression test will convert it to
+; indexed profiles. This way the test exercises code path where a profiled
+; callee address in raw profiles is converted to function hash in index profiles.
+
+; RUN: rm -rf %t && split-file %s %t && cd %t
+
+; Do setup work for all below tests: convert raw profiles to indexed profiles,
+; run profile-use pass, generate bitcode and combined ThinLTO index.
+; Note `pgo-instr-use` pass runs without `pgo-icall-prom` pass. As a result ICP
+; transformation won't happen at test setup time.
+; RUN: llvm-profdata merge %p/Inputs/thinlto_indirect_call_promotion.profraw -o icp.profdata
+; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=icp.profdata -module-summary main.ll -o main.bc
+; RUN: opt -passes=pgo-instr-use -pgo-test-profile-file=icp.profdata -module-summary lib.ll -o lib.bc
+; RUN: llvm-lto -thinlto -o summary main.bc lib.bc
+
+; Test that callee with local linkage has `PGOFuncName` metadata while callee with external doesn't have it.
+; RUN: llvm-dis lib.bc -o - | FileCheck %s --check-prefix=PGOName
+; PGOName: define void @_Z7callee1v() {{.*}} !prof ![[#]] {
+; PGOName: define internal void @_ZL7callee0v() {{.*}} !prof ![[#]] !PGOFuncName ![[#MD:]] {
+; The source filename of `lib.ll` is specified as "lib.cc" (i.e., the name does
+; not change with the directory), so match the full name here.
+; PGOName: ![[#MD]] = !{!"lib.cc;_ZL7callee0v"}
+
+; Tests that both external and internal callees are correctly imported.
+; RUN: opt -passes=function-import -summary-file summary.thinlto.bc main.bc -o main.import.bc -print-imports 2>&1 | FileCheck %s --check-prefix=IMPORTS
+; IMPORTS: Import _Z7callee1v
+; IMPORTS: Import _ZL7callee0v.llvm.[[#]]
+; IMPORTS: Import _Z11global_funcv
+
+; Tests that ICP transformations happen.
+; Both candidates are ICP'ed, check there is no `!VP` in the IR.
+; RUN: opt main.import.bc -icp-lto -passes=pgo-icall-prom -S | FileCheck %s --check-prefix=ICALL-PROM --implicit-check-not="!VP"
+; RUN: opt main.import.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefix=PASS-REMARK
+
+; PASS-REMARK: Promote indirect call to _ZL7callee0v.llvm.[[#]] with count 1 out of 1
+; PASS-REMARK: Promote indirect call to _Z7callee1v with count 1 out of 1
+
+; ICALL-PROM: br i1 %[[#]], label %if.true.direct_targ, label %if.false.orig_indirect, !prof ![[#BRANCH_WEIGHT1:]]
+; ICALL-PROM: br i1 %[[#]], label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof ![[#BRANCH_WEIGHT1]]
+
+; ICALL-PROM: ![[#BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1, i32 0}
+
+;--- main.ll
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @main() {
+ call void @_Z11global_funcv()
+ ret i32 0
+}
+
+declare void @_Z11global_funcv()
+
+;--- lib.ll
+source_filename = "lib.cc"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at calleeAddrs = global [2 x ptr] [ptr @_ZL7callee0v, ptr @_Z7callee1v]
+
+define void @_Z7callee1v() {
+ ret void
+}
+
+define internal void @_ZL7callee0v() {
+ ret void
+}
+
+define void @_Z11global_funcv() {
+entry:
+ %0 = load ptr, ptr @calleeAddrs
+ call void %0()
+ %1 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @calleeAddrs, i64 0, i64 1)
+ call void %1()
+ ret void
+}
>From 440c44bfaaca5f53b430bdf7d550d2551c0f77f3 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Mon, 11 Dec 2023 15:49:32 -0800
Subject: [PATCH 10/10] resolve feedback
---
.../instrprof-thinlto-indirect-call-promotion.cpp | 10 ++++++----
compiler-rt/test/profile/lit.cfg.py | 3 ---
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
index e785cd8d7dd563..59b9e55acb8209 100644
--- a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
+++ b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
@@ -13,6 +13,10 @@
// - Generate ThinLTO summary file with LLVM bitcodes, and run `function-import` pass.
// - Run `pgo-icall-prom` pass for the IR module which needs to import callees.
+// Use lld as linker for more robust test. We need to REQUIRE LLVMgold.so for
+// LTO if default linker is GNU ld or gold anyway.
+// REQUIRES: lld-available
+
// Test should fail where linkage-name and mangled-name diverges, see issue https://github.com/llvm/llvm-project/issues/74565).
// Currently, this name divergence happens on Mach-O object file format, or on
// many (but not all) 32-bit Windows systems.
@@ -29,12 +33,10 @@
// RUN: rm -rf %t && split-file %s %t && cd %t
-// Use clang*_{pgogen,pgouse} for IR level instrumentation, and use clangxx* for
-// C++.
-//
// Do setup work for all below tests.
// Generate raw profiles from real programs and convert it into indexed profiles.
-// RUN: %clangxx_pgogen -O2 lib.cpp main.cpp -o main
+// Use clangxx_pgogen for IR level instrumentation for C++.
+// RUN: %clangxx_pgogen -fuse-ld=lld -O2 lib.cpp main.cpp -o main
// RUN: env LLVM_PROFILE_FILE=main.profraw %run ./main
// RUN: llvm-profdata merge main.profraw -o main.profdata
diff --git a/compiler-rt/test/profile/lit.cfg.py b/compiler-rt/test/profile/lit.cfg.py
index 7015f09e207bba..d3ba115731c5dc 100644
--- a/compiler-rt/test/profile/lit.cfg.py
+++ b/compiler-rt/test/profile/lit.cfg.py
@@ -147,9 +147,6 @@ def exclude_unsupported_files_for_aix(dirname):
config.substitutions.append(
("%clang_pgouse=", build_invocation(clang_cflags) + " -fprofile-use=")
)
-config.substitutions.append(
- ("%clangxx_pgouse=", build_invocation(clang_cxxflags) + " -fprofile-use=")
-)
config.substitutions.append(
("%clangxx_profuse=", build_invocation(clang_cxxflags) + " -fprofile-instr-use=")
)
More information about the cfe-commits
mailing list