<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/96043>96043</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang-tidy crashes when defining default operator== outside of struct
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
apirogov
</td>
</tr>
</table>
<pre>
Hello, when trying to use clang-tidy on our work codebase, I stumbled on a bug that persists until the latest clang-tidy (I built it from source yesterday).
Example snippet (bug_example.cpp):
```cpp
#include <vector>
struct Foo
{
std::vector<Foo> bar;
// bool operator==(const Foo& other) const = default; // 1. ok
bool operator==(const Foo& other) const; // 2.
};
bool Foo::operator==(const Foo& other) const = default; // 2. causes segfault
```
When defining the operator inside the struct (1.), it works. However, if you declare inside, but define outside, clang tidy crashes with a segfault. It does not matter which checks are enabled, apparently it fails already during parsing.
What does seem to matter is that there is a member of the same type as the struct that is being defined.
```bash
$ clang-tidy -p build-release/compile_commands.json -checks=-*,misc-* bug_example.cpp
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: clang-tidy -p build-release/compile_commands.json -checks=-*,misc-* generator/mwCreateWrapperAntlr/Converter/min.h
1. <eof> parser at end of file
2. /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_vector.h:2050:5: instantiating function definition 'std::operator==<Foo, std::allocator<Foo>>'
3. /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_algobase.h:1576:5: instantiating function definition 'std::equal<__gnu_cxx::__normal_iterator<const Foo *, std::vector<Foo>>, __gnu_cxx::__normal_iterator<const Foo *, std::vector<Foo>>>'
4. /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_algobase.h:1248:5: instantiating function definition 'std::__equal_aux<__gnu_cxx::__normal_iterator<const Foo *, std::vector<Foo>>, __gnu_cxx::__normal_iterator<const Foo *, std::vector<Foo>>>'
5. /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_algobase.h:1236:5: instantiating function definition 'std::__equal_aux1<const Foo *, const Foo *>'
6. /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_algobase.h:1190:2: instantiating function definition 'std::__equal<false>::equal<const Foo *, const Foo *>'
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0 clang-tidy 0x00005e999ff4564c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 60
1 clang-tidy 0x00005e999ff42b4b
2 libc.so.6 0x0000725d1a050ae0
3 clang-tidy 0x00005e999df5cbd9
4 clang-tidy 0x00005e999df73e63
5 clang-tidy 0x00005e999dfea905 clang::Sema::EvaluateImplicitExceptionSpec(clang::SourceLocation, clang::FunctionDecl*) + 1237
6 clang-tidy 0x00005e999e0269f5 clang::Sema::ResolveExceptionSpec(clang::SourceLocation, clang::FunctionProtoType const*) + 405
7 clang-tidy 0x00005e999e0d8487 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) + 1047
8 clang-tidy 0x00005e999e0d9ae1
9 clang-tidy 0x00005e999e49b033
10 clang-tidy 0x00005e999e4e74d6 clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&, clang::Expr*, clang::Expr*, bool, bool, clang::FunctionDecl*) + 1814
11 clang-tidy 0x00005e999e719e3e
12 clang-tidy 0x00005e999e760bf5
13 clang-tidy 0x00005e999e73a475
14 clang-tidy 0x00005e999e761066
15 clang-tidy 0x00005e999e7335a0
16 clang-tidy 0x00005e999e771309
17 clang-tidy 0x00005e999e7719b0
18 clang-tidy 0x00005e999e76c1c4
19 clang-tidy 0x00005e999e77233f clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) + 95
20 clang-tidy 0x00005e999e7c1e07 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 3159
21 clang-tidy 0x00005e999dcadd07 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 71
22 clang-tidy 0x00005e999e0d87f7 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) + 1927
23 clang-tidy 0x00005e999e0d9ae1
24 clang-tidy 0x00005e999e0d9f52 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) + 274
25 clang-tidy 0x00005e999e4ae973 clang::Sema::FixOverloadedFunctionReference(clang::Expr*, clang::DeclAccessPair, clang::FunctionDecl*) + 1411
26 clang-tidy 0x00005e999e4e5513
27 clang-tidy 0x00005e999e4e6863 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 1363
28 clang-tidy 0x00005e999e10b73b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 2827
29 clang-tidy 0x00005e999e10de41 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 81
30 clang-tidy 0x00005e999e73c909
31 clang-tidy 0x00005e999e734477
32 clang-tidy 0x00005e999e76c1c4
33 clang-tidy 0x00005e999e77233f clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) + 95
34 clang-tidy 0x00005e999e7c1e07 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 3159
35 clang-tidy 0x00005e999dcadd07 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 71
36 clang-tidy 0x00005e999e0d87f7 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) + 1927
37 clang-tidy 0x00005e999e0d9ae1
38 clang-tidy 0x00005e999e0d9f52 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) + 274
39 clang-tidy 0x00005e999e4ae973 clang::Sema::FixOverloadedFunctionReference(clang::Expr*, clang::DeclAccessPair, clang::FunctionDecl*) + 1411
40 clang-tidy 0x00005e999e4e5513
41 clang-tidy 0x00005e999e4e6863 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 1363
42 clang-tidy 0x00005e999e10b73b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 2827
43 clang-tidy 0x00005e999e10de41 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 81
44 clang-tidy 0x00005e999e73c909
45 clang-tidy 0x00005e999e734477
46 clang-tidy 0x00005e999e76c1c4
47 clang-tidy 0x00005e999e77233f clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) + 95
48 clang-tidy 0x00005e999e7c1e07 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 3159
49 clang-tidy 0x00005e999dcadd07 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 71
50 clang-tidy 0x00005e999e0d87f7 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) + 1927
51 clang-tidy 0x00005e999e0d9ae1
52 clang-tidy 0x00005e999e0d9f52 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) + 274
53 clang-tidy 0x00005e999e4ae973 clang::Sema::FixOverloadedFunctionReference(clang::Expr*, clang::DeclAccessPair, clang::FunctionDecl*) + 1411
54 clang-tidy 0x00005e999e4e5513
55 clang-tidy 0x00005e999e4e6863 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 1363
56 clang-tidy 0x00005e999e10b73b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 2827
57 clang-tidy 0x00005e999e10de41 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 81
58 clang-tidy 0x00005e999e73c909
59 clang-tidy 0x00005e999e734477
60 clang-tidy 0x00005e999e76c1c4
61 clang-tidy 0x00005e999e77233f clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) + 95
62 clang-tidy 0x00005e999e7c1e07 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 3159
63 clang-tidy 0x00005e999dcadd07 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 71
64 clang-tidy 0x00005e999e0d87f7 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) + 1927
65 clang-tidy 0x00005e999e0d9ae1
66 clang-tidy 0x00005e999e0d9f52 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) + 274
67 clang-tidy 0x00005e999e4ae973 clang::Sema::FixOverloadedFunctionReference(clang::Expr*, clang::DeclAccessPair, clang::FunctionDecl*) + 1411
68 clang-tidy 0x00005e999e4e5513
69 clang-tidy 0x00005e999e4e6863 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 1363
70 clang-tidy 0x00005e999e10b73b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 2827
71 clang-tidy 0x00005e999e10de41 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 81
72 clang-tidy 0x00005e999e73c909
73 clang-tidy 0x00005e999e73e6c9
74 clang-tidy 0x00005e999e73a475
75 clang-tidy 0x00005e999e734477
76 clang-tidy 0x00005e999e76c1c4
77 clang-tidy 0x00005e999e77233f clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) + 95
78 clang-tidy 0x00005e999e7c1e07 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 3159
79 clang-tidy 0x00005e999dcadd07 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 71
80 clang-tidy 0x00005e999e0d87f7 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) + 1927
81 clang-tidy 0x00005e999e0d9ae1
82 clang-tidy 0x00005e999e49b033
83 clang-tidy 0x00005e999e4e74d6 clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&, clang::Expr*, clang::Expr*, bool, bool, clang::FunctionDecl*) + 1814
84 clang-tidy 0x00005e999df51f24
85 clang-tidy 0x00005e999df5d663
86 clang-tidy 0x00005e999df73e63
87 clang-tidy 0x00005e999dfb985e clang::Sema::DefineDefaultedComparison(clang::SourceLocation, clang::FunctionDecl*, clang::Sema::DefaultedComparisonKind) + 894
88 clang-tidy 0x00005e999d9cca5f clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) + 3599
89 clang-tidy 0x00005e999da148b6 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 5206
90 clang-tidy 0x00005e999d9c4d51 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) + 881
91 clang-tidy 0x00005e999d9c5aed clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 925
92 clang-tidy 0x00005e999d9cebdd clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 493
93 clang-tidy 0x00005e999d9cfcd5 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 613
94 clang-tidy 0x00005e999d9bf16a clang::ParseAST(clang::Sema&, bool, bool) + 602
95 clang-tidy 0x00005e999d6d9ad9 clang::FrontendAction::Execute() + 201
96 clang-tidy 0x00005e999d6518ab clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1435
97 clang-tidy 0x00005e999ceaa817 clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) + 359
98 clang-tidy 0x00005e999ce3ee19
99 clang-tidy 0x00005e999cea30d6 clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr<clang::CompilerInvocation>, std::shared_ptr<clang::PCHContainerOperations>) + 118
100 clang-tidy 0x00005e999cea610f clang::tooling::ToolInvocation::run() + 1327
101 clang-tidy 0x00005e999cea8004 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) + 2900
102 clang-tidy 0x00005e999ce459b3 clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef) + 963
103 clang-tidy 0x00005e999c009197 clang::tidy::clangTidyMain(int, char const**) + 4151
104 libc.so.6 0x0000725d1a039c88
105 libc.so.6 0x0000725d1a039d4c __libc_start_main + 140
106 clang-tidy 0x00005e999bffec85 _start + 37
Segmentation fault (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXN1v27qS_2uUFyKGRH0_5CFxkj3BprfZpnsPdl8MihzZvJVIHZJy4_3rF9SHLTumT_qBWxctYDSuNCRnhjPz-5EWRbTmSwFw5cU3Xnx7QVqzkuqKNFzJpVxfFJJtrv6AqpIenqPPKxDIqA0XS2QkajUgWhGxvDScbZAUSLYKfZbqE6KSQUE02FYPSJu2LipgVoSgol0isyIGNaA010ajVhheIbMCVBED2kx79XD2gIqWVwZxg0ola6RlqyigDWgDipGNh_OZ5996_nX_790LqZsKkBa8acDYLop2uYD-8ow2jYdzL7yetvESv__Yu_0VHHJBq5YB8sL5GqiRygvvpo20US016F7K4Wp6M97OtWF2iPB6bDm3YuEdKojywpu9sf3cw_cevkeFlBWSDSjSNbm1H5xRKXQ_Ck6QNCtQHs5Rf9ULbxGDkrSV8cIbhIaOghmSnw7G-OLOpx3i0cPp7YH2Xbedbdba76E8niFKWg0aaVj2d_fnaDr8nzYmGZRcdFG5gq2JiAvNGXTXhpnycBbM7OTjuY0mG6p6hv6Qn2Ft9ZojXqKNbBEDWhEFQw_2RtGafhRAsjXj1S5OURenVBG9Ao0-c7NCZKv5DD0YxCRoJKRBNTEGFPq84nSF6AroJ43sOCCIzQ_bJWkaokCYatPFO-GVRqRSQNgGsVZZIxuiNBfL2b4byDCOBqhtdg5jcd0nm_U82P8RVENdgEKy7F1DakBm0wAieuqrrhXXqAA7Zm87mx3NmYLo1Zg00TR5L5suddmlggq6cnBPZd3wChZU1jURTM_-paVAl70zvPD20sPXHp7XXFP7FR1m7mT8p8e76-c7pNui5mYoLAoaqYy1f2VMo21QdkG15GbVFjMqaw_fV9V6_HPZKPkvoMbD91zrFrQNQCIYGnPfeqSbW1QQ-skoQmFwwrMh9BNibd1sa4k_8_z8ScmlIjUiatnWIIxV4js7ZQliSDN8X3-eKyAG_lSkaUBdC1PZy3Mp1qAMdCJczIYJCqyGXjgHWdpiZEMJFCIGgWA2IkpeQS-JZ31darXtouDCw_ezmXUbL5LIupRSD9-_ZMkiiS4bellx0b5cLkXr4fsgmgWzYGxx8M_gWmu3h2-6z65BwY2dA22qRV85ZysvvMZ-7HvhdWxdyYU2RBhOjA3MshXUcDnWgO6rh9Nt-T0oSH0ZxnO0FSBVJSmZlmj7wWnvhfCHe4FUS2mhtPNDEKfJ1_kB_mpJ5YXzxWIp2gV9eekvLxZCqppUC25GP823JRv1YYdcWNY5ao6-d5cT90dn5n4cZV_n_sWim4AFaV9-ukmIz20Swq_MgckkBMf8sX9h4oHkzDwQ5LYa4q_2gBfOS1Jp6CZ6Wh3e7pId-nWUR7YG6U1dyAoJUoO2VAuEbhV0hGpF1oA6vO2F-P9ZaiLsPYWerj_-gaRCGjqagkCsuZLCYidaE4W8xH98_Oe7xfP_vLt5__jwv3cfFraJl_gW5xvJRQf43ExpvY-mmOu_-L7vx5DneVlGcRLRTpveeL3R_ZcnxYXpDPtocd7D2U5Ikc8LqY0CUns46biisAMiD9-gkZIGJwbFRVQMyIpQxQs603KWoEEqxTELiB_7BIa-QldfrIxpwfKhQLql0hCScMhgtxSQ3I_7u72hz1CT_tvdmlQtMfBQNxWn3Ny9UGhsSD03QC21nzTqlmSPFki5FFtq3N-8H4LyFmjVhVXvtACHY3q51AMfJ3npUO8DaFmt4Vu1elLSyI-W__aLnp2CkR_3-qVu_VgWZelx_d4R9Wkc5AOUoEBQy_G_3m_zboG49Z8fDf7LTuiXEwh6qdwlFOWFHw6REvhOKUgjlhw3tWeg79egKkkYsBsu3jdfYOkNF0Rt3g9U7T-5YAcC_y1UP9vsGYyNx3GykgPBu5dGjaXr6NXeg7u_b4jTLIgG5wQu56RBDuFAnAPslEr8ohxiKgidUiGJ0lEqcvcV-EkySMXuvsKYjMUpcUqlQegPBSVIT0jlxdhX5taLBnT0lzPk0hSHYXk8mJ7bQptnU5uDAOquHM7su7Yy_BHWUH2EuqmIgeth2fXItZlEST-X-eBX7AzzlAbgOzL6YYu1sIuVEWe_R2If_u2VDoN4mBzsCkBGCWMutVUr_uRm9dyWJaccBoh7bnqIO6n0Dv9GZrFQUHrhfC05sxjfQe7dqGk6lBrsTAGfZWn5owpmPpIX7Ey-acHEzuTzWV7G-LgVN3ZtbzX4AGVfd6b6_5NULUz0m9z6r5ZUFoeO1K6u1ZGyeNvtU3Wu-Aep4UGU0lUY_wHaALNSFid5yUE9SnooRGpgx7U76fhjuTdVZltLcTqUBuwsWRGBPA2P-_aev-xA5lWo7Hv6OBJY464pBa2fCFdvBIAoGCPCWUIjiONgwFDsLKERJFnisK2Lm511c1JVr8PnmUobICfw7ShoPkr5qW2OS51K-netIUUF10qRzYcu748M2q8_3xoqTigefB2OnBU7ISbwizQsTnjxO_juvLyCs23lckJq4DOIguNeuabmvfiJvdJ7IRuyMHSDd0jzkciEbrIWRlE67u-dIGs7IhO6ydoPJjKhmyCeM5EJXeX_zIhM6Cz450FkQifUTIlM6Cylv4nMtxKZ0L2sPmMiE51Y5u-ITOQsob-JzNuJTOSEmF-ZyEROSP11iEzkBu8JkYlO7O7siEzk3t2ZEJnoxO7OjyUykXtH6ZyJTOQq_2dGZGJnwT8PIhM7oWZKZOIT-0q_icy3EZnYWZDPmcjEzhI6JTKxe7fpN5F5M5GJnRDzKxOZ2Ampvw6Rid3gPSEysfvnoAmRSdy7OxMik7h3d34wkUncO0rnTGQSV_k_MyKTnPhR5hyITOKEmimRSU7sK_0mMt9GZBL3zy9nTGQSZwmdEpnEvdv0m8i8mcikToj5lYlM6oTUX4fIpG7wnhCZ9MSzO5DQUerE7s7uCZ_0Tbs76Zt2d9Kz3d1Jf87dnfQn2d3Jznx3J3vT7k7mTL7pE4qZe5_i9xOKmavmsDIOSjxKOX99LWOWjCiZuWrO3qPFmavmsLLIsxiOT0eXxnDbn_0DNpd1QxTX35rVrrEOR-nnbyj9-egVV41iOaUk3queT925qcn3v6tPT_2ZvZFVS_U6MF71ycYSe4p8T1s9EgN9y2tjlC3IkyAJ43yoapmzqpEgyorkpFLWgv9Qsm2c9vXPYR_qubN8LoWBF3PMjk5vXrQG9Jf657X8YfAcRsi0v3upPhCxhAfBpz6LsT88Ypu7KizLacTi4G999l5NQuRBGFCCVK99-AYX_K3EyXnoVyjbhdo2C0YGlDsfMc1pTID9raHDonHPXmdKfHdzDyfZYW6OB2KSuzCH5RQKdtrcu5d-Gidm_3tMHM4n5EMNzp17NzktKYtPGvFRNh2f68voVPv3DfmrhSej9gn3tgJ0VPzuSOLtGIZkbQUPdSOVJUEGJtQwGde0uROz8qIMEvJK--vnjwcwYQfs1TjG5xIfDyM5cS9hOWH5HrooW6YEu-5ieARpoK01ItuunvwxbZxgmcRBRvaWlPP-tK_q6S2Fvc6H8fbsO9Bl58MgCsc4dsEwBUKyYI8BGikrfrzve0KNVJstj30Q6239zLanyPSKKGCL5jAydoZtW71ald3zCt4RQZagDk8hurp9mv9hMYNwAapnYFwK_brrW06WQmrD6VwK3dag9uFv8JQL5imEAMEo5cJICiT091nmnj8_SllN7T_mSLoiarJ_tWcEU3w95mfvzyl8ff0UfIuXh2ALsvGMkAsMKZAk8Msvdc4koYJwXDMEvguJKJDM9yPnKHN73Q41HeCUSmNe7fYSc3886OK7AIJCFOfF3o6bFdmO2Wthr-wPvpXZCmwJ0WEh3bdqFwy3xJCCaNjjhLul42SfZHLwk768BEH_n4JoThfaqK7zuQ3HvRCxFxZGEW70ePsgiKaH5sf726PIO00ehFGt5mv4AOVcmB5KdrfX5XDwsluXkY2tDc8bbaAeejpcCu2aPnfKWyNHRE-2J9hcaEh9Pw_y9PiM0XE23hFu46U73TlHB6m6w94gDsbxoslxzr3TnGFOs23OxM5Dn2HOIooWC3t_oQ1RZlETLoYKvw1EF8IUZQk0i1HftC924yFdWNYgTBc0qFsFoe6VLAq6k7t2sZ8ffbfKBbsKWR7m5AKugjTI0iwNs_RidZX6WRYFWRwwSvIkDmgchKxI8jSK8qyMwwt-hX0c-UmQ-1mc4HRWlIzQNIKIlUWAA-pFPtSEVzM7mTOplhfdizeu8sSPwouKFFDp7nVEGO_s9TD24tsLddWdIS7apfYiv-La6F03hpsKruY7H21fybL3ipjhhTMHb8IZ3-qCZDm8AOWiVdXV179EpDdnfYX_PwAA___IJWQq">