<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/73865>73865</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang 17 ICE: Assertion `T != LastT && "Type unwrapping failed to unwrap!"' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tycho
</td>
</tr>
</table>
<pre>
Originally found on Windows with clang-cl 17.0.6, but I suspect this is still related to my original issue. Here's a repro on Godbolt: https://gcc.godbolt.org/z/n1KGbnEGs
It only happens at -g2 or higher:
```
clang++: /root/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp:3470: clang::QualType UnwrapTypeForDebugInfo(clang::QualType, const clang::ASTContext&): Assertion `T != LastT && "Type unwrapping failed to unwrap!"' 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-17.0.1/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 -g2 <source>
1. <eof> parser at end of file
2. <source>:194:11: LLVM IR generation of declaration 'g_class'
3. <source>:194:11: Generating code for declaration 'g_class'
#0 0x00000000036e7558 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x36e7558)
#1 0x00000000036e53dc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x36e53dc)
#2 0x0000000003632918 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007fcaf5e42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007fcaf5e969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007fcaf5e42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007fcaf5e287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007fcaf5e2871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007fcaf5e39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x000000000395d890 UnwrapTypeForDebugInfo(clang::QualType, clang::ASTContext const&) CGDebugInfo.cpp:0:0
#10 0x00000000039aaa45 clang::CodeGen::CGDebugInfo::getOrCreateType(clang::QualType, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aaa45)
#11 0x00000000039b4dd4 clang::CodeGen::CGDebugInfo::CreateRecordStaticField(clang::VarDecl const*, llvm::DIType*, clang::RecordDecl const*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39b4dd4)
#12 0x00000000039b69e9 clang::CodeGen::CGDebugInfo::CollectRecordFields(clang::RecordDecl const*, llvm::DIFile*, llvm::SmallVectorImpl<llvm::Metadata*>&, llvm::DICompositeType*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39b69e9)
#13 0x00000000039aa0ac clang::CodeGen::CGDebugInfo::CreateTypeDefinition(clang::RecordType const*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aa0ac)
#14 0x00000000039aa71b clang::CodeGen::CGDebugInfo::CreateType(clang::RecordType const*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aa71b)
#15 0x00000000039aa821 clang::CodeGen::CGDebugInfo::CreateTypeNode(clang::QualType, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aa821)
#16 0x00000000039aaa97 clang::CodeGen::CGDebugInfo::getOrCreateType(clang::QualType, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aaa97)
#17 0x00000000039bda7b clang::CodeGen::CGDebugInfo::CreateType(clang::TypedefType const*, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39bda7b)
#18 0x00000000039aa82f clang::CodeGen::CGDebugInfo::CreateTypeNode(clang::QualType, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aa82f)
#19 0x00000000039aaa97 clang::CodeGen::CGDebugInfo::getOrCreateType(clang::QualType, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aaa97)
#20 0x00000000039b55b9 clang::CodeGen::CGDebugInfo::createFieldType(llvm::StringRef, clang::QualType, clang::SourceLocation, clang::AccessSpecifier, unsigned long, unsigned int, llvm::DIFile*, llvm::DIScope*, clang::RecordDecl const*, llvm::MDTupleTypedArrayWrapper<llvm::DINode>) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39b55b9)
#21 0x00000000039b654c clang::CodeGen::CGDebugInfo::CollectRecordNormalField(clang::FieldDecl const*, unsigned long, llvm::DIFile*, llvm::SmallVectorImpl<llvm::Metadata*>&, llvm::DIType*, clang::RecordDecl const*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39b654c)
#22 0x00000000039b692c clang::CodeGen::CGDebugInfo::CollectRecordFields(clang::RecordDecl const*, llvm::DIFile*, llvm::SmallVectorImpl<llvm::Metadata*>&, llvm::DICompositeType*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39b692c)
#23 0x00000000039aa0ac clang::CodeGen::CGDebugInfo::CreateTypeDefinition(clang::RecordType const*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aa0ac)
#24 0x00000000039aa71b clang::CodeGen::CGDebugInfo::CreateType(clang::RecordType const*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aa71b)
#25 0x00000000039aa821 clang::CodeGen::CGDebugInfo::CreateTypeNode(clang::QualType, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aa821)
#26 0x00000000039aaa97 clang::CodeGen::CGDebugInfo::getOrCreateType(clang::QualType, llvm::DIFile*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39aaa97)
#27 0x00000000039bc765 clang::CodeGen::CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable*, clang::VarDecl const*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x39bc765)
#28 0x0000000003ab0b58 clang::CodeGen::CodeGenModule::EmitGlobalVarDefinition(clang::VarDecl const*, bool) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3ab0b58)
#29 0x0000000003ad2831 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3ad2831)
#30 0x0000000003ad2e8b clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3ad2e8b)
#31 0x0000000003adc05b clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (.part.0) CodeGenModule.cpp:0:0
#32 0x000000000493c1e6 (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0
#33 0x000000000492e988 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x492e988)
#34 0x0000000005deb754 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x5deb754)
#35 0x0000000004939258 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x4939258)
#36 0x00000000041a1c09 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x41a1c09)
#37 0x00000000041278ce clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x41278ce)
#38 0x0000000004281de6 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x4281de6)
#39 0x0000000000bc67eb cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xbc67eb)
#40 0x0000000000bbefaa ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#41 0x0000000003f83419 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
#42 0x0000000003632dc4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3632dc4)
#43 0x0000000003f83a0f 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
#44 0x0000000003f4b275 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3f4b275)
#45 0x0000000003f4bcdd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3f4bcdd)
#46 0x0000000003f5385d clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0x3f5385d)
#47 0x0000000000bc4a87 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xbc4a87)
#48 0x0000000000abef61 main (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xabef61)
#49 0x00007fcaf5e29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#50 0x00007fcaf5e29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#51 0x0000000000bbea8e _start (/opt/compiler-explorer/clang-assertions-17.0.1/bin/clang+++0xbbea8e)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
```
Here's the repro, though I don't have creduce/cvise up and running right now so it's a little too verbose:
```
#include <cstdint>
#include <vector>
#include <optional>
#include <map>
typedef unsigned int GLuint;
typedef int GLsizei;
#define UNREACHABLE __builtin_unreachable()
#define NOINLINE __attribute__((noinline))
#define unlikely(x) (x) [[unlikely]]
#define likely(x) (x) [[likely]]
extern void glBindVertexArray(GLuint array);
extern void glGenVertexArrays(GLsizei n, GLuint * arrays);
enum class GLNameType {
Buffer,
FrameBuffer,
Query,
RenderBuffer,
Sampler,
Texture,
VertexArray,
NumNameTypes
};
template class std::map<uint32_t, GLuint>;
// A strong wrapper for GLuint names, to avoid accidentally using the wrong
// name somewhere.
template <GLNameType T, class U>
class StrongResourceIDBase
{
public:
typedef U value_type;
protected:
value_type m_id;
public:
constexpr StrongResourceIDBase()
{
m_id = 0;
}
explicit StrongResourceIDBase(value_type _id)
{
m_id = _id;
}
StrongResourceIDBase(StrongResourceIDBase<T, U> const &_other)
: m_id(_other.m_id)
{
}
StrongResourceIDBase &operator=(StrongResourceIDBase const &_other)
{
m_id = _other.m_id;
return *this;
}
U value() const
{
return m_id;
}
bool valid() const
{
return m_id != 0;
}
void reset()
{
m_id = 0;
}
bool operator==(StrongResourceIDBase const &_other) const
{
return m_id = _other.m_id;
}
bool operator!=(StrongResourceIDBase const &_other) const
{
return !(*this == _other);
}
};
template <GLNameType T>
class GLResourceName final : public StrongResourceIDBase<T, GLuint>
{
public:
typedef GLResourceName<T> this_type;
typedef StrongResourceIDBase<T, GLuint> base_type;
typedef base_type::value_type value_type;
public:
static void gl_create(GLsizei numNames, value_type *names)
{
if constexpr (T == GLNameType::VertexArray)
glGenVertexArrays(numNames, names);
else
UNREACHABLE;
}
constexpr GLResourceName()
: base_type()
{
}
explicit GLResourceName(value_type _id)
: base_type(_id)
{
}
[[nodiscard]] static this_type create()
{
this_type newId;
gl_create(1, &newId.m_id);
return newId;
}
operator value_type() const
{
return this->m_id;
}
};
template <GLNameType T>
class GLResourceRef final : public StrongResourceIDBase<T, uint32_t>
{
friend class Resource;
public:
typedef StrongResourceIDBase<T, uint32_t> base_type;
typedef GLResourceRef<T> this_type;
typedef GLResourceName<T> name_type;
typedef base_type::value_type value_type;
typedef name_type::base_type::value_type name_value_type;
private:
static uint32_t s_lastIdx;
static std::map<value_type, name_value_type> s_resourceNames;
protected:
static NOINLINE void create(this_type &_idx, name_type &_name)
{
_idx = this_type(++s_lastIdx);
_name = name_type::create();
s_resourceNames.emplace(_idx.value(), _name.value());
}
public:
constexpr GLResourceRef()
: base_type()
{
}
explicit GLResourceRef(value_type _id)
: base_type(_id)
{
}
// Returns true if a new object had to be created
// Returns false if an exissting object was returned
[[nodiscard]] bool create(name_type &_name)
{
create(*this, _name);
return true;
}
};
typedef GLResourceName<GLNameType::VertexArray> GLVertexArrayName;
typedef GLResourceRef<GLNameType::VertexArray> GLVertexArrayID;
class TestRepro
{
public:
GLVertexArrayID m_vao;
GLVertexArrayName EmptyVAO()
{
GLVertexArrayName name;
if (m_vao.create(name)) {
glBindVertexArray(name);
glBindVertexArray(0);
}
return name;
}
};
TestRepro g_class;
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkPFtz4ji6v8Z5UUEZGbD9kAcCSTZzMt2zSab3kZJlGbQtSy5JTsj--lOSjLHMpUOfMHu2N5Wmg6TvfpUsQErRFSfkOpjcBJPFFar1Wshr_Y7X4ioT-fv1V0lXlCPG3kEhap4DwcE_KM_FmwJvVK8BZoivBpiBUTwMh9MAzkFWa_AAVK0qgjXQa6oAVUBpyhiQhCFNcqAFKN-BaLADqlRNhuBvRJIAxgogIEklhaF2L_JMMB1EM7DWulJBNAvgXQDvVhgPV25yKOQqgHf_CuAdH_3PfcZv71UQLoJw5l4fNBCcvYM1qirCFUAaDFYQCAnWdLUm0uB0y6dh82vfWuECeGN-oxkI4J0UQgfwjrHXclBJ8U-Czdtm3R2jWQDv5iIn94Sbv-4XJKtXD7wQQ1xVQTSLxnFoUDmIaBZEs7_XiL28VwT8yd8kqsyfd0K2gAFMDiw2esaCK93FNHt-mQuuyUYHcBrA1BCaKUWkpoKDYBq-gACOgmgBHpHS5s00gFMQQGjp15Z-RfkKFIgyZyU3aMAgDGDczAydfv54vJ093wJVZyXVAIGsXhnDCakNaM9cVK_rbIhF2ehvX43WC1QA7wDiOaAcszonQK8JwBKpNcgQ_q4lwlb6ynoIJkqRHChRSzdsIJFSAlPrZ7LmQGFJK92w_KwR_g7yuqxao4fDIEz_kGIlUQmQXNUl4Vo1BheVNbAoK8qIHJBNxYQkcmv0AdrqVw1sBIwCeJdRvnMK4zxgsMrfkCwGYzBYgYEwiFFVGfS1rmo9VGBQGmWAwWCTTAdIlQP1zjXaBNGCck0YGDyDwWCF8UALwfAaUR5Ei5P8mcWjaAiHIRgUWDAhBzlFKy6UpliBQcHFwOrVH1Y6D6IFdozD0AZKEM0bDUe3Tmcjo7MgmhNRBNEtqJBURJq4IiZHFKCgjLiVsFm5QxDNRunYvI6Mjh8fv_0OHp7AinAikfVUUYCcYIaatwGMV0vMkFIBjB3S6AdI7xtkfAWwyAkohPwRShDAKAThJtz-RFMSTyYJsL5q40u9K_fHH5JybT3pxbljslsk0dtSKC0JKm18zQHlOoApCGDyWf4UwJtw0_Bn4rwVYNQTYBLl-JAAc0YQr6uv_JmuOGIBTGpuS0EOmDBULsKu4cZjF_rsRjAdJWBufPKJYPFK5Lvj72-I58xQTRpdemuanNdk2ND-a0lEDYm4wKiYkDGcwLCRzWXrTTJdTscDRnm9Gax47SbwUAlTzW7CjQXx2B77ONNpWmBQ6bUkKF9-N2XuLAIW3iMw6TM9jqdgpawuzmV-HE893FMfN0ziIgIoMzn7LMwW0MMc72EeZWfjHGUezsTHGaUknZ6H04J4OFPP69JJnqTh-cX3UNl1JdkVX7Bf_DuuaWLVzzYpQmg86eLd9hHuzQ6bG1gR_VXOJUGaOJ6OcboL_8XDnUnLcHaR-HYCtJo2EvrpKM3GeT7-uIROOBPlMn_WSFN8RwnLfUm_IbkgmG01P-tL7LQw65nMIe0BXkInVmRPJ7Cnk2lK0jN0IhgjWDv-rTqUr4-Dkh1xgu7wc4kY-0awFvKhrFgQzXdzvxONcqSRAYpum6rWxTgXZSUU3XripXRpVOXpMupHUIjwuf5lWF6QgnJq2DikTNscX9ZNLOeeaOO-aCaZ_oRo_zaBupncCDTpC5TA0c8I9EXk_z-SXWL2RB0Bp3vpPI3_w9N5GnsSxr3UlaP4E3zSjOSk6DnlXyiolcMTNNn31eI_3FcLT8D0V_dV2GuusskkO6PMYiucra-NhJ1KqSXlqydS9HqKI93hs92iPgqMXH3xW0eMiVLPFcG0oEb2OehtxDoDdu_zgVK-eHjG4sNdTxfy98VLXTFr1HwmJXr_h0RVRaTXDSwerFubRuAi0Wgs5Zmy30VOJ-Nzqny3Y_oiZInYgTbSDu1pZs8Wl22j_t29qlGsp_n9XhX-rOb_-3pV6Ovy1-1V4a_Wq8JfvVeFv3yvCvu9Ko6nZxyu3JZU3zORIfYNSYoy5rcA_al-yt4_lLhIjjEyeUL7fSvKwmySHBfavfld5DUjB8Q-lmgOnbhkQrCLCOlk8IT0e1eUwyQ6EZynhDwm4XYWM9-Jt6ph9cU82YnTlbf3UALlkCQnsuspeY9LeRlJSOKl1d7TCZTjcHK2JC-ieiSvpOG7K48b2ZplWCGph6E9iO1iOngU6z-IGKcRHhF7zIy44O-lqBXgqCSqsg97Uo9BIlHbh5hh96ziNJv3UtSV3UGkwLF1U1OWE3mYu8jnDpI08cL6BuHvhOdzwVVduqfZ5_Px2Q7Q8Ok5gNcoTHKSxRPvPPgPJBWZPb_4nD6TEjWNnMszl8s3DU8e05Oeb6TwYFKdYZtInKNuCK41aYYMj5fQr-XEY9Ur6-MRGuHQ2_TeScE14fkBXi_FpWPC4zL2uYRxgomvUEf3gSuNOCaHdXpcLPf45fMlsYx6knj1dgyTUU6mXUkanncCvbbHAMkpgS9TXBoGPQm8YhpmeBqTDGA8WpbI4Oj0PPY8wOSKaI7XSO7Kv9llzYE_BufgVdD8QoI4NrtyjENfjowUCIGt-uejF5svklNbyH2heltHg-PQc75c0tcjmXvsV7wiicaj1Gqmg7eoufXbpbTKtbMuGt29hiCaYcRYhvD3ZcENpzvPcbQbL5qP5qIsEc_7gX3QiPaehxkTlaGO_G307pDL8GAt3AIsl3izsfcsgmiWIUXxUtnljRa9xWZgqSWiWm2ne-gQYyYqhOzMmyWdxtJ6kdO5BQlgzFCZ5SiA8U5VMNneXfhNZIftsXfhIMfjjikOXStoNqM1f0YFYe-eOk-b7iKXKCzLnutHfR9DoXdY_V_nI73276gz-McWxTiD8eSo4qzx0F7Z3GrTy-c9QLOgkzHmJ2h0l868nqcj2-d6lJPb86hJXzE4z89VzG8iU8e18pvIHqnSnlZOJefWESpEjQ80R-EfVWTjLX-ROnGee-r0D1uKSZRMjqpz0fnb6x4OtA3HzPAXqvMCGc7px1Ng3GtSxihpTqu2bcpWAJtZZnsHxsdK9-c3JoY1j3evRQxRRorpCBiuP524w-0RT3s3stI8PfPymwXp4pyEfZxkHILl0oAtlUZSLzvSfZgKGftURv1-DiUEOPyfbzWLvSXfnY5mgEhpyk5zZRsUzV4D4CYqmqvS9jI82VDtLpyOorHhs1YEDF6BFkARAmin_2-IbVt_IImuJScmLg3wwevo7rW9JK_XxF2TN86u16JercEDyA32WIM1eiUAS5LXZkNxh1-pIqCu7AVpWXNO-QpIulprwMUbUAJQ3Vy9Z1RrRoAWArwSmQlld2AHGYLR9pa2KcxK5yYQt3eE_dlXm4COTO76i4PTJap2M_ZVu0sD3sNRcP9YW_o3_ho3pei_CG3nWio5KSgn4M8vT7ez-d9mN4-3YLnMaso05cuaS4Lwujn_7TpoA_bl68OXx4cvBgZpLWlWa7Jc2rUJF5Qzyq1j7UPWnNHvrp_cNKnI_T-5CSY37exkYX57sKcgD8DZV7LRRHK391ixG8rzb0RqsrHdXgATpzuA3Nu0VZQPd094B0xZOKtYYJ9sN0gCOHOIVBdTg4_XJbA3r8H94xdU2icIIIjbRelNXRT2UXg7cidRSfaH_14T-d4deCI8J3J_4TMqK-YPvZCNrk0c7YY8feyGv9Tlls3tZ0riRU8oTcqKIU0awdryav12bnQSwaXeachW0J4n3gXwDsyA0lLwFXhzD97txfVGq_YE0oa6AMjaA2FMc8K1_XhOrUxEm5zwZjB4aA0oUKIkb2siybDHdBDNO6Z4aToBpcCfbdC598-Wtyfibt0_LG6QIluVNNJUdcYo3uWLMN1G4Z_gFbGaLM37nvCVFJpgbZNfC7dbDcolzfsge3RsXSebSh5msxu-Ydr1tyBMDQEQRAsQdsikxs5dE4WpKTIUU32MRIdnw_IHCPqSHSB5hNLB4WhujWfM1ra306XQa-P7aZe-qTJWqzBx88PyFMMf4soQE5U7DrefTTnI5EnGjimpw2LkLXFV0yQcvabqtCYbB2wOOl0beIRyg3aP4B5Os5kwaK0mz0G7_SDWDxzOhrkkiujPcWDLb9dI59jpDOFOGO0HPFm1fDJP9tNrSeMkwIkNdu53kLvjOb6fLv0cef-45dksAYX9eKMJN5exDmeOJnB3xeGjSdWnZvFEt_Yjl_0824J8iAGQIbWXqlsUnUlT5TpZ73iK3xNB2Rv928Zi6W7cdRsKV3dtxetQCOCsKYRHg4EWYFcMApi8bE2-M1vzJLtb8f38GKaHmp0uTy0XfkYirK2JW0yd3vJ0JOy47tm1F_suf--scCI1HC9heyROFK99gmdVC9eZcpFThZHMXXMKGgdonRW0LnDCtrvVnLw99MtB149GxkgBnNp1bXk7WD72Ue2JsM1PXQ__eMY3XA-C6PZ4Mvy_p5snUpyXbdq2dC_fBGFaSGo3uZbIFv6HMf2RHNMhezrLeKJ9KLUdzoYmUA-lpJ9PaC1cB3Vzzn0EjV14ov-lr8Zp97PjVllALRlS-iHfdNloFvW2G10Pne9TvgVqKTtqUh9pxhtK7XbXZu021HZBaUozzTct4XaQ2xxzNKwNkO0advY10XUTwJud5Hvha7FasJ4hvEziw_SEH9oww01K2ww7LaIRwlLwB4_0Cz_clfjufNmM7ihcMKG7beWTzW4KaFkTQAuATCYFIvsnwRqskf3-gGyb1_Nj0AViyoFzQDZUKfux7QbLG1K7o7HT9cT2ka3lz3K_jr-4jcTW9EdLhhH5o5n8WHY61Y5Et-D-sTPgQG6OYXQZ8hyED302u1XlhSj9ZE8WTzaifYygXL4i0cMLANgXBdyWlX7_Nvva9XSzsiV1AIZ3dQCaH1qYFs8SHnrGd8HaQXjo1KtvY9D5ObQ-9Ba3Rt-CbPuJPqMnvKNVNdh-IUE7vz1rvcqvozyNUnRFrkdxOIJpMp7Cq_V1QUI0iWMU5slkPIYwGmfjJBrFaQ6LOJ0WV_QahjAajWAK4WQM4XA6xaM4LqIoSiI0TcNgHJISUTZk7LUcCrm6st_BcR1HyXRyxVBGmLJfDgNhcywOg8niSl7bb-7I6pUKxiGjSqsdBk01I9futHwUg4f57QW_h-Sqluz6579oxMr5vwEAAP__ez0scw">