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

    <tr>
        <th>Summary</th>
        <td>
            Error occur when using Legacy Pass Manager
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          for-just-we
      </td>
    </tr>
</table>

<pre>
    Hi,
I'm currently writing a pass for instrumentation. The code of the pass is as follows:

```cpp
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/Casting.h"

#include "llvm/Pass.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"


using namespace llvm;
using namespace std;

// 编译的时候必须加-g参数添加调试信息
namespace {
    struct IndirectCallInstrumentationPass: public ModulePass {
        static char ID;
        IndirectCallInstrumentationPass(): ModulePass(ID) {}

        const char* log_icall_function = "_ly_fun_indirect_call";
        const char* log_funcname_function = "_ly_fun_func_begin";

        void declareLogFunctions(Module &M) const {
            LLVMContext &C = M.getContext();
            // void type
            Type *voidTy = Type::getVoidTy(C);
            // 64 bit integer
            Type *IntTy32 = Type::getInt32Ty(C);
            Type *StringType = Type::getInt8PtrTy(C);
            // 不支持可变参数
            bool isVarArg = false;

            // char* fileName, int line, int col
            std::vector<Type*> logIndirectCallFuncParams = {
                StringType, IntTy32, IntTy32
            };
            FunctionType* logIndirectCallFuncType = FunctionType::get(
                    voidTy, logIndirectCallFuncParams, isVarArg
            );

            // char* function_name
            std::vector<Type*> logFuncNameFuncParams = { StringType };
            FunctionType* logFuncNameFuncType = FunctionType::get(
                    voidTy, logFuncNameFuncParams, isVarArg
            );

            M.getOrInsertFunction(log_icall_function, logIndirectCallFuncType);
            M.getOrInsertFunction(log_funcname_function, logFuncNameFuncType);
        }

        void insertLogFuncName(Function &F) const {
            if (F.isDeclaration())
                return;
            string funcName = F.getName().str();
            LLVMContext &context = F.getParent()->getContext();
            BasicBlock &bb = F.getEntryBlock();
            Instruction *beginInst = dyn_cast<Instruction>(bb.begin());

            Function* funcNameLogFunc = F.getParent()->getFunction(log_funcname_function);
            IRBuilder<> builder(&bb);
            ArrayRef<Value*> funcNameLogArgs = {
                    builder.CreateGlobalStringPtr(funcName)
            };
            CallInst::Create(funcNameLogFunc, funcNameLogArgs, "", beginInst);
        }

        void insertLogIndirectCall(CallInst *CI) const {
            // Get debug info for the instruction
            // 非间接调用
            if (!CI->isIndirectCall())
                return;
            DebugLoc debugLoc = CI->getDebugLoc();
            // 没有debug信息的通常是插入的call指令
            if (!debugLoc)
                return;
            auto *Scope = cast<DIScope>(debugLoc.getScope());
            StringRef fileName = Scope->getFilename();
            unsigned line = debugLoc->getLine();
            unsigned col = debugLoc->getColumn();

            IRBuilder<> builder(CI->getParent());
            Function* icallLogFunction = CI->getModule()->getFunction(log_icall_function);
            ArrayRef<Value*> icallLogArgs = {
                    builder.CreateGlobalStringPtr(fileName),
                    builder.getInt32(line),
                    builder.getInt32(col)
            };
            CallInst::Create(icallLogFunction, icallLogArgs, "", CI);
        }

        bool insertForAllFunc(Function &F) const {
            if (F.getName().startswith("_ly_fun"))
                return false;
            insertLogFuncName(F);

            for (BasicBlock &BB : F)
                for (Instruction &I : BB)
                    if (CallInst *CI = dyn_cast<CallInst>(&I))
                        insertLogIndirectCall(CI);
            return true;
        }

        virtual bool runOnModule(Module &M) override {
            // 将插桩执行的函数声明先插入
            declareLogFunctions(M);
            // 遍历每个函数
            for (Module::iterator mi = M.begin(); mi != M.end(); ++mi) {
                Function &F = *mi;
                insertForAllFunc(F);
            }
            return true;
        }
    };
}

char IndirectCallInstrumentationPass::ID = 0;

// 在opt中通过 -load /path/to/pass -icall_inst 执行pass
static RegisterPass<IndirectCallInstrumentationPass> X("icall-inst", "instrumentation for indirect-call", false, false);

// 可以在直接通过clang -flegacy-pass-manager -Xclang -load -Xclang mypass.so运行pass
// Register for clang
static RegisterStandardPasses Y(PassManagerBuilder::EP_EarlyAsPossible,
                                [](const PassManagerBuilder &Builder, legacy::PassManagerBase &PM) {
                                    PM.add(new IndirectCallInstrumentationPass());
                                });
```

