<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/112346>112346</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang crashes when modifying the source code during compilation / preprocessing
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mxmlnkn
</td>
</tr>
</table>
<pre>
My workflow sometimes happens to be this:
1. Compile
2. Change something small in a source file
3. Run `make`, which often only compiles this small file and maybe some dependent files.
4. While waiting for the compilation to finish, change something else in the file and save it.
5. Clang crashes
I have had this issue for ~3 years. It happens sporadically, probably only when I modify the file exactly during some critical routine. Clang could cache the file into memory before doing time-intensive processing steps on it if not already done so. I never had these issues with GCC, but I admit that this is a weird error case that might be hard to fix.
Backtrace:
```
0 0x0000777afd5cfd3f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Unix/Signals.inc:567:13
#1 0x0000777afd5ce069 llvm::sys::RunSignalHandlers() build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Signals.cpp:105:18
#2 0x0000777afd5d0570 SignalHandler build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Unix/Signals.inc:412:1
#3 0x0000777afbe45320 (/lib/x86_64-linux-gnu/libc.so.6+0x45320)
#4 0x0000777b046ecc8d memcpy /usr/include/x86_64-linux-gnu/bits/string_fortified.h:29:10
#5 0x0000777b046ecc8d read<unsigned long, 1UL> build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Endian.h:66:3
#6 0x0000777b046ecc8d read<unsigned long> build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Endian.h:353:10
#7 0x0000777b046ecc8d read64 build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Endian.h:367:10
#8 0x0000777b046ecc8d clang::SrcMgr::LineOffsetMapping::get(llvm::MemoryBufferRef, llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>&) build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceManager.cpp:1293:14
#9 0x0000777b046ecffc clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*) const build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceManager.cpp:1384:30
#10 0x0000777b046eca9d clang::SourceManager::getPresumedLoc(clang::SourceLocation, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceManager.cpp:1548:7
#11 0x0000777b046e4a51 isInvalid build-llvm/tools/clang/stage2-bins/clang/include/clang/Basic/SourceLocation.h:318:35
#12 0x0000777b046e4a51 clang::SourceLocation::print(llvm::raw_ostream&, clang::SourceManager const&) const build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceLocation.cpp:71:14
#13 0x0000777b046e4af8 operator<< build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/raw_ostream.h:216:25
#14 0x0000777b046e4af8 operator<< build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/raw_ostream.h:244:18
#15 0x0000777b046e4af8 clang::SourceLocation::print(llvm::raw_ostream&, clang::SourceManager const&) const build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceLocation.cpp:83:6
#16 0x0000777b047e2fa4 getKind build-llvm/tools/clang/stage2-bins/clang/include/clang/Lex/Token.h:93:43
#17 0x0000777b047e2fa4 isAnnotation build-llvm/tools/clang/stage2-bins/clang/include/clang/Lex/Token.h:121:30
#18 0x0000777b047e2fa4 print build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseAST.cpp:72:11
#19 0x0000777afd552f34 PrintStack build-llvm/tools/clang/stage2-bins/llvm/lib/Support/PrettyStackTrace.cpp:94:3
#20 0x0000777afd552f34 PrintCurStackTrace build-llvm/tools/clang/stage2-bins/llvm/lib/Support/PrettyStackTrace.cpp:109:3
#21 0x0000777afd5ce03b llvm::sys::RunSignalHandlers() build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Signals.cpp:105:18
#22 0x0000777afd508d17 HandleCrash build-llvm/tools/clang/stage2-bins/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
#23 0x0000777afd508d17 CrashRecoverySignalHandler build-llvm/tools/clang/stage2-bins/llvm/lib/Support/CrashRecoveryContext.cpp:390:51
#24 0x0000777afbe45320 (/lib/x86_64-linux-gnu/libc.so.6+0x45320)
#25 0x0000777b046ecc8d memcpy /usr/include/x86_64-linux-gnu/bits/string_fortified.h:29:10
#26 0x0000777b046ecc8d read<unsigned long, 1UL> build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Endian.h:66:3
#27 0x0000777b046ecc8d read<unsigned long> build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Endian.h:353:10
#28 0x0000777b046ecc8d read64 build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Endian.h:367:10
#29 0x0000777b046ecc8d clang::SrcMgr::LineOffsetMapping::get(llvm::MemoryBufferRef, llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>&) build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceManager.cpp:1293:14
#30 0x0000777b046ecffc clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*) const build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceManager.cpp:1384:30
#31 0x0000777b046eca9d clang::SourceManager::getPresumedLoc(clang::SourceLocation, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/Basic/SourceManager.cpp:1548:7
#32 0x0000777b047bc9af clang::Preprocessor::ExpandBuiltinMacro(clang::Token&) build-llvm/tools/clang/stage2-bins/clang/lib/Lex/PPMacroExpansion.cpp:0:34
#33 0x0000777b047bba72 clang::Preprocessor::HandleMacroExpandedIdentifier(clang::Token&, clang::MacroDefinition const&) build-llvm/tools/clang/stage2-bins/clang/lib/Lex/PPMacroExpansion.cpp:0:5
#34 0x0000777b047dbb56 clang::Preprocessor::HandleIdentifier(clang::Token&) build-llvm/tools/clang/stage2-bins/clang/lib/Lex/Preprocessor.cpp:0:18
#35 0x0000777b047dbfbb clang::Preprocessor::Lex(clang::Token&) build-llvm/tools/clang/stage2-bins/clang/lib/Lex/Preprocessor.cpp:0:38
#36 0x0000777b047e8cad ConsumeAnyToken build-llvm/tools/clang/stage2-bins/clang/include/clang/Basic/TokenKinds.h:0:35
#37 0x0000777b047e9228 is build-llvm/tools/clang/stage2-bins/clang/include/clang/Lex/Token.h:98:44
#38 0x0000777b047e9228 clang::Parser::ConsumeAndStoreUntil(clang::tok::TokenKind, clang::tok::TokenKind, llvm::SmallVector<clang::Token, 4u>&, bool, bool) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseCXXInlineMethods.cpp:826:13
#39 0x0000777b047e9154 clang::Parser::ConsumeAndStoreUntil(clang::tok::TokenKind, clang::tok::TokenKind, llvm::SmallVector<clang::Token, 4u>&, bool, bool) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseCXXInlineMethods.cpp:0:0
#40 0x0000777b047e9154 clang::Parser::ConsumeAndStoreUntil(clang::tok::TokenKind, clang::tok::TokenKind, llvm::SmallVector<clang::Token, 4u>&, bool, bool) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseCXXInlineMethods.cpp:0:0
#41 0x0000777b047e9154 clang::Parser::ConsumeAndStoreUntil(clang::tok::TokenKind, clang::tok::TokenKind, llvm::SmallVector<clang::Token, 4u>&, bool, bool) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseCXXInlineMethods.cpp:0:0
#42 0x0000777b047e3613 clang::Parser::ParseCXXInlineMethodDef(clang::AccessSpecifier, clang::ParsedAttributesView const&, clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::VirtSpecifiers const&, clang::SourceLocation) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseCXXInlineMethods.cpp:171:12
#43 0x0000777b0481ede3 clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDeclCXX.cpp:2956:23
#44 0x0000777b0489566e clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseTemplate.cpp:0:24
#45 0x0000777b04894cb9 clang::Parser::ParseTemplateDeclarationOrSpecialization(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseTemplate.cpp:0:0
#46 0x0000777b0481cff1 clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDeclCXX.cpp:2734:22
#47 0x0000777b0481fefc clang::Parser::ParseCXXClassMemberDeclarationWithPragmas(clang::AccessSpecifier&, clang::ParsedAttributes&, clang::TypeSpecifierType, clang::Decl*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDeclCXX.cpp:0:0
#48 0x0000777b0481a3e2 empty build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/SmallVector.h:94:46
#49 0x0000777b0481a3e2 MaybeDestroyTemplateIds build-llvm/tools/clang/stage2-bins/clang/include/clang/Parse/Parser.h:297:22
#50 0x0000777b0481a3e2 clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDeclCXX.cpp:3597:7
#51 0x0000777b04817b67 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDeclCXX.cpp:0:7
#52 0x0000777b047fa20b empty build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/SmallVector.h:94:46
#53 0x0000777b047fa20b empty build-llvm/tools/clang/stage2-bins/clang/include/clang/Sema/ParsedAttr.h:932:40
#54 0x0000777b047fa20b clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDecl.cpp:4225:23
#55 0x0000777b048a748d clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:1124:10
#56 0x0000777b048a71c8 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:1226:12
#57 0x0000777b048a6464 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:0:14
#58 0x0000777b048a470f clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:743:10
#59 0x0000777b047e2d3e clang::ParseAST(clang::Sema&, bool, bool) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseAST.cpp:161:5
#60 0x0000777b06448dcc clang::FrontendAction::Execute() build-llvm/tools/clang/stage2-bins/clang/lib/Frontend/FrontendAction.cpp:1062:10
#61 0x0000777b063c88b4 getPtr build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Error.h:275:12
#62 0x0000777b063c88b4 operator bool build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Error.h:235:16
#63 0x0000777b063c88b4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) build-llvm/tools/clang/stage2-bins/clang/lib/Frontend/CompilerInstance.cpp:1046:23
#64 0x0000777b064c28d3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) build-llvm/tools/clang/stage2-bins/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:264:25
#65 0x000059a3a7750c3d cc1_main(llvm::ArrayRef<char const*>, char const*, void*) build-llvm/tools/clang/stage2-bins/clang/tools/driver/cc1_main.cpp:251:15
#66 0x000059a3a774dd00 ExecuteCC1Tool build-llvm/tools/clang/stage2-bins/clang/tools/driver/driver.cpp:360:12
#67 0x0000777b060a2e0b operator() build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Job.cpp:428:30
#68 0x0000777b060a2e0b callback_fn<(lambda at clang/lib/Driver/Job.cpp:428:22)> build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#69 0x0000777afd508a67 operator() build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#70 0x0000777afd508a67 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) build-llvm/tools/clang/stage2-bins/llvm/lib/Support/CrashRecoveryContext.cpp:426:3
#71 0x0000777b060a244c clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Job.cpp:428:7
#72 0x0000777b0606d783 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Compilation.cpp:199:15
#73 0x0000777b0606d9cf clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Compilation.cpp:253:13
#74 0x0000777b060880f0 empty build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/SmallVector.h:94:46
#75 0x0000777b060880f0 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Driver.cpp:1856:23
#76 0x000059a3a774d4bf clang_main(int, char**) build-llvm/tools/clang/stage2-bins/clang/tools/driver/driver.cpp:562:21
#77 0x0000777afbe2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#78 0x0000777afbe2a28b call_init ./csu/../csu/libc-start.c:128:20
#79 0x0000777afbe2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#80 0x000059a3a774a2f5 _start (/usr/bin/clang++-16+0x102f5)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFtT47qW_jXmRUXKlu8PPITQ2ZM9ME017L37jZJlOdFgSx5JBjIP57efkmzHF5xA0wnnnF1d1Q3GlqVvfeuitWTZSEq6ZoRcWP6l5V-doUptuLgoXoqcPbKzhKfbi5steObiMcv5M5C8IIoWRIINKkvCJFAcJASoDZWWO7fsK8tufgJnBha8KGlOmhNwBhYbxNak7mZD2RrIAuU5oAwgIHklMAFZd4M7A98qBqzALtAjsQLbggvwvKF4A3imCAOc5VuA60GkAdF0qDsBiKWgQNukHg-kpCQsJUyZq3LWDOLNwF8b3fwZUaUhZVwAtSFNv0hRzrSUGWVUbjQCPBaC5JJoGfRdu5EleiKAqnYYfwYWOWJrgAWSGyL7VK3ARjfeoLSWgUpZEYPjHy7YEiTkDKzUjnJZcoFSilGebzWeUvAEJfm2puN5QxhYgYKnNNt2kMgLwirfgrQShnfNCBZU6W6A4JWijOwg8ipPAUZ4Q7oOKFMcFKTgYgsSknFBQMp1V9oezilThEn6RDQaTKQ0gyhSSsAZoArQDDCuAMoFQekWpJxpBmdgBRh5IqIRnmgitfQSPFO1Ab8tFlrCpFJgBVBaUAXUBqmWJoDAM6EiBUQILgBGktTXC7reKG2YGyTSWnsvsz7llwg_KoEwGVmtNrL6n_nTBvaLbdt2GIYoS32cpW4G8vyp0Le5c7mV9cGtoEzdKYQf702nMOoaCfT8wKUSBBUWDLQ4lCkLxiCpaJ6em4ZwqTjPpQWXWGvAgkup0JrA84QyfbZplNPEgsu7qiy5UBZc_sHoiz5B1wzlckYZtty5H4SWO3fcxvAs6DojKYgdxFNSfKtY3dV_IZbmREgLRscB2iLEZamx2b7-GXUI4RBhavuhDQZYTsWW50CNpYPi9qEkxPNdaANDRNPhSxQ8BN55Tln1cr5mVX0BzySfBRa8tF_MLRaMuz69rs_E9gKCcZRqX8LlFlhwWUlhwSVlOK9SMj1CQpU0cmrvfci4UDSjJJ1tLHcOY8NpN5w_NZz2O8tdVMxE_BTkXDO3AM4f15b75QP0dnibEx3TX1hKETPggsBy5z1bDN6N7YSgXN8dURbugxV4p0NRO2oPRTSFoh7JOOidwDdrUR9fU0a-Zpkk6gaVJW2brIkaRJ8bE7Evqywj4hvJtMa7i5dVUd4qMc9zjpHiYlWUueUuencjfWl3Xd_t2XFQ5cMjB0ZVbrlfTHz7oXjRnq1d6xJJijVdJhW4QQytiWiDBoyN0ryOrnhMV5bhAV39bnb0aOL-pyoSIiwY9VovaU5WV1qcnR2aQL0ACee5BedaNMyZVCcS0I08bRWNPei4bY8FRHH6toC3gsiqIOk1x0MJ6-bXWpeUs06y04rle5HlzsNOKmcklYd8B1C5Yk8op-lHUHT-1p4ZImpFrt3OiUwI6ADBKUD7eTPnSmGM4-A8v09TNd2NsxyV-p2gNfeh0_MYLan7StIsArwkwni3u7DcxXHDXY-Ueq5y9HwAe-SP58bPh-R5vWxEQxrPnwbS38EeIh1Bg07Q4WQcEpghD6yJ-m_KjuSH10SnXPf8kdTOZ2K453YQwikIVM4Z46quvU6Cw4HOKNZGU0CMVj-ujFskJGl_z-_uW7c0KafTjR0P018fZq4HupriCLnvrSBKbbsKpUESe112ptNwey-QRSW6u08HyLHjIaLXtYub_PvULhrhqHaxo9QJQY1ioWv9I0Aw_XwjmD8RsV1wpsiLam1JO1QXTqE7hWZw_7HLqgPg3NjW6DpLh96Rqyvd52S5c5rqSg_3_grmc6srjW1vGfOvq640rMm65lOrK43iVbnwq7raV11Z0HVfFR9_s-rKHdchf4vqyh0WM2GCY5T1pboVpFmi5Y1QX15KxNLLiuaKshuEBR8KZrKmnzW-OgG7vTX9mxFll5fqWcLtmZ47kiFBITwsQz2ddZ2nJF2lhJk4LvaJM8jIzb1XJKOMmrSzn5OfTupu5h4tEoZpkvjBe4R-W86fF6A3dA98LwsarTmGaZIlyWH0puvPBez2AI9rnwijFCw40849Z1sD5rhrEaZLXVpJM0HZw1UId1wJxRBGgMoT1WE6ang9lxuXP2b0vv50CdNobsdSeqe4IH8wRfOhKhV_7OlUyzzytukG3dR4V6A8_5Pgeg3gtZEsgFe1U2IbaLuAe5yCbfH9-4rllJEbojY8bSuACAa95yuau3jMneN7v7ib4s42_1viPPsXcR8jzvlF3MeIG2VHxA0cdx9xU91e6SS_z90c61nmriS4mYIXr7pL50oJmlSKyD8pee5lFq_aUra-IjhH9eLnZJMBuvSeFGWOFFmxjO_r-E8q1A6g3NdqnL6eWC9OvTYNO9UMk77IISl5UzWLHEl5Q3S50fJmwH9cQ8civafNb_PV6mvyvwSrpsw5DrG668X37w2fMPbNyno3LXnDhDKK_SAgBwW7o2ydkx6R80wR0Uo7ZLUz02bJ55SsvWWrkyo7qNRXRnEsrbRS9sIP7NIszx_pxMNJfJC2tr-eVr4Kgxvl9P8nzP0txfxncdcL3cEoPuAsc37Fh3fHh9D19K9ewA1HhGZkuMDzfkL_ompzK9C6QPINbn_c2u63Jdl1oP8YXdcwTsjbyAijEWfIJRCQolTbYyxkzq_uLbjsZVN1raYV53WP7bx4CsQN2ibkikgl-HZngOmRyscBQaJZFw-H9uTbU7DesKfalBr94gnvfL2q9t6Le0xrvPz4eabk-oaybq3Od0aMhUkQHmZMu1_PnX4oiz_IloaqOz5WfJuIqm3ev6fvFsGBfGKszdO5fE9Jo5IhQ9BOPtvlffcoIPY7-B0pUMuGYbl5Wg81ji7--d4UjkPG0psluhrkdcZyYtP7uMm1i5VIkY6cayrruXrQflWUOcVU6UmKoYLsej2mmTY26kHoD9N9f5RaotAbPt6aVM1XsawY1tq5ItmKKSIYGq0OvDMDerNFk-1Ma_pkOeXuQYkDveHzQD8YE-bgvUueY1se8NY8MvgE2sYmd3raYL3a2ZvmR2kjCrxg79qTOf7yUpvV3gz8VFQdmwx7-ITUHyWDyAvt7HAxx8tr8kTyOtHoU_C1RP9XkVs1Wj_TDX8TvCq_kaxbQOvP6Tpum6MbnlY5WRUlF-pOmXr9iDNkS0HojZ7t--PFb5i6r1cZ5nf3o7TOzDcnXA7sdls5gTN40BYM8tTA86IUD-qepdCBm6Vz3G3v-_JCcGXWQH4KYtt177AeZbe7KIBDfoNBjhi4OIoSs0fvVn1k886hvRNCNNkHDP2hzwdwCkS7SdNo7mRYXIOlS4UCdwpLT33NS2dixaRCrH7DZ6fARqfDrQlDff-k2_RUPEayU7I3WqoLvKFJYhilg7XPBn3X4ROfKpZeif6TUbCV5d645nIvinaNIfCGm3uDNifxY-SiMPRt7KYAY-ehQJQNdtLMhUBbE-UWeIN2W2LnJuqZd-565-ACPHGafly8tlUq6JOeNpctplYS36xO9yQJhpJ4aWrboCVk4dz_oAvsBVIftBVjYI8ccTD5BjaCxE663dI_GZ2uWhC_82SXZ0bDXTNBNIUAozxPEH58yJjlLrRiUZGkCCAF3jkEhBaMj7Qrramp7q_bHA3lX16UQPVzd28c3OLxlkkUhD_B6cdQjRQd2lOgOneZ2nRZX_lWsTuUkXw7cK-sGfNBGBfT3lNvu4yNgx1jn-yBfaAeHO5TDJ2xEXneYApu3KEWdeEseFEglo6n4snoIVXTjpc1yYMtd3dmi2eTTdWhZXfDwwN-eXGc-o8ESYof6h2hTUwaNNYnHpRAVMn28qg7tNvX113XTebH3fS216O6JYxwOH3bQRpG7l66u9eex3OP0cFgwhndqBvsq8oPNJ0PMsHjMdITpZ1643gY10N3TE2Msx-l5neeyP28_M6TayrVgJfJR-fN_tCdAZWIatt5vU55kMrGyj6JUFjv9e259jCVsaPIzuzPXi4L_SkQexi86h0PMpyJBGufNXyiVo8xv1_1kwwnGj85Dl8lO17SOEWbuLXwTVicHzERG-Q_vqmGYPf-QBgO3x-AyMEIPDzkNNHBGgn1oFMRgxLM9DiysuBypg_lVqak1IOxUuXNewXjm4w5hcO3YsJoPCiM6pTngTKqxuPUh7rzc9P5DJup3SQ5XR4VxlOdDiSZEmKyc9cLBxVuZI_0h2Dmg7rX5mWL-qWIROuy1cWlBS_PnfolC8eGmd-9ZNF-FOEsvXDT2I3RGblwQhjFsR164dnmAmVJjB0bQ9t13MxLkjAIAhgnrgfjFHveGb2ANvQc2_Edx4EwmHkEp14EnSBDSZDhyPJsUiCaz7T5zLhYn5nvQFw4DnS94CxHCcml-UwJhA1gaPlXZ-JC33CeVGtpeXZOpZJdF4qqnFwMvrtRfx-j_jqG-XrFhrRfHsE8Je33Mfof_7DgEpS7DaWUrc8qkV9slCrNu0dwacHlmqpNlcwwL3oJkgZWCl4_2V3W37Ww4LIR6ekC_jMAAP__qFLAmA">