<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67688>67688</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Crash from constexpr-evaluation of array-capturing lambda
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend,
crash
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hazohelet
</td>
</tr>
</table>
<pre>
The use of `[arr] { return arr[0][0]; }()` in the following code causes clang ICE.
```c++
consteval int f() {
int arr[3][3];
int x = [arr] { return arr[0][0]; }();
return x;
}
```
Live demo: https://godbolt.org/z/YvGEfYbqv
Backtrace:
```console
clang++: /root/llvm-project/clang/lib/AST/ExprConstant.cpp:1915: clang::APValue& {anonymous}::CallStackFrame::createLocal(clang::APValue::LValueBase, const void*, clang::QualType, {anonymous}::ScopeKind):
Assertion `Result.isAbsent() && "local created multiple times"' 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: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++2b <source>
1. <eof> parser at end of file
2. <source>:1:19: parsing function body 'f'
#0 0x0000000003708fb8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3708fb8)
#1 0x0000000003706c7c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3706c7c)
#2 0x000000000364f8d8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f3430166420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f342fc2900b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
#5 0x00007f342fc08859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#6 0x00007f342fc08729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
#7 0x00007f342fc19fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#8 0x0000000006f8b1e2 (anonymous namespace)::CallStackFrame::createLocal(clang::APValue::LValueBase, void const*, clang::QualType, (anonymous namespace)::ScopeKind) ExprConstant.cpp:0:0
#9 0x0000000006f8b3b9 clang::APValue& (anonymous namespace)::CallStackFrame::createTemporary<clang::OpaqueValueExpr>(clang::OpaqueValueExpr const*, clang::QualType, (anonymous namespace)::ScopeKind, (anonymous namespace)::LValue&) (.constprop.0) ExprConstant.cpp:0:0
#10 0x0000000006fbcdb4 (anonymous namespace)::ArrayExprEvaluator::VisitArrayInitLoopExpr(clang::ArrayInitLoopExpr const*) ExprConstant.cpp:0:0
#11 0x0000000006feaed4 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::ArrayExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#12 0x0000000006fec4dd EvaluateArray(clang::Expr const*, (anonymous namespace)::LValue const&, clang::APValue&, (anonymous namespace)::EvalInfo&) ExprConstant.cpp:0:0
#13 0x0000000006fb8df5 EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0
#14 0x0000000006fbd062 (anonymous namespace)::ArrayExprEvaluator::VisitArrayInitLoopExpr(clang::ArrayInitLoopExpr const*) ExprConstant.cpp:0:0
#15 0x0000000006feaed4 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::ArrayExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#16 0x0000000006fec4dd EvaluateArray(clang::Expr const*, (anonymous namespace)::LValue const&, clang::APValue&, (anonymous namespace)::EvalInfo&) ExprConstant.cpp:0:0
#17 0x0000000006fb8df5 EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0
#18 0x0000000006fef04e clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::RecordExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#19 0x0000000006fefbb8 EvaluateRecord(clang::Expr const*, (anonymous namespace)::LValue const&, clang::APValue&, (anonymous namespace)::EvalInfo&) ExprConstant.cpp:0:0
#20 0x0000000006fb8e1d EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0
#21 0x0000000006fc37ff (anonymous namespace)::LValueExprEvaluator::VisitMaterializeTemporaryExpr(clang::MaterializeTemporaryExpr const*) (.isra.0) ExprConstant.cpp:0:0
#22 0x0000000006fc459e clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::LValueExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#23 0x0000000006fe77cb (anonymous namespace)::ExprEvaluatorBase<(anonymous namespace)::LValueExprEvaluator>::VisitCastExpr(clang::CastExpr const*) ExprConstant.cpp:0:0
#24 0x0000000006fc4914 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::LValueExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#25 0x0000000006fc5d8d EvaluateLValue(clang::Expr const*, (anonymous namespace)::LValue&, (anonymous namespace)::EvalInfo&, bool) ExprConstant.cpp:0:0
#26 0x0000000007002712 (anonymous namespace)::IntExprEvaluator::VisitCallExpr(clang::CallExpr const*) ExprConstant.cpp:0:0
#27 0x0000000006fab7f6 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#28 0x0000000006fab277 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#29 0x0000000006f9a57e Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#30 0x0000000006fb8e42 EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) ExprConstant.cpp:0:0
#31 0x0000000006fb9251 EvaluateVarDecl((anonymous namespace)::EvalInfo&, clang::VarDecl const*) (.part.0) ExprConstant.cpp:0:0
#32 0x0000000006fb93b8 EvaluateDecl((anonymous namespace)::EvalInfo&, clang::Decl const*) ExprConstant.cpp:0:0
#33 0x0000000006fbdfcf EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#34 0x0000000006fbe0cf EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#35 0x0000000006fc30eb HandleFunctionCall(clang::SourceLocation, clang::FunctionDecl const*, (anonymous namespace)::LValue const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, (anonymous namespace)::CallRef, clang::Stmt const*, (anonymous namespace)::EvalInfo&, clang::APValue&, (anonymous namespace)::LValue const*) ExprConstant.cpp:0:0
#36 0x0000000007006a56 clang::Expr::isPotentialConstantExpr(clang::FunctionDecl const*, llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7006a56)
#37 0x000000000627739e clang::Sema::CheckConstexprFunctionDefinition(clang::FunctionDecl const*, clang::Sema::CheckConstexprKind) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x627739e)
#38 0x00000000061d5120 clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x61d5120)
#39 0x0000000005f51b0f clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5f51b0f)
#40 0x0000000005e7f1c1 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e7f1c1)
#41 0x0000000005ea67a8 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5ea67a8)
#42 0x0000000005e730ab clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e730ab)
#43 0x0000000005e737df clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0) Parser.cpp:0:0
#44 0x0000000005e79ef4 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e79ef4)
#45 0x0000000005e7a71d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e7a71d)
#46 0x0000000005e7ab60 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e7ab60)
#47 0x0000000005e6ea22 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e6ea22)
#48 0x00000000049724d8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49724d8)
#49 0x00000000041d6509 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41d6509)
#50 0x00000000041571ee clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41571ee)
#51 0x00000000042b584e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x42b584e)
#52 0x0000000000bdcb46 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbdcb46)
#53 0x0000000000bd440a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#54 0x0000000003fb4a69 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::'lambda'()>(long) Job.cpp:0:0
#55 0x000000000364fd84 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x364fd84)
#56 0x0000000003fb505f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#57 0x0000000003f7d3a5 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f7d3a5)
#58 0x0000000003f7de0d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f7de0d)
#59 0x0000000003f85d35 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f85d35)
#60 0x0000000000bd9fec clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbd9fec)
#61 0x0000000000ad4d61 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xad4d61)
#62 0x00007f342fc0a083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#63 0x0000000000bd3eee _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbd3eee)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkW11z46i2_TXKC-WUhL4f8uA48dzMzVTndlJdNU8uhJDNbQk0gNLO_PpTIMk22E6c7rhPTc-pPjWxgM1ai83eW0JCUtIlI-TKi6-9-OYCdWrFxdUK_c1XpCbqouDly9XTioBOEsAr4CW-F18jIbz4BnjpNRBEdYIBc-Xa9-Kb8T_hNfDSGw9mHsy9xAeUAbUioOJ1zb9RtgSYlwRg1EkiAa4RW4K72e2l5994_lRPY_5hD17rf-Yq5kwq8oxqQJkCVW9boxgGzaA39U1bDyfs4YQ9nL1Oa-CFN-B76DjGhkHr7fX0xuHR_7ynzwSUpOFeOAUrpVrphVMPzj04X_Ky4LW65GLpwfnfHpz_-fzbbfVn8ddzP_Ya4a9KIEz0EEckziSvySCSlnJQLZwCD84F58qD87p-biat4P9PsP459JvXtPDgfPr45MH57boVMy0yYuoSt60XToM8iLWdvns49cLp9OELqjviwURLhhhnLw3vpCZt2meorh8Vwl_nAjWkv4YFQYrcc4xqD2YHjJkf9-bvaySJB2fALDd45rT04NRc2A77vw7VTy-t6XcQxCPmLflfykqzXoNiUymJUJQz7cefiexqdUnltJCEqdGbYGKIQVhrsKAHXoKmqxVtawIUbYj0IPRgCipEa1IOPvtwfzt9vAWyKxqqAAJFtwSCtFwooLi72lStuuIS82ZYmP31oVJ2eqI5QKwElOG6K4nZQlgguQLFxh_gDLSCtIJjIiUpgeSd6C_rkUhKjqnhIDoGJBa0VQNks0qg7Jp2I5F_6fn5g-BLgRqAxLJrCFNy8CTeGs_hTUtrIiZk3dZcEDF60wSN-sqJEh376sF5QdnW2bRTgsmy_IZENYnAZAkmXNtFbautd6rt1KUEk0ZrASaTdZZMkGwm8oUptPbCG8oUqcHkEUwmS4wnivMarxBlXnjzKjzdWTLUyhVXYFJhXnMxKSlaMi4VxRJMKsYnRlj7slSlF94MUQgWwAtng7zhbS9YoAXzwhnhlRfeghYJSQRAChBW6ohZ0XFnwqHn1kA4DcwW0_LqgTosVh3DxkV16AUeTCsPpr0B4MHQB_7aH_8Xpn5WFRkwHmTcXr7I_o8HQZky6_vUO0m27STQtwWXShDUGHef6XDYO3_2QavswWt_PcDTO3CDP3DwJzjFh_DPaoJY135ij3TJTNDomMlVJai5nuUcaDUYCy200CZRlZUZmGk3-UwwfybipYf3P4iVtZ40G5S0-sw4U2Q9RlTf_H8zRThMkVZhFPpBkkTQB4uFIFJxQRZCDTz7OL3OkkUSTWrKuvVkybq-oVUrQVB5Kfmlb7gEUQR9i0m0Mw2sMMx9vwACUUlOsI-15cRYjkLfLyzLsW3Zz7I4B6jgJyHfsQxhFueW5cS1nG5W_WSbKbRtprbNIK_K5H02w7AqE8tmtuslSZUVAYHa5iYrAYYaIluzD_OPTZI6PfaZ8o0k-Tqc3XQJDpQBjtPmLuOwyI-VCN-rwxNpWi6QePHC2Y7pTy36qyPGvMapw6illdP-sdq82fd-5D0EqEszfSt4q3fmW9Lq-Ojb0ha4LKK3Zp0KgV606dtnVHdIcdFf_0IlVabxjlF1z3lrJLN9y23eUewUvIGNlyBSRrtCP6pGGRxcGJ8NZ9to36CvZGGmW7RKnCDvAaJwBgrO6z6djpxtihrCO1lBhxWOyhIMkxKDwp5iz9VO8pNxROI453b7nGBKo7pjFR-c7m1uoeNhWVnFG2537KHu64UPwfODQuzJapb6JJaRw7L0kzeD8n9zH8W_5D5KfuF9lP4r9pFT3JDKj8jZ_FJXzKL8GY6Zu7SKItssXg_jH-uZ0K0hMhKUv5xnQqfywGFaVaeBORbi_0CKCIpq-ve2-tyP9Md6WR6oaz8qBTqx7INOwYGjOD_fNjukwlm2GXRqDZKmuHjTvXZxDWS_Z1l3icyQVPsrOV59J6nIXas8OF-q_nlr5VQgOC6zbdQYb2x-PCR-V4w5PSpYFUfq-zAN3qz77pg6FhL0_ekhx-mvvlNhp2JARVolZ3OcPVLn8ZrM5QTT9J_OySkOchSnZLMTPi5xHt9KJ4AM95N8BH-5JB86Sb7IYRxsWH5B4obg2jy--07hBxN7ubtFQp2Yu0PoYgx3askfBbiH7m087g1-WeFqg0dvh7fx6F79AdmPeraz_ey2b1Th1QxJ8kP6u7f6xP-1-bqJOvRJAfojiPlweqQTlBMGzanTPcdItzvAxmGOs71z27t097b9NvKbW__PpLKf7doDwtsTEGii2s4bi_Ddy_mumLknxymr6RYsCYoTV8X-LyofuCJMUVSPJvdLk6NLuRX_sUF1_YVgxcVd09ZeODPHnLqpRVTYa_Kq3zwgodHcbI5MTSK-3T7__sgDukGbzdGLFs-uqGCahs5tE2nQ4Cgrgr8a2ci6FVuVKspoz-wkFU-wPR6jfDD9gZ1F3y6-gjIOoH8Y4hSrT2xOGZWrkds1L52nb32u2uNpIqiVtz-aWo_combVYHEVB4VfOa4nidj5e6T1qJAiDWHqVH57lsyBz3l8eCCyyzSyCrmYpFWAg5OYHnPeh_5VAs0Wib5MdsPans3yiTRtbSrHih-r43ZH3SNF-pFTpcQ93c1mH6pYL4ilWGArhpIUZa-y01L8JnjXHhXqsSX4cPHVSzic4R8SxAhAi04ReaAccMLna8435-IzYktyx-jZxDRaWWJCx_1CHxVvivlpN4LeMUUEcw-t39bmtB6vLtAUYyKlbqMV1Yqcw_-0IpZkoStZWr4em0Y_opx9ejP3nEU41-8OC7dThvYcDpYsUeTwz0kVvcr_dt17yI4OP4fzOdxBs7XcIXbkQGlQvirHE2_vyTOph3vDvbcXHpRThG3ilymZbw-EmU2i_4OXXU3umpYLZVLhmRJZT9PSIXF1KBL_9URGhVS_iBhFYtUvUWqLkRAE4Z4Y5rXbzIW--8jzbDXXAMnCbJWTUZ7CqLTy6oyX5DfCpiZ8jXcnBHeKDJfGd2g_FOkAxEJqVYdRUCaxb72ANBc6X7PyANQzgewx7IKMfRtknAaE2HL2096ZezlMDit6nNVZfHnAaRGx6q0IFnFmnwEPkLd8njf1TvYa37NE6AGfRcCqcfyixEWUAIyDRYO0jezwg4kV2nsaYV8b3r87D48epUUjdGhEkY_AKP4seDKRInvtRn-fU2I_G9A2hlp35y4gB6Wgz0fKgdgqB8KqiFCS9y8mbu2OrzUvhNHWtI5fUwzP7jGq6wLhr4uK2QG_n3vwoVkw402DWOlu6oNruHmwwVs9O6qt84dHJShbDmmkX-DNgMUCr9dB0P8okKR4IU33QUWrs76wUAJRJcdmxxyqa70nuNhp1112bquNE_WamyEeTGvUFCXyYLqVCmbj-8-_8-LwesTuW8tlFu0sxaF3k_uWzx17RBWpXyw5X1-6M7yI3SO2PD9xXCz2Y6vi_te5iFOtH_WF1BYuLUMUHxXOrB3ay5ijmlYwdwbqDsceG7zSdeqc7264fahD9bQth8pcXYhfvleX33khj4vyOy_uqVSWKO95Bmu-JDhdx-2D15-gJvGtyj_ObTWzuAyPetnNzt9W4XCgYji2Cj9RzY8Pb708u_olvpPY84rgHutYoYz4TViZ7j3SP5a2P7wm0cgs6FZt6KMyKpMAaNAfPXdv2pobOh-IID8LwWJR00JHYiTUYgfIqZ-MRH4WWrO4VVdICAG9_Y_XVxvfzj5-4XlRXoVlHuboglwFSR7nQZAl-cXqCscYxnEcoiqrEhKneegnQQWxH0V5SiJ0Qa-gD0M_h1kQhWmUXyZVmRcJSksfpWmSh17kkwbR-lI70yUXywvz5eFVkiZZdlGjgtTSfB4M4bh5quE2xHwFOdMNuqLQv-KbC3FlPmQsuqX0Ir-mUsmtaUVVbT427k3FN_2HUqASvOn9lqxbMSH92S3lDPAKIJ2rJxi1qtPJFfRF0UUn6qvv_6rS0PtPAAAA__8z37hQ">