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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] [C++] Anonymous unions can cause crash when the name of their type escapes
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    Small example <https://godbolt.org/z/eEYzYxd9x>:

```c++
void g();

template<typename T>
struct Capture;

template<typename T>
struct Capture<T*>  {
    friend void g() {
        &T::a;
 }
};

struct X;

void f() {
    union {
        int a = sizeof(Capture<decltype(this)>);
    };
 g();
}
```

```
clang++: /llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From *) [To = clang::RecordDecl, From = clang::DeclContext]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /cmake-build-debug/bin/clang++ -fsyntax-only -std=c++11 anon_escape.cpp
1.      <eof> parser at end of file
2. anon_escape.cpp:8:17: instantiating function definition 'g'
 #0 0x000055f3b6a3740d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x000055f3b6a378fb PrintStackTraceSignalHandler(void*) /llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x000055f3b6a35966 llvm::sys::RunSignalHandlers() /llvm-project/llvm/lib/Support/Signals.cpp:105:5
 #3 0x000055f3b6a36c8e llvm::sys::CleanupOnSignal(unsigned long) /llvm-project/llvm/lib/Support/Unix/Signals.inc:368:1
 #4 0x000055f3b6963b64 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
 #5 0x000055f3b6963f02 CrashRecoverySignalHandler(int) /llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
 #6 0x00007fd03b058520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #7 0x00007fd03b0ac9fc __pthread_kill_implementation ./nptl/./nptl/pthread_kill.c:44:76
 #8 0x00007fd03b0ac9fc __pthread_kill_internal ./nptl/./nptl/pthread_kill.c:78:10
 #9 0x00007fd03b0ac9fc pthread_kill ./nptl/./nptl/pthread_kill.c:89:10
#10 0x00007fd03b058476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#11 0x00007fd03b03e7f3 abort ./stdlib/./stdlib/abort.c:81:7
#12 0x00007fd03b03e71b _nl_load_domain ./intl/./intl/loadmsgcat.c:1177:9
#13 0x00007fd03b04fe96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#14 0x000055f3bb9c6948 decltype(auto) llvm::cast<clang::RecordDecl, clang::DeclContext>(clang::DeclContext*) /llvm-project/llvm/include/llvm/Support/Casting.h:579:10
#15 0x000055f3bbf06ea5 clang::Sema::CheckAddressOfOperand(clang::ActionResult<clang::Expr*, true>&, clang::SourceLocation) /llvm-project/clang/lib/Sema/SemaExpr.cpp:14654:18
#16 0x000055f3bbf0beb4 clang::Sema::CreateBuiltinUnaryOp(clang::SourceLocation, clang::UnaryOperatorKind, clang::Expr*, bool) /llvm-project/clang/lib/Sema/SemaExpr.cpp:15798:18
#17 0x000055f3bbedc6c6 clang::Sema::BuildUnaryOp(clang::Scope*, clang::SourceLocation, clang::UnaryOperatorKind, clang::Expr*, bool) /llvm-project/clang/lib/Sema/SemaExpr.cpp:16073:10
#18 0x000055f3bcb55a1e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::RebuildUnaryOperator(clang::SourceLocation, clang::UnaryOperatorKind, clang::Expr*) /llvm-project/clang/lib/Sema/TreeTransform.h:2716:22
#19 0x000055f3bcb44261 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformUnaryOperator(clang::UnaryOperator*) /llvm-project/clang/lib/Sema/TreeTransform.h:11562:23
#20 0x000055f3bcb3b672 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) /cmake-build-debug/tools/clang/include/clang/AST/StmtNodes.inc:50:1
#21 0x000055f3bcb3a667 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) /llvm-project/clang/lib/Sema/TreeTransform.h:4093:35
#22 0x000055f3bcb579d6 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) /llvm-project/clang/lib/Sema/TreeTransform.h:7766:38
#23 0x000055f3bcb87b97 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*) /llvm-project/clang/lib/Sema/TreeTransform.h:7748:23
#24 0x000055f3bcb3a4df clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) /cmake-build-debug/tools/clang/include/clang/AST/StmtNodes.inc:1526:1
#25 0x000055f3bcb39093 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) /llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:4365:23
#26 0x000055f3bcbd0645 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) /llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:5239:14
#27 0x000055f3bcbd3015 clang::Sema::PerformPendingInstantiations(bool) /llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:6512:13
#28 0x000055f3bb586515 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) /llvm-project/clang/lib/Sema/Sema.cpp:1099:3
#29 0x000055f3bb586930 clang::Sema::ActOnEndOfTranslationUnit() /llvm-project/clang/lib/Sema/Sema.cpp:1134:5
#30 0x000055f3bb3cfc57 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /llvm-project/clang/lib/Parse/Parser.cpp:731:5
#31 0x000055f3bb3caaed clang::ParseAST(clang::Sema&, bool, bool) /llvm-project/clang/lib/Parse/ParseAST.cpp:163:16
#32 0x000055f3b7f1f8d1 clang::ASTFrontendAction::ExecuteAction() /llvm-project/clang/lib/Frontend/FrontendAction.cpp:1194:1
#33 0x000055f3b7f1f2ec clang::FrontendAction::Execute() /llvm-project/clang/lib/Frontend/FrontendAction.cpp:1082:7
#34 0x000055f3b7e3e69a clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1062:23
#35 0x000055f3b80f7a3e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:280:8
#36 0x000055f3b4ba3351 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /llvm-project/clang/tools/driver/cc1_main.cpp:232:13
#37 0x000055f3b4b95d72 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /llvm-project/clang/tools/driver/driver.cpp:215:5
#38 0x000055f3b4b9681d clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(llvm::SmallVectorImpl<char const*>&) const /llvm-project/clang/tools/driver/driver.cpp:355:7
#39 0x000055f3b4b967ed int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) /llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#40 0x000055f3b7cce2b1 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const /llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#41 0x000055f3b7ccaf88 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::$_1::operator()() const /llvm-project/clang/lib/Driver/Job.cpp:440:34
#42 0x000055f3b7ccaf55 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::$_1>(long) /llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#43 0x000055f3b564bd99 llvm::function_ref<void ()>::operator()() const /llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#44 0x000055f3b696397a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:427:3
#45 0x000055f3b7cca8eb clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const /llvm-project/clang/lib/Driver/Job.cpp:440:7
#46 0x000055f3b7c6603f clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /llvm-project/clang/lib/Driver/Compilation.cpp:199:15
#47 0x000055f3b7c66247 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&, bool) const /llvm-project/clang/lib/Driver/Compilation.cpp:253:13
#48 0x000055f3b7c80c92 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) /llvm-project/clang/lib/Driver/Driver.cpp:1926:7
#49 0x000055f3b4b9584b clang_main(int, char**, llvm::ToolContext const&) /llvm-project/clang/tools/driver/driver.cpp:391:9
#50 0x000055f3b4bc8405 main /cmake-build-debug/tools/clang/tools/driver/clang-driver.cpp:17:3
#51 0x00007fd03b03fd90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#52 0x00007fd03b03fe40 call_init ./csu/../csu/libc-start.c:128:20
#53 0x00007fd03b03fe40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#54 0x000055f3b4b94565 _start (/cmake-build-debug/bin/clang+++0x5a04565)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 19.0.0git (https://github.com/llvm/llvm-project.git 5df6f72a5d9c92bfd24aebdcb89938a8d4e9f7b3)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /cmake-build-debug/bin
Build config: +unoptimized, +assertions
clang++: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/-7826fa.cpp
clang++: note: diagnostic msg: /tmp/-7826fa.sh
clang++: note: diagnostic msg:

********************
```