currently, the pass can successfully work with `opt -load /path/to/pass -icall-inst xx.bc`. The binary generated from the bc output by `opt` can successfully run instrumented code. But when I use `clang -g -flegacy-pass-manager -Xclang -load -Xclang /path/to/pass xx.c`, It generates a error trace :

```
0. Program arguments: /global/utils/llvms/llvm-12.0.1/bin/clang-12 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -main-file-name test.c -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -resource-dir /global/utils/llvms/llvm-12.0.1/lib/clang/12.0.1 -internal-isystem /usr/local/include -internal-isystem /global/utils/llvms/llvm-12.0.1/lib/clang/12.0.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /home/cbj/projects/c/IndirectCallInstrumentationPass/testcases/testcase1 -ferror-limit 19 -fgnuc-version=4.2.1 -flegacy-pass-manager -fcolor-diagnostics -load /home/cbj/projects/c/IndirectCallInstrumentationPass/build/IndirectCallInstrumentation/IndirectCallInstrumentationPass.so -faddrsig -o /tmp/test-312230.o -x c test.c

1. <eof> parser at end of file
2. Per-function optimization
3. Running pass 'instrumentation for indirect-call' on function '@get_one'
 #0 0x00007f6a0ca45a21 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /global/utils/llvms/llvm-12.0.1/llvm/lib/Support/Unix/Signals.inc:569:3

 #1 0x00007f6a0ca43654 llvm::sys::RunSignalHandlers() /global/utils/llvms/llvm-12.0.1/llvm/lib/Support/Signals.cpp:71:20
 #2 0x00007f6a0ca441a5 SignalHandler(int) /global/utils/llvms/llvm-12.0.1/llvm/lib/Support/Unix/Signals.inc:397:31
 #3 0x00007f6a0c495090 (/lib/x86_64-linux-gnu/libc.so.6+0x43090)
 #4 0x00007f6a0cfbe0c2 llvm::PointerType::get(llvm::Type*, unsigned int) /global/utils/llvms/llvm-12.0.1/llvm/lib/IR/Type.cpp:690:48
#5 0x00007f6a0878c06f (anonymous namespace)::IndirectCallInstrumentationPass::declareLogFunctions(llvm::Module&) const (/home/cbj/projects/c/IndirectCallInstrumentationPass/build/IndirectCallInstrumentation/IndirectCallInstrumentationPass.so+0x1206f)
 #6 0x00007f6a0878c9fc (anonymous namespace)::IndirectCallInstrumentationPass::runOnModule(llvm::Module&) (/home/cbj/projects/c/IndirectCallInstrumentationPass/build/IndirectCallInstrumentation/IndirectCallInstrumentationPass.so+0x129fc)
 #7 0x00007f6a0cf67938 llvm::FPPassManager::runOnFunction(llvm::Function&) /global/utils/llvms/llvm-12.0.1/llvm/lib/IR/LegacyPassManager.cpp:1445:7
 #8 0x00007f6a0cf67bb9 llvm::legacy::FunctionPassManagerImpl::run(llvm::Function&) /global/utils/llvms/llvm-12.0.1/llvm/lib/IR/LegacyPassManager.cpp:367:18
 #9 0x00007f6a0cf67cbb llvm::legacy::FunctionPassManager::run(llvm::Function&) /global/utils/llvms/llvm-12.0.1/llvm/lib/IR/LegacyPassManager.cpp:1353:1
#10 0x00007f6a0fe975d6 llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Function, true, false, void> >::getNext() /global/utils/llvms/llvm-12.0.1/llvm/include/llvm/ADT/ilist_node.h:66:66
#11 0x00007f6a0fe975d6 llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Function, true, false, void>, false, false>::operator++() /global/utils/llvms/llvm-12.0.1/llvm/include/llvm/ADT/ilist_iterator.h:157:25
#12 0x00007f6a0fe975d6 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) /global/utils/llvms/llvm-12.0.1/clang/lib/CodeGen/BackendUtil.cpp:1006:25
#13 0x00007f6a0fe99305 std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >::~unique_ptr() /usr/include/c++/9/bits/unique_ptr.h:291:12
#14 0x00007f6a0fe99305 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) /global/utils/llvms/llvm-12.0.1/clang/lib/CodeGen/BackendUtil.cpp:1598:27
#15 0x00007f6a1020f749 std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >::~unique_ptr() /usr/include/c++/9/bits/unique_ptr.h:291:12
#160x00007f6a1020f749 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /global/utils/llvms/llvm-12.0.1/clang/lib/CodeGen/CodeGenAction.cpp:344:24
#17 0x00007f6a0a5e4919 clang::ParseAST(clang::Sema&, bool, bool) /global/utils/llvms/llvm-12.0.1/clang/lib/Parse/ParseAST.cpp:171:34
#18 0x00007f6a1020e3a8 clang::CodeGenAction::ExecuteAction() /global/utils/llvms/llvm-12.0.1/clang/lib/CodeGen/CodeGenAction.cpp:1083:5
#19 0x00007f6a0e6cf0f9 clang::FrontendAction::Execute() /global/utils/llvms/llvm-12.0.1/clang/lib/Frontend/FrontendAction.cpp:949:21
#20 0x00007f6a0e668d1e llvm::Error::setChecked(bool) /global/utils/llvms/llvm-12.0.1/llvm/include/llvm/Support/Error.h:305:22
#21 0x00007f6a0e668d1e llvm::Error::operator bool() /global/utils/llvms/llvm-12.0.1/llvm/include/llvm/Support/Error.h:236:15
#22 0x00007f6a0e668d1e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /global/utils/llvms/llvm-12.0.1/clang/lib/Frontend/CompilerInstance.cpp:949:42
#23 0x00007f6a10665780 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /global/utils/llvms/llvm-12.0.1/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:279:43
#24 0x0000559771d5ac87 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /global/utils/llvms/llvm-12.0.1/clang/tools/driver/cc1_main.cpp:240:40
#25 0x0000559771d54688 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) /global/utils/llvms/llvm-12.0.1/clang/tools/driver/driver.cpp:330:20
#26 0x0000559771d56d7e main /global/utils/llvms/llvm-12.0.1/clang/tools/driver/driver.cpp:407:26
#27 0x00007f6a0c476083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#28 0x0000559771d541de _start (/global/utils/llvms/llvm-12.0.1/bin/clang-12+0x101de)
clang-12: error:unable to execute command: Segmentation fault (core dumped)**
clang-12: error:clang frontend command failed due to signal (use -v to see invocation)**
clang version 12.0.1
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /global/utils/llvms/llvm-12.0.1/bin
clang-12: note: diagnostic msg: 

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-12: note: diagnostic msg: /tmp/test-42532e.c
clang-12: note: diagnostic msg: /tmp/test-42532e.sh
clang-12: note: diagnostic msg: 
``` 

