<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/79732>79732</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            LLVM do not generate __emutls_v.xx symbol for TLS variable alias
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Thrrreeee
      </td>
    </tr>
</table>

<pre>
    When I use ORC JIT to compile a .bc file that contains a TLS (Thread Local Storage) variable alias, the following error occurs.
>From [the code of ORC JIT](https://github.com/llvm/llvm-project/blob/5abbb7b5d038c62d3dc37ac8a2d7d57deebac0c7/llvm/lib/ExecutionEngine/Orc/Layer.cpp#L51), `auto &GV = cast<GlobalVariable>(G);` means that only `GlobalVariable` can be be treated as  __emutls_v.xx symbol, a GlobalAlias cannot be cast to a GlobalVariable. But in [LowerToTLSEmulatedModel()](https://github.com/llvm/llvm-project/blob/5abbb7b5d038c62d3dc37ac8a2d7d57deebac0c7/llvm/lib/Target/X86/X86ISelLowering.cpp) function, the TLS variable alias will be  treated the same as a GlobalVariable. It will look up __emutls_v.xx symbol for alias, due to the absence of the addition of __emutls_v to the alias earlier, it fails to be located, resulting in an error.
So I have some doubts: Does ORC JIT by default not involve aliases in TLS-related processing (due to theoretical reasons, aliases do not need processing), or is it that ORC JIT does not yet support TLS variable aliases?
log info:
> TestReadIRcode: /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:9750: virtual SDValue llvm::TargetLowering::LowerToTLSEmulatedModel(const GlobalAddressSDNode *, SelectionDAG &) const: Assertion `EmuTlsVar && "Cannot find EmuTlsVar "' failed.
Stack dump:
> #0 0x00007fb5d83ce6ed llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/jinrui/llvm-project-main/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x00007fb5d83cebdb PrintStackTraceSignalHandler(void*) /home/jinrui/llvm-project-main/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x00007fb5d83ccc46 llvm::sys::RunSignalHandlers() /home/jinrui/llvm-project-main/llvm/lib/Support/Signals.cpp:105:5
 #3 0x00007fb5d83cf395 SignalHandler(int) /home/jinrui/llvm-project-main/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007fb5d7b40520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x00007fb5d7b94a7c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x00007fb5d7b94a7c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #7 0x00007fb5d7b94a7c pthread_kill ./nptl/pthread_kill.c:89:10
 #8 0x00007fb5d7b40476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #9 0x00007fb5d7b267f3 abort ./stdlib/abort.c:81:7
#10 0x00007fb5d7b2671b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#11 0x00007fb5d7b37e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#12 0x00007fb5e0a99b58 llvm::TargetLowering::LowerToTLSEmulatedModel(llvm::GlobalAddressSDNode const*, llvm::SelectionDAG&) const /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:9751:16
#13 0x00007fb5e16d245d llvm::X86TargetLowering::LowerGlobalTLSAddress(llvm::SDValue, llvm::SelectionDAG&) const /home/jinrui/llvm-project-main/llvm/lib/Target/X86/X86ISelLowering.cpp:18561:12
#14 0x00007fb5e1718ccd llvm::X86TargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&) const /home/jinrui/llvm-project-main/llvm/lib/Target/X86/X86ISelLowering.cpp:31787:40
#15 0x00007fb5e077a468 (anonymous namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDNode*) /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1308:29
#16 0x00007fb5e0778b04 llvm::SelectionDAG::Legalize() /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:5587:13
#17 0x00007fb5e09f6aca llvm::SelectionDAGISel::CodeGenAndEmitDAG() /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:908:3
#18 0x00007fb5e09f58cd llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, bool&) /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:702:1
#19 0x00007fb5e09f5306 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1709:11
#20 0x00007fb5e09f2847 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/jinrui/llvm-project-main/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:482:3
#21 0x00007fb5e165d54a (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/jinrui/llvm-project-main/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:192:7
#22 0x00007fb5dd61d92f llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/jinrui/llvm-project-main/llvm/lib/CodeGen/MachineFunctionPass.cpp:91:8
#23 0x00007fb5d8b6ed9a llvm::FPPassManager::runOnFunction(llvm::Function&) /home/jinrui/llvm-project-main/llvm/lib/IR/LegacyPassManager.cpp:1435:23
#24 0x00007fb5d8b73bb2 llvm::FPPassManager::runOnModule(llvm::Module&) /home/jinrui/llvm-project-main/llvm/lib/IR/LegacyPassManager.cpp:1481:16
#25 0x00007fb5d8b6f64b (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/jinrui/llvm-project-main/llvm/lib/IR/LegacyPassManager.cpp:1550:23
#26 0x00007fb5d8b6f1ca llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/jinrui/llvm-project-main/llvm/lib/IR/LegacyPassManager.cpp:535:16
#27 0x00007fb5d8b73e91 llvm::legacy::PassManager::run(llvm::Module&) /home/jinrui/llvm-project-main/llvm/lib/IR/LegacyPassManager.cpp:1677:3
#28 0x00007fb5dfd3552e llvm::orc::SimpleCompiler::operator()(llvm::Module&) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/CompileUtils.cpp:54:3
#29 0x00007fb5dfe6c542 decltype(auto) llvm::orc::ThreadSafeModule::withModuleDo<llvm::orc::IRCompileLayer::IRCompiler&>(llvm::orc::IRCompileLayer::IRCompiler&) /home/jinrui/llvm-project-main/llvm/include/llvm/ExecutionEngine/Orc/ThreadSafeModule.h:137:3
#30 0x00007fb5dfe6c11c llvm::orc::IRCompileLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility>>, llvm::orc::ThreadSafeModule) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/IRCompileLayer.cpp:32:12
#31 0x00007fb5dfe6d519 llvm::orc::IRTransformLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility>>, llvm::orc::ThreadSafeModule) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/IRTransformLayer.cpp:25:5
#32 0x00007fb5dfe6d519 llvm::orc::IRTransformLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility>>, llvm::orc::ThreadSafeModule) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/IRTransformLayer.cpp:25:5
#33 0x00007fb5dfe79bb5 llvm::orc::BasicIRLayerMaterializationUnit::materialize(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility>>) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Layer.cpp:171:3
#34 0x00007fb5dfd420a0 llvm::orc::MaterializationTask::run() /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:1921:35
#35 0x00007fb5dfd5d16a llvm::orc::ExecutionSession::runOnCurrentThread(std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task>>) /home/jinrui/llvm-project-main/llvm/include/llvm/ExecutionEngine/Orc/Core.h:1718:71
#36 0x00007fb5dfd9179a void llvm::detail::UniqueFunctionBase<void, std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task>>>::CallImpl<void (*)(std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task>>)>(void*, std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task>>&) /home/jinrui/llvm-project-main/llvm/include/llvm/ADT/FunctionExtras.h:220:5
#37 0x00007fb5dfd6128b llvm::unique_function<void (std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task>>)>::operator()(std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task>>) /home/jinrui/llvm-project-main/llvm/include/llvm/ADT/FunctionExtras.h:382:5
#38 0x00007fb5dfd5687d llvm::orc::ExecutionSession::dispatchTask(std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task>>) /home/jinrui/llvm-project-main/llvm/include/llvm/ExecutionEngine/Orc/Core.h:1609:5
#39 0x00007fb5dfd431ec llvm::orc::ExecutionSession::dispatchOutstandingMUs() /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:2309:5
#40 0x00007fb5dfd44b56 llvm::orc::ExecutionSession::OL_completeLookup(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState>>, std::shared_ptr<llvm::orc::AsynchronousSymbolQuery>, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>>> const&)>) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:2920:1
#41 0x00007fb5dfd95f03 llvm::orc::InProgressFullLookupState::complete(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState>>) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:580:5
#42 0x00007fb5dfd3cf93 llvm::orc::ExecutionSession::OL_applyQueryPhase1(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState>>, llvm::Error) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:2675:5
#43 0x00007fb5dfd3b140 llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind, std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>>> const&, llvm::orc::SymbolLookupSet, llvm::orc::SymbolState, llvm::unique_function<void (llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef>>>)>, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>>> const&)>) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:2147:3
#44 0x00007fb5dfd433bd llvm::orc::ExecutionSession::lookup(std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>>> const&, llvm::orc::SymbolLookupSet, llvm::orc::LookupKind, llvm::orc::SymbolState, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>>>> const&)>) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:2184:3
#45 0x00007fb5dfd43633 llvm::orc::ExecutionSession::lookup(std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>>> const&, llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/Core.cpp:2209:24
#46 0x00007fb5dfe80480 llvm::orc::LLJIT::lookupLinkerMangled(llvm::orc::JITDylib&, llvm::orc::SymbolStringPtr) /home/jinrui/llvm-project-main/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp:881:18
#47 0x000055bdc6ff8a29 llvm::orc::LLJIT::lookupLinkerMangled(llvm::orc::JITDylib&, llvm::StringRef) /home/jinrui/llvm-project-main/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h:164:5
#48 0x000055bdc6ff8997 llvm::orc::LLJIT::lookup(llvm::orc::JITDylib&, llvm::StringRef) /home/jinrui/llvm-project-main/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h:176:5
#49 0x000055bdc6ff1754 llvm::orc::LLJIT::lookup(llvm::StringRef) /home/jinrui/llvm-project-main/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h:181:12
#50 0x000055bdc6ff090d main /home/jinrui/llvm-project-main/sjr-test/SBTtest/TestReadIRcode.cpp:40:23
#51 0x00007fb5d7b27d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#52 0x00007fb5d7b27e40 call_init ./csu/../csu/libc-start.c:128:20
#53 0x00007fb5d7b27e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#54 0x000055bdc6ff04c5 _start (./TestReadIRcode+0x64c5)

 If I compile it statically using clang, it compiles successfully. However, the same problem arises when I add the `-femulated-tls` option. If I turn off the `EmulatedTLS option by using JTMB->getOptions().EmulatedTLS = false; `with ORC JIT, the following new issue arises.

> JIT session error: In /home/jinrui/coremark_pro_x86tox86/mazeTest/maze.ll-jitted-objectbuffer, symbol data_403ff8 (0x3ff8 -- 0x8099) extends 0x3ff8 bytes past the end of its containing block (0x0 -- 0x40a1)
Failed to materialize symbols: { (main, { main, __remill_missing_block, __mcsema_debug_get_reg_state, __mcsema_reg_state, __gmon_start__, draw, __mcsema_init_reg_state, __remill_error, __mcsema_detach_call_value }) }

So I am curious as to why this problem occurs. I found a similar issue in [another issue](https://github.com/llvm/llvm-project/issues/43046) from 2019, but it has not been resolved yet.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFtz27iS_jX0C8oqErw_-EG-KEez9iZra2bnTQWSTQkTCNACoG2dX78FgJJImk7sjO3JqUqVK6FIoNFf39AA2CRK0RUHOPPicy--PCGNXgt5tlhLKQEATgpR7c7-dw0czVGjAH2-vUC_zRdIC1SKzZYyQARNihLV5lKviUal4JpQrhBBi-s75OFssZZAKnQtSsLQnRaSrMDDObonkpLCkGCUKA9fIL0GVAvGxAPlKwRSColEWTZSTTz_0vOnMyk2yIvPTcNSVIBEvefJiy89nK213iovnHp45uHZiup1U0xKsfHwjLH7_X-nWyn-glJ7eFYwUXh4FpOiKNIirvwwKxNchVUZpqTMCK7SKk4rgIKUfpl26FDT7-oRykZTwa_4inLw8OyzLD08uyY7kJNyu_VweB0HHs4NPi_xSaMF8nDy6Q_khZeoJEp74cUnJgrC_mgF4oVXHs4-mU7huZf4aAOEKydewdnO0Bn0SHxUEo4KMH9aAtFQIaIQWi5h02imlveTx0ekdptCMMMKQY7C1Mje9OVCm76GIaPe_fP9CBN03mhEuZH-tXgAuRCL67urTcPMUDeiAubhzLD8j-hhQeQKDJ0_s8T9O78DZhmlfOUUkaO64aVR1t7WjIH2rRA9UMaMHA5CNO0U2YCR5lOhzLXrwYT4iprtqLhRLeTRxqsGjHwNWVIo4KU1Yvuzqqjhzvw-0jk0tuwBkYyCNISoRjWhTJkGBSAmSsOveSJBNUwbF6IcEe4cqfWgO4HmaE3uASmxAVSJptBGUehSgDr4d7FDFdSkYRoZu6D8XrD7lgdQhuzi-u5UglU-2kpRglJmQA9nR4BCgqbG6SUQJbiFvydRCUuZQ69_6ydCIqoMQGvye6Yqw6HptAONVLPdCqlHVAjKC2cOLBNGBLUwhmhveOEVWoDSt0Cq-a2JIAa6h2drsTHO-xflsqED6zzdEMqHBnchKvgE5vYdMLBWdTn9dLDEnuWF0zyNfTPSPZW6MVHw8g_CGkCWZDj1wmm_m7v3vJ-Vgiu99-CqkqDU3eV_m4Do4amRYJcpE26M9dtOhoupUiCtpXmJf7VpFkz9QaRrliAP4wsXDmrKK9R9jj2cWqODam9OmpRfUdVstj0Zezj0kf_o-76f1kVcZWEJCVQdvGqn3MUXSbm2ZBaSlODh7NhIkoelUMYTN5a5C0S5NlB-RGN3zmI8PPud00dzg644YWpCeemF0xSHXjgNAgfCIAiGCIqqQAN2HY1_EV4x45XZvaCVVcH78Jhnhscji3jAYllGyZiQbxve41S5WP03edwz52w88GMvnMZH5sIBc3WYx2gosPdTaBSEfWFFXX7SIvJj7CMriJbgY5Ysk-iUUd48nq544x6UEyUmiYfP_ccIx9g3MepAM-7TzCOSlmi53Gqb8yy_UsaWdLNlsAGuifW5iYdnfKuZh2fdZhPLc2S0nBzpJy-hzzVITtg3KafWcvwj5XSMcrfbN8ll-YBcNhRulCZopaxGLCV36eHZxP7aqQq2ypAWyipPEqrA0sapF047Msj7pHGS1iEihYn-lpSunPrsLcddYBC34QiHgf-EQlCgJWdLJki1rISxLkuLcgvX3N6oVUkcuSBIDUv5kWDQJximkCevM6Uwhzw5mJKh2fVl8EmeF3H2wxPEsd_YJOFmAjdTHFv2J7LjlPEx86NRWZAcxdGNHhAkFY7i7vzxZ5Y8KxEHeXF916LuyaOdet8R-gty0XAaZHFiIeMj5KgHOQ2ysnwp5M9bkMSltj8f1jBIM-NAkX_EGvesPU1JlGTGgwgXfLcRjUKcbEBtbUqQP-X8GlaE0X9DK4P21-ftAL8x978xHz9rxfsBL6ef9goNfRNiux6dDDBmhR89p4gejL8xO7-C4zi2WgnCI8dpj-O8TkhJnuHY6NndbYec8upqQ7Ud7e3ZHw69DxxW6B0E2QBBnPV8aByBu3tOFC3PmSi_9oyIMqr0kmrjYEJ64cXwUQWa0JYSFxUsxdaMoHpN51xp2RxXn9K5ZU2Yshc2cTTr_s4928jd-8nYKYRgbez4CC2nPj6mckbL-VDLoZ-8UMtTxo6K7k8Ns3Z7YD8_fhi-IPXzzuLDJPb-ACHOovS7CGXDP_MbUq4ph9lhr6OD8MmzD4MYZbjnqDjoz-9xFUfkexPAn1lyOf20EP8U6PHZbs_SXpk57mWfuLdIq5KgynGNnmXvC1GqA2wU0Zvqb2T8fXA1CUp2BNJf0BUJVHl3dph9MX1vCCcrkB8AYX7bTmvlrjPwXgtRaJajuGNxUZ_9NCwK_AL2b0TVsP6-xP7We7GeDZJhHA8kXydR8T1nuflp8MR286urimSIJ-jlGcxSaveHjvTmm-3R5z8QQGxNqauPdGhKkAff5_-f4D1I7Nq1I_veSr2uwjjG3Y1IIct2irH7FhfumKflXWzbtMNt9b8pjOeOUloOftf0sNUUR31IvR2CGpIyjjCqoGR6tzWWThotDFsjKN3h1B2poQVg7z5QvXa_L0Uvbzr0m9-2fNmTnsE9acRgD3F-qOerBUh5yRqz0NnfeE6WQ7STtV0A9C2kv3VrxBkE5ZjsxpDAhmoPZ0pX7nfD6f81sNxqOS7HG6JBUrMyscvXW1BbwRUtKKN6Z1LNA6X2QGJZAQMNP0ItvHqSTT9vB29sxX1Z7RfGuL8D0N9yriGp4mDUaue3C0m4qoXc_JL9C2Tfl1YrfdzZrzbCx7-E_88JP-wLP82LIh5j167d5reW1AD075xq12hzeAA_uUreVtZdAQdp0I_qUX_ej7BP_DEJD_heEPW1m7i8_fQu4bhysjx3zCLuMx1XQULGmD5QvwOlzLLimO9eNFIC187OX2MOFvlrte7E9WPKffE0bmW2dkrOzGLzuHHQPzGqqzxIc2K3czpi624R_W6lsF-OnRNlgLljzA7095aV-bN7iYQxl-ZbHtyZytTlmh-oOJe8HQ5zP1AQb5L-TS8XHp7tdXr1qCVR1l4w9vthN-1bSxLgrOgYSov28N7MUSsfrIzx1cd_kCs_q5LQbox1VDJYn8VJllYvD3kVVVuiy7VD_J8koe8Hu8TuknZElQ-mtDCA0YXKt0X1udFKE15Rvrr5_e-8GfGCKQ6HAwyRP8AQFXHycgyfr5elMOt0DddCfG22r9H5nH-RYiVBKdf3ThMNrzaCcSqHlPNAS62JhOp5bqZqx8u1FFw06s6-OPc_DcjdkMxILDoSuwSu4IZsx0f4bb643FlVDU6-bbc70OPdHDN3WlK--qLlSNcbsp3b18xe2H1_ujJMyr9PbAChc0wzPrvvKX4h9Bmx_4xCsX_dU5h3yJW7TpnbafGYREXBIImKaz8cXQoebH_WMNazf_N475o_mVO-myDjrJ9eRHiw11jW-agcnw1uZLtlOxsHvqyJguAnk2TX6K-kNKnJ-1lpkvbXzFE4kG4RRKMrunHpsv18MdLDQf0vyvurgHso3Znz4c729XHlSQs32IyRlRoGe8Lsa83vPuYw4Iz2dTGrtQLQ32x1sLWX5NIdG3rcQqmh6sH79qT2zUA8MAEhXetLqN8wYP-NyedHmT9ME-3U8Cs_-JUfvGPkDaL-CUk03EsLw-IVazT2JFP_FVi_H1j7c9L3I--viPArIrxfRMj6R9BRPIwISfiKTPdXRPiRvKDn8O-na2y3bHB0VHZ_jx0yP8pGE-_r69_mi66Gryn_CvKG8BWDajz1Pgr2xcJ540Mkw3SLPXNvIh3fAYv2G8ZxXFRlUtcZGX-v4k2hO6y3Jmt9t21GB9vtM0b9dVY2xJzn6Ysw_9ww06QPMx_ADNI4ej3MDwaRDYooYn-Aws_9CtkCnxcyo_6SpxqULXA7X7RX_aLR_Tutg9fa4kFZEE6r3EfLJaNFuVSaSL0sCWPLQ7lRqZqnBVFtydVYJws5zvovo8V4OCpEPrJ9KKd6OJC7NNRPLXVX4YRt7cKxPiMOx4j2oIyhGCUepv0t7zgaqigqY-SomuRs8kTetmIqicr4WDDlqsPmNZofvkRANVKa2IpjtkONrUcuGeGrtlq6baeQasoSlKobxnYT9C_xAPeupPpQ672VomCwQURSBQo9uC8gkMqVg3uJf1pDW3F1qpnyEh-5t-wnjiXdSI5EXe-b78uzFtd3bUNU7Fn8bXFzfuqFVyvQn9s39e0RxKTbyQsv2xfxw3ND8IHq9eHLB0--nMDhAVGlGmgBTLpCM9Pvb_MFUi4BcdXhXjhF81EXKYWEDZFfl1splo9ZosWjffl5Q_4NC-cc5nLC2OlfVBuBiMK4U9HUtZNqWwVfEU2WkR_WtS308R_t1ekp8h8zP89NuIBHDbxSqH1W7DQotLVfJFgDAl4hUSOq1f4jEwZrwUT51RH0HbXIJ8HBUGa2WhlpgTovhbQs2bp3Lz03vZ3zX9if--vlUsKGGt-jtjp9WbjiEPNkUyrYkGUFRbNarkAvJayMCbu1x-H54O5qI3jrPkv7MQBJHnrtjccOO7VMOD31B9ekXLvwcG_ryb300obd9LKrcVvzTzaobCQVjULEfjPgYb1Dek3VwdjbL22gOapFwytEkKIbyohsbcl9_IFwodfQ3vvBjz3YvibWRaEf2QPvWooNwn5gy_-LRht_XRNX7l8AcCRBCXYPFdqBnpxUZ2GVhzk5gbMg9ZMIJzgJTtZnCUkCP4W4itIygDSCwK-zIMlxGkCYh-SEnmEfR36AMz8N0iiYkBQnRVFBngUYwiL2Ih82hLKJYXki5OrEMnuW5mmITxgpgCn7uRSMD17mYezFlyfyzMIsmpXyIp9RpdWRiqaawdn19R83-08frICDJBqe_2bE028bnDSSnf24uC2I_w8AAP__leP9kg">