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

    <tr>
        <th>Summary</th>
        <td>
            Segfault while calling hasInitializer/getInitializer/getLinkage/... GlobalVariable method
        </td>
    </tr>

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

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

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

<pre>
    Hi,

I'm writing an LLVM pass to encode all the strings in a program. I want to get and process every one of the globals in a module and check if they are a string. I'm following a [tutorial](https://github.com/tsarpaul/llvm-string-obfuscator) which is by itself a bit outdated, with some weird compile errors if I try to compile it as is, like not passing enough parameters to a function that wasn't changed for 7 years... I started to write [this file](https://github.com/tsarpaul/llvm-string-obfuscator/blob/master/StringObfuscator/StringObfuscator.cpp) from the tutorial. I'm just iterating over the the globals in the module and when I try to check anything about the global I get a segmentation fault. I tried removing some calls to the `hasInitializer` and then to the `hasExternalLinkage` (as you can see the commented out line in the pass code) but nothing worked. This is the version of the code and it's respective stacktrace.  

I'm compiling the pass in one container with a source compiled llvm/clang. But I cross compile the program to windows using MXE/llvm-mingw and dynamically linking the `pass.so` with the `-Xclang -load -Xclang lib.so` hack for the old PassManager (this trick worked for an analysis pass).

Any help figuring this out would help! Thank you in advance.

This is the pass code (`hellopass.cpp`):
```c
#include "llvm/Pass.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/ValueSymbolTable.h"

#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
#include <typeinfo>

using namespace std;
using namespace llvm;

namespace {
class GlobalString {
    public:
        GlobalVariable* Glob;
        unsigned int index;
        int type;
        int string_length;
        static const int SIMPLE_STRING_TYPE = 1;
        static const int STRUCT_STRING_TYPE = 2;

        GlobalString(GlobalVariable* Glob, int length) : Glob(Glob), index(-1), type(SIMPLE_STRING_TYPE), string_length(length) {}
        GlobalString(GlobalVariable* Glob, unsigned int index, int length) : Glob(Glob), index(index), type(STRUCT_STRING_TYPE), string_length(length) {}
};

char *EncodeString(const char* Data, unsigned int Length)
{
    ...
}

vector<GlobalString*> encodeGlobalStrings(Module& M)
{
    vector<GlobalString*> GlobalStrings;
    auto &Ctx = M.getContext();

    for(GlobalVariable &GlobVar : M.globals())
    {
        if(!&GlobVar){
            errs() << "Hello: Got global Var\n";
            continue;
        }
        // Ignore external globals & uninitialized globals.
        // if (GlobVar.hasExternalLinkage()) // !GlobVar.hasInitializer() 
        //  continue;

        // Unwarp the global variable to receive its value
        Constant *Initializer = GlobVar.getInitializer();


        if (isa<ConstantDataArray>(Initializer))
        {
            // Check if its a string
            auto CDA = cast<ConstantDataArray>(Initializer);
            if (!CDA->isString())
                continue;

            // Extract raw string
            StringRef StrVal = CDA->getAsString();
            const char *Data = StrVal.begin();
            const int Size = StrVal.size();

            errs() << "Hello: Encoding '" << Data << "'\n";
            // Encode string
            char *NewData = EncodeString(Data, Size);
            Constant *NewConst = ConstantDataArray::getString(Ctx, StringRef(NewData, Size), false);
 
            // Overwrite the global string with encoded one 
            GlobVar.setInitializer(NewConst); 

            // Add the string to our vector
            GlobalStrings.push_back(new GlobalString(&GlobVar, Size)); 
            GlobVar.setConstant(false);
        }
    }

    return GlobalStrings;
}

struct Hello : public ModulePass {
    static char ID;
    Hello() : ModulePass(ID) {}

    bool runOnModule(Module &M) override {

        // Transform the strings
        auto GlobalStrings = encodeGlobalStrings(M);

        /*
        // Inject functions
        Function *DecodeFunc = createDecodeFunc(M);
        Function *DecodeStub = createDecodeStubFunc(M, GlobalStrings, DecodeFunc);

        // Inject a call to DecodeStub from main
        Function *MainFunc = M.getFunction("main");
        createDecodeStubBlock(MainFunc, DecodeStub);
        */
        return true;
    }
};
}  // end of anonymous namespace

char Hello::ID = 0;
static RegisterPass<Hello> X("hello", "Hello World Pass",
                             false /* Only looks at CFG */,
                             true /* Transformation Pass */);

static RegisterStandardPasses Y(
    PassManagerBuilder::EP_EarlyAsPossible,
    [](const PassManagerBuilder &Builder,
       legacy::PassManagerBase &PM) { PM.add(new Hello()); });

```

This is the program (`test.c`):
```c
#include <stdio.h>

int main(void)
{
        char* b = "coolstring";
        printf("%s\n", b);

        return 0;
}
```

This is the stacktrace:
```
Stack dump:
0.      Program arguments: /usr/src/mxe/usr/bin/clang --start-no-unused-arguments -target x86_64-w64-mingw32 -rtlib=compiler-rt -unwindlib=libunwind -stdlib=libc++ -fuse-ld=lld --end-no-unused-arguments -flegacy-pass-manager -Xclang -load -Xclang /work/libLLVMStringObfuscator.so -opt-bisect-limit=16 -O3 -DNDEBUG -MD -MT CMakeFiles/test.dir/test.c.obj -MF CMakeFiles/test.dir/test.c.obj.d -o CMakeFiles/test.dir/test.c.obj -c /work/test.c
1.      <eof> parser at end of file
2.      Per-function optimization
3.      Running pass 'Hello World Pass' on function '@main'
 #0 0x00007fdcb5da3edf (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0x8d6edf)
 #1 0x00007fdcb5da1db0 llvm::sys::CleanupOnSignal(unsigned long) (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0x8d4db0)
 #2 0x00007fdcb5c923f8 (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0x7c53f8)
 #3 0x00007fdcb5167d60 (/lib/x86_64-linux-gnu/libc.so.6+0x3bd60)
 #4 0x00007fdcb5ea5af0 llvm::GlobalValue::isDeclaration() const (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0x9d8af0)
 #5 0x00007fdcb54c7925 llvm::GlobalVariable::hasInitializer() const /work/llvm/include/llvm/IR/GlobalVariable.h:91:47
 #6 0x00007fdcb54c73d9 llvm::GlobalVariable::getInitializer() /work/llvm/include/llvm/IR/GlobalVariable.h:140:5
 #7 0x00007fdcb54c5845 (anonymous namespace)::encodeGlobalStrings(llvm::Module&) /testlidor/StringObfuscator/hellopass.cpp:56:35
 #8 0x00007fdcb54c56bd (anonymous namespace)::Hello::runOnModule(llvm::Module&) /testlidor/StringObfuscator/hellopass.cpp:109:2
 #9 0x00007fdcb5ef4a29 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0xa27a29)
#10 0x00007fdcb5ef4d54 llvm::legacy::FunctionPassManagerImpl::run(llvm::Function&) (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0xa27d54)
#11 0x00007fdcb5ef4fbe llvm::legacy::FunctionPassManager::run(llvm::Function&) (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0xa27fbe)
#12 0x00007fdcbb4c728d (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x18b728d)
#13 0x00007fdcbb4cafff clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x18bafff)
#14 0x00007fdcbb83849f (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x1c2849f)
#15 0x00007fdcba5ae1e9 clang::ParseAST(clang::Sema&, bool, bool) (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x99e1e9)
#16 0x00007fdcbb838672 clang::CodeGenAction::ExecuteAction() (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x1c28672)
#17 0x00007fdcbc13dce1 clang::FrontendAction::Execute() (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x252dce1)
#18 0x00007fdcbc0b7e72 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x24a7e72)
#19 0x00007fdcbc1c47f3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x25b47f3)
#20 0x00005584ea4139c4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/src/mxe/usr/bin/clang+0x139c4)
#21 0x00005584ea40fb9d (/usr/src/mxe/usr/bin/clang+0xfb9d)
#22 0x00007fdcbbd88025 (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x2178025)
#23 0x00007fdcb5c929e3 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/src/mxe/usr/bin/../lib/libLLVM-14.so+0x7c59e3)
#24 0x00007fdcbbd8a228 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x217a228)
#25 0x00007fdcbbd5c1ca clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x214c1ca)
#26 0x00007fdcbbd5cd0f clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x214cd0f)
#27 0x00007fdcbbd66d45 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/usr/src/mxe/usr/bin/../lib/libclang-cpp.so.14+0x2156d45)
#28 0x00005584ea40db32 main (/usr/src/mxe/usr/bin/clang+0xdb32)
#29 0x00007fdcb5152d0a __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26d0a)
#30 0x00005584ea40f71a _start (/usr/src/mxe/usr/bin/clang+0xf71a)
clang-14: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 14.0.0 (https://github.com/llvm/llvm-project.git 329fda39c507e8740978d10458451dcdb21563be)
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: /usr/src/mxe/usr/bin
clang-14: note: diagnostic msg: 
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9W1tz6riy_jXkRQVlbK4PeSCQzORUMkmtZNaZ_UTJlgyaGInjSxL2rz_dkmwkY1ay1mRvKhesS-vrq1otiBU7XP4ueuGyF6x6wcL8ve2F0x15y0Up5IZQSe7uvt-TPS0KUirCZaIYJzTLSLnlpChzGFUQIQkl-1xtcrobkFvyRmWJwze8BBIMuxIOFPgrzw9ESU5UqglsMhXTzBLYKVZlXE9Itjx5IUIPOhCaQ6tdDMhrhKnKMvWmMZLe-KqsSpULmvXGq14425blvuhFi154Az8bUW6reJCoHTyUBc33tMrgbZa97vqGal_FaVUkFIj0wjl524pkS0RB4gMRZcGzFFaJRUlUVTJacgZCI29AlhRqx8kbFzlgVru9APw8z1VeIPhbUgK7IIe6CyhQ6ClweiZeOJGq1LJFPrhU1WYLjyBEXvJcC5yStJJJKZQEUdASJFtI4L8ECVG54QzkkJMpOXCaF4MByr4oaQ4IcTJqkWvpbIGXFBB8hXhuYlAa_NvRAlDCmyc95sEd0m4aJPs9CjbN1U4rvtZXrc6_q6IE8fCcartTYChmnG8k-OiYyduWS0fK2mioPAC7aBcxaMshAAO1PZKCb3ZcllRLNQVmy4EmIkBqOd-pV5ytFZuAoWs1IJXeJNjS4laCZ9BM_BtYnwQaRYkovEHX78CJpNmdkC90w3EgiB1Uf1AVEJUAwbAGQkcosDBizQR4huVSexw6G4othk4wFc3Wm8pfOBuQZ9Qp_OBgkFaBzFivMj4KyEQJwi2AqWLPwYhe0WNp8lLmNOEDQk793hgqLtNgADzosIkCiQG-3Ng9SFFVecJr02YEzQU0n2QUnfQKEN-SJFeaC2P9mqQJEto6hWTqrSCVtv77v65rm9vB85vGzw6S7gRq4YDCeamBgUAR26BQKFoNyDb3_9IASD9TlJH6KROxHbsF9rXP4HiVMfIIdO6pBC3lqCPtKWAKMMoIWg8GjcGQ7FBAJy4MOhm4wlvIA9nybA8-tqlygxKGok7fVAWrYGcvHILSqHzRVoARj71SCYpwKblabUwAgaFhcQh5mm_0pkkAKNCJzWx41D-JfQ4jIZOs0pNDqxvkdbCF5x-Muf0Gf-61i3009Kna71UOJnaT07e1glDBIfx_hv5SSTBEWX4OzXeaVfzpsItV9kxjH9cHU-_4hiYHR8cfLficU1mAyncFknh8sFKzs68qkbGzRKJledhzIVPVi65dfMbCwZTBD8HzwAlZL7rq7tM46k7z99jZm9oOMGuwjd90XDOx9thH4LWv4kwkjXUQ-zITvlOIvCDHXrjQLc1y9bBKFmIjwfYFbOPgpfz9ZAj2ILedHWbTWGdcbsrtyYgCI2-CAQVDPgx_ur1_vLtePz1_u_3jt_Xzvx6vQZYrMvzEzOdvfy6fT2aGLQH67Bt5gUudkQbszUjboofoC2K0PTPzb27GoFzCWX9oG7Q4wtkpN7bfl0o4cxYA1U1Xv4i1Q1k_yYH97zFxItifYgLf-CqAdAXj6-JaJ5ANW0aV2IksrWhJT1i6q1eoSTtGARnPcUFntVfY7SAPiZa-FBfglzaFdTvA1Wcm4vXCCbnvXupHJH1irtVSSHOA7cmyfNeWeT-AFASiX8nfSwzqGMFPTDXFFKqlcSSCLd9RjKBNIGSyIkulxozzPdzaJ1M9anikgePbo_AFuauliOEMfjA0_o77jjYhyFZtLoU0xkuJcbDtpfjCbEHI6jQ8nNi5yUHJ7UYqyPK5TZyanA81UknRJF2s7hl0koGk24oOAA46MrFaWvUEkIoz2k3urBS6Vjllr3PYn_INkmk3A32ttQlWkfOEY0YG5wtohx3Op1Fvkeg0DixtRTVisKUTxC1IbUNA8YiCgmbrBdDpFnlOD7hphTOPoG9Xnbbl8LusD23IUn1eOx2tfWK5WmhWEjhEfBpMl6UZlkCNQLEPs0TRBJcu_GcN9CxXYEGQLpcEcpyzLJklv_EU30G6olmzgEBJCx_TGYexgRAVjmLQNAy5Qcw3Qn44W--IICt3ZgHPZwNN_fqx1-uQrTOMcArt9RCLsR6OnT8ICLUwTf3gnBxr_v_gb40IWjtGvUc8aca6xeH6DpDSj0Ylp2YGAXwBKmroQ6TW5GuNQpNF464Kb1MIQj6Cs1w_wPnMnMWdWGBkYA4vZk9i-qB1SqV296Lt7jVvBgX5wJAXjDlFGwxBcIKr97XORZs9bbCviu06hrMTrCr5Wzs7cTcWR0gOqjP81AoBGqfyrOG7W0Zro8emnJdVLs9swq3xwHsFvqxtW--jJlEmZvvHTN-PcHXGiXZ5u_KgGf-ovWbhkMDAtTpJiZqJsVIZySv5IOukw2YfuNlh9qGrH7lgTr7fub80ZxW3FueP1LHWk4z2gzM50PkooVfsRnEr_wYTaspULQA3dfUKoxrHVbHFhH44Lpb82NhGcJ7EU1nFJySw8Uhm2bIHaHBX-iGfDU9UF4DQU5x1dQlrRyEen0V5D70Nmzrlq3u1vYR6NobMU2bbHF1lSjtdTfLICPZ2ukuo63pem3URMH4_I-tO2KerRhBcMiwqUankYaeq4nhQPUnu6_0Cfm5XmvOgIWnd6BtsY1gz1E4SLe2Ma_KXEcvWeFSIPNYbEPlfldsqjenp3s69l44k1mTJg8TakVIvkJKUZHnzWy2gT5FCidWUGnczhUMTLCyttj21GH6CGMdoznAOL8i_kN9m8dP6gpHi9eP6mubZYVE8qqIQ-tjnYO6Nr0w112z-p1QwnNQEW8xmuixilnEnUi23yeO9jV7k8X5AGbNB34l4dWyfrjpSzroUdbauZWuApqpV8qIcJD9RzoqWRcmEGmxbVRZMf4xnzV6VYN3HOO1j9rhpYgiYVQIR2aYkHenLHjpKc4ICAxwXdZoDVhqfjyTW5YKOnegj-RxrtKfyMI9POIKwardvRgQDs-6jFS7NNxWWlrHOjxZcFViXL_IEK_fvvGmJUWA3tmja15cHfan6lawKzvoNFdKHHiyfv88m68mo_wa_uk4bhaSfl5mIQZa20JtDAwEKWOA1HfDXPBJY4dgGWK7gh_RTWKyfMWwFZ-_3Iex0g0iN5faxCtrf2bJtd80XuMIKLhaVRYyXWCd3EoUifbUv-7EoINr3M7ETcBZZDSek_xCR_uqP1fXVn7-R_v0Kfp_J8p6-8BvgD0uD2mqZyOu3yUDFf8Owm08MGwBI9SlyicOF9ROt7KFVNvgCVymG0D3NCxAFhDgbsvVtjx4c1pYBimkuk4BvYPffOpSZYZEd9q2SEvPDvYlv09MwPCV4b3Lc76a9UWAcb1pnwmEUkOA9gNc0ZUk8ZjTizJ7UPjDFwcCo7Ki4_nCE1fvwKnifsQnQOZ7qYKFha6EhiwNbRcXwVhwK82aZcSqr_YN8EhtJM4DSlJkyhZ4__wp4I1jdgxd68JJ5GKWzf77QNBkDHW-hyFtoOJkyc-vUULGem8Gx972_kZXpSIDkYKKJRjGb-OBHHk1OxzR1ZVuXqLB4oRtEAblJRnPa5Dpzezb9xxzP2QwW99CNPXSjZDoPxx3obMlUt3XWeGqETbwwVwF2wzk26BsFnypuQov5EP6MHNuftIFFbP4BsK5Szj-ANBzBxrMYHyFNW5DGs9FY30l2ZHZmH44W3aeEIx9NzdRixQiVCdZ5AQxN_vUVoJvAn8jBOGtjnMTsI4xO1ukfqb4M5jDApcIjzLnvFOmIhq52bx6djMpB5hwBnMFN4-RLAhANp9SpemF4DNpw2XjkwHVTwRqNw8Dtbp81TPynoQMyD_qwDT2N-eeh_9dgAyoPthfyY3D_cMZ-YSGdxvTBCDFCD0d6teEsRmreclFrOZqmKdGT7TkC0poryBchMXioyn2FxRaneyXoRqoCjivFtdwIaTxl6VL4nVM4RDxxmifbh70-5ZugeTp0iRGDyw9GPetc8oNBd_Cua8hRl06Rzm2uHX7RImiFsLD6X5p7WOyppPi_iq_3JV7wHAnhtfZeF-7W5nLbm8S4_uzImvGMl_yDiRHeTF7_msWdMQTUs2cI3m4dz6LZaP4rKVfnckmI1LzlvO0XUgM-5HNX3I-Yki6enn1ze-I7ahWJhbDj_6-SzHyOQDykk7ZgJtOww2itYRineedJVfJF4mQyXydKWN8D6O3OyTBiCR-6AG9yvDJsTNdF-KXYwnGIS3vYvF05CeIpbwvPHPpudSU34d3yO8_Mr8bhTvwjivA8_HNftslomkZeeDRIj2y8qoSeoj5hE8PL18k9Rlgu7rDet8eQqnE6GkbzZESSZLi2NY5jtNE3GRgFo6WuxNlgudABZ0n8Nmgw1ZFPwzdC0KaLGDyQQx9kkMbzz211R6I4xaPpb59sNgvC8VfJeThFat5yUfuANueRs5ksc1psv_EEa_KH-uZe98BB-YmmPDt4yqjPxetcKwRlTeoLuF-M_6dnP4Do8TBqiYyG4cy1cZaL1zohWi6HYMs7Klk7jnRa1LHR7MVwcnYbj1twvcM5O-R6nby_D4fmIaaFSNa2zGYs1RuMDesypwJLVqa7RY5CYm6y9KbfLLk47iKLf3LkPGMyKE1P3GNf3GOIKvSsuHXcoCdxu9aBF2RaE3f6o9Dd2dEPhi5sTP1aMYyQS08Mk7YYWJD-rBj-R8XFeRlA753Ae_Hu9G8HFvFd31-aY8qyMZU9FWglAm8WPy-22p7-I9ID4XjSm_rSm0wYnMjPIF057739qmOjOif1_670vkpuYxSLJ7dZa8thcRTquv9P7js4zyPsn-uHkAoFlKzXCG2t6-JrZ5VPltTCCRBxV4mC9o45HcIqmv7PbpwwsyFtpAdiixbmCwj4xhTCU5tv6Q-bo8ZSqj-wbT558C5K8xlj2NwRQFVw0n_FO0_8jLpwsiF3peYT57AtBQNdZ_zBlwpssUp_uHufK7xbHcAAAjJPGYWkYhxM-Ww6CubTGRsGIyxODVnCYtR_5JyuzbkRWXOuIeznyLX87V0KHLkYfk-AY-2C7FUh3k2Xzt4y4H4ltIQ-EPeJaKXCk96CsObQTHbFRlPy72ku2GXE5tGcXpSizPjlE9_o0yJ-tSQzXyzAInu7HnnTrgNiQ_PZtRv8hkfrc4E7Xm4Vu6jy7PLnNACPoigqff0AUp7NLraXLJ5Ek5TFMxbS-WQySQIWjqJpTOMkmccsuMhozLPiEu8ewxDvBDUJvA0bry7EZRiEYTANwHmCUTAeDIPpPJpEAZ9O4jQZx71RAKc_kQ0Qx0Dlm4v8UkOKq00BnRnE-uLYid-L2UjOL81V5wWtgNX88u6vZ7wkVxd67UuN_f8BJGjHRg">