It seems like `RecordDecl::isAnonymousStructOrUnion` is sometimes used as "Is this an anonymous union (or GNU extension anonymous struct) inside of another class", when it's not guaranteed to be inside another class.

Making this comment wrong: https://github.com/llvm/llvm-project/blob/477c705cb0d7cc857fad8184faac523f8ef72c84/clang/lib/Sema/SemaDeclCXX.cpp#L9787-L9792
This function dubious: https://github.com/llvm/llvm-project/blob/477c705cb0d7cc857fad8184faac523f8ef72c84/clang/lib/Sema/SemaAccess.cpp#L66-L78
And this loop cause the above crash: https://github.com/llvm/llvm-project/blob/477c705cb0d7cc857fad8184faac523f8ef72c84/clang/lib/Sema/SemaExpr.cpp#L14654-L14655

It seems like this could be fixed by checking if the anonymous struct or union is ultimately a field of a named RecordDecl vs. a function-local/namespace-scope anonymous union
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW1tz47aS_jX0C8oqEuD1wQ-yZCWTdWLXWHM250kFgqCENQlwAdAj59dvASTFi6UZ-bZ5yElNRTRx6-9Dd6MBNLFSbMspvXKCaydYXuBa74S8-p1pXMzVTjxepCJ7vnoocVEAusdlVVDgoMVO60o5aO7AlQNXW5GlotAzIbcOXP3lwBW9-fdf_95nyd5BN6aau3Tc7v-h2_wjDrw2_-zbJ8EysHVg7MDEQdfDBpqWVYE1ddBCP1eU45KCtenXliota6LBAle6lvRdTRdrB84ddAOAE7XdAABALhnlGRhKOK5g_nNguDZA0RwfZABOtGyliZYTydqx_5y8toPkxwapORP85biMa4CBg5ZAsb-oME17PBklhcHtwFjvmLLU3gwJtpIPZHs5AwcE3awdncrmT1Jgvm0nFc2BA1dF8VReVlL8DyW6_dOBK8ZJUWe0f_FQV5WQpsYCK834drZz0DyIYtPNAASutTDE2GaWbIKVdmC8kqIEZvIMa8H1WlhGGnlsva-UCJktKSkcuABN9XENU7YQXNO9doKlGXiuFJXash66TGGjIMISGP8LF3YoGDowBA6EVg60WD835aYQy21dUq6ByAHjRJQV1iwtKGjAeA6EDoxAjllBs1nD4P3tzfzhBqg6LZmZ17TeAkkNN0ALMDE6pnd1OiOi7Imc8M2Uqqly4ApgnoGWdqB3FBCJ1Q6kmDxqiQk1pFSSVlIQqhTNgBK1bF6bllgpQRjWNAOy5kARySrdivygMXkEWV1WBzt3Z-Beiq3E5YEE1SoEKfEjvUxrVmSXGU1r4y9Sxk1JrzzgMlfPXOP9peDFM7hUOnPQsnUXngcwF3xDFcEVnZGqagb1Zq0hooUxA3QDKiwVlQBrYMxX5CBnBW0qw9mLTtDcaJsXGUEZVxpzzbDRRZDXnFg1yGjOOGs0AkZbB0adnUPkAnfvuq4bBDlKQ4wi380GeqqeVfNwLxnXlrN1Q3zcV5L4-0YoLSkurWYtjHU3enbCkgqWjsznG2d784JtOS7UjHHioHkEkUHm9cJ6U2HjPAUTyZo-fsU8K6h0YGw8U2dh7xMnsUT30sCJNEEShseo-1rzkVCqc5PnitPJ0Uy35wbGyfRyoIkcIYnpMTkWBcW8ru5aaRwY19yuohkohNHh9zKEwglD_kiyJERp6APjD7ngz6WoFTArm6qsQiWtlMbCjdt7ovK5dWxfyqpoShsKbR0HxlbNFuDtMI4N1tLsminvoQRTKLkLwaj5VPFeawM_kAUl3pjYsJUmyjMXpW4QB9AFVq3abvdxuAn9y4Lxen-55XVTQGZKzEIHXrt7HwbQNaQf-ozGfWKS5ARsNpXeSYqzzSMrig0zcZTxi9h6k5kDV7zShQNXg8dhi5nRC983XIb9UPE5Q3FNJcfFuYPYRddz-0GSY4MMm53bc5wMejZeyJ2y70ch2Co7_7ZT1RrYamb_elYZrcxyVgllzUZipqjtGxq_HfZde-OuEY1yBHBqFlLblc6a-R39YcsbUb1ea0138EV3Xgo2vNgUAmebTJSYNbPI-IGG9tHUKNWW4KZnz4uMqEnfNxr37ec0CV-ngyihSXjQQdPnyGGkCQkTPz4jkEKLkyHTiUjJRjsnyn6yWJwdBU7VZuRC0twNKQ6G8j3QErc-cEfJ4zzLJFXqLr-rqMQ8Gws8t0v7V6rqYoL_Zl9Ji2EBtKyphRpOqHiwYdKtINaOj8NtA5vOTxnhmh8zQLcW-WFgjNuLe5jhBGZKU_8ETEmxptc1KzTj3ziWz3fVGOVUzhGItgWVWAv5X8wwNCofEJEKUbwDZdCu_QOU0QglzUhIwuMoDb7sODoijFbPfzI5fxPo0I3QRIPjIWiSBgH26HDwtaR0LTFXuZClgxY_WerX7S73yyFsFbLddxszTgfENXg_QznO5mcEzpo4jLzQ_MCeoWTMkO_D0Psshg79_ICjSdH78HpeEEIDGB0AQ3cMGKVhBD8dcDN58cnpPLZb00IUaoC1d-Pdm_nD2qDXpf5DZLQLagO3D70MYG8CGIdh9OmAjVAT5bdvpq7jIwc3IyyZIlhmjf28Q3N8NzG-BAU9j3DiS6IkCz-dx4UoK1Hz7CWf45K3-M-XqKMoNP4B9csGRGPUcZQmn689r0D9LrR-PHEO_tRW_Cz_B9nKR7ohL4Dh2BEFE3ITN0HHI5CHOlX6XFp-rwvNbukTLTrE8_Ys7JYpDYjgStuA8lWBxUv2utMrH4XBRG3CMbLMDf0TgfKgu1V72rU8HHa9IlroG5tdw8D6p7_vBW0GaIEHENkdgt8DjybAkeudAH5PpVHbe8ozxrf9AExw5cD4w4UNA8-s_N5glkbBYBrEYXBK2DnRd_yGZ3e5tbfCivmNM72SeGs0azJTh4brb12NV65A5udwXJYYmgeCJ1PBE-S-UvCTJ3g_lcZDfn9650A0PoBNEclJMFoR7u1p8OB5LSprno2uDom7q_D_1vRey_GG0FT8RYq6-krz47vBA-DfRVYX9Etp9rMPGmt6pqVbwbrfbgcRIW8M1ZtAxZhmL6Ba9_dCHRqZX2uLI7HmD-vD1sZubPpjl_FRbpR7eZyNwvb5w3olBdeUZ83Gu4s6Kak1bV-dpxNdP4PHpv1BQxJ_5OjH57tGOEjJyHmdluyjZHJjODpYGp_sRhTRMMFgEliwgsrGmxB6nK_TIM5Tu4Hc0wEPkk93LOOT3NjNI4zoeGdohew7fDqsGdPQaYTwvPCpE3ltVXh1crBWfhi79obnIP1obfRTjFDgAUK8TYkZH93KzKXEz9bkF2SHZbdyz60LWIDxO7gAP7wo6UB04Usm2ROVpqAdupMXTZYJFI0FToIsgqCDvfAaHgZi2yv7f1GihWyO_Y9Ib51B38T00R7enRmfvIDRPHQgvGDsuOIJhjD2WsfV0d7eRBhRLYfzsyRsCh3ob9zmUfSbeFP8Bl6S5s2bsaMgGFt6MsUe0cze3veidReNG2m1zRS-SfRDOE1wUaSYPG5y3i1lH0j0jRHO3hQNW57N7_kHw_OljeTXt114iYubvZZYNXvisZL5o0AgIoTC1PtMkj9T197GiL0-HDDiTRjBeRwPPXWrwY07XngLUZaYZ9MF8KhHtFfzDQuNGA5aDPBryfi2CZdA6y8PLTYbst97XvNHihUjG2XrtzSNKpsXGy0x06ornnSHi8K4fCH78mbIwS5kfuC6V2TvxCye4wKapWjZOYDfRNptxnzjiFC_JfHhizkIgial6KRq2tIuH-e0Rf9nDs0c9s7o8zzLKIAMQj_NkuR10_cqLfsY43-RO5BEeCD0sdvy9uKg5g84p8XzSG9-DPKD7ul9e53bBz9-MLWemKb_cA_2drfUByV-OOY1DF2Un-TVxtb4xd6oI3sU1U8amgqDOGLxgzGGVeej_eqrgQ8k7rYx9gzDG5hHNGUA-tFrGfhNpOo0_N9EOjnx-3G4dNCHCjPZRCivYaxTmo8lDgZovB_x4zFxsUsSeErI5eB5tFM7sh88Rfj_J3E_334eqFoOg34vsYfLAwObRv1B7KcfseN5-77EpkD1qSKBO5aQxL4bAJvPcubJ-8utrCm4HI3qjf15ME3PybPEBZtNwVLjQrHUGxPobA5pNUTVL7OA2jyjY42azJF4fDoVTLN4cuq7wLZhnOnpQM2j6f3S9t6k70B7N9Pf5QfoWKcjKMdQHO0c2VSX3jkF_kR7_CAMQNNrmyF0Vj6tTRIKsGuaH9KEJsnaVEqz8Mwb5QR5e7wCSGsmTZoy-M70DtA9M8qYUeAhm4dYKwoun4AWQFEK2OCkZzgYeKJSMcGBl8zcmbtlFsTrkppnplWQ5WEeQRxkCUlgmmfQxzTNSBonCYpxnPk0yaMUHYZfY7mlJqwBbS5VzR-5-M4HOVVNPZuxBkqR0cLUbvLMbJE9nioKmi2Z_Ekus61vs1WMxeZs29S_rrkJMUr2F7VJFA68xl2GuTo6J1xoajPgGd5yoTQjoFTWlbUa8o5_gyz-Nul8vl7PF7-C9a83YHV3e3v331_--AWsvtzePID1nX19_e0X8PXm_u7r-iDD_bGk8VjZ_PdTieOHCpICG_HQDGB96PJcEswU6LJy4OoyimGY4z4X_O1dqN2bZuKj5uPYRxZftLGqUoGCPVLghO4gMc8uEUzNu_vWB_tVyZ38xo31hS5gCihRUs1KqkBtJgkr4ED4RQG9YwpgDvrL2vYTExgLCX754xuge025tdi-TvPdipk-xhXLKBC5KdU7Ko3rUMp-1rAA33eUA6YdGCnDHtjWWGKuKc2Mm0hp13zUdjbE_Tt-ZHzbiGm8EOUafJfCruWv_xQiLYRZt_0oIpEbkNTNIkLiIMpxFnuxn2NMAojymOYRJLH_oysom-P4559W3SC6TaI4urxNogR2ToSpwTcDdcpErf5umefE2Ggnchhe3kbtYficZw3HhRAVINj4cr2jAKfiqf1O5O8W_pBNB9GtzZS8tD_BaStplaYuMqNqOdvTDKTPgOwosUrF8gbjRK2BkK0RMAXqQrMSa1o8AwxyRgv7DQm2KQ0Z6I0QPKmZqdHO-KVxaSYuOaQ-XCoiKjq1s4vsCmUJSvAFvfIizw9ilATuxe4qzL08DdzMwx52YYIDL4ghCXyMUJDnJL1gV9CFvhu4nhd5iRvPUIqiJPFCmLqRF0Hk-C4tMStmZkpmQm4v7IdAV4kbBd5FgVNaKPvBH4Qt59AJlhfyyk5hWm-V47sFU1r1PWimC_uV4MK2CJbAPLceMliC-RidAgTzVpuab42sQzCk24_whJ0AJu3HUKD5DEdd1LK4evtHThbe_wUAAP__PYJt4Q">