<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63338>63338</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Hitting `SIGSEGV` in `AMDGPULowerModuleLDS` pass
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Saldivarcher
</td>
</tr>
</table>
<pre>
To reproduce:
```console
$ opt --passes="amdgpu-lower-module-lds" reduced.ll
WARNING: You're attempting to print out a bitcode file.
This is inadvisable as it may cause display problems. If
you REALLY want to taste LLVM bitcode first-hand, you
can force output with the `-f' option.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/users/saldivar/css/upstream/debug/bin/opt --passes=amdgpu-lower-module-lds reduced.ll
#0 0x000000000a023708 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/lib/Support/Unix/Signals.inc:602:22
#1 0x000000000a023b02 PrintStackTraceSignalHandler(void*) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/lib/Support/Unix/Signals.inc:676:1
#2 0x000000000a0214d7 llvm::sys::RunSignalHandlers() /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/lib/Support/Signals.cpp:104:20
#3 0x000000000a023137 SignalHandler(int) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/lib/Support/Unix/Signals.inc:413:1
#4 0x00007f34edea68c0 __restore_rt (/lib64/libpthread.so.0+0x168c0)
#5 0x0000000006b0e050 llvm::GlobalValue::getValueType() const /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/include/llvm/IR/GlobalValue.h:292:39
#6 0x0000000006fee470 (anonymous namespace)::AMDGPULowerModuleLDS::markUsedByKernel(llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, llvm::Function*, llvm::GlobalVariable*) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp:237:55
#7 0x0000000006ff28c6 (anonymous namespace)::AMDGPULowerModuleLDS::runOnModule(llvm::Module&) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp:1114:7
#8 0x0000000006ff42db llvm::AMDGPULowerModuleLDSPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp:1492:48
#9 0x0000000006f428d8 llvm::detail::PassModel<llvm::Module, llvm::AMDGPULowerModuleLDSPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/include/llvm/IR/PassManagerInternal.h:90:3
#10 0x00000000097114f8 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/include/llvm/IR/PassManager.h:521:20
#11 0x0000000006703a78 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/tools/opt/NewPMDriver.cpp:522:10
#12 0x000000000673090d main /home/users/saldivar/workspace/random/llvm-project.git/main/llvm/tools/opt/opt.cpp:716:27
#13 0x00007f34ed0ed24d __libc_start_main (/lib64/libc.so.6+0x3524d)
#14 0x00000000066fb9ea _start /home/abuild/rpmbuild/BUILD/glibc-2.31/csu/../sysdeps/x86_64/start.S:122:0
fish: Job 1, '~/css/upstream/debug/bin/opt --…' terminated by signal SIGSEGV (Address boundary error)
$ cat reduced.ll
; ModuleID = 'bugpoint-reduced-simplified.bc'
source_filename = "reproduce.cpp"
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8"
target triple = "amdgcn-amd-amdhsa"
$_ZN4Impl32hip_parallel_launch_local_memoryINS_14ParallelReduceIi11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEEELi0ELi0EEEvT_ = comdat any
$_ZN4Impl14ParallelReduceIi11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEEclEv = comdat any
$_ZN4Impl33hip_inter_block_shuffle_reductionIN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEbNT_14reference_typeESD_SC_PjNSC_12pointer_typeESE_i = comdat any
$_ZN4Impl33hip_intra_block_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_ = comdat any
$_ZN4Impl32hip_inter_warp_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_ = comdat any
$_ZN4Impl32hip_parallel_launch_local_memoryINS_12ParallelScanI7BinSortI4ViewIPiJ3HIPEEPFvvEE11RangePolicyIJS5_EEEELi0ELi0EEEvT_ = comdat any
$_ZN4Impl19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS4_EEclEv = comdat any
$_ZN4Impl19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS4_EE7initialEv = comdat any
$_Z29kokkos_impl_hip_shared_memoryIjEPT_v = comdat any
$_ZN4Impl32hip_parallel_launch_local_memoryINS_19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS5_EEELi0ELi0EEEvT_ = comdat any
$_ZN4Impl32hip_parallel_launch_local_memoryINS_14ParallelReduceIN12Experimental11DynamicViewIPiJ3HIPEEE11RangePolicyIJS5_EE6MinMaxINS_16ViewDataAnalysisIiiEEEEELi0ELi0EEEvT_ = comdat any
$_ZN4Impl14ParallelReduceIN12Experimental11DynamicViewIPiJ3HIPEEE11RangePolicyIJS4_EE6MinMaxINS_16ViewDataAnalysisIiiEEEEclEv = comdat any
@_ZZN4Impl32hip_inter_warp_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_E9sh_result = external addrspace(3) global double, align 8
@sh = external addrspace(3) global [0 x i32], align 4
declare void @__cxa_pure_virtual() #0
; Function Attrs: cold noreturn nounwind
declare void @llvm.trap() #1
declare void @__cxa_deleted_virtual() #0
define amdgpu_kernel void @_ZN4Impl32hip_parallel_launch_local_memoryINS_14ParallelReduceIi11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEEELi0ELi0EEEvT_(ptr addrspace(4) %0) #2 comdat {
entry:
call void @_ZN4Impl14ParallelReduceIi11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEEclEv(ptr noundef nonnull align 8 dereferenceable(24) poison) #4
ret void
}
; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p4.i64(ptr noalias nocapture writeonly, ptr addrspace(4) noalias nocapture readonly, i64, i1 immarg) #3
define linkonce_odr void @_ZN4Impl14ParallelReduceIi11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEEclEv(ptr %this) #0 comdat align 2 {
entry:
%call = call noundef zeroext i1 @_ZN4Impl33hip_inter_block_shuffle_reductionIN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEbNT_14reference_typeESD_SC_PjNSC_12pointer_typeESE_i(i32 noundef poison, i32 noundef poison, ptr noundef poison, ptr noundef poison, ptr noundef poison, i32 noundef poison) #4
ret void
}
declare void @_ZN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxIN4Impl16ViewDataAnalysisIiiEEEE7ReducerC1EPS8_(ptr, ptr) unnamed_addr #0
define linkonce_odr i1 @_ZN4Impl33hip_inter_block_shuffle_reductionIN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEbNT_14reference_typeESD_SC_PjNSC_12pointer_typeESE_i(i32 %value, i32 %0, ptr %1, ptr %2, ptr %3, i32 %4) #0 comdat {
entry:
call void @_ZN4Impl33hip_intra_block_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_(i32 noundef poison) #4
unreachable
}
define linkonce_odr void @_ZN4Impl33hip_intra_block_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_(i32 %value) #0 comdat {
entry:
call void @_ZN4Impl32hip_inter_warp_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_(i32 noundef poison) #4
ret void
}
define linkonce_odr void @_ZN4Impl32hip_inter_warp_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_(i32 %0) #0 comdat {
entry:
store ptr addrspacecast (ptr addrspace(3) @_ZZN4Impl32hip_inter_warp_shuffle_reductionIiN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEvT_T0_E9sh_result to ptr), ptr poison, align 8
ret void
}
define amdgpu_kernel void @_ZN4Impl32hip_parallel_launch_local_memoryINS_12ParallelScanI7BinSortI4ViewIPiJ3HIPEEPFvvEE11RangePolicyIJS5_EEEELi0ELi0EEEvT_(ptr addrspace(4) %0) #2 comdat {
entry:
call void @_ZN4Impl19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS4_EEclEv(ptr noundef nonnull align 1 dereferenceable(1) poison) #4
ret void
}
define linkonce_odr void @_ZN4Impl19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS4_EEclEv(ptr %this) #0 comdat align 2 {
entry:
call void @_ZN4Impl19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS4_EE7initialEv(ptr noundef nonnull align 1 dereferenceable(1) poison) #4
ret void
}
define linkonce_odr void @_ZN4Impl19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS4_EE7initialEv(ptr %this) #0 comdat align 2 {
entry:
%call = call noundef ptr @_Z29kokkos_impl_hip_shared_memoryIjEPT_v() #4
ret void
}
define linkonce_odr ptr @_Z29kokkos_impl_hip_shared_memoryIjEPT_v() #0 comdat {
entry:
ret ptr addrspacecast (ptr addrspace(3) @sh to ptr)
}
define amdgpu_kernel void @_ZN4Impl32hip_parallel_launch_local_memoryINS_19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS5_EEELi0ELi0EEEvT_(ptr addrspace(4) %0) #2 comdat {
entry:
call void @_ZN4Impl19ParallelScanHIPBaseI7BinSortI4ViewIPiJ3HIPEEPFvvEEJS4_EEclEv(ptr noundef nonnull align 1 dereferenceable(1) poison) #4
ret void
}
define amdgpu_kernel void @_ZN4Impl32hip_parallel_launch_local_memoryINS_14ParallelReduceIN12Experimental11DynamicViewIPiJ3HIPEEE11RangePolicyIJS5_EE6MinMaxINS_16ViewDataAnalysisIiiEEEEELi0ELi0EEEvT_(ptr addrspace(4) %0) #2 comdat {
entry:
call void @_ZN4Impl14ParallelReduceIN12Experimental11DynamicViewIPiJ3HIPEEE11RangePolicyIJS4_EE6MinMaxINS_16ViewDataAnalysisIiiEEEEclEv(ptr noundef nonnull align 8 dereferenceable(24) poison) #4
ret void
}
define linkonce_odr void @_ZN4Impl14ParallelReduceIN12Experimental11DynamicViewIPiJ3HIPEEE11RangePolicyIJS4_EE6MinMaxINS_16ViewDataAnalysisIiiEEEEclEv(ptr %this) #0 comdat align 2 {
entry:
%call = call noundef zeroext i1 @_ZN4Impl33hip_inter_block_shuffle_reductionIN15FunctorAnalysisI23FunctorPatternInterface11RangePolicyIJ3HIPEE6MinMaxINS_16ViewDataAnalysisIiiEEEE7ReducerEEEbNT_14reference_typeESD_SC_PjNSC_12pointer_typeESE_i(i32 noundef poison, i32 noundef poison, ptr noundef poison, ptr noundef poison, ptr noundef poison, i32 noundef poison) #4
ret void
}
attributes #0 = { "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx9-insts,+gfx90a-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+wavefrontsize64" }
attributes #1 = { cold noreturn nounwind }
attributes #2 = { "uniform-work-group-size"="true" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { convergent nounwind }
```
Issue stems from this line: https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp#L1177
`KernelToReplacement` only holds 2 functions in the structure, while `OrderedKernels` holds 4. This causes an issue here, `KernelToReplacement[OrderedKernels[i]].SGV`, since `KernelToReplacement` doesn't have the two other functions one is constructed. The new constructed object then holds a `null` pointer, `SGV`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW19z4riy_zTKi8qULf8BHvJAAsyyJ5OlQnZunX1xyXYD2siSS5JJOA_3s9-SbMAwZJPJZnJm926GASTLrf79utXuljHVmq0EwCWKr1A8vqC1WUt1uaC8YBuq8jWoi0wW28t7iRVUShZ1DigcIX-M_BFK_OaVS6Elh7aXRFhWBnteRbUGjcIxIoSWxaqqPS4fQXmlLGoOHi80IgQrsFKLHueNgP8Z3d3Obj-hcIT_LWtE-gowNQbKyjCxwkbiSjFhsKwNpjhjJpcF4CXj0GsE3K-ZxvYlaLFhmmYcMNWYGVzSLc5prQEXTFecbnGlZMah1D08WzZnb2WN7yajm5t_40cqjJ3PUG0A39x8-dyZTmnjrakoELnGW1k3J-dU4KVUOVjtqtrgR2bW2KwBo8T3loj0LTdMilbV5n1-MxktJljXWckcpnpl6ZbKzb42ptKWdDJFZLpiZl1nvVyWiEw53-w-vErJ3yE3iEyZ1jVoRKaYigIzkfO6AKdErqhe44zmD0bRfMfXwtD8ARd1We1N6_ew-5sruVK0xFSt6hKEsXpgRKZrWQIi01qDshPp1mEQmebadtSVNgqoVa6ArF4hMs2YQGR64hnPuMVXPoERCX3sP_m7P-qTsO8PsGMgHKFwpLe6-TK33uEw3VuQiAwOgxR9TOVOtcSajgmDyPCPMT1K9aArJ2uqqCjkKem9FbPEl9Rh3FmFZYhMF3VlDYnI9FfBnmwHWwnKdY-JHIWjxCcoHBFygBmcwsx8gk8wNTJ-oqLgoBAZbCQrEBn9V4H0ExSOggMOcoIjiIr-OXPd1eIIjkZk8EFAdgjyynp-4EfWFP4BQnhqiiDs41Pu_8sOFAXhMe9Rq3R_GUZQAE0GuY_TVIE2UkGqDHYEW-lJ1HxWZq2AFj0tez4iV_5TYE9CZHiQGnepSDIf_NjvWPMTlxnlXyivoelYgXGt-20FrUHtVcJ8D57aCHfomN0hMu2o1Ftbww7tSgs7mJIjTEuAqO9bcqiQYlvKWmNBS2j1GTa4Rp_Hn-a_3th49dmFq5vxojlSUvXwq4biavsvUAL4UdyZ3V3VjBegUHh96L22jFBhptIdItf4zBljWNKam5nQoIwVMGkj12HstBa5vai4EHB9xiyK2Yvg944Q91StwB5sSNp_OWZrTvVuxZGwj8JRHB9M0j82yZIM8uTtJlG1-EU0fUfW2HUlPxYdQRDYCNQ_0DE4oSMiRdYx73Py9uifQ931kZGgfKuZ_kwFXZ04aHtK63I_FFeRW87R4EDW8JisiAyKbn5QgKGMtykC1fqzLICfQ3vMznMUH42aK9CgNlA0ZIJ-C8X29dex2_mg64htFJoJA0pQ7oLv0Lexd1cghMFRLjfsB0G07NqqI-ZlC_1_JNeRGpOgk7BYWo9yx6Tvh7TfpVXVwsqYswo4E8cxcWEUE6s7WB4T8Qw_zXr9TPO1kzM6d_SGZYqq7Uws5ays-NejpOS_uCppyvgZIX_q8DNwRkrRre3tGtRxwusVE86o3fGyMqmRsg0bzXz_Yk3R99yoL6DYkoHajcvskVd_fhd_ssrppvpCZHoLj_PPY8U2oNpoGhPiEuCDJ5FjTwr9oV9gK_T7qycr06rVD2xNQfoHtcKj5NaHgkQFTlPOsjzVhiqTtjqeZLi5zW0Tl9uGMYmKfW5rhUZHWJNlNgSKG3EdtDSz-ZjFVZW7r1e_zm7Gtii3U3ikFwauAq4RmfZ6lpmtLqCy0J4GSeqUcWJ7NkEJHOkt50um7ZLGP8sMB9YbEOn_72vLaTQhaOCjUYJIHxtQJRPUQIGzLdauWMCL2afF5NMXS8yoKBRojTNZi4KqLQalpDoQst_Eyan5qg5H4RVuQsJsjFE4tmpm9aqSTBivHexpVlbcLoGil-VoZz4ta5VDumQcbA7Xnk3220rO5rtC2LgIggtqKKdbWZvdcPCsYySRe_OqoNtw-X3z5lVhtxF1h8XdI0m3YbPRILGXKhIn-3d7ZODs1b57bCdr4xw0SLwNiZqRm52wTTRoxwyT9rRN4HIWEtvxuwm8TRzY3jgg3ibwnRz74W2I70TYD084sUnkLULijWLvU-AJ5nLFcDQ4Zc0oVvE9wbQsVrnwaFnY_2tN98P3pk5_u41siA7JmlVpRRXlHHjKaS3ydcplTnlaQinVdna7SINo3o64cwafsSC4o2IFc8lZvp39HP40m08myWcmPtMnd0byhcHjmBq6u67OGJvYvxvmu_-TyeY-dRrnsiyowVRsn1HyHafP-WTzuknD0DLDbEqTZlzmD6le18slh9Q5vS2-ZrdB7AoxqfbTkLDtmVNjsyGXEy1pDm9Wud-AVpPJJLu9T4NIwRIUiBxSs61gshini-t0_vvt4joNiFuXoNpDk5R9I1pFn0XLPhru5j6991_pI40jN9gfqar-mvq_uBDJbiUscipm_SsmFlKZWWSVmc1Zq-d8utlMJicQFnH61vU37M7602x-RTW8MPnPiyj9luX29jn6TDDD6CtmIsMH-fAgdWqvVqnlW6-pgmJH8O-T-X362vDwOnu9CZUz1Bvs9MZgfhuQyVMFipUgDOVBMN4KWrL8WLmz7vRhEf-NOkav1PElP4389LcfPtBMhnqdKtA1b3IneGrKcUyLQrUp-iC09cbKbRLiQtZZU1tTzlYCD_Zo9fp1ElB85eMnzEKC4vFBUNQlr4CcUwV4I1mBLZNp_kTTqlaQbpgyNeX77f_QP2I9vMK7fU48Mka5W1G55AUWUoGplcBC1uLRVl1np7LFRs8oWh1mCF5WrQAOBooXtCtgyQTg5nZW-uA2gA-Cfoz0CpFBZdSR9aIGS-y3mMjO5VH_qgEGwqjt_rYgxjnlXwN755SsVdRas4AlFlKImvOdW-IC9jlPs6s9IA5HJZmWokUS7RRWYJy-rbX645edSliL8IzmD1jIpQLYOxZ-ZJy3ztZYDJEBVasSSnuiAlo8KmZgX02d9cESyrza9iq_V0U9W0vs8FLOqHbTV6ZWgJ0sKfjWLqaztvv6HKvD7hQn-xqzALOypGrVchOe8VzOxIO0WaQs1AfZF5HYrJneLad9tHVmJs-7ICKx80IXoe2XnaP8B5SEJ2Pxdlfd3yR1R2TAQrIHu_P2a3y-t7uC3tZ7Tu43rK2vwulv78dy45UvEX0dTOaLQRv3WpwWQi0ELaFI7Wp6LpIfrYe_tUMhEm_cfdvW5M3loHEKROKg8510voed8dHpGv62y8cPXG4-s-iOl0EtFNB87S5G51fCyyH2x-fg4Cd_ytY_bML8KlO_EPFeYecfHX8nG3zZxO4nJceZSU7djzy-SjVdofDXK52MbK8au9B3uD4elUmvc413qQ_eedfnO5YFf2qn6A-rgOBMFRC8sQh4VQb8HlDemvC-M7mHLbK_CcVfAXr3ysIJtaq-btPwsEnwdnrePOXLUdvq8k0xW687cfB7h7d32iT9J6x9xy2pD90k_sB9qw_YWP64za037ex8HAP_bP_8rbd_qDGKZbUB3ZjX_Rqhf4URIc3PFLwlUFMr0IiQ5hkhRK6CxMuY8ZjQRiNyjcgVNbJkuZfVyyUor7nT4FUPHi0KbxkkZ4Yu7SFlRPdQzrqtgh-1pAlO2_5JBzlphyft6KQdn7STk3b_qF1VzZfV8mnQPbBaPg1P2z7t9pT0CJj2SigVUG5YCZ0u23Tjmr5HuoGlksJo9h9IIkTschufs1uwt9v5Oy3PnUe69q4FW0pVeo9SPXgrJevKsxPv7W5UDX-gQ7iX9S4b889NE3Wgig2oFQhzBuf-obeus8-0rgFrA6XGSyVLbCMbdr-xDEff_gBXxmX2Pj-UJuFNEPT7R_c8Er95QOFe3kHFaQ421KPEx1LwLV5LXmhM8LK9LaIxE-7ZMW1UndsFa4PD45px90zbL8pesYpGorZSGgFRD7vH8NzTdhpTgd1TaXgNjYBntIivTgTGVwzFYxSPe4tPXyzr5BprJnJ4TkLi40KCFoj0DV7TTfPgm3mUWJo1qA4uKQBbDaVooEFhdQYs4LHbiWVmzWLFiBYctZPby7adrY3ULahGyx5uuL4oLsNiGA7pBVwGycD-CwfhxfoyGkRxMRjQaJlnyySOon5BcxJnNC4GGQyHF-yS-CT0kyAmJAz9sBeEdFDESRSEEPSLQYgiH0rKeM_dUpJqdeEIvkzCMBxccJoB1-6xTkIsIHfQrrh4fKEunb9l9UqjyOdMG32QYpjhcPkTM-5hS4uo-emghcqE7Tj7vIUlgmp9USt--fYHFp3y_xcAAP__lBHoqw">