The testcase is:

```cpp
#include <stddef.h>

typedef void (*functype)(int);
typedef int (*functype2)(long);

static void f1(int x) { x = 1; }
static void f2(int x) { x = 2; }
static int g1(long x) { return x; }
static int g2(long x) { return x + 1; }

functype get_one(char c) {
    if (c == '1')
        return f1;
    if (c == '2')
        return &f2;
    if (c == '3')
        return (void (*)(int)) g1;
    if (c == '4')
        return (void (*)(int)) &g2;
    return NULL;
}

int main(int argc, const char* argv[]) {
    void (*f)(int);
    f = get_one(argv[1][0]);
    if (f)
        f(1);
    return 0;
}
```

I try to follow this [issue](https://github.com/llvm/llvm-project/issues/56388) to replace `EP_EarlyAsPossible` with `EP_ModuleOptimizerEarly`. But what's weird is the pass did not run. I check other option, it seems that only set `PassManagerBuilder::EP_EarlyAsPossible` the pass will run and output error trace. The LLVM version I use is 12.0.1, how could I fix this issue?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcfFtz2ziy8K9BXlBUkaDEy0MeqNuMqpyJK_Zk93tyQSQoY0IS-gAwtvbh_PZTaIAiJVG-JJmzW-tK2RQINPrejUYrVCm-axj7iGZzNFt-oK1-FPJjKaT3V6u098Q-bEVx-Pg7R2SB_CXysw0icY3zVkrW6OqAnyTXvNlhivdUKVwKiXmjtGxr1miquWgm-P6R4VwUDIsS60dmZ3KFqZlfVeJJoTCz4N3vyLf_8v3ejZCQN3nVFgwjQqrqe43Ies61Ads__UNyzeTkERHywrK7dr8XUiOyXvOK3R2UZvXb10j69CCUloy-Y9GCKsOl4YLry26pUq-B3nyBX_OWV8XrFMPsT6JoK_amqXOqeD6vRP7tbXiAwHMQ9jvnv43QJdu2u01TijfNvmE7mh8MFz_Rhu5eZ8-9pI0qhayVAXH72cnArR7h8eB3q4z2N7Rmak9zhgFkOB9_qXRxfNfhs0ZkjdEqRvMFSiO0SlC2RmlgRtIMJVO0ilAao3mEVjOU-ChNzcN8jZIZWqUoC9B8Dq8ylPneDh7XKCGwbobmvnmYx8NZZpO5j5Kw222GVlMDMgvM5CQwg4BejzqKHd4YY2zFhzdNwSXL9YJW1ebU6A3_UJjhfbuteI6t7pnBU0AWGNU8x_kjlXizPPKne_3aJiRBJDVb9XsgkmyWiKSwV7wc8ruDmotGadgTkQxXYvfAc1pVD2XbgF5iFC6NhjxUBzP2wB0WD2aWUYRzNC8BGlCGf1dhmvGHLdvxZgjwFOx3wQtcsLyikt2I3dqBMiRaejEi0SdDq0Xggrvm5-bm66eFaDR71mb6AhD5NNkx7UY7Jo6sdQoKeOjDnl3OuD_sDRaZmXJ_ANhmyLj0MNsx_RXGEUkWr-wRTfGWa8wbzXZMXt9o0-j7Q0gud9o0OiQvb9XBuNOSNzv7aQRMcqvlm3AGw0lQsgRzmxrDMRa0MEZkLdGMwEOajNjmBdytEBXm6iuVmdwBbiWtFLuiHgNMOtUrecX-oDVDZGFYiSveHJ9zUV2uB6dkSP_Oci0kChfADZKhcGUUeWiARv9uqaS1sso8pm3mp2ev2doJbPh4SUV8afrmp9N4h9MYQkcpnsztpGl0exRH7MzLyHlxnVDgnZPHGPPTd4jG4fdg3ML7BWFwMpK9FAIeqvPbGTkE-KuYeInkzzAQnNRnuWkUk7rDDJHk0mFfkaGldtyEXwJ-4bxHyLsG-0rIARfKYbObHhAiyfoYH0i0fsWV8xKbFROulhAUqMPZ4EHScRlJplvZjLJAgd6AYhpkrAIYtjjUEEknSssX4sNZbMm7xw7QLTUHBQvAQ-HqTUGnzz8NzO22B7dqtDzAmxeWD_JL4-shxG6ApeESF4fmIadKo3AxmIfCFSLJdjtx8bhj6HXV7BUmO_LPyfVF6l9XtCtEdck-ChfGIWzdJwM72m6vLcukpIcvrETh4iut2s6dDDDO5O4Vb25-3HaThWRUs98qsaWV9Tq3oB_lUZ9HtPCaT-pyOutnLOgBLMdOY3pn-JohkzQRCCpHAf-wNQ7dhon6Di-jPYvNKybpnPxvTOPCnFMwb0oBB2Fz1uUDHbueRKQoXaJ0BQ8xmkPSn6xQNhuk6jHkFyN-2PoERILFxugYV2fU_KBvgEPXjcgtVebBKIndY8d09_r13BEOIMQdLtIFSlKAOHLm6M88KRx1MjjqJOafWZp06dUapQSSqRmwyK2C1NxlXzFAn6Ns-gK_iiMJ7-cObbWARDIXLnA6p7LcwJB1KN0OxhfY4QvPMgRqDeoLK49ZHECGlZ374BVrjs55FErbQFWngNTP-jyHhoNxAynh6-tzUY0tX4iqrZszAO9xWEcdGrrHa9gM_SyE_MEx6FQj7YHoJWd7njK8y2V2m_8if3lM09Njbe0lON3xxlAC4nv3MpP8_wLnfC4DSO8GrDl1zeA93-qT7dnHpmNCZjaD-8EE6TyHoVKrJ64fYaA7ggOSrznHswPYyWZj2dzLVmHiAiLJaYYzn2MUZnh9FRO36jSxiTawaj6_uqxnyGlEO0-EelGvbD6xeYktF9SfR89RmQ8YqmV7yc9rcZpL3dLK6oZsm8_N0czPCiDiO5OSF-zFKA0BxUdJNIgjkYlBWQojKcpiqIoFJoz08WhmQsp8OSiqzVAWuupamphgbeNRkoxEqAtsrlR0Xg2kqQmUyRIgrxwV2dpsZ-sQWTaC6jUddIwE8-aaSaqFxDV31aFhIhzOYZwE9hVriv4FInNE5jXv6m2jKnNiwa4OltV8lNhetU6dwFXmdIrzbk3DZ97vTAVtRfLVGicKs80SaPKvFXdnJu3JErHXnZyWgxQngWpujL1K0MLIek-Nn1prAc9KYc8GLg4GfKGmZord0JVSv7AdV5pJi-DiVRJW-J_WLcI2HodMmjhHfnab4254LESvq4aaDB28ZP9w7gQHzHBVMZugzY7sAXObn2a_50zKK9rssFdWUOP3DOlebev02Punewt87D7VBzNpooSDkfojjHPIdYwDImH5KF_vNG0KKgvDPabw_0MkubwvsJqxun1YUVkdMnUrlOJb47heCNsneg13chC4jdwvd4DI0SVVC2xZYrcdTqYKfOTtpxctdOzn9tOEFsbUG_b0xjr8FRsdpS9enmhJd-d3YoLdPaMh8Hh1mNMGqzbPmVJlW1UH_CTkN2yiO0aRL_b6VVMCHcfPz5NtjiLf3lBueUPlAe9YY1whK3ApRQ2bbnMsWr1vNd4e3A4o8i_RkG0zuPyEBLpgEzxvNX56ZA3e4NbIIvKdnr5PkceoeX6eGAKgsqqPqCtMMZPSnEAl3N1cuV21H_0JvpViJ2mNqdwB6nB1g8h6B2krIutW80ohsq6q73X31wvIxJ8EiKy3JlCsAUsvINjL8wB7WvJ9xfBzEj1EU69tvjXiqfEq3rTP3q5pscdqrj2x_Qt7tWQVffZoVWGv-yBZJXLQLoW9giu6rZhXSsawV1PeeCZ_9sxBCGum9CS3UNwSrxYFq7qbJa8uJa2Ztxe80cYwl7BTWVP96DEpG4G9shGeFG1T8GbnmRfYq8HuTLolpEcrTo2te3XbPPGm8LRBSGFPU7lj2sv3rSHVi6bY023DYADkYRAw0NW-4tornqgsPd5UvOFGwnC08nhTCu8bbwoULitec6M7bup3JhXUp5ZTN3vHpNmCNzsULnfFFnuSKdHKnHkFl-8QW8W3ndgQWdth7AGPGlp5XMHNuAHYKmnmixygdheoo1N_Yu9R0OzZPOSX2LipiKydig1U66XV798Ce6UVUy7qPa-shjlWPwqT9K_z7V_GJKX4i-XaUJvDNfcrHnNtVDc3ejV4DrBXgvF6oAk4SLFX7po2H6rChBhRjTuPMheVkF7B6a4RSvNc9e7w59CFQ-XLM1-HM1HG3GhRSMV32BMGLV3vHQe8MCAk9CcCe884d7Y9dF7BBKNwwURp0pY9lYpJTDVmTYGFLZvYeWSCb5n0jnevYq95zf9F-0JcOMFf2gbMEHwpIvEbcp0Ym_E-nY3R1N8x_SDMmTx2mC4IynxEQh_7z77v-3EZUT-n0xklgesQMFFaHVz-eCt5o-80zb_dG4dtzvjHSYN-E0Qid5MHofztxmbbHKzN9U0pfzb82QzwXUMrNeFNjsJsFqUozMKTeNGRE5yRE0az6Rg5X9rGAv2dNkXFpEsOfh7jDtV8v0dhFgcozIh_hiQ5Q3Ia0Bk-QQeR5G9lYZjG5ndwhlh4gtg0nfmpbwuRDuy5H7Mv8okSkwiRuf88Df3UPx7Lj4CnJ4DLLfNzMhDLrQ175_d5_YTulpEs-tLfzzEI2nAMWCepKPVRmE2TLtkOZ0OUkzjJ_QjKFLQRzaEWreqbZmx3hzlkveUkNn6w7mntigfRoIwEIvjP8Iwg5oD4UXkp5uicZ2mZ_xKenVZVrvDqP5BLaZlfcik-NYYoTsNkYAzr28HRaED-sFDcTz4ORj9rDJc9adYygul0ZlzZGRXJORXbbTqgYnjU65AcwN7U--pI2_81RWFkvF-QnFGUnlOUb7dvp-jfRk0QzkLz5-i5gpOYXrI0nhXRgBBecaUfGlGwBw5iWJy_K5im3MkH5pnUxPip4dRhdR2KWMMKy3fBC5P-oHB19Oh_HG_U38-HPpV2A9ny3gwfSZk8Gice2V9HTgRv4URXWPw7GTFSfuo4I_Zue6hS_i0M6igEJgUzo_1k1nOJjHHpFbe9qrnOlGL1tjr8zqr9sZo0GEcksccneDOn-TfWFNmRV8dmorbh_79lD3t9KgKTVu6fJNfsoUsuB4sKVtK2MiKqmGavLHSa-C7Gdic_a4ILUbDfWAOdx0DHn5pXnQX6fnTG0vCMpWnoz_4NBMPb_xlsd9Su8xNq3qnfOoVyCcTMfiFoDklNOhv0fcrBdIzMgcyNNjh-fYby1KlKLPsD4KrZwZ0hHB8GU35ntGDyjlGZP362xmeTosupTkSvzLqHasgrk25osxub0rN8STW9oQfR6isTutQkOwP9X2wGszQxWhL3-jFMogOf-GU8Tf8LzSAaofJS5AvRqLbuHKU96UFfv63X_NnwM_PI7u6PjWjvTB-uSc09We3r0qHp1FA17ek5yVDpjE3T4ISgWyoVy-7uT9G9YzV1ZrAVour__jjisFH3N7u77zQNztXhAOPkTNFYSJMR3-CszvqmZ5a3mnWG-M6w-x4GB35iMrRBeDhJNVmUl355wuC1NHI_eokhvj-JaQd58HiCazo1AZ702STxT3GNkiJgAz-3klI4lVZMLx5Z_o0ViCTvF_21TKavZcBeYIOhb84kg6_MkODNaHYJl9POX5RvjWFJwgj8Yo8lGcPyRE_rPa-YNKdK2uRsXFWva8rP-YmBcpwjcqIe0wHfwxPLi6JZnPgnKYDFvYf33d2AnNJxQbgJnD9PyT2IeH0VCUcWiYGssCery2xmszSOg2JG8yTGeR481JSfHvEGvVhwHe_Sgcxl_adj3YngR6nTQsCsQvLvzISuDqWOkCmUsfyekNkZIdMoSXDHj0VgGTQg566mVfUV2vvtIX2Eqh9Usgvk7UMXhkJ_WCwlIYnOUI-KmGFD7C_fe-rDmag_OZLTIs00jvwkxA8PFd_mD9Cq9dAh0pWMduadd_evzb_i-fEjmYSAhWoRWU8mx0d4CXAmUI-dkkFJm4QkOZdaUDBsN3Z1rh-6-LRlKT8o-ibo46swszeykJjRbcWwFphZRcG5qGvamBQM37Hd4PrB5GIYOgAkw0Vb743zT0G_s-sb2Ovi0hlpBx2XlFeswEULeysoWRvgrWLY-w5jjGE-cCGXO2F3B4UdC-CNTfoNBtcue928R8logeFuFr4bKBR_tq_AMVUVK5Zcvv_u-YITjTDJa4b7OzBcK_CFthw1uNy4vVlldyuc3d9ni9_x_e8rvP58c_P5H5s_fsPrzc3qDt9_huH5n7_hL6vbz1_uj9fpt5LtpciZUqzA9goWkUQZ-zUMp0qJnEMrgWwbrHLJ9_o4QTIM19WswFQfQb6JirMrsymZhYR112Q_AUE9_igru44CPGTt_aO9nM-pYpi_7zve4ULpomClifSr4TJ92LOClbZ_H4w1g9s4912c7mrn2FbSzeeNPptuWz-TShgXdt6t5FoHYJcysGDxs-ugwc_Q7hVA-1vXM3aygoyvIGMrzLxd4DDpV7gOtuerS8jVJRiR-Rl29ndHOj7eWCY2_ly0BtmuUWj5t916cYBIfNES2nXIBiddP5eLyQuLEYlK8sr68MX1yUAZTpSApIazL4Oe_jBoRKLdKeJu2R9_3txcayo0onNZjnmkcgffbzn9-jCVu-9d-9eZYIZ6P6rwZlIJ2tYL2cELDMDZ3LdwR_hSXjCiRCQJzic7Mv0RGseauDZYy4OJL_Y_e8D6kSuMZnOuVMtsi9uj1ntwENCHt-P6sd1OclEPavXG67sbJ3NCMGtNNJhFYQKHDC2wZPsK-p0if6TvLvKPLWKr2wdbQfpsuwKYhMnQCma7tahGJFb4iXFZYK763rOCF8YnGo8-wRucmyMZFvqRSWzL13BDr00src0yqrFoqgNWTJud39EnGPn9rk-8gu5niCuuF23Q4WUb2G5uvn46Bmjba8ZVF6nJAj-KJ5yLtirwBpf82crBCiFcfyg-hkUapvQD-xhEaUjSOIrDD48fczYNwmBWkoIS5odBkseJn4chY6yM4zL8wD8Sn4R-QlI_IfHMn8RJTKJZmBSMBTGNIjT1WU15NTEynAi5-wCbfoxm_iz9UNEtqxT8DySENOzJYUQImi0_yI8g9227U2jqV1xp1UPRXFfsIxwIscjzVtouO_ufLtgLHeiaxI7hH1pZffxxTQN0_zcAAP__n8xbOg">